OSDN Git Service

Version 3.00
[vbslib/main.git] / _src / Test / vbslib_test / T_FinObj / T_Finish.vbs
1 Option Explicit \r
2 \r
3 Dim  g_ErrEmulate\r
4 Const  F_ErrInCaller = 1\r
5 Const  F_ErrInFinish = 2\r
6 Const  F_ErrInCancel = 4\r
7 Const  F_ErrInRelease = 8\r
8 Const  F_NotCallFinish = 16\r
9 \r
10 \r
11 Class  ClassA\r
12   Private  m_bFinished\r
13 \r
14 Public Sub  Finish()\r
15   WScript.Echo "Finish(1)"\r
16   If g_ErrEmulate and F_ErrInFinish Then  WScript.Echo "ERROR!" : Err.Raise 1,,"in Finish"\r
17   WScript.Echo "Finish(2)"\r
18   m_bFinished = True\r
19 End Sub\r
20 \r
21 Private Sub  Class_Terminate()\r
22   Dim  en,ed : en = Err.Number : ed = Err.Description\r
23   On Error Resume Next  ' This clears the error\r
24     If en <> 0 Then\r
25       WScript.Echo "Cancel"\r
26       If g_ErrEmulate and F_ErrInCancel Then   WScript.Echo "ERROR!" : Err.Raise 1,,"in Cancel"\r
27     End If\r
28     WScript.Echo "Release"\r
29     If g_ErrEmulate and F_ErrInRelease Then   WScript.Echo "ERROR!" : Err.Raise 1,,"in Release"\r
30     ErrorCheckInTerminate\r
31     If en = 0 and not m_bFinished Then  NotCallFinish\r
32   On Error GoTo 0 : If en <> 0 Then  Err.Raise en,,ed\r
33 End Sub\r
34 \r
35 End Class\r
36 \r
37 \r
38 Sub  NotCallFinish()\r
39   Stop : WScript.Echo  "[ERROR] not call Finish"\r
40 End Sub\r
41 \r
42 \r
43 Sub  ErrorCheckInTerminate()\r
44   If Err.Number <> 0 Then\r
45     Stop : WScript.Echo  "ERROR(" & Err.Number & ") " & Err.Description & _\r
46        " in Class_Terminate"\r
47   End If\r
48 End Sub\r
49 \r
50 \r
51 Sub  main()\r
52   Dim  m : Set m = new ClassA\r
53 \r
54   If g_ErrEmulate and F_ErrInCaller Then   WScript.Echo "ERROR!" : Err.Raise 1,,"in Caller"\r
55 \r
56   If ( g_ErrEmulate and F_NotCallFinish ) = 0 Then  m.Finish\r
57   WScript.Echo "After Finish"\r
58 End Sub\r
59 \r
60 \r
61 \r
62 '//=== Test\r
63 Dim  en,ed, s\r
64 \r
65 For g_ErrEmulate = 0 To 31\r
66   s = ""\r
67   If g_ErrEmulate and F_ErrInCaller Then    s = s + "ErrInCaller, "\r
68   If g_ErrEmulate and F_ErrInFinish Then    s = s + "ErrInFinish, "\r
69   If g_ErrEmulate and F_ErrInCancel Then    s = s + "ErrInCancel, "\r
70   If g_ErrEmulate and F_ErrInRelease Then   s = s + "ErrInRelease, "\r
71   If g_ErrEmulate and F_NotCallFinish Then  s = s + "NotCallFinish, "\r
72   WScript.Echo  "-----------------"\r
73   WScript.Echo  s\r
74 \r
75   On Error Resume Next\r
76     main\r
77   en = Err.Number : ed = Err.Description : On Error GoTo 0\r
78   If en <> 0 Then  WScript.Echo  "ERROR(" & en & ") " & ed\r
79 Next\r
80 \r
81  \r