Up: 目次   [Index]


Vim と Vim script のテスト

*testing.txt*	For Vim バージョン 8.1.  Last change: 2019 Sep 08


		  VIMリファレンスマニュアル    by Bram Moolenaar

Vim と Vim script のテスト

式の評價については |eval.txt| で說明してゐます。このファイルでは Vim script におけるテストの記法について詳細に見てゐきます。これは Vim 自身のテストとプラグインのテストに使ふことができます。

1. Vim のテスト|testing|
2. テスト函數|test-functions-details|
3. Assert 函數|assert-functions-details|

1. Vim のテスト

Vim はビルドした後、通常 "make test" を使つてテストすることができます。テストはディレクトリ "src/testdir" にあります。

時閒の經過と共にいくつかのタイプのテストが追加されました:

test33.in最も古い、もう追加しない
test_something.in古いスタイルのテスト
test_something.vim新しいスタイルのテスト

新しいテストは新しいスタイルのテストで追加すべきです。これらは |assert_equal()| などの函數を使用して、テストコマンドと期待される結果を 1 か所に保持します。 場合によつては、古いスタイルのテストを使用する必要があります。例へば、|+eval| 機能なしで Vim をテストするとき。

より多くの情報については src/testdir/README.txt ファイルにあります。

2. テスト函數

test_alloc_fail({id}, {countdown}, {repeat})

この函數はテストのために使はれます: {id} のメモリ割り當てが行はれた際に {countdown} はデクリメントされ、それが 0 になれば {repeat} 回のメモリの割り當ての失敗を發生させます。{repeat} が 1 未滿の場合は、失敗を 1 回のみ發生させます。

メソッド |method| としても使用できます:

GetAllocId()->test_alloc_fail()
test_autochdir()

Vim の起動が完了する前に ’autochdir’ の效果を有效にするためのフラグをセットします。

test_feedinput({string})

{string} 中の文字は、まるでユーザーによつて入力されたかのやうにプロセスに渡されます。これは低レベルの入力バッファを使ひます。この函數は |+unix| もしくは GUI の環境でのみ機能します。

メソッド |method| としても使用できます:

GetText()->test_feedinput()
test_garbagecollect_now()

garbagecollect() とほぼ同じですが、この函數はガーベッジコレクトを直ちに實行します。この函數を實行する場合は、構造體が內部に存在しないやうにするために直接呼び出す必要があります。また、この函數を呼び出す前に |v:testing| を設定する必要があります。

test_garbagecollect_soon()

あたかもメインループの中にゐるやうに、ガーベッジコレクトを呼び出すためのフラグを設定します。テストでのみ使用されます。

test_getvalue({name})

內部變數の値を取得します。{name} のこれらの値がサポートされてゐます:

need_fileinfo

メソッド |method| としても使用できます:

GetName()->test_getvalue()
test_ignore_error({expr})

{expr} を含むすべてのエラーを無視します。代はりに通常メッセージが表示されます。

これはテストにおいて、try/catch を用ゐてエラーを捕捉することができない (以降のコードをスキップするので) 場合にのみ、使ふことを意圖してゐます。

{expr} は文字通り用ゐられ、パターンとしてではありません。

{expr} が文字列 "RESET" の場合、無視されるエラーのリストは空になります。

メソッド |method| としても使用できます:

GetErrorText()->test_ignore_error()
test_null_blob()

null の |Blob| を返します。これはテストのみに使はれます。

test_null_channel()

null の |Channel| を返します。これはテストのみに使はれます。

{|+channel| 機能つきでコンパイルされたときのみ有效}

test_null_dict()

null の |Dict| を返します。これはテストのみに使はれます。

test_null_job()

null の |Job| を返します。これはテストのみに使はれます。

{|+job| 機能つきでコンパイルされたときのみ有效}

test_null_list()

null の |List| を返します。これはテストのみに使はれます。

test_null_partial()

null の |Partial| を返します。これはテストのみに使はれます。

test_null_string()

null の |String| を返します。これはテストのみに使はれます。

test_option_not_set({name})

オプション {name} が設定されてゐることを示すフラグをリセットします。そのため、既定値のままであるやうに見えます。次のやうに使ひます:

set ambiwidth=double
call test_option_not_set('ambiwidth')

現在は、その値は "double" であるけれども、’ambiwidth’ は決して變更されてゐないかのやうに振る舞ひます。

テストのみで使はれます!

メソッド |method| としても使用できます:

