2010-06-12 4 views
34

Je cherche des outils pour tester les scripts vim. Soit les scripts vim queoutils pour tester les plugins vim

  • ne pas l'unité/tests fonctionnels, ou
  • classes pour une autre bibliothèque (par exemple le module unittest Python) qui le rendent pratique pour
    • course vim avec des paramètres qui la poussent à faire certains tests sur son environnement, et
    • déterminer à partir de la sortie si oui ou non un test donné a passé.

Je connais quelques scripts vim qui font des tests unitaires, mais ils sont en quelque sorte vaguement documenté et peut ou ne peut pas réellement être utile:

vim-unit:

  • "fournir prétend scripts vim avec un framework de test simple unité et outils"
  • première et seule version (v0.1) a été publié en 2004
  • La documentation ne mentionne pas si elle fonctionne ou non de manière fiable, si ce n'est pour indiquer qu'elle est «terminée [sic]».

unit-test.vim:

  • Celui-ci semble aussi assez expérimental, et peut ne pas être particulièrement fiable.
  • mai ont été abandonnés ou back-mis en veilleuse: dernière livraison était en 2009-11 (> 6 mois)
  • Pas de révisions marquées ont été créées (ie pas de presse)

Ainsi l'information de personnes qui utilisent l'un de ces deux modules existants, et/ou des liens vers d'autres options, plus clairement utilisables, sont les bienvenus.

Répondre

3

Je l'ai utilisé vim-unit avant. À tout le moins, cela signifie que vous n'avez pas besoin d'écrire vos propres fonctions AssertEquals et AssertTrue. Il a aussi une belle fonctionnalité qui vous permet d'exécuter la fonction en cours, si elle commence par "Test", en plaçant le curseur dans le corps de la fonction et en tapant :call VUAutoRun().

La documentation est un peu incertaine et inachevée, mais si vous avez de l'expérience avec d'autres bibliothèques de tests XUnit, elle ne vous sera pas inconnue. Aucun des scripts mentionnés ne permet de vérifier les fonctionnalités spécifiques de vim: vous ne pouvez pas modifier les tampons et vérifier les attentes sur le résultat. Vous devrez donc écrire votre vimscript de manière testable. Par exemple, passez des chaînes dans des fonctions plutôt que de les sortir de tampons avec getline() à l'intérieur de la fonction elle-même, renvoyez des chaînes au lieu d'utiliser setline(), ce genre de chose.

+0

Un support pour la configuration du démarrage de vim? Par exemple, puis-je spécifier que seul un plugin spécifique doit être chargé? – intuited

+0

Non, mais vous pouvez toujours faire semblant avec --noplugin et -u si c'est un problème. – richq

8

Il existe un autre (VimL pur) UT plugin que je gère.

Il est documenté, il est livré avec plusieurs exemples, et il est également utilisé par mes autres plugins.

Il vise uniquement à tester les résultats des fonctions et à afficher les échecs dans la fenêtre quickfix. Les callstacks d'exception sont également décodés. AFAIK, c'est le seul plugin jusqu'ici (ou au moins le premier) qui est destiné à remplir la fenêtre quickfix. Depuis, j'ai ajouté des scripts auxiliaires pour produire des résultats de test avec rspec (+ Vimrunner)

Notez que, pour tester comment un tampon est modifié avec des mappings/snippets/..., je recommande d'utiliser d'autres plugins . Par exemple, je teste mes extraits C++ (de lh-cpp) sur travis avec VimRunner + RSpec.

En ce qui concerne la syntaxe, il ressemble à ceci:

" Old way, to test boolean expressions 
Assert 1 > 2 
Assert 1 > 0 
Assert s:foo > s:Bar(g:var + 28)/strlen("foobar") 

AssertTxt! (s:foo > s:Bar(g:var+28), 
     \, s:foo." isn't bigger than s:Bar(".g:var."+28)") 

" New, recommended way to test relations 
AssertEquals('a', 'a') 
AssertDiffers('a', 'b') 
let dict = {} 
AssertIs(dict, dict) 
AssertMatch('abc', 'a') 
AssertRelation(1, '<', 2) 
AssertThrows 0 + [0] 
+1

yay documentation! Merci, je vais vérifier cela. A également remarqué qu'il existe quelques autres outils similaires répertoriés dans la section des liens là-bas. – intuited

+0

Le lien dans le message ci-dessus ne fonctionne pas. Je pense que ceci (https://github.com/LucHermitte/vim-UT) est où il devrait aller. – Forbesmyester

+0

Oui en effet. J'ai oublié de le mettre à jour après la fermeture du code Google. Merci! –

10

J'ai eu du succès en utilisant Andrew Radev's Vimrunner conjointement avec RSpec aux deux tests plugins vim et les mettre en place sur un serveur d'intégration continue. En bref, Vimrunner utilise la fonctionnalité client-serveur de Vim pour lancer un serveur Vim et envoyer des commandes à distance afin que vous puissiez inspecter (et vérifier) ​​le résultat. C'est une gemme de Ruby donc vous aurez besoin d'au moins une certaine familiarité avec Ruby mais si vous y mettez du temps, vous aurez toute la puissance de RSpec pour écrire vos tests.

Par exemple, un fichier appelé spec/runspec.vim_spec.rb:

require "vimrunner" 
require "fileutils" 

describe "runspec.vim" do 
    before(:suite) do 
    VIM = Vimrunner.start_gui_vim 
    VIM.add_plugin(File.expand_path('../..', __FILE__), 'plugin/runspec.vim') 
    end 

    after(:all) do 
    VIM.kill 
    end 

    it "returns the current path if it ends in _test.rb" do 
    VIM.echo('runspec#SpecPath("foo_test.rb")').should == "foo_test.rb" 
    VIM.echo('runspec#SpecPath("bar/foo_test.rb")').should == "bar/foo_test.rb" 
    end 

    context "with a spec directory" do 
    before do 
     FileUtils.mkdir("spec") 
    end 

    after do 
     FileUtils.remove_entry_secure("spec") 
    end 

    it "finds a spec with the same name" do 
     FileUtils.touch("spec/foo_spec.rb") 
     VIM.echo('runspec#SpecPath("foo.rb")').should == "spec/foo_spec.rb" 
    end 
    end 
end 

Je l'ai écrit à ce sujet longuement dans "Testing Vim Plugins on Travis CI with RSpec and Vimrunner" si vous voulez plus de détails.

14

vader.vim est facile et incroyable. Il a aucune dépendance externe (ne nécessite pas de ruby ​​/ rake), c'est un pur plugin vimscript. Voici un test entièrement spécifié:

Given (description of test): 
    foo bar baz 

Do (move around, insert some text): 
    2Wiab\<Enter>c 

Expect: 
    foo bar ab 
    cbaz 

Si vous avez le fichier de test ouvert, vous pouvez l'exécuter comme ceci:

:Vader % 

Ou vous pouvez pointer vers le chemin du fichier:

:Vader ./test.vader 
+3

En plus de cela, l'auteur a répondu rapidement aux problèmes. –

0

Encore quelques candidats:

VimBot - Similaire à VimRunner en ce qu'il est écrit en Ruby et vous permet de contrôler une instance de vim à distance. Est construit pour être utilisé avec le framework de test unitaire RSpec. - Identique à VimBot, sauf en Python au lieu de Ruby (démarré en tant que port direct de VimBot). Vous pouvez donc utiliser le framework de test unitaire de Python si vous le connaissez mieux.

1

Pour les tests fonctionnels, il existe un outil appelé vroom. Il a quelques limitations et peut prendre quelques secondes pour passer des tests approfondis pour un projet de bonne taille, mais il a un bon format de test/documentation alphabétique avec le support de mise en évidence de la syntaxe vim.

Il est utilisé pour tester le plugin codefmt et quelques projets similaires. Vous pouvez consulter le vroom/dir pour des exemples.

0

Il y a vim-vspec. Vos tests sont écrits en vimscript et vous pouvez les écrire en BDD (décrivez, attendez, ...)

runtime! plugin/sandwich/function.vim 
describe 'Adding Quotes' 
    it 'should insert "" in an empty buffer' 
    put! = '' 
    call SmartQuotes("'") 

    Expect getline(1) == "''" 
    Expect col('.') == 2 
    end 
end 

Le GitHub a des liens vers une vidéo et un article pour vous aider à démarrer:

Questions connexes