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?")
119 Call ok(2 >= 1, "! 2 >= 1")
120 Call ok(2 >= 2, "! 2 >= 2")
121 Call ok(not(true >= 2), "true >= 2 ?")
122 Call ok(2 > 1, "! 2 > 1")
123 Call ok(false > true, "! false < true")
124 Call ok(0 > true, "! 0 > true")
125 Call ok(not (true > 0), "true > 0")
126 Call ok(not (0 > 1 = 1), "0 > 1 = 1")
129 Call ok(2+2 = 4, "2+2 = " & (2+2))
130 Call ok(false + 6 + true = 5, "false + 6 + true <> 5")
131 Call ok(getVT(2+null) = "VT_NULL", "getVT(2+null) = " & getVT(2+null))
132 Call ok(2+empty = 2, "2+empty = " & (2+empty))
133 Call ok(x+x = 6, "x+x = " & (x+x))
135 Call ok(5-1 = 4, "5-1 = " & (5-1))
136 Call ok(3+5-true = 9, "3+5-true <> 9")
137 Call ok(getVT(2-null) = "VT_NULL", "getVT(2-null) = " & getVT(2-null))
138 Call ok(2-empty = 2, "2-empty = " & (2-empty))
139 Call ok(2-x = -1, "2-x = " & (2-x))
141 Call ok(9 Mod 6 = 3, "9 Mod 6 = " & (9 Mod 6))
142 Call ok(11.6 Mod 5.5 = False, "11.6 Mod 5.5 = " & (11.6 Mod 5.5 = 0.6))
143 Call ok(7 Mod 4+2 = 5, "7 Mod 4+2 <> 5")
144 Call ok(getVT(2 mod null) = "VT_NULL", "getVT(2 mod null) = " & getVT(2 mod null))
145 Call ok(getVT(null mod 2) = "VT_NULL", "getVT(null mod 2) = " & getVT(null mod 2))
146 'FIXME: Call ok(empty mod 2 = 0, "empty mod 2 = " & (empty mod 2))
148 Call ok(5 \ 2 = 2, "5 \ 2 = " & (5\2))
149 Call ok(4.6 \ 1.5 = 2, "4.6 \ 1.5 = " & (4.6\1.5))
150 Call ok(4.6 \ 1.49 = 5, "4.6 \ 1.49 = " & (4.6\1.49))
151 Call ok(2+3\4 = 2, "2+3\4 = " & (2+3\4))
153 Call ok(2*3 = 6, "2*3 = " & (2*3))
154 Call ok(3/2 = 1.5, "3/2 = " & (3/2))
155 Call ok(5\4/2 = 2, "5\4/2 = " & (5\2/1))
156 Call ok(12/3\2 = 2, "12/3\2 = " & (12/3\2))
158 Call ok(2^3 = 8, "2^3 = " & (2^3))
159 Call ok(2^3^2 = 64, "2^3^2 = " & (2^3^2))
160 Call ok(-3^2 = 9, "-3^2 = " & (-3^2))
161 Call ok(2*3^2 = 18, "2*3^2 = " & (2*3^2))
164 ok false, "if false called"
171 Call ok(not x, "x is false, if not evaluated?")
175 Call ok(false, "inside if false")
179 Call ok(x, "else not called?")
183 Call ok(false, "inside if false")
185 Call ok(false, "inside elseif not true")
189 Call ok(x, "else not called?")
193 Call ok(false, "inside if false")
196 ElseIf not False Then
199 Call ok(false, "inside else not true")
201 Call ok(x, "elseif not called?")
205 Call ok(false, "inside if false")
206 ElseIf not False Then
209 Call ok(x, "elseif not called?")
219 call ok((x and y), "x or y is false after while")
226 do while not (x and y)
232 call ok((x and y), "x or y is false after while")
239 ok false, "exit do didn't work"
250 call ok((x and y), "x or y is false after do until")
257 ok false, "exit do didn't work"
268 call ok((x and y), "x or y is false after while")
275 ok false, "exit do didn't work"
285 loop while not (x and y)
286 call ok((x and y), "x or y is false after while")
293 ok false, "exit do didn't work"
304 Call ok(x, "x is false, testsub not called?")
307 Call ok(not v, "v is not true")
313 Call ok(x, "x was not set by SubSetTrue")
316 Call ok(not false, "false is no longer false?")
318 Sub SubSetTrue2(ByRef v)
319 Call ok(not v, "v is not true")
325 Call ok(x, "x was not set by SubSetTrue")
327 Sub TestSubArgVal(ByVal v)
328 Call ok(not v, "v is not false")
330 Call ok(v, "v is not true?")
334 Call TestSubArgVal(x)
335 Call ok(not x, "x is true after TestSubArgVal call?")
337 Sub TestSubMultiArgs(a,b,c,d,e)
338 Call ok(a=1, "a = " & a)
339 Call ok(b=2, "b = " & b)
340 Call ok(c=3, "c = " & c)
341 Call ok(d=4, "d = " & d)
342 Call ok(e=5, "e = " & e)
345 Sub TestSubExit(ByRef a)
349 Call ok(false, "Exit Sub not called?")
352 Call TestSubExit(true)
354 TestSubMultiArgs 1, 2, 3, 4, 5
355 Call TestSubMultiArgs(1, 2, 3, 4, 5)
359 Call ok(not x, "local x is not false?")
366 Call ok(x, "global x is not true?")
368 Public Sub TestPublicSub
372 Private Sub TestPrivateSub
384 Call ok(x, "x is false, testfunc not called?")
386 Function FuncSetTrue(v)
387 Call ok(not v, "v is not true")
393 Call ok(x, "x was not set by FuncSetTrue")
396 Call ok(not false, "false is no longer false?")
398 Function FuncSetTrue2(ByRef v)
399 Call ok(not v, "v is not true")
405 Call ok(x, "x was not set by FuncSetTrue")
407 Function TestFuncArgVal(ByVal v)
408 Call ok(not v, "v is not false")
410 Call ok(v, "v is not true?")
414 Call TestFuncArgVal(x)
415 Call ok(not x, "x is true after TestFuncArgVal call?")
417 Function TestFuncMultiArgs(a,b,c,d,e)
418 Call ok(a=1, "a = " & a)
419 Call ok(b=2, "b = " & b)
420 Call ok(c=3, "c = " & c)
421 Call ok(d=4, "d = " & d)
422 Call ok(e=5, "e = " & e)
425 TestFuncMultiArgs 1, 2, 3, 4, 5
426 Call TestFuncMultiArgs(1, 2, 3, 4, 5)
428 Function TestFuncLocalVal
430 Call ok(not x, "local x is not false?")
436 Call TestFuncLocalVal
437 Call ok(x, "global x is not true?")
439 Function TestFuncExit(ByRef a)
443 Call ok(false, "Exit Function not called?")
446 Call TestFuncExit(true)
453 Call ok(ReturnTrue(), "ReturnTrue returned false?")
455 Function SetVal(ByRef x, ByVal v)
462 ok SetVal(x, true), "SetVal returned false?"
463 Call ok(x, "x is not set to true by SetVal?")
465 Public Function TestPublicFunc
469 Private Function TestPrivateFunc
473 ' Stop has an effect only in debugging mode
477 Call ok(getVT(x) = "VT_DISPATCH*", "getVT(x=testObj) = " & getVT(x))
480 Set obj = New EmptyClass
481 Call ok(getVT(obj) = "VT_DISPATCH*", "getVT(obj) = " & getVT(obj))
491 Public Function publicFunction()
496 Public Property Get gsProp()
498 funcCalled = "gsProp get"
500 Call ok(false, "exit property not returned?")
503 Public Default Property Get DefValGet
504 DefValGet = privateProp
505 funcCalled = "GetDefVal"
508 Public Property Let DefValGet(x)
516 Public Property Let gsProp(val)
518 funcCalled = "gsProp let"
520 Call ok(false, "exit property not returned?")
523 Public Property Set gsProp(val)
524 funcCalled = "gsProp set"
526 Call ok(false, "exit property not returned?")
529 Public Sub setPrivateProp(x)
533 Function getPrivateProp
534 getPrivateProp = privateProp
537 Private Sub privateSub
540 Public Sub Class_Initialize
546 Call testDisp(new testClass)
548 Set obj = New TestClass
550 Call ok(obj.publicFunction = 4, "obj.publicFunction = " & obj.publicFunction)
551 Call ok(obj.publicFunction() = 4, "obj.publicFunction() = " & obj.publicFunction())
555 Call obj.publicFunction()
557 Call ok(getVT(obj.publicProp) = "VT_EMPTY", "getVT(obj.publicProp) = " & getVT(obj.publicProp))
559 Call ok(obj.publicProp = 3, "obj.publicProp = " & obj.publicProp)
562 Call ok(obj.getPrivateProp() = true, "obj.getPrivateProp() = " & obj.getPrivateProp())
563 Call obj.setPrivateProp(6)
564 Call ok(obj.getPrivateProp = 6, "obj.getPrivateProp = " & obj.getPrivateProp)
568 Call ok(obj.gsProp = 6, "obj.gsProp = " & obj.gsProp)
569 Call ok(funcCalled = "gsProp get", "funcCalled = " & funcCalled)
571 Call ok(funcCalled = "gsProp let", "funcCalled = " & funcCalled)
572 Call ok(obj.getPrivateProp = 3, "obj.getPrivateProp = " & obj.getPrivateProp)
573 Set obj.gsProp = New testclass
574 Call ok(funcCalled = "gsProp set", "funcCalled = " & funcCalled)
577 Call ok(x = 3, "(x = obj) = " & x)
578 Call ok(funcCalled = "GetDefVal", "funcCalled = " & funcCalled)
580 Call ok(obj = 3, "(x = obj) = " & obj)
581 Call ok(funcCalled = "GetDefVal", "funcCalled = " & funcCalled)
583 Call obj.Class_Initialize
584 Call ok(obj.getPrivateProp() = true, "obj.getPrivateProp() = " & obj.getPrivateProp())
586 x = (New testclass).publicProp
589 Public Sub Class_Terminate()
590 funcCalled = "terminate"
594 Set obj = New TermTest
597 Call ok(funcCalled = "terminate", "funcCalled = " & funcCalled)
599 Set obj = New TermTest
601 Call obj.Class_Terminate
602 Call ok(funcCalled = "terminate", "funcCalled = " & funcCalled)
605 Call ok(funcCalled = "terminate", "funcCalled = " & funcCalled)