OSDN Git Service

Version 3.00
[vbslib/main.git] / _src / TestByFCBatAuto / TestScript / vbslib / vbslib300 / TestPrompt.vbs
diff --git a/_src/TestByFCBatAuto/TestScript/vbslib/vbslib300/TestPrompt.vbs b/_src/TestByFCBatAuto/TestScript/vbslib/vbslib300/TestPrompt.vbs
new file mode 100644 (file)
index 0000000..eb93e8e
--- /dev/null
@@ -0,0 +1,373 @@
+Option Explicit \r
+\r
+' vbslib  ver3.00  Sep.22, 2009\r
+' Copyright (c) 2008-2009, T's-Neko at Sage Plaisir 21 (Japan)\r
+' All rights reserved. Based on 3-clause BSD license.\r
+\r
+Dim  g_SrcPath\r
+Dim  g_TestPrompt_Path\r
+     g_TestPrompt_Path = g_SrcPath\r
+\r
+\r
\r
+'********************************************************************************\r
+'  <<< Global Variables >>> \r
+'********************************************************************************\r
+Const  Op__NoOperation = 0\r
+Const  Op__SelectTest = 1\r
+Const  Op__EachTest = 2\r
+Const  Op__EachTestR = 3\r
+Const  Op__EachDebug = 4\r
+Const  Op__AllTest = 5\r
+Const  Op__Do1 = 6\r
+Const  Op__Debug = 8\r
+Const  Op__Exit = 9\r
+Const  Op__OpenFail = 88\r
+Const  Op__NextFail = 89\r
+\r
\r
+'********************************************************************************\r
+'  <<< [RunTestPrompt] >>> \r
+'********************************************************************************\r
+Sub RunTestPrompt( Opt )\r
+  Dim  prompt\r
+  Dim  w_\r
+\r
+  g_AppKey.SetWritableMode  F_ErrIfWarn\r
+\r
+  Set prompt = new TestPrompt : ErrCheck\r
+  If IsObject( Opt ) Then  Set prompt.m_MainOpt = Opt  Else  prompt.m_MainOpt = Opt\r
+  If TypeName( Opt ) = "Writables" Then  Set w_=Opt.Enable\r
+\r
+\r
+  '//=== Select test from command line parameter\r
+  If WScript.Arguments.Unnamed.Count >= 1 Then _\r
+    prompt.SetOpenSymbolOrPath  WScript.Arguments.Unnamed(0)\r
+\r
+\r
+  '//=== Setup unit test mode\r
+  If VarType( Opt ) = vbString Then\r
+    With prompt.m_Tests\r
+      .m_bDisableAddTestScript = True\r
+      Setting_buildTestPrompt  prompt\r
+      .m_bDisableAddTestScript = False\r
+      .AddTestScript  g_fs.GetBaseName( g_fs.GetParentFolderName( _\r
+          WScript.ScriptFullName ) ), WScript.ScriptFullName\r
+      .SetCurrentSymbol  WScript.ScriptFullName\r
+      .m_bAutoDiff = True\r
+    End With\r
+    g_Test.m_DefLogFName = "Test_log.txt"\r
+  Else\r
+    Setting_buildTestPrompt  prompt\r
+  End If\r
+\r
+\r
+  '//=== Set log file from command line parameter\r
+  If not IsEmpty( WScript.Arguments.Named.Item("log") ) Then _\r
+    g_Test.m_DefLogFName = WScript.Arguments.Named.Item("log")\r
+\r
+\r
+  '//=== Set Test Symbol\r
+  If Not IsEmpty( prompt.m_OpenSymbolOrPath ) Then _\r
+    prompt.m_Tests.SetCurrentSymbol  prompt.m_OpenSymbolOrPath\r
+\r
+  '//=== Start prompt\r
+  g_CUI.SetAutoKeysFromMainArg\r
+  prompt.DoPrompt\r
+End Sub\r
+\r
\r
+'*-------------------------------------------------------------------------*\r
+'* \81\9f<<<< [TestPrompt] Class >>>> */ \r
+'*-------------------------------------------------------------------------*\r
+\r
+Class  TestPrompt\r
+\r
+  Public  m_Tests    ' as Tests\r
+  Public  m_OpenSymbolOrPath ' param1 of TestPrompt.vbs\r
+  Public  m_MainOpt\r
+\r
+  Public  m_Menu()     ' as MenuItem\r
+\r
+  ' const integer for other vbs file scope\r
+  Public  Op_NoOperation\r
+  Public  Op_SelectTest\r
+  Public  Op_EachTest\r
+  Public  Op_EachTestR\r
+  Public  Op_EachDebug\r
+  Public  Op_AllTest\r
+  Public  Op_Do1\r
+  Public  Op_Debug\r
+  Public  Op_OpenFail\r
+  Public  Op_NextFail\r
+  Public  Op_Exit\r
+\r
+\r
\r
+'********************************************************************************\r
+'  <<< [TestPrompt::Class_Initialize] >>> \r
+'********************************************************************************\r
+Private Sub  Class_Initialize\r
+  Dim  i\r
+\r
+  Set m_Tests = new Tests : ErrCheck\r
+  m_Tests.bTargetDebug = Not IsEmpty( WScript.Arguments.Named("target_debug") )\r
+\r
+  Set m_Tests.Prompt = Me\r
+  ReDim  m_Menu(10)\r
+  For i=0 To 10\r
+    Set m_Menu(i) = new MenuItem : ErrCheck\r
+  Next\r
+\r
+  Op_NoOperation = Op__NoOperation\r
+  Op_SelectTest = Op__SelectTest\r
+  Op_EachTest = Op__EachTest\r
+  Op_EachTestR = Op__EachTestR\r
+  Op_EachDebug = Op__EachDebug\r
+  Op_AllTest = Op__AllTest\r
+  Op_Do1 = Op__Do1\r
+  Op_Debug = Op__Debug\r
+  Op_OpenFail = Op__OpenFail\r
+  Op_NextFail = Op__NextFail\r
+  Op_Exit = Op__Exit\r
+End Sub\r
+\r
+\r
\r
+'********************************************************************************\r
+'  <<< [TestPrompt::ReDimMenu] >>> \r
+'********************************************************************************\r
+Public Sub  ReDimMenu( UBound_ )\r
+  For i=0 To UBound( m_Menu )\r
+    m_Menu(i) = Empty\r
+  Next\r
+\r
+  ReDim  m_Menu( UBound_ )\r
+\r
+  For i=0 To UBound_\r
+    Set m_Menu(i) = new MenuItem : ErrCheck\r
+  Next\r
+\r
+End Sub\r
+\r
+\r
\r
+'********************************************************************************\r
+'  <<< [TestPrompt::SetOpenSymbolOrPath] >>> \r
+'********************************************************************************\r
+Public Sub  SetOpenSymbolOrPath( Symbol_or_Path )\r
+  m_OpenSymbolOrPath = Symbol_or_Path\r
+  If g_fs.FileExists( Symbol_or_Path ) Then\r
+    m_Tests.BaseFolderPath = g_fs.GetParentFolderName( g_fs.GetAbsolutePathName(Symbol_or_Path) )\r
+  ElseIf Symbol_or_Path <> "" Then\r
+    m_Tests.BaseFolderPath = g_sh.CurrentDirectory\r
+  End If\r
+End Sub\r
+\r
\r
+'********************************************************************************\r
+'  <<< [TestPrompt::DoPrompt] >>> \r
+'********************************************************************************\r
+Public Sub  DoPrompt\r
+  Dim  num, i\r
+\r
+  Do\r
+    WScript.Echo "TestPrompt.vbs [" & m_Tests.CurrentSymbol & "]"\r
+    If Not IsEmpty( m_Tests.CurrentTest ) Then  WScript.Echo "   test vbs = " & _\r
+      GetStepPath( m_Tests.CurrentTest.ScriptPath, m_Tests.BaseFolderPath )\r
+    WScript.Echo "   base folder = " & m_Tests.BaseFolderPath\r
+    For num = 0 To UBound( m_Menu )\r
+      If Not IsEmpty( m_Menu(num) ) And _\r
+         ( Not IsEmpty( m_Menu(num).m_Caption ) Or m_Menu(num).m_OpType = Op_SelectTest Or m_Menu(num).m_OpType = Op_Debug ) Then\r
+        Select Case  m_Menu(num).m_OpType\r
+          Case Op_SelectTest  WScript.Echo m_Menu(num).m_Caption & " (current test = " & m_Tests.CurrentSymbol & ")"\r
+          Case Op_Debug       WScript.Echo m_Menu(num).m_Caption & " (debug script=" & g_debug & ", target=" & m_Tests.bTargetDebug & ")"\r
+          Case Else           WScript.Echo m_Menu(num).m_Caption\r
+        End Select\r
+      End If\r
+    Next\r
+    num = g_CUI.input( "Select number>" )\r
+    num = CInt2( num )\r
+    For i = 0 To UBound( m_Menu )\r
+     If not IsEmpty( m_Menu(i).m_Number ) Then\r
+       If num = m_Menu(i).m_Number Then  num = i : Exit For\r
+     End IF\r
+    Next\r
+    WScript.Echo "--------------------------------------------------------"\r
+\r
+    Select Case  m_Menu(num).m_OpType\r
+      Case Op_SelectTest  Me.SelectTest\r
+      Case Op_EachTest    Me.DoTest  m_Menu(num).m_OpParam, False\r
+      Case Op_EachTestR   Me.DoTest  m_Menu(num).m_OpParam, True\r
+      Case Op_EachDebug   Me.DoTest  m_Menu(num).m_OpParam, True\r
+      Case Op_AllTest     m_Tests.DoAllTest\r
+      Case Op_Debug       Me.ChgDebugMode\r
+      Case Op_OpenFail    Me.OpenFail\r
+      Case Op_NextFail    Me.NextFail\r
+      Case Op_Exit        Exit Do\r
+    End Select\r
+    WScript.Echo "--------------------------------------------------------"\r
+  Loop\r
+End Sub\r
+\r
+\r
\r
+'********************************************************************************\r
+'  <<< [TestPrompt::DoTest] >>> \r
+'********************************************************************************\r
+Public Sub  DoTest( param, bReverse )\r
+  If g_debug Then\r
+    m_Tests.DebugTest param, bReverse\r
+  Else\r
+    m_Tests.DoTest param, bReverse\r
+  End If\r
+End Sub\r
+\r
\r
+'********************************************************************************\r
+'  <<< [TestPrompt::SelectTest] >>> \r
+'********************************************************************************\r
+Public Sub  SelectTest\r
+  Dim  key, keys, sym, i, i_sym\r
+\r
+  Do\r
+    '//=== Display test symbol list\r
+    WScript.Echo "Test symbol list:"\r
+    keys = m_Tests.Sets.Keys()\r
+    WScript.Echo "  0) ALL (pre-defined)"\r
+    i_sym = 1\r
+    For Each key in keys\r
+      WScript.Echo "  " & i_sym & ") " & key\r
+      i_sym = i_sym + 1\r
+    Next\r
+\r
+    '//=== Input test symbol or number\r
+    sym = g_CUI.input( "Input test number or symbol or ""ALL"">" )\r
+    If sym = "" Then sym = m_Tests.CurrentSymbol\r
+\r
+    '//=== If sym is number, set sym to test symbol\r
+    i_sym = CInt2( sym )\r
+    If i_sym > 0 Then\r
+      i = 1\r
+      For Each key in keys\r
+        If i_sym = i Then  sym = key : Exit For\r
+        i = i + 1\r
+      Next\r
+    End If\r
+    If sym = "0" Then  sym = "ALL"\r
+\r
+    '//=== Set test symbol and display test properties\r
+    If m_Tests.SetCurrentSymbol( sym ) = 0 Then\r
+      If sym <> "ALL" and sym <> "ALL_R" Then\r
+        echo m_Tests.Sets.Item( sym )\r
+      End If\r
+      Exit Do\r
+    End If\r
+  Loop\r
+End Sub\r
+\r
+\r
\r
+'********************************************************************************\r
+'  <<< [TestPrompt::ChgDebugMode] >>> \r
+'********************************************************************************\r
+Public Sub  ChgDebugMode()\r
+  Dim  sym\r
+\r
+  Do\r
+    '//=== Display test symbol list\r
+    WScript.Echo "1) Reload Test Script"\r
+    WScript.Echo "2) ChgDebugMode Test Script"\r
+    WScript.Echo "3) ChgDebugMode Test Target"\r
+'    If m_Tests.bEchoOn Then\r
+'      WScript.Echo "4) Echo On/Off (current=on)"\r
+'    Else\r
+'      WScript.Echo "4) Echo On/Off (current=off)"\r
+'    End If\r
+    If m_Tests.m_bAutoDiff Then\r
+      WScript.Echo "5) AutoDiff (current=on)"\r
+    Else\r
+      WScript.Echo "5) AutoDiff (current=off)"\r
+    End If\r
+\r
+\r
+    '//=== Input test symbol or number\r
+    sym = g_CUI.input( "Input test number>" )\r
+    sym = CInt2( sym )\r
+    If sym = 0 Then Exit Do\r
+    If sym = 1 Then  ChgTestScriptDebugMode g_debug : Exit Do\r
+    If sym = 2 Then  ChgTestScriptDebugMode Not g_debug : Exit Do\r
+    If sym = 3 Then  m_Tests.bTargetDebug = Not m_Tests.bTargetDebug : Exit Do\r
+'    If sym = 4 Then  m_Tests.bEchoOn = not m_Tests.bEchoOn : Exit Do\r
+    If sym = 5 Then  m_Tests.m_bAutoDiff = not m_Tests.m_bAutoDiff : Exit Do\r
+  Loop\r
+End Sub\r
+\r
+\r
+Public Sub  ChgTestScriptDebugMode( debug )\r
+  Dim  param\r
+  Dim  target_debug_opt\r
+\r
+  If m_Tests.CurrentSymbol = "ALL" Then param = "ALL" _\r
+  Else  param = m_Tests.CurrentTest.ScriptPath\r
+\r
+  If m_Tests.bTargetDebug Then  target_debug_opt = " /target_debug:1" _\r
+  Else                          target_debug_opt = ""\r
+\r
+  If debug Then\r
+    g_sh.Run "cscript //x //nologo """+WScript.ScriptFullName+""" """+param+""" /g_debug:1"+target_debug_opt\r
+  Else\r
+    g_sh.Run "cscript //nologo """+WScript.ScriptFullName+""" """+param+""""+target_debug_opt\r
+  End If\r
+  WScript.Quit 10\r
+End Sub\r
+\r
\r
+'********************************************************************************\r
+'  <<< [TestPrompt::OpenFail] >>> \r
+'********************************************************************************\r
+Public Sub  OpenFail()\r
+  Dim en,ed\r
+\r
+  On Error Resume Next\r
+    m_Tests.OpenFailFolder\r
+  en = Err.Number : ed = Err.Description : On Error GoTo 0\r
+  If en <> 0 Then  echo  GetErrStr( en, ed )\r
+End Sub\r
+\r
\r
+'********************************************************************************\r
+'  <<< [TestPrompt::NextFail] >>> \r
+'********************************************************************************\r
+Public Sub  NextFail()\r
+  Dim en,ed\r
+\r
+  On Error Resume Next\r
+    m_Tests.NextFail\r
+  en = Err.Number : ed = Err.Description : On Error GoTo 0\r
+  If en <> 0 Then  echo  GetErrStr( en, ed )\r
+End Sub\r
+\r
\r
+End Class \r
\r
+'*-------------------------------------------------------------------------*\r
+'* \81\9f<<<< [MenuItem] Class >>>> */ \r
+'*-------------------------------------------------------------------------*\r
+\r
+Class  MenuItem\r
+\r
+  Public  m_Caption\r
+  Public  m_Number\r
+  Public  m_OpType  ' as integer  Op_SelectTest, Op_EachTest, Op_Do1\r
+  Public  m_OpParam\r
+\r
+  Private  Sub  Class_Initialize\r
+    m_Caption = Empty : m_OpType = Op__NoOperation\r
+  End Sub\r
+\r
+End Class\r
+\r
+\r
+\r
\r