OSDN Git Service

Version 3.00
[vbslib/main.git] / _src / TestByFCBatAuto / TestScript / vbslib / vbslib300 / TestPrompt.vbs
1 Option Explicit \r
2 \r
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
6 \r
7 Dim  g_SrcPath\r
8 Dim  g_TestPrompt_Path\r
9      g_TestPrompt_Path = g_SrcPath\r
10 \r
11 \r
12  \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
22 Const  Op__Do1 = 6\r
23 Const  Op__Debug = 8\r
24 Const  Op__Exit = 9\r
25 Const  Op__OpenFail = 88\r
26 Const  Op__NextFail = 89\r
27 \r
28  \r
29 '********************************************************************************\r
30 '  <<< [RunTestPrompt] >>> \r
31 '********************************************************************************\r
32 Sub RunTestPrompt( Opt )\r
33   Dim  prompt\r
34   Dim  w_\r
35 \r
36   g_AppKey.SetWritableMode  F_ErrIfWarn\r
37 \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
41 \r
42 \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
46 \r
47 \r
48   '//=== Setup unit test mode\r
49   If VarType( Opt ) = vbString Then\r
50     With prompt.m_Tests\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
57       .m_bAutoDiff = True\r
58     End With\r
59     g_Test.m_DefLogFName = "Test_log.txt"\r
60   Else\r
61     Setting_buildTestPrompt  prompt\r
62   End If\r
63 \r
64 \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
68 \r
69 \r
70   '//=== Set Test Symbol\r
71   If Not IsEmpty( prompt.m_OpenSymbolOrPath ) Then _\r
72     prompt.m_Tests.SetCurrentSymbol  prompt.m_OpenSymbolOrPath\r
73 \r
74   '//=== Start prompt\r
75   g_CUI.SetAutoKeysFromMainArg\r
76   prompt.DoPrompt\r
77 End Sub\r
78 \r
79  \r
80 '*-------------------------------------------------------------------------*\r
81 '* \81\9f<<<< [TestPrompt] Class >>>> */ \r
82 '*-------------------------------------------------------------------------*\r
83 \r
84 Class  TestPrompt\r
85 \r
86   Public  m_Tests    ' as Tests\r
87   Public  m_OpenSymbolOrPath ' param1 of TestPrompt.vbs\r
88   Public  m_MainOpt\r
89 \r
90   Public  m_Menu()     ' as MenuItem\r
91 \r
92   ' const integer for other vbs file scope\r
93   Public  Op_NoOperation\r
94   Public  Op_SelectTest\r
95   Public  Op_EachTest\r
96   Public  Op_EachTestR\r
97   Public  Op_EachDebug\r
98   Public  Op_AllTest\r
99   Public  Op_Do1\r
100   Public  Op_Debug\r
101   Public  Op_OpenFail\r
102   Public  Op_NextFail\r
103   Public  Op_Exit\r
104 \r
105 \r
106  \r
107 '********************************************************************************\r
108 '  <<< [TestPrompt::Class_Initialize] >>> \r
109 '********************************************************************************\r
110 Private Sub  Class_Initialize\r
111   Dim  i\r
112 \r
113   Set m_Tests = new Tests : ErrCheck\r
114   m_Tests.bTargetDebug = Not IsEmpty( WScript.Arguments.Named("target_debug") )\r
115 \r
116   Set m_Tests.Prompt = Me\r
117   ReDim  m_Menu(10)\r
118   For i=0 To 10\r
119     Set m_Menu(i) = new MenuItem : ErrCheck\r
120   Next\r
121 \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
128   Op_Do1 = Op__Do1\r
129   Op_Debug = Op__Debug\r
130   Op_OpenFail = Op__OpenFail\r
131   Op_NextFail = Op__NextFail\r
132   Op_Exit = Op__Exit\r
133 End Sub\r
134 \r
135 \r
136  \r
137 '********************************************************************************\r
138 '  <<< [TestPrompt::ReDimMenu] >>> \r
139 '********************************************************************************\r
140 Public Sub  ReDimMenu( UBound_ )\r
141   For i=0 To UBound( m_Menu )\r
142     m_Menu(i) = Empty\r
143   Next\r
144 \r
145   ReDim  m_Menu( UBound_ )\r
146 \r
147   For i=0 To UBound_\r
148     Set m_Menu(i) = new MenuItem : ErrCheck\r
149   Next\r
150 \r
151 End Sub\r
152 \r
153 \r
154  \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
164   End If\r
165 End Sub\r
166 \r
167  \r
168 '********************************************************************************\r
169 '  <<< [TestPrompt::DoPrompt] >>> \r
170 '********************************************************************************\r
171 Public Sub  DoPrompt\r
172   Dim  num, i\r
173 \r
174   Do\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
186         End Select\r
187       End If\r
188     Next\r
189     num = g_CUI.input( "Select number>" )\r
190     num = CInt2( num )\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
194      End IF\r
195     Next\r
196     WScript.Echo "--------------------------------------------------------"\r
197 \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
208     End Select\r
209     WScript.Echo "--------------------------------------------------------"\r
210   Loop\r
211 End Sub\r
212 \r
213 \r
214  \r
215 '********************************************************************************\r
216 '  <<< [TestPrompt::DoTest] >>> \r
217 '********************************************************************************\r
218 Public Sub  DoTest( param, bReverse )\r
219   If g_debug Then\r
220     m_Tests.DebugTest param, bReverse\r
221   Else\r
222     m_Tests.DoTest param, bReverse\r
223   End If\r
224 End Sub\r
225 \r
226  \r
227 '********************************************************************************\r
228 '  <<< [TestPrompt::SelectTest] >>> \r
229 '********************************************************************************\r
230 Public Sub  SelectTest\r
231   Dim  key, keys, sym, i, i_sym\r
232 \r
233   Do\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
238     i_sym = 1\r
239     For Each key in keys\r
240       WScript.Echo "  " & i_sym & ") " & key\r
241       i_sym = i_sym + 1\r
242     Next\r
243 \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
247 \r
248     '//=== If sym is number, set sym to test symbol\r
249     i_sym = CInt2( sym )\r
250     If i_sym > 0 Then\r
251       i = 1\r
252       For Each key in keys\r
253         If i_sym = i Then  sym = key : Exit For\r
254         i = i + 1\r
255       Next\r
256     End If\r
257     If sym = "0" Then  sym = "ALL"\r
258 \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
263       End If\r
264       Exit Do\r
265     End If\r
266   Loop\r
267 End Sub\r
268 \r
269 \r
270  \r
271 '********************************************************************************\r
272 '  <<< [TestPrompt::ChgDebugMode] >>> \r
273 '********************************************************************************\r
274 Public Sub  ChgDebugMode()\r
275   Dim  sym\r
276 \r
277   Do\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
284 '    Else\r
285 '      WScript.Echo "4) Echo On/Off (current=off)"\r
286 '    End If\r
287     If m_Tests.m_bAutoDiff Then\r
288       WScript.Echo "5) AutoDiff (current=on)"\r
289     Else\r
290       WScript.Echo "5) AutoDiff (current=off)"\r
291     End If\r
292 \r
293 \r
294     '//=== Input test symbol or number\r
295     sym = g_CUI.input( "Input test number>" )\r
296     sym = CInt2( sym )\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
303   Loop\r
304 End Sub\r
305 \r
306 \r
307 Public Sub  ChgTestScriptDebugMode( debug )\r
308   Dim  param\r
309   Dim  target_debug_opt\r
310 \r
311   If m_Tests.CurrentSymbol = "ALL" Then param = "ALL" _\r
312   Else  param = m_Tests.CurrentTest.ScriptPath\r
313 \r
314   If m_Tests.bTargetDebug Then  target_debug_opt = " /target_debug:1" _\r
315   Else                          target_debug_opt = ""\r
316 \r
317   If debug Then\r
318     g_sh.Run "cscript //x //nologo """+WScript.ScriptFullName+""" """+param+""" /g_debug:1"+target_debug_opt\r
319   Else\r
320     g_sh.Run "cscript //nologo """+WScript.ScriptFullName+""" """+param+""""+target_debug_opt\r
321   End If\r
322   WScript.Quit 10\r
323 End Sub\r
324 \r
325  \r
326 '********************************************************************************\r
327 '  <<< [TestPrompt::OpenFail] >>> \r
328 '********************************************************************************\r
329 Public Sub  OpenFail()\r
330   Dim en,ed\r
331 \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
336 End Sub\r
337 \r
338  \r
339 '********************************************************************************\r
340 '  <<< [TestPrompt::NextFail] >>> \r
341 '********************************************************************************\r
342 Public Sub  NextFail()\r
343   Dim en,ed\r
344 \r
345   On Error Resume Next\r
346     m_Tests.NextFail\r
347   en = Err.Number : ed = Err.Description : On Error GoTo 0\r
348   If en <> 0 Then  echo  GetErrStr( en, ed )\r
349 End Sub\r
350 \r
351  \r
352 End Class \r
353  \r
354 '*-------------------------------------------------------------------------*\r
355 '* \81\9f<<<< [MenuItem] Class >>>> */ \r
356 '*-------------------------------------------------------------------------*\r
357 \r
358 Class  MenuItem\r
359 \r
360   Public  m_Caption\r
361   Public  m_Number\r
362   Public  m_OpType  ' as integer  Op_SelectTest, Op_EachTest, Op_Do1\r
363   Public  m_OpParam\r
364 \r
365   Private  Sub  Class_Initialize\r
366     m_Caption = Empty : m_OpType = Op__NoOperation\r
367   End Sub\r
368 \r
369 End Class\r
370 \r
371 \r
372 \r
373  \r