Xavier Nayrac

Rubyiste accro au TDD, serial blogger, apprenti data scientist, heureux utilisateur de Vim, accordéoniste.
Si vous vous sentez particulièrement généreux, suivez moi sur Twitter.

Exemple de test pour Vim avec le framework Vader

| Comments

Niveau : facile

Pour mon plugin QuickMarkdown, je vais ajouter une petite fonction qui insère la ligne <!-- more --> quand je tape la combinaison de touche <Leader>qm. Ça devrait m’être utile vu que j’écris du markdown pour Octopress tous les jours ;) Si on est pas obligé de passer par un plugin pour ce genre de chose, ça va aussi me permettre de parler un peu de Vader. Voici donc un exemple simple de TDD pour Vim, avec le framework de test Vader.

Tout d’abord, j’écris le test:

test/more.vader
1
2
3
4
5
6
7
8
9
10
11
12
Given (some text):
  First line
  Last line

Do (insert more marker in normal mode):
  gg
  :QuickMarkdownMore\<Enter>

Expect (marker inserted):
  First line
  <!-- more -->
  Last line

Voici comment il fonctionne. La directive Given produit un buffer (=~ fichier) utilisé dans les directives suivante, qui contient 2 lignes, respectivement First line et Last line:

1
2
3
Given (some text):
  First line
  Last line

Ensuite, la directive Do joue des commandes en mode normal. Tout d’abord gg, pour s’assurer qu’on est sur la première ligne, puis la commande QuickMarkdownMore, qui est celle qui est censée faire le travail:

1
2
3
Do (insert more marker in normal mode):
  gg
  :QuickMarkdownMore\<Enter>

Finalement, la directive Expect s’assure que le buffer de test a été transformé comme je le voulais:

1
2
3
4
Expect (marker inserted):
  First line
  <!-- more -->
  Last line

Il reste à lancer le test (avec :Vader) pour s’assurer qu’il ne passe pas, puis à écrire la fonction, et relancer le test en s’assurant qu’il passe bien cette fois-ci.

Et voici pour finir le code d’implémentation:

plugin/markdown.vim
1
command! QuickMarkdownMore call quickmarkdown#more()
autoload/markdown.vim
1
2
3
function! quickmarkdown#more()
  call append('.', "<!-- more -->")
endfunction

À demain.

Articles connexes

Commentaires