Подтвердить что ты не робот

Инструменты для тестирования плагинов vim

Я ищу некоторые инструменты для тестирования скриптов vim. Либо скрипты vim, которые

  • выполнить модульное/функциональное тестирование или
  • для некоторой другой библиотеки (например, Python unittest), что делает его удобным для
    • запустить vim с параметрами, которые заставляют его выполнять некоторые тесты в своей среде, и
    • определить из результата, прошел ли данный тест.

Мне известно о нескольких сценариях vim, которые выполняют модульное тестирование, но они довольно неопределенно документированы и могут быть или не быть действительно полезными:

vim-unit:

  • purports "Чтобы обеспечить vim-скрипты простой платформой для тестирования модулей и инструментами
  • первая и единственная версия (v0.1) была выпущена в 2004 году Документация
  • не упоминает, работает ли она надежно, кроме как заявить, что это "плата [sic] от завершена".

unit-test.vim:

  • Это тоже кажется довольно экспериментальным и может быть не особенно надежным.
  • Может быть, оставлено или отложено: последнее совершение было в 2009-11 ( > 6 месяцев назад)
  • Никакие тегированные изменения не были созданы (т.е. без релизов)

Таким образом, очень приветствуется информация от людей, которые используют один из этих двух существующих модулей и/или ссылки на другие, более понятные для использования варианты.

4b9b3361

Ответ 1

vader.vim - это просто и удивительно. У него нет внешних зависимостей (не требуется ruby ​​/rake), это чистый vimscript-плагин. Здесь полностью указан тест:

Given (description of test):
  foo bar baz

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

Expect:
  foo bar ab
  cbaz

Если у вас открыт файл теста, вы можете запустить его следующим образом:

:Vader %

Или вы можете указать путь к файлу:

:Vader ./test.vader

Ответ 2

У меня был успех с помощью Андрея Радева Вимруннера в сочетании с RSpec как для тестирования Vim плагинов и настроить их на сервере непрерывной интеграции.

Вкратце, Vimrunner использует функциональность клиент-сервер Vim для запуска сервера Vim, а затем отправки удаленных команд, чтобы вы могли проверить (и проверить) результат. Это драгоценный камень Ruby, поэтому вам понадобится хотя бы некоторое знакомство с Ruby, но если вы поместите время в это, вы получите полную мощность RSpec, чтобы написать свои тесты.

Например, файл с именем 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

Я подробно описал это в "Тестирование плагинов Vim на Travis CI с RSpec и Vimrunner" , если вы хотите более подробно.

Ответ 3

Существует еще один (чистый VimL) плагин UT, который я поддерживаю.

Он задокументирован, он поставляется с несколькими примерами, и он также используется моими другими плагинами.

Он предназначен только для тестирования результатов функций и отображения сбоев в окне quickfix. Кроме того, декодируются стоп-сигналы отмены. AFAIK, это единственный плагин до сих пор (или, по крайней мере, первый), который должен был заполнить окно quickfix. С тех пор я добавил вспомогательные скрипты для создания результатов теста с помощью rspec (+ Vimrunner)

Обратите внимание, что для проверки того, как изменяется буфер с помощью сопоставлений/фрагментов/..., я рекомендую использовать другие плагины. Например, я тестирую свои фрагменты С++ (из lh-cpp) на travis с VimRunner + RSpec.

Что касается синтаксиса, он выглядит так:

" 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]

Ответ 4

Я использовал vim-unit раньше. По крайней мере, это означает, что вам не нужно писать свои собственные функции AssertEquals и AssertTrue. Он также имеет приятную функцию, которая позволяет запускать текущую функцию, если она начинается с "Test", путем размещения курсора внутри тела функции и ввода :call VUAutoRun().

Документация немного некорректна и незавершенна, но если у вас есть опыт работы с другими библиотеками тестирования XUnit, она не будет вам незнакома.

Ни один из упомянутых script не имеет возможности проверить специфические функции vim - вы не можете изменить буферы, а затем проверить ожидания на результат - так что вам нужно будет написать свой vimscript в тестовом режиме. Например, передайте строки в функции, а не вытаскивайте их из буферов с getline() внутри самой функции, возвращайте строки вместо использования setline(), что-то типа.

Ответ 5

Для функционального тестирования есть инструмент под названием vroom. Он имеет некоторые ограничения и может занимать от нескольких секунд до конца, чтобы пройти тщательные тесты для проекта с хорошим размером, но он имеет хороший грамотный формат тестирования/документации с поддержкой подсветки синтаксиса vim.

Он использовал для тестирования плагина codefmt и нескольких подобных проектов. Вы можете проверить vroom/dir там для примера.

Ответ 6

Еще несколько кандидатов:

VimBot - Подобно VimRunner в том, что он написан на Ruby и позволяет удаленно управлять экземпляром vim. Является построенным для использования с модульной схемой тестирования RSpec.

VimDriver - То же, что и VimBot, за исключением сделанного в Python вместо Ruby (запускается как прямой порт из VimBot), поэтому вы можете использовать Python если вы более знакомы с этим.

Ответ 7

Существует vim-vspec. Ваши тесты написаны в vimscript, и вы можете написать их с помощью BDD-стиля (описать, это, ожидать,...)

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

В GitHub есть ссылки на видео и статью, чтобы вы начали: