I’m not the world’s biggest fan of unit testing, but this plugin for Vim looks great. I’ve not used any of the other Vim unit testing plugins so I can’t compare it to them, but I also can’t see what is not to like about it, especially the ability to run Python and Ruby code. It’s early doors yet, but I’m going to use it for Simplenote.vim:

  A test note

Execute (Creating a new note):
  :Simplenote -n

Execute python:
  import os, sys
  from simplenote import Simplenote
  import vim
  sn = Simplenote("username", "password")
  snkey = vim.current.buffer.name.split("/")[-1]
  note = sn.get_note(snkey)

  A test note
  A test note

It works by manipulating and inspecting buffers. The Given block fills a Vim buffer with text. The first Execute block then runs pure Vimscript (which is obviously handy when testing Vim scripts) to manipulate the text in the buffer; although all that is being done here is creating a new note in Simplenote from the buffer. The second Execute block runs Python instead of Vimscript, again the intention is to ultimately manipulate the buffer although here the ability to run Python proves more handy for verifying the creation of the note via simplenote.py. Finally the Expect block is what the buffer should look like after all the Execute blocks have run and this is the crux of the test passing or failing.

In the plain Vimscript Execute blocks Vader provides assertions that can be used instead of the Expect blocks. I don’t think there is any way to use assertions in the Python block so here we have to use it to modify the buffer, appending the content of the note created - so what we expect to see is two lines of text of “A test note”. However, since the Python block will throw a wobbly anyway if the note doesn’t exists, I probably don’t need the Expect block - although I suppose it is nice to verify the content of the note if it was successfully created.