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")
127 Call ok(1 < 2, "! 1 < 2")
128 Call ok(1 = 1 < 0, "! 1 = 1 < 0")
129 Call ok(1 <= 2, "! 1 <= 2")
130 Call ok(2 <= 2, "! 2 <= 2")
133 Call ok(2+2 = 4, "2+2 = " & (2+2))
134 Call ok(false + 6 + true = 5, "false + 6 + true <> 5")
135 Call ok(getVT(2+null
) = "VT_NULL", "getVT(2+null) = " & getVT(2+null
))
136 Call ok(2+empty
= 2, "2+empty = " & (2+empty
))
137 Call ok(x
+x
= 6, "x+x = " & (x
+x
))
139 Call ok(5-1 = 4, "5-1 = " & (5-1))
140 Call ok(3+5-true = 9, "3+5-true <> 9")
141 Call ok(getVT(2-null
) = "VT_NULL", "getVT(2-null) = " & getVT(2-null
))
142 Call ok(2-empty
= 2, "2-empty = " & (2-empty
))
143 Call ok(2-x
= -1, "2-x = " & (2-x
))
145 Call ok(9 Mod
6 = 3, "9 Mod 6 = " & (9 Mod
6))
146 Call ok(11.6 Mod
5.5 = False, "11.6 Mod 5.5 = " & (11.6 Mod
5.5 = 0.6))
147 Call ok(7 Mod
4+2 = 5, "7 Mod 4+2 <> 5")
148 Call ok(getVT(2 mod null
) = "VT_NULL", "getVT(2 mod null) = " & getVT(2 mod null
))
149 Call ok(getVT(null mod
2) = "VT_NULL", "getVT(null mod 2) = " & getVT(null mod
2))
150 'FIXME: Call ok(empty mod 2 = 0, "empty mod 2 = " & (empty mod 2))
152 Call ok(5 \
2 = 2, "5 \ 2 = " & (5\
2))
153 Call ok(4.6 \
1.5 = 2, "4.6 \ 1.5 = " & (4.6\
1.5))
154 Call ok(4.6 \
1.49 = 5, "4.6 \ 1.49 = " & (4.6\
1.49))
155 Call ok(2+3\
4 = 2, "2+3\4 = " & (2+3\
4))
157 Call ok(2*3 = 6, "2*3 = " & (2*3))
158 Call ok(3/2 = 1.5, "3/2 = " & (3/2))
159 Call ok(5\
4/2 = 2, "5\4/2 = " & (5\
2/1))
160 Call ok(12/3\
2 = 2, "12/3\2 = " & (12/3\
2))
162 Call ok(2^
3 = 8, "2^3 = " & (2^
3))
163 Call ok(2^
3^
2 = 64, "2^3^2 = " & (2^
3^
2))
164 Call ok(-3^
2 = 9, "-3^2 = " & (-3^
2))
165 Call ok(2*3^
2 = 18, "2*3^2 = " & (2*3^
2))
167 if true then y
= true : x
= y
170 x
= true : if false then x
= false
171 ok x
, "x is false, if false called?"
173 if not false then x
= true
174 ok x
, "x is false, if not false not called?"
176 if not false then x
= "test" : x
= true
177 ok x
, "x is false, if not false not called?"
179 if false then x
= y
: call ok(false, "if false .. : called")
181 if false then x
= y
: call ok(false, "if false .. : called") else x
= "else"
182 Call ok(x
= "else", "else not called?")
184 if true then x
= y
else y
= x
: Call ok(false, "in else?")
188 if false then x
= y
: if true then call ok(false, "embedded if called")
191 ok
false, "if false called"
198 Call ok(not x
, "x is false, if not evaluated?")
202 Call ok(false, "inside if false")
206 Call ok(x
, "else not called?")
210 Call ok(false, "inside if false")
212 Call ok(false, "inside elseif not true")
216 Call ok(x
, "else not called?")
220 Call ok(false, "inside if false")
223 ElseIf not False Then
226 Call ok(false, "inside else not true")
228 Call ok(x
, "elseif not called?")
232 Call ok(false, "inside if false")
233 ElseIf not False Then
236 Call ok(x
, "elseif not called?")
246 call ok((x
and y
), "x or y is false after while")
253 do while not (x
and y
)
259 call ok((x
and y
), "x or y is false after while")
266 ok
false, "exit do didn't work"
277 call ok((x
and y
), "x or y is false after do until")
284 ok
false, "exit do didn't work"
295 call ok((x
and y
), "x or y is false after while")
302 ok
false, "exit do didn't work"
312 loop while not (x
and y
)
313 call ok((x
and y
), "x or y is false after while")
320 ok
false, "exit do didn't work"
331 Call ok(x
, "x is false, testsub not called?")
334 Call ok(not v
, "v is not true")
340 Call ok(x
, "x was not set by SubSetTrue")
343 Call ok(not false, "false is no longer false?")
345 Sub SubSetTrue2(ByRef v
)
346 Call ok(not v
, "v is not true")
352 Call ok(x
, "x was not set by SubSetTrue")
354 Sub TestSubArgVal(ByVal v
)
355 Call ok(not v
, "v is not false")
357 Call ok(v
, "v is not true?")
361 Call TestSubArgVal(x
)
362 Call ok(not x
, "x is true after TestSubArgVal call?")
364 Sub TestSubMultiArgs(a
,b
,c
,d
,e
)
365 Call ok(a
=1, "a = " & a
)
366 Call ok(b
=2, "b = " & b
)
367 Call ok(c
=3, "c = " & c
)
368 Call ok(d
=4, "d = " & d
)
369 Call ok(e
=5, "e = " & e
)
372 Sub TestSubExit(ByRef a
)
376 Call ok(false, "Exit Sub not called?")
379 Call TestSubExit(true)
381 TestSubMultiArgs
1, 2, 3, 4, 5
382 Call TestSubMultiArgs(1, 2, 3, 4, 5)
386 Call ok(not x
, "local x is not false?")
393 Call ok(x
, "global x is not true?")
395 Public Sub TestPublicSub
399 Private Sub TestPrivateSub
411 Call ok(x
, "x is false, testfunc not called?")
413 Function FuncSetTrue(v
)
414 Call ok(not v
, "v is not true")
420 Call ok(x
, "x was not set by FuncSetTrue")
423 Call ok(not false, "false is no longer false?")
425 Function FuncSetTrue2(ByRef v
)
426 Call ok(not v
, "v is not true")
432 Call ok(x
, "x was not set by FuncSetTrue")
434 Function TestFuncArgVal(ByVal v
)
435 Call ok(not v
, "v is not false")
437 Call ok(v
, "v is not true?")
441 Call TestFuncArgVal(x
)
442 Call ok(not x
, "x is true after TestFuncArgVal call?")
444 Function TestFuncMultiArgs(a
,b
,c
,d
,e
)
445 Call ok(a
=1, "a = " & a
)
446 Call ok(b
=2, "b = " & b
)
447 Call ok(c
=3, "c = " & c
)
448 Call ok(d
=4, "d = " & d
)
449 Call ok(e
=5, "e = " & e
)
452 TestFuncMultiArgs
1, 2, 3, 4, 5
453 Call TestFuncMultiArgs(1, 2, 3, 4, 5)
455 Function TestFuncLocalVal
457 Call ok(not x
, "local x is not false?")
463 Call TestFuncLocalVal
464 Call ok(x
, "global x is not true?")
466 Function TestFuncExit(ByRef a
)
470 Call ok(false, "Exit Function not called?")
473 Call TestFuncExit(true)
480 Call ok(ReturnTrue(), "ReturnTrue returned false?")
482 Function SetVal(ByRef x
, ByVal v
)
489 ok
SetVal(x
, true), "SetVal returned false?"
490 Call ok(x
, "x is not set to true by SetVal?")
492 Public Function TestPublicFunc
496 Private Function TestPrivateFunc
500 ' Stop has an effect only in debugging mode
504 Call ok(getVT(x
) = "VT_DISPATCH*", "getVT(x=testObj) = " & getVT(x
))
507 Set obj
= New EmptyClass
508 Call ok(getVT(obj
) = "VT_DISPATCH*", "getVT(obj) = " & getVT(obj
))
518 Public Function publicFunction()
523 Public Property Get gsProp()
525 funcCalled
= "gsProp get"
527 Call ok(false, "exit property not returned?")
530 Public Default
Property Get DefValGet
531 DefValGet
= privateProp
532 funcCalled
= "GetDefVal"
535 Public Property Let DefValGet(x
)
543 Public Property Let gsProp(val
)
545 funcCalled
= "gsProp let"
547 Call ok(false, "exit property not returned?")
550 Public Property Set gsProp(val
)
551 funcCalled
= "gsProp set"
553 Call ok(false, "exit property not returned?")
556 Public Sub setPrivateProp(x
)
560 Function getPrivateProp
561 getPrivateProp
= privateProp
564 Private Sub privateSub
567 Public Sub Class_Initialize
573 Call testDisp(new testClass
)
575 Set obj
= New TestClass
577 Call ok(obj
.publicFunction
= 4, "obj.publicFunction = " & obj
.publicFunction
)
578 Call ok(obj
.publicFunction() = 4, "obj.publicFunction() = " & obj
.publicFunction())
582 Call obj
.publicFunction()
584 Call ok(getVT(obj
.publicProp
) = "VT_EMPTY", "getVT(obj.publicProp) = " & getVT(obj
.publicProp
))
586 Call ok(obj
.publicProp
= 3, "obj.publicProp = " & obj
.publicProp
)
589 Call ok(obj
.getPrivateProp() = true, "obj.getPrivateProp() = " & obj
.getPrivateProp())
590 Call obj
.setPrivateProp(6)
591 Call ok(obj
.getPrivateProp
= 6, "obj.getPrivateProp = " & obj
.getPrivateProp
)
595 Call ok(obj
.gsProp
= 6, "obj.gsProp = " & obj
.gsProp
)
596 Call ok(funcCalled
= "gsProp get", "funcCalled = " & funcCalled
)
598 Call ok(funcCalled
= "gsProp let", "funcCalled = " & funcCalled
)
599 Call ok(obj
.getPrivateProp
= 3, "obj.getPrivateProp = " & obj
.getPrivateProp
)
600 Set obj
.gsProp
= New testclass
601 Call ok(funcCalled
= "gsProp set", "funcCalled = " & funcCalled
)
604 Call ok(x
= 3, "(x = obj) = " & x
)
605 Call ok(funcCalled
= "GetDefVal", "funcCalled = " & funcCalled
)
607 Call ok(obj
= 3, "(x = obj) = " & obj
)
608 Call ok(funcCalled
= "GetDefVal", "funcCalled = " & funcCalled
)
610 Call obj
.Class_Initialize
611 Call ok(obj
.getPrivateProp() = true, "obj.getPrivateProp() = " & obj
.getPrivateProp())
613 x
= (New testclass
).publicProp
616 Public Sub Class_Terminate()
617 funcCalled
= "terminate"
621 Set obj
= New TermTest
624 Call ok(funcCalled
= "terminate", "funcCalled = " & funcCalled
)
626 Set obj
= New TermTest
628 Call obj
.Class_Terminate
629 Call ok(funcCalled
= "terminate", "funcCalled = " & funcCalled
)
632 Call ok(funcCalled
= "terminate", "funcCalled = " & funcCalled
)
634 x
= "following ':' is correct syntax" :
635 x
= "following ':' is correct syntax" :: :
636 :: x
= "also correct syntax"
637 rem another ugly way for comments
638 x
= "rem as simplestatement" : rem rem comment
641 Set obj
= new EmptyClass
643 Set y
= new EmptyClass
645 Call ok(obj is x
, "obj is not x")
646 Call ok(x is obj
, "x is not obj")
647 Call ok(not (obj is y
), "obj is not y")
648 Call ok(not obj is y
, "obj is not y")
649 Call ok(not (x is
Nothing), "x is 1")
650 Call ok(Nothing is
Nothing, "Nothing is not Nothing")
651 Call ok(x is obj
and true, "x is obj and true is false")
654 Public Sub Test(MyMe
)
655 Call ok(Me is MyMe
, "Me is not MyMe")
662 Call ok(getVT(test
) = "VT_DISPATCH", "getVT(test) = " & getVT(test
))
663 Call ok(Me is Test
, "Me is not Test")