GetOptionName()->test_option_not_set()
test_override({name}, {val})

テストを實行できるやうにするため、Vim の內部處理の特定の部分を置き換へます。Vim をテストするためだけに使用してください!

置き換へは、{val} が非 0 のときに有效化され、{val} が 0 のときに取り除かれます。 現在 name に使へる値は:

name{val} が非 0 のときの效果
redrawredrawing() 函數を無效化する
redraw_flagRedrawingDisabled フラグを無視する
char_availchar_avail() 函數を無效化する
starting"starting" の値をリセットする。以下を參照
nfa_failNFA 正規表現エンジンが失敗すると强制的に古いエンジンにフォールバックする
no_query_mouse"dec" 端末のマウス位置を問ひ合はせない
no_wait_return"no_wait_return" フラグを設定する。"ALL" では復元されない
ALLすべての置き換へをクリアする ({val} は使はれない)

Vim の起動が完了した時と同じ狀況としてテストをしたい場合に "starting" は使はれます。テストはスクリプトを讀み込んで實行されるので、"starting" の値は非ゼロです。このことは多くの場合で良いこと (テストの實行が速い) なのですが、テストがうまく動かない場合に擧動が變化するときがあります。

使用時:

call test_override('starting', 1)

"starting" の値は保存されます。この値は次のやうにして復元できます:

call test_override('starting', 0)

メソッド |method| としても使用できます:

GetOverrideVal()-> test_override('starting')
test_refcount({expr})

{expr} の參照カウントを返します。{expr} が參照カウントを持たない型の場合は、-1 を返します。この函數はテスト用です。

メソッド |method| としても使用できます:

GetVarname()->test_refcount()
test_scrollbar({which}, {value}, {dragging})

{which} のスクロールバーを使用し {value} 位置に移動してゐるかのやうに振る舞ひます。{which} の値は:

left現在のウィンドウの左側のスクロールバー
right現在のウィンドウの右側のスクロールバー
hor水平のスクロールバー

垂直スクロールバーのための {value} は、1 からバッファの行數になります。水平スクロールバーのための {value}は、1 と最大桁數となります。’wrap’ は設定されてゐないと想定します。

{dragging} が非ゼロの場合、スクロールバーをドラッグしてゐるかのやうになり、さうでなければ、スクロールバーをクリックしてゐるかのやうになります。{which} スクロールバーが確かに存在してゐる時にのみ動作します。明らかに GUI を使用してゐる時のみです。

メソッド |method| としても使用できます:

GetValue()->test_scrollbar('right', 0)
test_setmouse({row}, {col})

次のマウス操作に使用するマウス位置を設定します。{row} と {col} は 1 ベースです。 例:

call test_setmouse(4, 20)
call feedkeys("\<LeftMouse>", "xt")
test_settime({expr})

Vim が內部的に用ゐる時閒を設定します。現在は history のタイムスタンプ、viminfo のタイムスタンプ、undo に使用されてゐます。

1 を渡すと、Vim は警告やエラーメッセージの後、スリープしなくなります。

{expr} は、數値として評價されなければならなりません。0 を渡せば、Vim の內部時閒は通常動作に戾ります。

メソッド |method| としても使用できます:

GetTime()->test_settime()

3. Assert 函數

assert_beeps({cmd})

{cmd} を實行し、それがビープもしくはビジュアルベルを發生させなかつた場合、|v:errors| にエラーメッセージを追加します。

|assert_fails()| と |assert-return| も參照してください。

メソッド |method| としても使用できます:

GetCmd()->assert_beeps()
assert_equal({expected}, {actual} [, {msg}])

{expected} と {actual} が等しくない場合、|v:errors| にエラーメッセージを追加し、1 が返ります。さうでなければ 0 が返ります。|assert-return|

暗默的な變換は行はれないため、文字列 "4" は數値 4 とは異なります。同樣に、數値 4 は浮動小數點數 4.0 と異なります。ここでは ’ignorecase’ の値は使はれず、大文字小文字は常に區別されます。

{msg} が省略された場合、"Expected {expected} but got {actual}" といふ形式のメッセージが生成されます。 例:

assert_equal('foo', 'bar')

以下の結果が |v:errors| に追加されます:

test.vim line 12: Expected ’foo’ but got ’bar’

メソッド |method| としても使用できます:

mylist->assert_equal([1, 2, 3])
assert_equalfile({fname-one}, {fname-two})

