2016/11/28

vim-themis, vital-power-assert を使って vim plugin の単体テストを書いてみた

vim-themis, vital-power-assert を使って単体テストのコードを書いたので、ここに作業を記録する。

手順概要

  1. 必要なパッケージを導入
  2. .themisrc を作成する
  3. テストコードを書く
  4. テストを実行する

以下、各手順を説明していく。

1. vim-themis 導入

vim 標準のパッケージマネージャを使っているので、下記構成で git submodule add した。

.vim
└── pack
     └── test
         └── opt
             ├── vim-themis
             ├── vital.vim
             ├── vital-power-assert
             ├── vital-safe-string
             └── vital-vimlcompiler

注意点 :

  • vital-power-assert は、 vital.vim, vital-vimlcompiler, vital-safe-string に依存しているので忘れず導入する
  • テスト時しか使用しないので、 opt に入れる

2. .themisrc を作成する

vital-power-assert の README, '.themisrc' を参照しつつ .themisrc を作成。

packadd! vital.vim
packadd! vital-vimlcompiler
packadd! vital-safe-string
packadd! vital-power-assert
"
let g:__vital_power_assert_config = {
\   '__debug__': 1,
\   '__pseudo_throw__': 0
\ }

注意点 :

  • 必要なパッケージを packadd! で追加
  • themis へのランタイムパス追加は必要なかった。(packadd! で追加されるのかな?)

3. テストコードを書く

テストコードは、プラグインディレクトリ直下に test ディレクトリを作ってその中に書いていく。

vital-power-assert の README, 'test/Example.vimspec' をマネして Vimspeck-style で記述した。

Describe Test for buffer_selector
  Before all
    let V = vital#of('vital')
    let PowerAssert = V.import('Vim.PowerAssert')
    let s:assert = PowerAssert.assert
  End

  It test_GetBufNo
    let buffers_buffer =  '  1  h   "[無名]"                       行 0'
        \ . "\n" . '  9  h   "[無名]"                       行 0'
        \ . "\n" . ' 10  h   "[無名]"                       行 0'
        \ . "\n" . '119 %a   "[無名]"                       行 1'

    put!=buffers_buffer

    call cursor(1, 1)
    let bufno = buffer_selector#GetBufNo()
    execute s:assert('bufno is# "1"')

    call cursor(2, 1)
    let bufno = buffer_selector#GetBufNo()
    execute s:assert('bufno is# "9"')

    call cursor(3, 1)
    let bufno = buffer_selector#GetBufNo()
    execute s:assert('bufno is# "10"')

    call cursor(4, 1)
    let bufno = buffer_selector#GetBufNo()
    execute s:assert('bufno is# "119"')
  End
End

4. テストを実行する

ターミナルでプラグインのルートディレクトリに移動して、themis を実行すると、 vimspec ファイルを探して実行してくれる。

 ~/.vim/pack/test/opt/vim-themis/bin/themis --reporter spec
Test for buffer_selector
  [✓] test_GetBufNo

tests 1
passes 1

fail の場合は下記のようになる。

~/.vim/pack/test/opt/vim-themis/bin/themis --reporter spec
Test for buffer_selector
  [✖] test_GetBufNo
      function 89() abort dict  Line:22  ()

      vital: PowerAssert:
      bufno is# "120"
      |     |
      '119' 0

tests 1
passes 0
fails 1

実際にやってみたプロジェクトはこちら

buffer_selector.vim - Added test code.

「どうすればテストしやすいか」と、「どうやってテストするか」はまだまだ勉強が必要だ...。

以上。

0 件のコメント: