(for Internet Explorer)
  WaitForProcess  "notepad.exe"
Sub  WaitForProcess( ProcessName as string )
指定したプロセスが終了するまで待ちます。
【引数】
ProcessName
実行ファイル名
ファイル:
テスト
サンプル
→ T_Process.vbs # [T_WaitForProcess]
System.vbs
(src)
Function  EnumProcesses() as dictionary of ArrayClass of integer
プロセスを一覧します。
【引数】
プロセスの一覧。 実行ファイル名をキーとする PID の配列の辞書
返り値
ファイル:
System.vbs
(src)
サンプル
Dim  ps : Set ps = EnumProcesses()
echo  ps.Item( "notepad.exe" )  '// ArrayClass of PID
If not ps.Exists( "notepad.exe" ) Then  '// ps.Item( "notepad.exe" ).Count = 0 は不可
  start  "notepad.exe"
ElseIf ps.Item( "notepad.exe" ).Count >= 2 Then
  echo  "There are 2 processes."
End If
参考
テスト
→ T_Process.vbs # [T_Processes]
Sub  KillProcess( Process as integer or string )
プロセスを強制終了します。
【引数】
プロセスの PID、または、実行ファイル名
Process
ファイル:
System.vbs
サンプル
KillProcess  "notepad.exe"
(src)
実行ファイル名を指定した場合、その実行ファイルから作られたすべての
インスタンスが強制終了します。
参考
テスト
→ T_Process.vbs # [T_Processes]
その他
指定したシンボルの関数が定義されているかどうかを返します。
→ テストツール
→ テストツールの接続場所
関連
プログラムが大きくなるほど、テスト(回帰テスト)の自動化が重要になります。
vbslib の開発では、機能を追加/修正するごとに以下のものを更新しています。
コード
×
×
テストプログラム
ドキュメント
×
機能:
→ チェックリスト
参考
Test Prompt [ALL]
   test vbs = Test.vbs
   base folder = C:\home\vbslib
1. Select the Test (current test = ALL)
2. Do ALL Test
3. | call each "Test_build" in sub folders
4. | call each "Test_setup" in sub folders
5. | call each "Test_start" in sub folders
6. | call each "Test_check" in sub folders
7. | call each "Test_clean" in sub folders
8. Change the Debug Mode (debug script=False, target=False)
88.Open Fail Folder
89.Next Fail
9. Quit
Test.vbs ファイルに記述されたコールバック関数(Test_build, Test_setup, Test_start,
Test_check, Test_clean)を呼び出すプロンプトです。 サブ・フォルダーにある Test.vbs
ファイルに記述されたコールバック関数も呼び出します。
Test.vbs をダブルクリックして起動します。
テスト・プロンプトのトップメニュー
プロンプトの設定
単体のテスト・スクリプト
(src: TestPrompt)
(src: Tests)
関連
テスト
Test.vbs
テストプロンプトのメニューから選んだときのデフォルトの動作を説明します。
の Test_build, Test_setup, Test_start, Test_check, Test_clean を呼び出します。
Test_current は、Test_build などそれぞれを呼び出す前に呼び出します。
4. call each "Test_setup" in sub folders
の Test_current と Test_build を呼び出します。
7. call each "Test_clean" in sub folders
6. call each "Test_check" in sub folders
5. call each "Test_start" in sub folders
Test.vbs の Test_current と Test_setup を呼び出します。
Test.vbs の Test_current と Test_start を呼び出します。
Test.vbs の Test_current と Test_check を呼び出します。
Test.vbs の Test_current と Test_clean を呼び出します。
実行するテスト項目(
、または、Test.vbs があるフォルダー)を選択します。
ALL を選択すると、すべてのテスト項目(すべてのサブ・フォルダー)を実行します。
8. Change the Debug Mode
88. Open Fail Folder
エラーがあった Test.vbs があるフォルダーを開きます
「order」 と入力すると、
が表示されます。
次にエラーがあった Test.vbs があるフォルダーを開きます
89. Next Fail
→ g_debug 変数
1) Reload Test Script
2) ChgDebugMode Test Script
3) ChgDebugMode Test Target
4) Echo On/Off (current=on)
5) AutoDiff (current=on)
テスト・プロンプトのトップメニューで、Change the Debug Mode を選ぶと次のメニューが出ます。
Reload Test Script は、TestPrompt.vbs や、TestPrompt_Setting.vbs を変更したときに
選択します。 選択すると再読み込みします。
Test.vbs は、トップメニューから Test.vbs を呼び出すときに、毎回再読み込みするので、
Test.vbs を変更したときは、このメニュー(Reload Test Script)を選ぶ必要はありません。
If tests.bTargetDebug Then dbg = "//x " Else dbg = ""
r = RunProg( "cscript "+dbg+target+" /Test:"+tname, "" )
If tests.bTargetDebug Then
  '// デバッガに接続するコマンド
