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 and y), "x or y is false after do until")
248 ok false, "exit do didn't work"
259 call ok((x and y), "x or y is false after while")
266 ok false, "exit do didn't work"
276 loop while not (x and y)
277 call ok((x and y), "x or y is false after while")
284 ok false, "exit do didn't work"
295 Call ok(x, "x is false, testsub not called?")
298 Call ok(not v, "v is not true")
304 Call ok(x, "x was not set by SubSetTrue")
307 Call ok(not false, "false is no longer false?")
309 Sub SubSetTrue2(ByRef v)
310 Call ok(not v, "v is not true")
316 Call ok(x, "x was not set by SubSetTrue")
318 Sub TestSubArgVal(ByVal v)
319 Call ok(not v, "v is not false")
321 Call ok(v, "v is not true?")
325 Call TestSubArgVal(x)
326 Call ok(not x, "x is true after TestSubArgVal call?")
328 Sub TestSubMultiArgs(a,b,c,d,e)
329 Call ok(a=1, "a = " & a)
330 Call ok(b=2, "b = " & b)
331 Call ok(c=3, "c = " & c)
332 Call ok(d=4, "d = " & d)
333 Call ok(e=5, "e = " & e)
336 Sub TestSubExit(ByRef a)
340 Call ok(false, "Exit Sub not called?")
343 Call TestSubExit(true)
345 TestSubMultiArgs 1, 2, 3, 4, 5
346 Call TestSubMultiArgs(1, 2, 3, 4, 5)
350 Call ok(not x, "local x is not false?")
357 Call ok(x, "global x is not true?")
359 Public Sub TestPublicSub
363 Private Sub TestPrivateSub
375 Call ok(x, "x is false, testfunc not called?")
377 Function FuncSetTrue(v)
378 Call ok(not v, "v is not true")
384 Call ok(x, "x was not set by FuncSetTrue")
387 Call ok(not false, "false is no longer false?")
389 Function FuncSetTrue2(ByRef v)
390 Call ok(not v, "v is not true")
396 Call ok(x, "x was not set by FuncSetTrue")
398 Function TestFuncArgVal(ByVal v)
399 Call ok(not v, "v is not false")
401 Call ok(v, "v is not true?")
405 Call TestFuncArgVal(x)
406 Call ok(not x, "x is true after TestFuncArgVal call?")
408 Function TestFuncMultiArgs(a,b,c,d,e)
409 Call ok(a=1, "a = " & a)
410 Call ok(b=2, "b = " & b)
411 Call ok(c=3, "c = " & c)
412 Call ok(d=4, "d = " & d)
413 Call ok(e=5, "e = " & e)
416 TestFuncMultiArgs 1, 2, 3, 4, 5
417 Call TestFuncMultiArgs(1, 2, 3, 4, 5)
419 Function TestFuncLocalVal
421 Call ok(not x, "local x is not false?")
427 Call TestFuncLocalVal
428 Call ok(x, "global x is not true?")
430 Function TestFuncExit(ByRef a)
434 Call ok(false, "Exit Function not called?")
437 Call TestFuncExit(true)
444 Call ok(ReturnTrue(), "ReturnTrue returned false?")
446 Function SetVal(ByRef x, ByVal v)
453 ok SetVal(x, true), "SetVal returned false?"
454 Call ok(x, "x is not set to true by SetVal?")
456 Public Function TestPublicFunc
460 Private Function TestPrivateFunc
464 ' Stop has an effect only in debugging mode
468 Call ok(getVT(x) = "VT_DISPATCH*", "getVT(x=testObj) = " & getVT(x))
471 Set obj = New EmptyClass
472 Call ok(getVT(obj) = "VT_DISPATCH*", "getVT(obj) = " & getVT(obj))
482 Public Function publicFunction()
487 Public Property Get gsProp()
489 funcCalled = "gsProp get"
491 Call ok(false, "exit property not returned?")
494 Public Default Property Get DefValGet
495 DefValGet = privateProp
496 funcCalled = "GetDefVal"
499 Public Property Let DefValGet(x)
507 Public Property Let gsProp(val)
509 funcCalled = "gsProp let"
511 Call ok(false, "exit property not returned?")
514 Public Property Set gsProp(val)
515 funcCalled = "gsProp set"
517 Call ok(false, "exit property not returned?")
520 Public Sub setPrivateProp(x)
524 Function getPrivateProp
525 getPrivateProp = privateProp
528 Private Sub privateSub
531 Public Sub Class_Initialize
537 Call testDisp(new testClass)
539 Set obj = New TestClass
541 Call ok(obj.publicFunction = 4, "obj.publicFunction = " & obj.publicFunction)
542 Call ok(obj.publicFunction() = 4, "obj.publicFunction() = " & obj.publicFunction())
546 Call obj.publicFunction()
548 Call ok(getVT(obj.publicProp) = "VT_EMPTY", "getVT(obj.publicProp) = " & getVT(obj.publicProp))
550 Call ok(obj.publicProp = 3, "obj.publicProp = " & obj.publicProp)
553 Call ok(obj.getPrivateProp() = true, "obj.getPrivateProp() = " & obj.getPrivateProp())
554 Call obj.setPrivateProp(6)
555 Call ok(obj.getPrivateProp = 6, "obj.getPrivateProp = " & obj.getPrivateProp)
559 Call ok(obj.gsProp = 6, "obj.gsProp = " & obj.gsProp)
560 Call ok(funcCalled = "gsProp get", "funcCalled = " & funcCalled)
562 Call ok(funcCalled = "gsProp let", "funcCalled = " & funcCalled)
563 Call ok(obj.getPrivateProp = 3, "obj.getPrivateProp = " & obj.getPrivateProp)
564 Set obj.gsProp = New testclass
565 Call ok(funcCalled = "gsProp set", "funcCalled = " & funcCalled)
568 Call ok(x = 3, "(x = obj) = " & x)
569 Call ok(funcCalled = "GetDefVal", "funcCalled = " & funcCalled)
571 Call ok(obj = 3, "(x = obj) = " & obj)
572 Call ok(funcCalled = "GetDefVal", "funcCalled = " & funcCalled)
574 Call obj.Class_Initialize
575 Call ok(obj.getPrivateProp() = true, "obj.getPrivateProp() = " & obj.getPrivateProp())
577 x = (New testclass).publicProp
580 Public Sub Class_Terminate()
581 funcCalled = "terminate"
585 Set obj = New TermTest
588 Call ok(funcCalled = "terminate", "funcCalled = " & funcCalled)
590 Set obj = New TermTest
592 Call obj.Class_Terminate
593 Call ok(funcCalled = "terminate", "funcCalled = " & funcCalled)
596 Call ok(funcCalled = "terminate", "funcCalled = " & funcCalled)