2 ' Copyright 2011 Jacek Caban for CodeWeavers
4 ' This library is free software; you can redistribute it and/or
5 ' modify it under the terms of the GNU Lesser General Public
6 ' License as published by the Free Software Foundation; either
7 ' version 2.1 of the License, or (at your option) any later version.
9 ' This library is distributed in the hope that it will be useful,
10 ' but WITHOUT ANY WARRANTY; without even the implied warranty of
11 ' MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
12 ' Lesser General Public License for more details.
14 ' You should have received a copy of the GNU Lesser General Public
15 ' License along with this library; if not, write to the Free Software
16 ' Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
23 call ok(true, "true is not true?")
24 ok true, "true is not true?"
25 call ok((true), "true is not true?")
27 ok not false, "not false but not true?"
28 ok not not true, "not not true but not true?"
30 Call ok(true = true, "true = true is false")
31 Call ok(false = false, "false = false is false")
32 Call ok(not (true = false), "true = false is true")
33 Call ok("x" = "x", """x"" = ""x"" is false")
34 Call ok(empty = empty, "empty = empty is false")
35 Call ok(empty = "", "empty = """" is false")
36 Call ok(0 = 0.0, "0 <> 0.0")
37 Call ok(16 = &h10&, "16 <> &h10&")
38 Call ok(010 = 10, "010 <> 10")
39 Call ok(10. = 10, "10. <> 10")
40 Call ok(&hffFFffFF& = -1, "&hffFFffFF& <> -1")
41 Call ok(&hffFFffFF& = -1, "&hffFFffFF& <> -1")
42 Call ok(--1 = 1, "--1 = " & --1)
43 Call ok(-empty = 0, "-empty = " & (-empty))
46 Call ok(x = "xx", "x = " & x & " expected ""xx""")
48 Call ok(true <> false, "true <> false is false")
49 Call ok(not (true <> true), "true <> true is true")
50 Call ok(not ("x" <> "x"), """x"" <> ""x"" is true")
51 Call ok(not (empty <> empty), "empty <> empty is true")
52 Call ok(x <> "x", "x = ""x""")
54 Call ok(getVT(false) = "VT_BOOL", "getVT(false) is not VT_BOOL")
55 Call ok(getVT(true) = "VT_BOOL", "getVT(true) is not VT_BOOL")
56 Call ok(getVT("") = "VT_BSTR", "getVT("""") is not VT_BSTR")
57 Call ok(getVT("test") = "VT_BSTR", "getVT(""test"") is not VT_BSTR")
58 Call ok(getVT(Empty) = "VT_EMPTY", "getVT(Empty) is not VT_EMPTY")
59 Call ok(getVT(null) = "VT_NULL", "getVT(null) is not VT_NULL")
60 Call ok(getVT(0) = "VT_I2", "getVT(0) is not VT_I2")
61 Call ok(getVT(1) = "VT_I2", "getVT(1) is not VT_I2")
62 Call ok(getVT(0.5) = "VT_R8", "getVT(0.5) is not VT_R8")
63 Call ok(getVT(0.0) = "VT_R8", "getVT(0.0) is not VT_R8")
64 Call ok(getVT(2147483647) = "VT_I4", "getVT(2147483647) is not VT_I4")
65 Call ok(getVT(2147483648) = "VT_R8", "getVT(2147483648) is not VT_R8")
66 Call ok(getVT(&h10&) = "VT_I2", "getVT(&h10&) is not VT_I2")
67 Call ok(getVT(&h10000&) = "VT_I4", "getVT(&h10000&) is not VT_I4")
68 Call ok(getVT(&H10000&) = "VT_I4", "getVT(&H10000&) is not VT_I4")
69 Call ok(getVT(&hffFFffFF&) = "VT_I2", "getVT(&hffFFffFF&) is not VT_I2")
70 Call ok(getVT(1 & 100000) = "VT_BSTR", "getVT(1 & 100000) is not VT_BSTR")
71 Call ok(getVT(-empty) = "VT_I2", "getVT(-empty) = " & getVT(-empty))
72 Call ok(getVT(-null) = "VT_NULL", "getVT(-null) = " & getVT(-null))
73 Call ok(getVT(y) = "VT_EMPTY*", "getVT(y) = " & getVT(y))
74 Call ok(getVT(nothing) = "VT_DISPATCH", "getVT(nothing) = " & getVT(nothing))
76 Call ok(getVT(x) = "VT_DISPATCH*", "getVT(x=nothing) = " & getVT(x))
78 Call ok(getVT(x) = "VT_BOOL*", "getVT(x) = " & getVT(x))
80 Call ok(isNullDisp(nothing), "nothing is not nulldisp?")
83 Call ok("ab" & "cd" = "abcd", """ab"" & ""cd"" <> ""abcd""")
84 Call ok("ab " & null = "ab ", """ab"" & null = " & ("ab " & null))
85 Call ok("ab " & empty = "ab ", """ab"" & empty = " & ("ab " & empty))
86 Call ok(1 & 100000 = "1100000", "1 & 100000 = " & (1 & 100000))
87 Call ok("ab" & x = "abxx", """ab"" & x = " & ("ab"&x))
89 if(isEnglishLang) then
90 Call ok("" & true = "True", """"" & true = " & true)
91 Call ok(true & false = "TrueFalse", "true & false = " & (true & false))
94 call ok(true and true, "true and true is not true")
95 call ok(true and not false, "true and not false is not true")
96 call ok(not (false and true), "not (false and true) is not true")
97 call ok(getVT(null and true) = "VT_NULL", "getVT(null and true) = " & getVT(null and true))
99 call ok(false or true, "false or uie is false?")
100 call ok(not (false or false), "false or false is not false?")
101 call ok(false and false or true, "false and false or true is false?")
102 call ok(true or false and false, "true or false and false is false?")
103 call ok(null or true, "null or true is false")
105 call ok(true xor false, "true xor false is false?")
106 call ok(not (false xor false), "false xor false is true?")
107 call ok(not (true or false xor true), "true or false xor true is true?")
108 call ok(not (true xor false or true), "true xor false or true is true?")
110 call ok(false eqv false, "false does not equal false?")
111 call ok(not (false eqv true), "false equals true?")
112 call ok(getVT(false eqv null) = "VT_NULL", "getVT(false eqv null) = " & getVT(false eqv null))
114 call ok(true imp true, "true does not imp true?")
115 call ok(false imp false, "false does not imp false?")
116 call ok(not (true imp false), "true imp false?")
117 call ok(false imp null, "false imp null is false?")
120 Call ok(2+2 = 4, "2+2 = " & (2+2))
121 Call ok(false + 6 + true = 5, "false + 6 + true <> 5")
122 Call ok(getVT(2+null) = "VT_NULL", "getVT(2+null) = " & getVT(2+null))
123 Call ok(2+empty = 2, "2+empty = " & (2+empty))
124 Call ok(x+x = 6, "x+x = " & (x+x))
126 Call ok(5-1 = 4, "5-1 = " & (5-1))
127 Call ok(3+5-true = 9, "3+5-true <> 9")
128 Call ok(getVT(2-null) = "VT_NULL", "getVT(2-null) = " & getVT(2-null))
129 Call ok(2-empty = 2, "2-empty = " & (2-empty))
130 Call ok(2-x = -1, "2-x = " & (2-x))
132 Call ok(9 Mod 6 = 3, "9 Mod 6 = " & (9 Mod 6))
133 Call ok(11.6 Mod 5.5 = False, "11.6 Mod 5.5 = " & (11.6 Mod 5.5 = 0.6))
134 Call ok(7 Mod 4+2 = 5, "7 Mod 4+2 <> 5")
135 Call ok(getVT(2 mod null) = "VT_NULL", "getVT(2 mod null) = " & getVT(2 mod null))
136 Call ok(getVT(null mod 2) = "VT_NULL", "getVT(null mod 2) = " & getVT(null mod 2))
137 'FIXME: Call ok(empty mod 2 = 0, "empty mod 2 = " & (empty mod 2))
139 Call ok(5 \ 2 = 2, "5 \ 2 = " & (5\2))
140 Call ok(4.6 \ 1.5 = 2, "4.6 \ 1.5 = " & (4.6\1.5))
141 Call ok(4.6 \ 1.49 = 5, "4.6 \ 1.49 = " & (4.6\1.49))
142 Call ok(2+3\4 = 2, "2+3\4 = " & (2+3\4))
144 Call ok(2*3 = 6, "2*3 = " & (2*3))
145 Call ok(3/2 = 1.5, "3/2 = " & (3/2))
146 Call ok(5\4/2 = 2, "5\4/2 = " & (5\2/1))
147 Call ok(12/3\2 = 2, "12/3\2 = " & (12/3\2))
149 Call ok(2^3 = 8, "2^3 = " & (2^3))
150 Call ok(2^3^2 = 64, "2^3^2 = " & (2^3^2))
151 Call ok(-3^2 = 9, "-3^2 = " & (-3^2))
152 Call ok(2*3^2 = 18, "2*3^2 = " & (2*3^2))
155 ok false, "if false called"
162 Call ok(not x, "x is false, if not evaluated?")
166 Call ok(false, "inside if false")
170 Call ok(x, "else not called?")
174 Call ok(false, "inside if false")
176 Call ok(false, "inside elseif not true")
180 Call ok(x, "else not called?")
184 Call ok(false, "inside if false")
187 ElseIf not False Then
190 Call ok(false, "inside else not true")
192 Call ok(x, "elseif not called?")
196 Call ok(false, "inside if false")
197 ElseIf not False Then
200 Call ok(x, "elseif not called?")
210 call ok((x and y), "x or y is false after while")
217 do while not (x and y)
223 call ok((x and y), "x or y is false after while")
230 ok false, "exit do didn't work"
241 Call ok(x, "x is false, testsub not called?")
244 Call ok(not v, "v is not true")
250 Call ok(x, "x was not set by SubSetTrue")
253 Call ok(not false, "false is no longer false?")
255 Sub SubSetTrue2(ByRef v)
256 Call ok(not v, "v is not true")
262 Call ok(x, "x was not set by SubSetTrue")
264 Sub TestSubArgVal(ByVal v)
265 Call ok(not v, "v is not false")
267 Call ok(v, "v is not true?")
271 Call TestSubArgVal(x)
272 Call ok(not x, "x is true after TestSubArgVal call?")
274 Sub TestSubMultiArgs(a,b,c,d,e)
275 Call ok(a=1, "a = " & a)
276 Call ok(b=2, "b = " & b)
277 Call ok(c=3, "c = " & c)
278 Call ok(d=4, "d = " & d)
279 Call ok(e=5, "e = " & e)
282 Sub TestSubExit(ByRef a)
286 Call ok(false, "Exit Sub not called?")
289 Call TestSubExit(true)
291 TestSubMultiArgs 1, 2, 3, 4, 5
292 Call TestSubMultiArgs(1, 2, 3, 4, 5)
296 Call ok(not x, "local x is not false?")
303 Call ok(x, "global x is not true?")
305 Public Sub TestPublicSub
309 Private Sub TestPrivateSub
321 Call ok(x, "x is false, testfunc not called?")
323 Function FuncSetTrue(v)
324 Call ok(not v, "v is not true")
330 Call ok(x, "x was not set by FuncSetTrue")
333 Call ok(not false, "false is no longer false?")
335 Function FuncSetTrue2(ByRef v)
336 Call ok(not v, "v is not true")
342 Call ok(x, "x was not set by FuncSetTrue")
344 Function TestFuncArgVal(ByVal v)
345 Call ok(not v, "v is not false")
347 Call ok(v, "v is not true?")
351 Call TestFuncArgVal(x)
352 Call ok(not x, "x is true after TestFuncArgVal call?")
354 Function TestFuncMultiArgs(a,b,c,d,e)
355 Call ok(a=1, "a = " & a)
356 Call ok(b=2, "b = " & b)
357 Call ok(c=3, "c = " & c)
358 Call ok(d=4, "d = " & d)
359 Call ok(e=5, "e = " & e)
362 TestFuncMultiArgs 1, 2, 3, 4, 5
363 Call TestFuncMultiArgs(1, 2, 3, 4, 5)
365 Function TestFuncLocalVal
367 Call ok(not x, "local x is not false?")
373 Call TestFuncLocalVal
374 Call ok(x, "global x is not true?")
376 Function TestFuncExit(ByRef a)
380 Call ok(false, "Exit Function not called?")
383 Call TestFuncExit(true)
390 Call ok(ReturnTrue(), "ReturnTrue returned false?")
392 Function SetVal(ByRef x, ByVal v)
399 ok SetVal(x, true), "SetVal returned false?"
400 Call ok(x, "x is not set to true by SetVal?")
402 Public Function TestPublicFunc
406 Private Function TestPrivateFunc
410 ' Stop has an effect only in debugging mode
414 Call ok(getVT(x) = "VT_DISPATCH*", "getVT(x=testObj) = " & getVT(x))
417 Set obj = New EmptyClass
418 Call ok(getVT(obj) = "VT_DISPATCH*", "getVT(obj) = " & getVT(obj))
428 Public Function publicFunction()
433 Public Property Get gsProp()
435 funcCalled = "gsProp get"
437 Call ok(false, "exit property not returned?")
440 Public Default Property Get DefValGet
441 DefValGet = privateProp
442 funcCalled = "GetDefVal"
445 Public Property Let DefValGet(x)
453 Public Property Let gsProp(val)
455 funcCalled = "gsProp let"
457 Call ok(false, "exit property not returned?")
460 Public Property Set gsProp(val)
461 funcCalled = "gsProp set"
463 Call ok(false, "exit property not returned?")
466 Public Sub setPrivateProp(x)
470 Function getPrivateProp
471 getPrivateProp = privateProp
474 Private Sub privateSub
477 Public Sub Class_Initialize
483 Call testDisp(new testClass)
485 Set obj = New TestClass
487 Call ok(obj.publicFunction = 4, "obj.publicFunction = " & obj.publicFunction)
488 Call ok(obj.publicFunction() = 4, "obj.publicFunction() = " & obj.publicFunction())
492 Call obj.publicFunction()
494 Call ok(getVT(obj.publicProp) = "VT_EMPTY", "getVT(obj.publicProp) = " & getVT(obj.publicProp))
496 Call ok(obj.publicProp = 3, "obj.publicProp = " & obj.publicProp)
499 Call ok(obj.getPrivateProp() = true, "obj.getPrivateProp() = " & obj.getPrivateProp())
500 Call obj.setPrivateProp(6)
501 Call ok(obj.getPrivateProp = 6, "obj.getPrivateProp = " & obj.getPrivateProp)
505 Call ok(obj.gsProp = 6, "obj.gsProp = " & obj.gsProp)
506 Call ok(funcCalled = "gsProp get", "funcCalled = " & funcCalled)
508 Call ok(funcCalled = "gsProp let", "funcCalled = " & funcCalled)
509 Call ok(obj.getPrivateProp = 3, "obj.getPrivateProp = " & obj.getPrivateProp)
510 Set obj.gsProp = New testclass
511 Call ok(funcCalled = "gsProp set", "funcCalled = " & funcCalled)
514 Call ok(x = 3, "(x = obj) = " & x)
515 Call ok(funcCalled = "GetDefVal", "funcCalled = " & funcCalled)
517 Call ok(obj = 3, "(x = obj) = " & obj)
518 Call ok(funcCalled = "GetDefVal", "funcCalled = " & funcCalled)
520 Call obj.Class_Initialize
521 Call ok(obj.getPrivateProp() = true, "obj.getPrivateProp() = " & obj.getPrivateProp())
523 x = (New testclass).publicProp
526 Public Sub Class_Terminate()
527 funcCalled = "terminate"
531 Set obj = New TermTest
534 Call ok(funcCalled = "terminate", "funcCalled = " & funcCalled)
536 Set obj = New TermTest
538 Call obj.Class_Terminate
539 Call ok(funcCalled = "terminate", "funcCalled = " & funcCalled)
542 Call ok(funcCalled = "terminate", "funcCalled = " & funcCalled)