Else
  '// 通常のコマンド
End If
VBScript の呼び出しを、デバッガ接続に対応した例:
関連
ChgDebugMode Test Target は、テスト対象をデバッガに接続します。
ChgDebugMode Test Script は、TestPrompt.vbs と Test.vbs をデバッガに接続します。
Sub  Test_start( tests )
Stop
  If ... Then Fail
  Pass
End Sub
Stop
ただし、Test.vbs の関数の引数 tests の bTargetDebug メンバ変数が True に
変わるだけなので、Test.vbs の中で対応する必要があります。
Test.vbs をデバッグするときは、更に Test.vbs の中に Stop 文を入れてください。
'--- start of parameters for starting main script
g_debug = 1
  :
Sub main2( Opt, AppKey ):set_input "5."   ....
Test.vbs の先頭で下記のように記述すると、このメニューを選ばなくても、自動的にこの
モードで実行を開始し、5番のメニューを自動的に実行します。
'--- start of parameters for starting main script
g_option = "/target_debug:1 /set_input:5."
Test.vbs の先頭で次のように記述すると、自動的にこのモードで実行を開始し、
5番のメニューを自動的に実行します。
… /set_input オプションが使われる関数
Echo On/Off
1
5.
エラーが発生する場所が安定しないときは、エラー・ブレークを有効にしてください。
エラーが発生してもテストの続きを実行しなくなりますが、エラーが発生したところで
ブレークします。
注意: Pass 関数を呼び出したときもブレークしてしまいます。
テスト・スクリプトでも通常の方法でエラーが発生した場所でブレークできます。
参考
テスト・スクリプトは、scriptlib フォルダを含むルートフォルダのサブフォルダなら、
どのフォルダにでも置くことができます。
テスト・スクリプトのファイル名は、Test.vbs にしてください。
Test.vbs をダブルクリックすると、テスト・プロンプトが開きます。
TestPrompt.vbs
Test
T_UnitTest1
… "T_UnitTest1" のユニット・テスト
… テスト・プロンプト・モジュール
… テスト・プロンプトの設定
Test.vbs をダブルクリックすると、サブフォルダの Test.vbs も、テスト・プロンプトに
登録されます。 カレント・テストが ALL なら、サブフォルダも含めて Test_setup などが
呼ばれます。 デバッグ・モードのときは、デバッグ・モードになっている Test.vbs を
サブフォルダも含めて呼ばれます。
… テストシンボル名と同じ名前のフォルダ
TestScript.vbs
… テスト・スクリプト・モジュール
… ユニット・テスト 全体
… 全ユニット・テストに共通のスクリプト
… 全ユニット・テストに共通の設定データ
vbslib
Option Explicit

Sub  Main( Opt, AppKey ):RunTestPrompt AppKey.NewWritable( "." ):End Sub

Sub  Test_current( tests )
  tests.SetCur  "Sub1"
End Sub

Sub  Test_build( tests )
  If tests.IsCur("Sub1") Then  echo tests.Symbol+" - Test_build Sub1"
  If tests.IsCur("Sub2") Then  echo tests.Symbol+" - Test_build Sub2"
  Pass
End Sub

Sub  Test_setup( tests )
  Pass
End Sub

Sub  Test_start( tests )
  RunProg  "target.exe", "Sample_log.txt"
  Pass
End Sub

Sub  Test_check( tests )
  Fail
End Sub

Sub  Test_clean( tests )
  Skip "test skip"
End Sub
→ Test.vbs
引数は、
Test.vbs
テスト対象をビルドします。
テストデータを作成します。
テストを実行します。 複数の項目を実行するときはチェックもします。
Test_start がすべて完了後、テストの出力が正しいかチェックします。
エラー処理のテストは、Test_start で行います。
テストで出力されたファイルを削除します。
サンプル
上記の関数は、
から呼ばれます。 Fail したときの動きは、
Do_ の仕様に従います。
T_RunFCVbs
T_RunPrompt
T_RunVBS
を経由するテストのサンプル
VBS をテストするサンプル
単体テストを実行するスクリプトです。
汎用のサンプル
です。(上記の関数はどれも引数は同じ)
Test.vbs の Test_current には、デバッグを行う1つのサブテストケースを
tests.SetCur で指定します。
T_Run
テストプロンプトをテストするサンプル
vbslib_pack\sample\TestPrompt
(src)
Sub  Test_start( tests as Tests )
Main
を呼び出してください。
の内容を記述することで作成します。
テスト・プロンプトから、サブ・フォルダーにある大量の Test.vbs を自動的に実行することが
できます。 ファイル名を TestSample.vbs に変えたら、サブ・フォルダーにある TestSample.vbs
を自動的に実行します。
Test_build などをコールバックする前にコールバックされる関数。
→ T_TestScName フォルダ
テスト
Test.vbs から改名するテスト
関連
ダブルクリックすると、
が開きます。
::ExpectedPassConutに予想される Pass の数を設定しておくと
よいでしょう。
→ アプリケーション (vbslib付属)
・デバッグするサブテストケースを選択します。
Sub  Test_current( tests )
  tests.SetCur  "Sub1"
End Sub
Sub  Test_current( tests as Tests )
Test_build などをコールバックする前にコールバックされる関数。
下記のようなことができます。
・Tests.vbs のグローバル変数(の代わり)を初期化します。
・他の Tests.vbs と、コールバックされる順番を調整します。
Sub  Test_current( tests )
  tests.CurrentTestPriority = 500
End Sub
・テスト・シンボルを設定します。
Sub  Test_current( tests )
  tests.Symbol = "T_SubTest"
End Sub
Symbol
上記のように Symbol 変数の値を変更してください。
が出るときは、
Set g = tests.CurrentTest.Delegate
g("ExeName") = "Sample"
関連
ユーザ向けの、任意の値やオブジェクトを格納する変数。
Dim  UnitTest::Delegate as variant
Sub  Main( Opt, AppKey )
    '//  Set g = GetTemporaryTestsObject().CurrentTest.Delegate
    RunTestPrompt  AppKey.NewWritable( "." )
End Sub

Sub  Test_current( tests )
    If IsEmpty( tests.CurrentTest.Delegate ) Then
        Set g = CreateObject( "Scripting.Dictionary" ) : Set tests.CurrentTest.Delegate = g
        '// call_vbs  SearchParent("TestCommon.vbs"), "TestCommon_setVariables",  g

        '[Setting]
        '==============================================================================
        g("ExeName") = "Sample"
        '==============================================================================

        x = WScript.Arguments.Named( "Config" ) : If not IsEmpty( x ) Then  g("Config") = x
    End If
End Sub

Sub  Test_build( tests )
    Set g = tests.CurrentTest.Delegate
    devenv_rebuild  g("ExeName")+".sln", g("Config")
End Sub
サンプル in Test.vbs:
Delegate
Delegate
ExeName
Sample
ExeName
Tests.vbs のグローバル変数の代わりです。
(Tests.vbs は、ExecuteGlobal を何度も行われるため、グローバル変数を置くことができません。)
テスト
→ Test_template1.vbs # Delegate
関連
'********************************************************************************
'  <<< [TestCommon_setVariables] >>>
'********************************************************************************
Dim  g_TestCommon_ConfigInited

Sub  TestCommon_setVariables( in_out_SharedConfig )
    AssertExist  env("%SAMPLEROOT%")  '// 環境変数をチェックする

    If IsEmpty( g_TestCommon_ConfigInited ) Then  '// プロセスごとの設定
        Set test_common_data = ReadTestCase( SearchParent(_
            "TestCommon_Data.xml" ), Empty ) '// test_common_data as <TestCases>

        If IsEmpty( in_out_SharedConfig ) Then _
            Set in_out_SharedConfig = CreateObject( "Scripting.Dictionary" )
        Dic_add  in_out_SharedConfig,  test_common_data

        g_TestCommon_ConfigInited = True
    End If
End Sub
サンプル in TestTarget.vbs:
Dim g_g : Sub GetMainSetting( g ) : If not IsEmpty(g_g) Then Set g=g_g : Exit Sub
    Set g=CreateObject("Scripting.Dictionary") : Set g_g=g
    call_vbs  SearchParent("TestCommon.vbs"), "TestCommon_setVariables",  g

    '[Setting]
    '==============================================================================
    g("ExeName") = "Sample"
    '==============================================================================
End Sub


Sub  Main()
    GetMainSetting  g
    devenv_rebuild  g("ExeName")+".sln", g("Config")
End Sub
RunTestPrompt を実行する場合は、Delegate を使う
RunTestPrompt を実行しない場合は、Delegate を使わない
Sample
ExeName
ExeName
コールツリー (Test.vbs)
Test_current
TestCommon_setVariables
Tests::DoAllTest
RunTestPrompt
main
GetMainSetting
TestCommon_setVariables
コールツリー (一般スクリプト)
// テストごとに異なる UnitTest::Delegate
// 全テストに共通の UnitTest::Delegate など
// 全スクリプト共通の UnitTest::Delegate など
// スクリプト・ファイルごとに異なる UnitTest::Delegate
参考
Test.vbs
TestCommon.vbs
Sub main2( Opt, AppKey )
  RunTestPrompt  AppKey.NewWritable( "." )
End Sub

Sub  Test_current( tests )
  If IsEmpty( tests.CurrentTest.Delegate ) Then
    Dim g : Set g = CreateObject( "Scripting.Dictionary" ) : Set tests.CurrentTest.Delegate = g
    call_vbs  SearchParent("TestCommon.vbs"), "TestCommon_setVariables",  g
  End If
End Sub

Sub  Test_start( tests ) : TestCommon_test_start  tests : Pass : End Sub
サブ・フォルダーにある Test.vbs に共通するスクリプトを記述します。
ライブラリにするほど汎用的ではないが、複数のテストで使われる関数などを記述します。
Sub  TestCommon_setVariables( g )
  Set g("GlobalTestObject") = new SampleTest
End Sub

Sub  TestCommon_test_start( tests )
  '// 複数のテストで行う処理
End Sub
関連
で定義する TestCommon_setVariables 関数で、グローバル・テスト・
オブジェクトを生成し、
から参照します。
Sub  Test_build( tests )
  Dim  g : Set g = tests.CurrentTest.Delegate
  RunProg  """"+ g("GlobalTestObject").ExePath +"""", ""
End Sub
Sub  TestCommon_setVariables( g )
  Set g("GlobalTestObject") = new SampleTest
End Sub
<TestCases TestSymbols="T_Sample1, T_Sample2"/>
を選んだときに実施するテストを選択します。
Test.vbs の
この属性が無いときは、サブ・フォルダーにある全てのテストを実施します。
実施するテストのシンボルを CSV 形式で指定してください。
Test.vbs の
シンボルが多いときは、改行を入れることができます。
<TestCases TestSymbols="T_Sample1, T_Sample2,
   T_Sample3"/>
を選ぶと、シンボルを一覧できます。
テストに関する情報をまとめたデータ・ファイルです。
ダブルクリックする Test.vbs と同じフォルダーに TestCommon_Data.xml を作成してください。
参考
参考
その他、オリジナル属性
テスト固有のオリジナル属性を、TestCommon_Data.xml に含めることができます。
<TestCases TestSymbols="T_Sample1, T_Sample2"
 TestScriptFileName="Test_target.vbs"/>
TestScriptFileName 属性
TestScriptFileName 属性に、Test.vbs のファイル名を指定すると、そのファイル名から
起動した場合のみ、有効になります。
TestScriptFileNameExcepted 属性に、Test.vbs のファイル名を指定すると、その
ファイル名「以外」から起動した場合のみ、有効になります。
<TestCases TestSymbols="T_Sample1, T_Sample2"
 TestScriptFileNameExcepted="Test.vbs"/>