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
))
44 Call ok(true = -1, "! true = -1")
45 Call ok(false = 0, "false <> 0")
48 Call ok(x
= "xx", "x = " & x
& " expected ""xx""")
50 Call ok(true <> false, "true <> false is false")
51 Call ok(not (true <> true), "true <> true is true")
52 Call ok(not ("x" <> "x"), """x"" <> ""x"" is true")
53 Call ok(not (empty
<> empty
), "empty <> empty is true")
54 Call ok(x
<> "x", "x = ""x""")
55 Call ok("true" <> true, """true"" = true is true")
57 Call ok("" = true = false, """"" = true = false is false")
58 Call ok(not(false = true = ""), "false = true = """" is true")
59 Call ok(not (false = false <> false = false), "false = false <> false = false is true")
60 Call ok(not ("" <> false = false), """"" <> false = false is true")
62 Call ok(getVT(false) = "VT_BOOL", "getVT(false) is not VT_BOOL")
63 Call ok(getVT(true) = "VT_BOOL", "getVT(true) is not VT_BOOL")
64 Call ok(getVT("") = "VT_BSTR", "getVT("""") is not VT_BSTR")
65 Call ok(getVT("test") = "VT_BSTR", "getVT(""test"") is not VT_BSTR")
66 Call ok(getVT(Empty
) = "VT_EMPTY", "getVT(Empty) is not VT_EMPTY")
67 Call ok(getVT(null
) = "VT_NULL", "getVT(null) is not VT_NULL")
68 Call ok(getVT(0) = "VT_I2", "getVT(0) is not VT_I2")
69 Call ok(getVT(1) = "VT_I2", "getVT(1) is not VT_I2")
70 Call ok(getVT(0.5) = "VT_R8", "getVT(0.5) is not VT_R8")
71 Call ok(getVT(0.0) = "VT_R8", "getVT(0.0) is not VT_R8")
72 Call ok(getVT(2147483647) = "VT_I4", "getVT(2147483647) is not VT_I4")
73 Call ok(getVT(2147483648) = "VT_R8", "getVT(2147483648) is not VT_R8")
74 Call ok(getVT(&h10
&) = "VT_I2", "getVT(&h10&) is not VT_I2")
75 Call ok(getVT(&h10000
&) = "VT_I4", "getVT(&h10000&) is not VT_I4")
76 Call ok(getVT(&H10000
&) = "VT_I4", "getVT(&H10000&) is not VT_I4")
77 Call ok(getVT(&hffFFffFF
&) = "VT_I2", "getVT(&hffFFffFF&) is not VT_I2")
78 Call ok(getVT(1 & 100000) = "VT_BSTR", "getVT(1 & 100000) is not VT_BSTR")
79 Call ok(getVT(-empty
) = "VT_I2", "getVT(-empty) = " & getVT(-empty
))
80 Call ok(getVT(-null
) = "VT_NULL", "getVT(-null) = " & getVT(-null
))
81 Call ok(getVT(y
) = "VT_EMPTY*", "getVT(y) = " & getVT(y
))
82 Call ok(getVT(nothing) = "VT_DISPATCH", "getVT(nothing) = " & getVT(nothing))
84 Call ok(getVT(x
) = "VT_DISPATCH*", "getVT(x=nothing) = " & getVT(x
))
86 Call ok(getVT(x
) = "VT_BOOL*", "getVT(x) = " & getVT(x
))
87 Call ok(getVT(false or true) = "VT_BOOL", "getVT(false) is not VT_BOOL")
89 Call ok(getVT(x
) = "VT_BSTR*", "getVT(x) is not VT_BSTR*")
91 Call ok(getVT(x
) = "VT_R8*", "getVT(x) = " & getVT(x
))
93 Call ok(isNullDisp(nothing), "nothing is not nulldisp?")
96 Call ok("ab" & "cd" = "abcd", """ab"" & ""cd"" <> ""abcd""")
97 Call ok("ab " & null
= "ab ", """ab"" & null = " & ("ab " & null
))
98 Call ok("ab " & empty
= "ab ", """ab"" & empty = " & ("ab " & empty
))
99 Call ok(1 & 100000 = "1100000", "1 & 100000 = " & (1 & 100000))
100 Call ok("ab" & x
= "abxx", """ab"" & x = " & ("ab"&x
))
102 if(isEnglishLang
) then
103 Call ok("" & true = "True", """"" & true = " & true)
104 Call ok(true & false = "TrueFalse", "true & false = " & (true & false))
107 call ok(true and true, "true and true is not true")
108 call ok(true and not false, "true and not false is not true")
109 call ok(not (false and true), "not (false and true) is not true")
110 call ok(getVT(null
and true) = "VT_NULL", "getVT(null and true) = " & getVT(null
and true))
112 call ok(false or true, "false or uie is false?")
113 call ok(not (false or false), "false or false is not false?")
114 call ok(false and false or true, "false and false or true is false?")
115 call ok(true or false and false, "true or false and false is false?")
116 call ok(null
or true, "null or true is false")
118 call ok(true xor
false, "true xor false is false?")
119 call ok(not (false xor
false), "false xor false is true?")
120 call ok(not (true or false xor
true), "true or false xor true is true?")
121 call ok(not (true xor
false or true), "true xor false or true is true?")
123 call ok(false eqv
false, "false does not equal false?")
124 call ok(not (false eqv
true), "false equals true?")
125 call ok(getVT(false eqv null
) = "VT_NULL", "getVT(false eqv null) = " & getVT(false eqv null
))
127 call ok(true imp
true, "true does not imp true?")
128 call ok(false imp
false, "false does not imp false?")
129 call ok(not (true imp
false), "true imp false?")
130 call ok(false imp null
, "false imp null is false?")
132 Call ok(2 >= 1, "! 2 >= 1")
133 Call ok(2 >= 2, "! 2 >= 2")
134 Call ok(not(true >= 2), "true >= 2 ?")
135 Call ok(2 > 1, "! 2 > 1")
136 Call ok(false > true, "! false < true")
137 Call ok(0 > true, "! 0 > true")
138 Call ok(not (true > 0), "true > 0")
139 Call ok(not (0 > 1 = 1), "0 > 1 = 1")
140 Call ok(1 < 2, "! 1 < 2")
141 Call ok(1 = 1 < 0, "! 1 = 1 < 0")
142 Call ok(1 <= 2, "! 1 <= 2")
143 Call ok(2 <= 2, "! 2 <= 2")
146 Call ok(2+2 = 4, "2+2 = " & (2+2))
147 Call ok(false + 6 + true = 5, "false + 6 + true <> 5")
148 Call ok(getVT(2+null
) = "VT_NULL", "getVT(2+null) = " & getVT(2+null
))
149 Call ok(2+empty
= 2, "2+empty = " & (2+empty
))
150 Call ok(x
+x
= 6, "x+x = " & (x
+x
))
152 Call ok(5-1 = 4, "5-1 = " & (5-1))
153 Call ok(3+5-true = 9, "3+5-true <> 9")
154 Call ok(getVT(2-null
) = "VT_NULL", "getVT(2-null) = " & getVT(2-null
))
155 Call ok(2-empty
= 2, "2-empty = " & (2-empty
))
156 Call ok(2-x
= -1, "2-x = " & (2-x
))
158 Call ok(9 Mod
6 = 3, "9 Mod 6 = " & (9 Mod
6))
159 Call ok(11.6 Mod
5.5 = False, "11.6 Mod 5.5 = " & (11.6 Mod
5.5 = 0.6))
160 Call ok(7 Mod
4+2 = 5, "7 Mod 4+2 <> 5")
161 Call ok(getVT(2 mod null
) = "VT_NULL", "getVT(2 mod null) = " & getVT(2 mod null
))
162 Call ok(getVT(null mod
2) = "VT_NULL", "getVT(null mod 2) = " & getVT(null mod
2))
163 'FIXME: Call ok(empty mod 2 = 0, "empty mod 2 = " & (empty mod 2))
165 Call ok(5 \
2 = 2, "5 \ 2 = " & (5\
2))
166 Call ok(4.6 \
1.5 = 2, "4.6 \ 1.5 = " & (4.6\
1.5))
167 Call ok(4.6 \
1.49 = 5, "4.6 \ 1.49 = " & (4.6\
1.49))
168 Call ok(2+3\
4 = 2, "2+3\4 = " & (2+3\
4))
170 Call ok(2*3 = 6, "2*3 = " & (2*3))
171 Call ok(3/2 = 1.5, "3/2 = " & (3/2))
172 Call ok(5\
4/2 = 2, "5\4/2 = " & (5\
2/1))
173 Call ok(12/3\
2 = 2, "12/3\2 = " & (12/3\
2))
175 Call ok(2^
3 = 8, "2^3 = " & (2^
3))
176 Call ok(2^
3^
2 = 64, "2^3^2 = " & (2^
3^
2))
177 Call ok(-3^
2 = 9, "-3^2 = " & (-3^
2))
178 Call ok(2*3^
2 = 18, "2*3^2 = " & (2*3^
2))
180 if true then y
= true : x
= y
183 x
= true : if false then x
= false
184 ok x
, "x is false, if false called?"
186 if not false then x
= true
187 ok x
, "x is false, if not false not called?"
189 if not false then x
= "test" : x
= true
190 ok x
, "x is false, if not false not called?"
192 if false then x
= y
: call ok(false, "if false .. : called")
194 if false then x
= y
: call ok(false, "if false .. : called") else x
= "else"
195 Call ok(x
= "else", "else not called?")
197 if true then x
= y
else y
= x
: Call ok(false, "in else?")
201 if false then x
= y
: if true then call ok(false, "embedded if called")
204 ok
false, "if false called"
211 Call ok(not x
, "x is false, if not evaluated?")
215 Call ok(false, "inside if false")
219 Call ok(x
, "else not called?")
223 Call ok(false, "inside if false")
225 Call ok(false, "inside elseif not true")
229 Call ok(x
, "else not called?")
233 Call ok(false, "inside if false")
236 ElseIf not False Then
239 Call ok(false, "inside else not true")
241 Call ok(x
, "elseif not called?")
245 Call ok(false, "inside if false")
246 ElseIf not False Then
249 Call ok(x
, "elseif not called?")
259 call ok((x
and y
), "x or y is false after while")
266 do while not (x
and y
)
272 call ok((x
and y
), "x or y is false after while")
279 ok
false, "exit do didn't work"
290 call ok((x
and y
), "x or y is false after do until")
297 ok
false, "exit do didn't work"
308 call ok((x
and y
), "x or y is false after while")
315 ok
false, "exit do didn't work"
325 loop while not (x
and y
)
326 call ok((x
and y
), "x or y is false after while")
333 ok
false, "exit do didn't work"
340 Call ok(y
= "for1: 5 6 7 8", "y = " & y
)
343 for x
= 5 to 8 step
2
346 Call ok(y
= "for2: 5 7", "y = " & y
)
353 Call ok(y
= "for3: 5 6 7 8", "y = " & y
)
359 Call ok(y
= "for4:", "y = " & y
)
362 for x
= 5 to 3 step
true
365 Call ok(y
= "for5: 5 4 3", "y = " & y
)
369 for x
= 5 to z step
3-4
373 Call ok(y
= "for6: 5 4", "y = " & y
)
377 for x
= 5 to 8 step z
381 Call ok(y
= "for7: 5 6 7 8", "y = " & y
)
388 Call ok(y
= "for8: 5 7", "y = " & y
)
391 Call ok(false, "for..to called when unexpected")
396 Call ok(false, "exit for not escaped the loop?")
407 Call ok(x
, "x is false, testsub not called?")
410 Call ok(not v
, "v is not true")
416 Call ok(x
, "x was not set by SubSetTrue")
419 Call ok(not false, "false is no longer false?")
421 Sub SubSetTrue2(ByRef v
)
422 Call ok(not v
, "v is not true")
428 Call ok(x
, "x was not set by SubSetTrue")
430 Sub TestSubArgVal(ByVal v
)
431 Call ok(not v
, "v is not false")
433 Call ok(v
, "v is not true?")
437 Call TestSubArgVal(x
)
438 Call ok(not x
, "x is true after TestSubArgVal call?")
440 Sub TestSubMultiArgs(a
,b
,c
,d
,e
)
441 Call ok(a
=1, "a = " & a
)
442 Call ok(b
=2, "b = " & b
)
443 Call ok(c
=3, "c = " & c
)
444 Call ok(d
=4, "d = " & d
)
445 Call ok(e
=5, "e = " & e
)
448 Sub TestSubExit(ByRef a
)
452 Call ok(false, "Exit Sub not called?")
455 Call TestSubExit(true)
457 TestSubMultiArgs
1, 2, 3, 4, 5
458 Call TestSubMultiArgs(1, 2, 3, 4, 5)
462 Call ok(not x
, "local x is not false?")
469 Call ok(x
, "global x is not true?")
471 Public Sub TestPublicSub
475 Private Sub TestPrivateSub
487 Call ok(x
, "x is false, testfunc not called?")
489 Function FuncSetTrue(v
)
490 Call ok(not v
, "v is not true")
496 Call ok(x
, "x was not set by FuncSetTrue")
499 Call ok(not false, "false is no longer false?")
501 Function FuncSetTrue2(ByRef v
)
502 Call ok(not v
, "v is not true")
508 Call ok(x
, "x was not set by FuncSetTrue")
510 Function TestFuncArgVal(ByVal v
)
511 Call ok(not v
, "v is not false")
513 Call ok(v
, "v is not true?")
517 Call TestFuncArgVal(x
)
518 Call ok(not x
, "x is true after TestFuncArgVal call?")
520 Function TestFuncMultiArgs(a
,b
,c
,d
,e
)
521 Call ok(a
=1, "a = " & a
)
522 Call ok(b
=2, "b = " & b
)
523 Call ok(c
=3, "c = " & c
)
524 Call ok(d
=4, "d = " & d
)
525 Call ok(e
=5, "e = " & e
)
528 TestFuncMultiArgs
1, 2, 3, 4, 5
529 Call TestFuncMultiArgs(1, 2, 3, 4, 5)
531 Function TestFuncLocalVal
533 Call ok(not x
, "local x is not false?")
539 Call TestFuncLocalVal
540 Call ok(x
, "global x is not true?")
542 Function TestFuncExit(ByRef a
)
546 Call ok(false, "Exit Function not called?")
549 Call TestFuncExit(true)
555 Function FuncParseTest
556 End Function : x
= false
563 Call ok(ReturnTrue(), "ReturnTrue returned false?")
565 Function SetVal(ByRef x
, ByVal v
)
572 ok
SetVal(x
, true), "SetVal returned false?"
573 Call ok(x
, "x is not set to true by SetVal?")
575 Public Function TestPublicFunc
579 Private Function TestPrivateFunc
583 ' Stop has an effect only in debugging mode
587 Call ok(getVT(x
) = "VT_DISPATCH*", "getVT(x=testObj) = " & getVT(x
))
590 Set obj
= New EmptyClass
591 Call ok(getVT(obj
) = "VT_DISPATCH*", "getVT(obj) = " & getVT(obj
))
597 Call ok(getVT(x
) = "VT_DISPATCH*", "getVT(x) = " & getVT(x
))
604 Public Function publicFunction()
609 Public Property Get gsProp()
611 funcCalled
= "gsProp get"
613 Call ok(false, "exit property not returned?")
616 Public Default
Property Get DefValGet
617 DefValGet
= privateProp
618 funcCalled
= "GetDefVal"
621 Public Property Let DefValGet(x
)
629 Public Property Let gsProp(val
)
631 funcCalled
= "gsProp let"
633 Call ok(false, "exit property not returned?")
636 Public Property Set gsProp(val
)
637 funcCalled
= "gsProp set"
639 Call ok(false, "exit property not returned?")
642 Public Sub setPrivateProp(x
)
646 Function getPrivateProp
647 getPrivateProp
= privateProp
650 Private Sub privateSub
653 Public Sub Class_Initialize
659 Call testDisp(new testClass
)
661 Set obj
= New TestClass
663 Call ok(obj
.publicFunction
= 4, "obj.publicFunction = " & obj
.publicFunction
)
664 Call ok(obj
.publicFunction() = 4, "obj.publicFunction() = " & obj
.publicFunction())
668 Call obj
.publicFunction()
670 Call ok(getVT(obj
.publicProp
) = "VT_EMPTY", "getVT(obj.publicProp) = " & getVT(obj
.publicProp
))
672 Call ok(obj
.publicProp
= 3, "obj.publicProp = " & obj
.publicProp
)
675 Call ok(obj
.getPrivateProp() = true, "obj.getPrivateProp() = " & obj
.getPrivateProp())
676 Call obj
.setPrivateProp(6)
677 Call ok(obj
.getPrivateProp
= 6, "obj.getPrivateProp = " & obj
.getPrivateProp
)
681 Call ok(obj
.gsProp
= 6, "obj.gsProp = " & obj
.gsProp
)
682 Call ok(funcCalled
= "gsProp get", "funcCalled = " & funcCalled
)
684 Call ok(funcCalled
= "gsProp let", "funcCalled = " & funcCalled
)
685 Call ok(obj
.getPrivateProp
= 3, "obj.getPrivateProp = " & obj
.getPrivateProp
)
686 Set obj
.gsProp
= New testclass
687 Call ok(funcCalled
= "gsProp set", "funcCalled = " & funcCalled
)
690 Call ok(x
= 3, "(x = obj) = " & x
)
691 Call ok(funcCalled
= "GetDefVal", "funcCalled = " & funcCalled
)
693 Call ok(obj
= 3, "(x = obj) = " & obj
)
694 Call ok(funcCalled
= "GetDefVal", "funcCalled = " & funcCalled
)
696 Call obj
.Class_Initialize
697 Call ok(obj
.getPrivateProp() = true, "obj.getPrivateProp() = " & obj
.getPrivateProp())
699 x
= (New testclass
).publicProp
702 Public Sub Class_Terminate()
703 funcCalled
= "terminate"
707 Set obj
= New TermTest
710 Call ok(funcCalled
= "terminate", "funcCalled = " & funcCalled
)
712 Set obj
= New TermTest
714 Call obj
.Class_Terminate
715 Call ok(funcCalled
= "terminate", "funcCalled = " & funcCalled
)
718 Call ok(funcCalled
= "terminate", "funcCalled = " & funcCalled
)
720 Call (New testclass
).publicSub()
721 Call (New testclass
).publicSub
723 x
= "following ':' is correct syntax" :
724 x
= "following ':' is correct syntax" :: :
725 :: x
= "also correct syntax"
726 rem another ugly way for comments
727 x
= "rem as simplestatement" : rem rem comment
730 Set obj
= new EmptyClass
732 Set y
= new EmptyClass
734 Call ok(obj is x
, "obj is not x")
735 Call ok(x is obj
, "x is not obj")
736 Call ok(not (obj is y
), "obj is not y")
737 Call ok(not obj is y
, "obj is not y")
738 Call ok(not (x is
Nothing), "x is 1")
739 Call ok(Nothing is
Nothing, "Nothing is not Nothing")
740 Call ok(x is obj
and true, "x is obj and true is false")
743 Public Sub Test(MyMe
)
744 Call ok(Me is MyMe
, "Me is not MyMe")
751 Call ok(getVT(test
) = "VT_DISPATCH", "getVT(test) = " & getVT(test
))
752 Call ok(Me is Test
, "Me is not Test")
755 Call ok(c1
= 1, "c1 = " & c1
)
756 Call ok(getVT(c1
) = "VT_I2", "getVT(c1) = " & getVT(c1
))
758 if false then Const conststr
= "str"
759 Call ok(conststr
= "str", "conststr = " & conststr
)
760 Call ok(getVT(conststr
) = "VT_BSTR", "getVT(conststr) = " & getVT(conststr
))
761 Call ok(conststr
= "str", "conststr = " & conststr
)
765 Call ok(c1
= 1, "c1 = " & c1
)
766 Call ok(funcconst
= 1, "funcconst = " & funcconst
)