3 ' vbslib ver3.00 Sep.22, 2009
\r
4 ' Copyright (c) 2008-2009, T's-Neko at Sage Plaisir 21 (Japan)
\r
5 ' All rights reserved. Based on 3-clause BSD license.
\r
8 Dim g_TestPrompt_Path
\r
9 g_TestPrompt_Path = g_SrcPath
\r
13 '********************************************************************************
\r
14 ' <<< Global Variables >>>
\r
15 '********************************************************************************
\r
16 Const Op__NoOperation = 0
\r
17 Const Op__SelectTest = 1
\r
18 Const Op__EachTest = 2
\r
19 Const Op__EachTestR = 3
\r
20 Const Op__EachDebug = 4
\r
21 Const Op__AllTest = 5
\r
25 Const Op__OpenFail = 88
\r
26 Const Op__NextFail = 89
\r
29 '********************************************************************************
\r
30 ' <<< [RunTestPrompt] >>>
\r
31 '********************************************************************************
\r
32 Sub RunTestPrompt( Opt )
\r
36 g_AppKey.SetWritableMode F_ErrIfWarn
\r
38 Set prompt = new TestPrompt : ErrCheck
\r
39 If IsObject( Opt ) Then Set prompt.m_MainOpt = Opt Else prompt.m_MainOpt = Opt
\r
40 If TypeName( Opt ) = "Writables" Then Set w_=Opt.Enable
\r
43 '//=== Select test from command line parameter
\r
44 If WScript.Arguments.Unnamed.Count >= 1 Then _
\r
45 prompt.SetOpenSymbolOrPath WScript.Arguments.Unnamed(0)
\r
48 '//=== Setup unit test mode
\r
49 If VarType( Opt ) = vbString Then
\r
51 .m_bDisableAddTestScript = True
\r
52 Setting_buildTestPrompt prompt
\r
53 .m_bDisableAddTestScript = False
\r
54 .AddTestScript g_fs.GetBaseName( g_fs.GetParentFolderName( _
\r
55 WScript.ScriptFullName ) ), WScript.ScriptFullName
\r
56 .SetCurrentSymbol WScript.ScriptFullName
\r
59 g_Test.m_DefLogFName = "Test_log.txt"
\r
61 Setting_buildTestPrompt prompt
\r
65 '//=== Set log file from command line parameter
\r
66 If not IsEmpty( WScript.Arguments.Named.Item("log") ) Then _
\r
67 g_Test.m_DefLogFName = WScript.Arguments.Named.Item("log")
\r
70 '//=== Set Test Symbol
\r
71 If Not IsEmpty( prompt.m_OpenSymbolOrPath ) Then _
\r
72 prompt.m_Tests.SetCurrentSymbol prompt.m_OpenSymbolOrPath
\r
75 g_CUI.SetAutoKeysFromMainArg
\r
80 '*-------------------------------------------------------------------------*
\r
81 '*
\81\9f<<<< [TestPrompt] Class >>>> */
\r
82 '*-------------------------------------------------------------------------*
\r
86 Public m_Tests ' as Tests
\r
87 Public m_OpenSymbolOrPath ' param1 of TestPrompt.vbs
\r
90 Public m_Menu() ' as MenuItem
\r
92 ' const integer for other vbs file scope
\r
93 Public Op_NoOperation
\r
94 Public Op_SelectTest
\r
107 '********************************************************************************
\r
108 ' <<< [TestPrompt::Class_Initialize] >>>
\r
109 '********************************************************************************
\r
110 Private Sub Class_Initialize
\r
113 Set m_Tests = new Tests : ErrCheck
\r
114 m_Tests.bTargetDebug = Not IsEmpty( WScript.Arguments.Named("target_debug") )
\r
116 Set m_Tests.Prompt = Me
\r
119 Set m_Menu(i) = new MenuItem : ErrCheck
\r
122 Op_NoOperation = Op__NoOperation
\r
123 Op_SelectTest = Op__SelectTest
\r
124 Op_EachTest = Op__EachTest
\r
125 Op_EachTestR = Op__EachTestR
\r
126 Op_EachDebug = Op__EachDebug
\r
127 Op_AllTest = Op__AllTest
\r
129 Op_Debug = Op__Debug
\r
130 Op_OpenFail = Op__OpenFail
\r
131 Op_NextFail = Op__NextFail
\r
137 '********************************************************************************
\r
138 ' <<< [TestPrompt::ReDimMenu] >>>
\r
139 '********************************************************************************
\r
140 Public Sub ReDimMenu( UBound_ )
\r
141 For i=0 To UBound( m_Menu )
\r
145 ReDim m_Menu( UBound_ )
\r
148 Set m_Menu(i) = new MenuItem : ErrCheck
\r
155 '********************************************************************************
\r
156 ' <<< [TestPrompt::SetOpenSymbolOrPath] >>>
\r
157 '********************************************************************************
\r
158 Public Sub SetOpenSymbolOrPath( Symbol_or_Path )
\r
159 m_OpenSymbolOrPath = Symbol_or_Path
\r
160 If g_fs.FileExists( Symbol_or_Path ) Then
\r
161 m_Tests.BaseFolderPath = g_fs.GetParentFolderName( g_fs.GetAbsolutePathName(Symbol_or_Path) )
\r
162 ElseIf Symbol_or_Path <> "" Then
\r
163 m_Tests.BaseFolderPath = g_sh.CurrentDirectory
\r
168 '********************************************************************************
\r
169 ' <<< [TestPrompt::DoPrompt] >>>
\r
170 '********************************************************************************
\r
171 Public Sub DoPrompt
\r
175 WScript.Echo "TestPrompt.vbs [" & m_Tests.CurrentSymbol & "]"
\r
176 If Not IsEmpty( m_Tests.CurrentTest ) Then WScript.Echo " test vbs = " & _
\r
177 GetStepPath( m_Tests.CurrentTest.ScriptPath, m_Tests.BaseFolderPath )
\r
178 WScript.Echo " base folder = " & m_Tests.BaseFolderPath
\r
179 For num = 0 To UBound( m_Menu )
\r
180 If Not IsEmpty( m_Menu(num) ) And _
\r
181 ( 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
182 Select Case m_Menu(num).m_OpType
\r
183 Case Op_SelectTest WScript.Echo m_Menu(num).m_Caption & " (current test = " & m_Tests.CurrentSymbol & ")"
\r
184 Case Op_Debug WScript.Echo m_Menu(num).m_Caption & " (debug script=" & g_debug & ", target=" & m_Tests.bTargetDebug & ")"
\r
185 Case Else WScript.Echo m_Menu(num).m_Caption
\r
189 num = g_CUI.input( "Select number>" )
\r
191 For i = 0 To UBound( m_Menu )
\r
192 If not IsEmpty( m_Menu(i).m_Number ) Then
\r
193 If num = m_Menu(i).m_Number Then num = i : Exit For
\r
196 WScript.Echo "--------------------------------------------------------"
\r
198 Select Case m_Menu(num).m_OpType
\r
199 Case Op_SelectTest Me.SelectTest
\r
200 Case Op_EachTest Me.DoTest m_Menu(num).m_OpParam, False
\r
201 Case Op_EachTestR Me.DoTest m_Menu(num).m_OpParam, True
\r
202 Case Op_EachDebug Me.DoTest m_Menu(num).m_OpParam, True
\r
203 Case Op_AllTest m_Tests.DoAllTest
\r
204 Case Op_Debug Me.ChgDebugMode
\r
205 Case Op_OpenFail Me.OpenFail
\r
206 Case Op_NextFail Me.NextFail
\r
207 Case Op_Exit Exit Do
\r
209 WScript.Echo "--------------------------------------------------------"
\r
215 '********************************************************************************
\r
216 ' <<< [TestPrompt::DoTest] >>>
\r
217 '********************************************************************************
\r
218 Public Sub DoTest( param, bReverse )
\r
220 m_Tests.DebugTest param, bReverse
\r
222 m_Tests.DoTest param, bReverse
\r
227 '********************************************************************************
\r
228 ' <<< [TestPrompt::SelectTest] >>>
\r
229 '********************************************************************************
\r
230 Public Sub SelectTest
\r
231 Dim key, keys, sym, i, i_sym
\r
234 '//=== Display test symbol list
\r
235 WScript.Echo "Test symbol list:"
\r
236 keys = m_Tests.Sets.Keys()
\r
237 WScript.Echo " 0) ALL (pre-defined)"
\r
239 For Each key in keys
\r
240 WScript.Echo " " & i_sym & ") " & key
\r
244 '//=== Input test symbol or number
\r
245 sym = g_CUI.input( "Input test number or symbol or ""ALL"">" )
\r
246 If sym = "" Then sym = m_Tests.CurrentSymbol
\r
248 '//=== If sym is number, set sym to test symbol
\r
249 i_sym = CInt2( sym )
\r
252 For Each key in keys
\r
253 If i_sym = i Then sym = key : Exit For
\r
257 If sym = "0" Then sym = "ALL"
\r
259 '//=== Set test symbol and display test properties
\r
260 If m_Tests.SetCurrentSymbol( sym ) = 0 Then
\r
261 If sym <> "ALL" and sym <> "ALL_R" Then
\r
262 echo m_Tests.Sets.Item( sym )
\r
271 '********************************************************************************
\r
272 ' <<< [TestPrompt::ChgDebugMode] >>>
\r
273 '********************************************************************************
\r
274 Public Sub ChgDebugMode()
\r
278 '//=== Display test symbol list
\r
279 WScript.Echo "1) Reload Test Script"
\r
280 WScript.Echo "2) ChgDebugMode Test Script"
\r
281 WScript.Echo "3) ChgDebugMode Test Target"
\r
282 ' If m_Tests.bEchoOn Then
\r
283 ' WScript.Echo "4) Echo On/Off (current=on)"
\r
285 ' WScript.Echo "4) Echo On/Off (current=off)"
\r
287 If m_Tests.m_bAutoDiff Then
\r
288 WScript.Echo "5) AutoDiff (current=on)"
\r
290 WScript.Echo "5) AutoDiff (current=off)"
\r
294 '//=== Input test symbol or number
\r
295 sym = g_CUI.input( "Input test number>" )
\r
297 If sym = 0 Then Exit Do
\r
298 If sym = 1 Then ChgTestScriptDebugMode g_debug : Exit Do
\r
299 If sym = 2 Then ChgTestScriptDebugMode Not g_debug : Exit Do
\r
300 If sym = 3 Then m_Tests.bTargetDebug = Not m_Tests.bTargetDebug : Exit Do
\r
301 ' If sym = 4 Then m_Tests.bEchoOn = not m_Tests.bEchoOn : Exit Do
\r
302 If sym = 5 Then m_Tests.m_bAutoDiff = not m_Tests.m_bAutoDiff : Exit Do
\r
307 Public Sub ChgTestScriptDebugMode( debug )
\r
309 Dim target_debug_opt
\r
311 If m_Tests.CurrentSymbol = "ALL" Then param = "ALL" _
\r
312 Else param = m_Tests.CurrentTest.ScriptPath
\r
314 If m_Tests.bTargetDebug Then target_debug_opt = " /target_debug:1" _
\r
315 Else target_debug_opt = ""
\r
318 g_sh.Run "cscript //x //nologo """+WScript.ScriptFullName+""" """+param+""" /g_debug:1"+target_debug_opt
\r
320 g_sh.Run "cscript //nologo """+WScript.ScriptFullName+""" """+param+""""+target_debug_opt
\r
326 '********************************************************************************
\r
327 ' <<< [TestPrompt::OpenFail] >>>
\r
328 '********************************************************************************
\r
329 Public Sub OpenFail()
\r
332 On Error Resume Next
\r
333 m_Tests.OpenFailFolder
\r
334 en = Err.Number : ed = Err.Description : On Error GoTo 0
\r
335 If en <> 0 Then echo GetErrStr( en, ed )
\r
339 '********************************************************************************
\r
340 ' <<< [TestPrompt::NextFail] >>>
\r
341 '********************************************************************************
\r
342 Public Sub NextFail()
\r
345 On Error Resume Next
\r
347 en = Err.Number : ed = Err.Description : On Error GoTo 0
\r
348 If en <> 0 Then echo GetErrStr( en, ed )
\r
354 '*-------------------------------------------------------------------------*
\r
355 '*
\81\9f<<<< [MenuItem] Class >>>> */
\r
356 '*-------------------------------------------------------------------------*
\r
362 Public m_OpType ' as integer Op_SelectTest, Op_EachTest, Op_Do1
\r
365 Private Sub Class_Initialize
\r
366 m_Caption = Empty : m_OpType = Op__NoOperation
\r