ファイル {fname-one} および {fname-two} がまつたく同じテキストでない場合、|v:errors| にエラーメッセージが追加されます。

|assert-return| も參照してください。

{fname-one} もしくは {fname-two} が存在しない場合、それに關聯したエラーとなります。

主に |terminal-diff| で役立ちます。

メソッド |method| としても使用できます:

GetLog()->assert_equalfile('expected.log')
assert_exception({error} [, {msg}])

v:exception に {error} が含まれてゐない時、|v:errors| にエラーメッセージを追加します。|assert-return| も參照してください。

これは例外を投げるコマンドのテストを行ふ場合に使ふことができます。コロンが續くエラー番號を使へば、飜譯の問題を囘避することができます:

try
  失敗するコマンド
  call assert_false(1, 'command should have failed')
catch
  call assert_exception('E492:')
endtry
assert_fails({cmd} [, {error} [, {msg}]])

{cmd} を實行しエラーを生成しなかつた場合、|v:errors| にエラーメッセージを追加します。|assert-return| も參照してください。

{error} が渡された場合、|v:errmsg| の一部にマッチしなければなりません。

Note:
ビープ音の發生はエラーとは見なされず、いくつかのコマンドは失敗時にビープ音を鳴らすだけであることに注意してください。これらについては |assert_beeps()| を使用してください。

メソッド |method| としても使用できます:

GetCmd()->assert_fails('E99:')
assert_false({actual} [, {msg}])

|assert_equal()| と同樣に、{actual} が false でない場合、|v:errors| にエラーメッセージを追加します。

|assert-return| も參照してください。 ゼロである時、その値は false です。{actual} が數値でない場合、テストが失敗します。

{msg} が省略された場合、"Expected False but got {actual}" といふ形式のメッセージが生成されます。

メソッド |method| としても使用できます:

GetResult()->assert_false()
assert_inrange({lower}, {upper}, {actual} [, {msg}])

これは數値または |Float| の値をテストします。{actual} が {lower} より低いか {upper} より大きい場合、|v:errors| にエラーメッセージが追加されます。|assert-return| も參照してください。 {msg} を省略すると、"Expected range {lower} - {upper}, but got {actual}" といふ形式のエラーが生成されます。

assert_match({pattern}, {actual} [, {msg}])

{pattern} が {actual} と一致しない場合、|v:errors| にエラーメッセージが追加されます。|assert-return| も參照してください。

|expr-=~| と同じやうに {pattern} が使はれます: マッチングは ’magic’ や ’cpoptions’ の實際の値に關係なく、’magic’ が設定され、’cpoptions’ が空であるやうに常に行はれます。

{actual} は文字列として使用され、自動變換が適用されます。テキストの先頭と最後に一致させるためには、"^" と "$" を使用してください。兩方を使用してテキスト全體を一致させます。{譯注: 使はなければ部分一致で判定が行はれます}

{msg} を省略すると、"Pattern {pattern} does not match {actual}" といふ形式のエラーが生成されます。 例:

assert_match('^f.*o$', 'foobar')

これは |v:errors| に文字列が追加されることになります:

test.vim line 12: Pattern '^f.*o$' does not match 'foobar'

メソッド |method| としても使用できます:

getFile()->assert_match('foo.*')
assert_notequal({expected}, {actual} [, {msg}])

assert_equal()‘ の反對: {expected} と {actual} が等しいときにエラーメッセージを |v:errors| に追加します。|assert-return| も參照してください。

メソッド |method| としても使用できます:

mylist->assert_notequal([1, 2, 3])
assert_notmatch({pattern}, {actual} [, {msg}])

assert_match()‘ の反對: {pattern} が {actual} にマッチするときに |v:errors| にエラーメッセージを追加します。|assert-return| も參照してください。

メソッド |method| としても使用できます:

getFile()->assert_notmatch('bar.*')
assert_report({msg})

テストの失敗を {msg} を使つて直接報告します。常に 1 を返します。

メソッド |method| としても使用できます:

GetMessage()->assert_report()
assert_true({actual} [, {msg}])

|assert_equal()| と同樣に、{actual} が true でない場合、|v:errors| にエラーメッセージを追加します。|assert-return| も參照してください。 非ゼロである時、その値は TRUE です。{actual} が數値でない場合、テストが失敗します。

{msg} が省略された場合、"Expected True but got {actual}" といふ形式のメッセージが生成されます。

メソッド |method| としても使用できます:

GetResult()->assert_true()

Up: 目次   [Index]