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")
46 Call ok(&hff
= 255, "&hff <> 255")
47 Call ok(&Hff
= 255, "&Hff <> 255")
50 Call ok(x
= "xx", "x = " & x
& " expected ""xx""")
52 Call ok(true <> false, "true <> false is false")
53 Call ok(not (true <> true), "true <> true is true")
54 Call ok(not ("x" <> "x"), """x"" <> ""x"" is true")
55 Call ok(not (empty
<> empty
), "empty <> empty is true")
56 Call ok(x
<> "x", "x = ""x""")
57 Call ok("true" <> true, """true"" = true is true")
59 Call ok("" = true = false, """"" = true = false is false")
60 Call ok(not(false = true = ""), "false = true = """" is true")
61 Call ok(not (false = false <> false = false), "false = false <> false = false is true")
62 Call ok(not ("" <> false = false), """"" <> false = false is true")
64 Call ok(getVT(false) = "VT_BOOL", "getVT(false) is not VT_BOOL")
65 Call ok(getVT(true) = "VT_BOOL", "getVT(true) is not VT_BOOL")
66 Call ok(getVT("") = "VT_BSTR", "getVT("""") is not VT_BSTR")
67 Call ok(getVT("test") = "VT_BSTR", "getVT(""test"") is not VT_BSTR")
68 Call ok(getVT(Empty
) = "VT_EMPTY", "getVT(Empty) is not VT_EMPTY")
69 Call ok(getVT(null
) = "VT_NULL", "getVT(null) is not VT_NULL")
70 Call ok(getVT(0) = "VT_I2", "getVT(0) is not VT_I2")
71 Call ok(getVT(1) = "VT_I2", "getVT(1) is not VT_I2")
72 Call ok(getVT(0.5) = "VT_R8", "getVT(0.5) is not VT_R8")
73 Call ok(getVT(0.0) = "VT_R8", "getVT(0.0) is not VT_R8")
74 Call ok(getVT(2147483647) = "VT_I4", "getVT(2147483647) is not VT_I4")
75 Call ok(getVT(2147483648) = "VT_R8", "getVT(2147483648) is not VT_R8")
76 Call ok(getVT(&h10
&) = "VT_I2", "getVT(&h10&) is not VT_I2")
77 Call ok(getVT(&h10000
&) = "VT_I4", "getVT(&h10000&) is not VT_I4")
78 Call ok(getVT(&H10000
&) = "VT_I4", "getVT(&H10000&) is not VT_I4")
79 Call ok(getVT(&hffFFffFF
&) = "VT_I2", "getVT(&hffFFffFF&) is not VT_I2")
80 Call ok(getVT(1 & 100000) = "VT_BSTR", "getVT(1 & 100000) is not VT_BSTR")
81 Call ok(getVT(-empty
) = "VT_I2", "getVT(-empty) = " & getVT(-empty
))
82 Call ok(getVT(-null
) = "VT_NULL", "getVT(-null) = " & getVT(-null
))
83 Call ok(getVT(y
) = "VT_EMPTY*", "getVT(y) = " & getVT(y
))
84 Call ok(getVT(nothing) = "VT_DISPATCH", "getVT(nothing) = " & getVT(nothing))
86 Call ok(getVT(x
) = "VT_DISPATCH*", "getVT(x=nothing) = " & getVT(x
))
88 Call ok(getVT(x
) = "VT_BOOL*", "getVT(x) = " & getVT(x
))
89 Call ok(getVT(false or true) = "VT_BOOL", "getVT(false) is not VT_BOOL")
91 Call ok(getVT(x
) = "VT_BSTR*", "getVT(x) is not VT_BSTR*")
93 Call ok(getVT(x
) = "VT_R8*", "getVT(x) = " & getVT(x
))
95 Call ok(isNullDisp(nothing), "nothing is not nulldisp?")
98 Call ok("ab" & "cd" = "abcd", """ab"" & ""cd"" <> ""abcd""")
99 Call ok("ab " & null
= "ab ", """ab"" & null = " & ("ab " & null
))
100 Call ok("ab " & empty
= "ab ", """ab"" & empty = " & ("ab " & empty
))
101 Call ok(1 & 100000 = "1100000", "1 & 100000 = " & (1 & 100000))
102 Call ok("ab" & x
= "abxx", """ab"" & x = " & ("ab"&x
))
104 if(isEnglishLang
) then
105 Call ok("" & true = "True", """"" & true = " & true)
106 Call ok(true & false = "TrueFalse", "true & false = " & (true & false))
109 call ok(true and true, "true and true is not true")
110 call ok(true and not false, "true and not false is not true")
111 call ok(not (false and true), "not (false and true) is not true")
112 call ok(getVT(null
and true) = "VT_NULL", "getVT(null and true) = " & getVT(null
and true))
114 call ok(false or true, "false or uie is false?")
115 call ok(not (false or false), "false or false is not false?")
116 call ok(false and false or true, "false and false or true is false?")
117 call ok(true or false and false, "true or false and false is false?")
118 call ok(null
or true, "null or true is false")
120 call ok(true xor
false, "true xor false is false?")
121 call ok(not (false xor
false), "false xor false is true?")
122 call ok(not (true or false xor
true), "true or false xor true is true?")
123 call ok(not (true xor
false or true), "true xor false or true is true?")
125 call ok(false eqv
false, "false does not equal false?")
126 call ok(not (false eqv
true), "false equals true?")
127 call ok(getVT(false eqv null
) = "VT_NULL", "getVT(false eqv null) = " & getVT(false eqv null
))
129 call ok(true imp
true, "true does not imp true?")
130 call ok(false imp
false, "false does not imp false?")
131 call ok(not (true imp
false), "true imp false?")
132 call ok(false imp null
, "false imp null is false?")
134 Call ok(2 >= 1, "! 2 >= 1")
135 Call ok(2 >= 2, "! 2 >= 2")
136 Call ok(not(true >= 2), "true >= 2 ?")
137 Call ok(2 > 1, "! 2 > 1")
138 Call ok(false > true, "! false < true")
139 Call ok(0 > true, "! 0 > true")
140 Call ok(not (true > 0), "true > 0")
141 Call ok(not (0 > 1 = 1), "0 > 1 = 1")
142 Call ok(1 < 2, "! 1 < 2")
143 Call ok(1 = 1 < 0, "! 1 = 1 < 0")
144 Call ok(1 <= 2, "! 1 <= 2")
145 Call ok(2 <= 2, "! 2 <= 2")
148 Call ok(2+2 = 4, "2+2 = " & (2+2))
149 Call ok(false + 6 + true = 5, "false + 6 + true <> 5")
150 Call ok(getVT(2+null
) = "VT_NULL", "getVT(2+null) = " & getVT(2+null
))
151 Call ok(2+empty
= 2, "2+empty = " & (2+empty
))
152 Call ok(x
+x
= 6, "x+x = " & (x
+x
))
154 Call ok(5-1 = 4, "5-1 = " & (5-1))
155 Call ok(3+5-true = 9, "3+5-true <> 9")
156 Call ok(getVT(2-null
) = "VT_NULL", "getVT(2-null) = " & getVT(2-null
))
157 Call ok(2-empty
= 2, "2-empty = " & (2-empty
))
158 Call ok(2-x
= -1, "2-x = " & (2-x
))
160 Call ok(9 Mod
6 = 3, "9 Mod 6 = " & (9 Mod
6))
161 Call ok(11.6 Mod
5.5 = False, "11.6 Mod 5.5 = " & (11.6 Mod
5.5 = 0.6))
162 Call ok(7 Mod
4+2 = 5, "7 Mod 4+2 <> 5")
163 Call ok(getVT(2 mod null
) = "VT_NULL", "getVT(2 mod null) = " & getVT(2 mod null
))
164 Call ok(getVT(null mod
2) = "VT_NULL", "getVT(null mod 2) = " & getVT(null mod
2))
165 'FIXME: Call ok(empty mod 2 = 0, "empty mod 2 = " & (empty mod 2))
167 Call ok(5 \
2 = 2, "5 \ 2 = " & (5\
2))
168 Call ok(4.6 \
1.5 = 2, "4.6 \ 1.5 = " & (4.6\
1.5))
169 Call ok(4.6 \
1.49 = 5, "4.6 \ 1.49 = " & (4.6\
1.49))
170 Call ok(2+3\
4 = 2, "2+3\4 = " & (2+3\
4))
172 Call ok(2*3 = 6, "2*3 = " & (2*3))
173 Call ok(3/2 = 1.5, "3/2 = " & (3/2))
174 Call ok(5\
4/2 = 2, "5\4/2 = " & (5\
2/1))
175 Call ok(12/3\
2 = 2, "12/3\2 = " & (12/3\
2))
177 Call ok(2^
3 = 8, "2^3 = " & (2^
3))
178 Call ok(2^
3^
2 = 64, "2^3^2 = " & (2^
3^
2))
179 Call ok(-3^
2 = 9, "-3^2 = " & (-3^
2))
180 Call ok(2*3^
2 = 18, "2*3^2 = " & (2*3^
2))
189 if true then y
= true : x
= y
192 x
= true : if false then x
= false
193 ok x
, "x is false, if false called?"
195 if not false then x
= true
196 ok x
, "x is false, if not false not called?"
198 if not false then x
= "test" : x
= true
199 ok x
, "x is false, if not false not called?"
201 if false then x
= y
: call ok(false, "if false .. : called")
203 if false then x
= y
: call ok(false, "if false .. : called") else x
= "else"
204 Call ok(x
= "else", "else not called?")
206 if true then x
= y
else y
= x
: Call ok(false, "in else?")
210 if false then x
= y
: if true then call ok(false, "embedded if called")
212 if false then x
=1 else x
=2 end if
215 ok
false, "if false called"
222 Call ok(not x
, "x is false, if not evaluated?")
226 Call ok(false, "inside if false")
230 Call ok(x
, "else not called?")
234 Call ok(false, "inside if false")
236 Call ok(false, "inside elseif not true")
240 Call ok(x
, "else not called?")
244 Call ok(false, "inside if false")
247 ElseIf not False Then
250 Call ok(false, "inside else not true")
252 Call ok(x
, "elseif not called?")
256 Call ok(false, "inside if false")
257 ElseIf not False Then
260 Call ok(x
, "elseif not called?")
270 call ok((x
and y
), "x or y is false after while")
277 do while not (x
and y
)
283 call ok((x
and y
), "x or y is false after while")
290 ok
false, "exit do didn't work"
301 call ok((x
and y
), "x or y is false after do until")
308 ok
false, "exit do didn't work"
319 call ok((x
and y
), "x or y is false after while")
326 ok
false, "exit do didn't work"
336 loop while not (x
and y
)
337 call ok((x
and y
), "x or y is false after while")
344 ok
false, "exit do didn't work"
351 Call ok(y
= "for1: 5 6 7 8", "y = " & y
)
354 for x
= 5 to 8 step
2
357 Call ok(y
= "for2: 5 7", "y = " & y
)
364 Call ok(y
= "for3: 5 6 7 8", "y = " & y
)
370 Call ok(y
= "for4:", "y = " & y
)
373 for x
= 5 to 3 step
true
376 Call ok(y
= "for5: 5 4 3", "y = " & y
)
380 for x
= 5 to z step
3-4
384 Call ok(y
= "for6: 5 4", "y = " & y
)
388 for x
= 5 to 8 step z
392 Call ok(y
= "for7: 5 6 7 8", "y = " & y
)
399 Call ok(y
= "for8: 5 7", "y = " & y
)
402 Call ok(false, "for..to called when unexpected")
407 Call ok(false, "exit for not escaped the loop?")
418 Call ok(x
, "x is false, testsub not called?")
421 Call ok(not v
, "v is not true")
427 Call ok(x
, "x was not set by SubSetTrue")
430 Call ok(not false, "false is no longer false?")
432 Sub SubSetTrue2(ByRef v
)
433 Call ok(not v
, "v is not true")
439 Call ok(x
, "x was not set by SubSetTrue")
441 Sub TestSubArgVal(ByVal v
)
442 Call ok(not v
, "v is not false")
444 Call ok(v
, "v is not true?")
448 Call TestSubArgVal(x
)
449 Call ok(not x
, "x is true after TestSubArgVal call?")
451 Sub TestSubMultiArgs(a
,b
,c
,d
,e
)
452 Call ok(a
=1, "a = " & a
)
453 Call ok(b
=2, "b = " & b
)
454 Call ok(c
=3, "c = " & c
)
455 Call ok(d
=4, "d = " & d
)
456 Call ok(e
=5, "e = " & e
)
459 Sub TestSubExit(ByRef a
)
463 Call ok(false, "Exit Sub not called?")
466 Call TestSubExit(true)
468 TestSubMultiArgs
1, 2, 3, 4, 5
469 Call TestSubMultiArgs(1, 2, 3, 4, 5)
473 Call ok(not x
, "local x is not false?")
481 Call ok(x
, "global x is not true?")
483 Public Sub TestPublicSub
487 Private Sub TestPrivateSub
499 Call ok(x
, "x is false, testfunc not called?")
501 Function FuncSetTrue(v
)
502 Call ok(not v
, "v is not true")
508 Call ok(x
, "x was not set by FuncSetTrue")
511 Call ok(not false, "false is no longer false?")
513 Function FuncSetTrue2(ByRef v
)
514 Call ok(not v
, "v is not true")
520 Call ok(x
, "x was not set by FuncSetTrue")
522 Function TestFuncArgVal(ByVal v
)
523 Call ok(not v
, "v is not false")
525 Call ok(v
, "v is not true?")
529 Call TestFuncArgVal(x
)
530 Call ok(not x
, "x is true after TestFuncArgVal call?")
532 Function TestFuncMultiArgs(a
,b
,c
,d
,e
)
533 Call ok(a
=1, "a = " & a
)
534 Call ok(b
=2, "b = " & b
)
535 Call ok(c
=3, "c = " & c
)
536 Call ok(d
=4, "d = " & d
)
537 Call ok(e
=5, "e = " & e
)
540 TestFuncMultiArgs
1, 2, 3, 4, 5
541 Call TestFuncMultiArgs(1, 2, 3, 4, 5)
543 Function TestFuncLocalVal
545 Call ok(not x
, "local x is not false?")
551 Call TestFuncLocalVal
552 Call ok(x
, "global x is not true?")
554 Function TestFuncExit(ByRef a
)
558 Call ok(false, "Exit Function not called?")
561 Call TestFuncExit(true)
567 Function FuncParseTest
568 End Function : x
= false
575 Call ok(ReturnTrue(), "ReturnTrue returned false?")
577 Function SetVal(ByRef x
, ByVal v
)
584 ok
SetVal(x
, true), "SetVal returned false?"
585 Call ok(x
, "x is not set to true by SetVal?")
587 Public Function TestPublicFunc
591 Private Function TestPrivateFunc
595 ' Stop has an effect only in debugging mode
599 Call ok(getVT(x
) = "VT_DISPATCH*", "getVT(x=testObj) = " & getVT(x
))
602 Set obj
= New EmptyClass
603 Call ok(getVT(obj
) = "VT_DISPATCH*", "getVT(obj) = " & getVT(obj
))
609 Call ok(getVT(x
) = "VT_DISPATCH*", "getVT(x) = " & getVT(x
))
616 Public Function publicFunction()
621 Public Property Get gsProp()
623 funcCalled
= "gsProp get"
625 Call ok(false, "exit property not returned?")
628 Public Default
Property Get DefValGet
629 DefValGet
= privateProp
630 funcCalled
= "GetDefVal"
633 Public Property Let DefValGet(x
)
641 Public Property Let gsProp(val
)
643 funcCalled
= "gsProp let"
645 Call ok(false, "exit property not returned?")
648 Public Property Set gsProp(val
)
649 funcCalled
= "gsProp set"
651 Call ok(false, "exit property not returned?")
654 Public Sub setPrivateProp(x
)
658 Function getPrivateProp
659 getPrivateProp
= privateProp
662 Private Sub privateSub
665 Public Sub Class_Initialize
671 Call testDisp(new testClass
)
673 Set obj
= New TestClass
675 Call ok(obj
.publicFunction
= 4, "obj.publicFunction = " & obj
.publicFunction
)
676 Call ok(obj
.publicFunction() = 4, "obj.publicFunction() = " & obj
.publicFunction())
680 Call obj
.publicFunction()
682 Call ok(getVT(obj
.publicProp
) = "VT_EMPTY", "getVT(obj.publicProp) = " & getVT(obj
.publicProp
))
684 Call ok(obj
.publicProp
= 3, "obj.publicProp = " & obj
.publicProp
)
687 Call ok(obj
.getPrivateProp() = true, "obj.getPrivateProp() = " & obj
.getPrivateProp())
688 Call obj
.setPrivateProp(6)
689 Call ok(obj
.getPrivateProp
= 6, "obj.getPrivateProp = " & obj
.getPrivateProp
)
693 Call ok(obj
.gsProp
= 6, "obj.gsProp = " & obj
.gsProp
)
694 Call ok(funcCalled
= "gsProp get", "funcCalled = " & funcCalled
)
696 Call ok(funcCalled
= "gsProp let", "funcCalled = " & funcCalled
)
697 Call ok(obj
.getPrivateProp
= 3, "obj.getPrivateProp = " & obj
.getPrivateProp
)
698 Set obj
.gsProp
= New testclass
699 Call ok(funcCalled
= "gsProp set", "funcCalled = " & funcCalled
)
702 Call ok(x
= 3, "(x = obj) = " & x
)
703 Call ok(funcCalled
= "GetDefVal", "funcCalled = " & funcCalled
)
705 Call ok(obj
= 3, "(x = obj) = " & obj
)
706 Call ok(funcCalled
= "GetDefVal", "funcCalled = " & funcCalled
)
708 Call obj
.Class_Initialize
709 Call ok(obj
.getPrivateProp() = true, "obj.getPrivateProp() = " & obj
.getPrivateProp())
711 x
= (New testclass
).publicProp
714 Public Sub Class_Terminate()
715 funcCalled
= "terminate"
719 Set obj
= New TermTest
722 Call ok(funcCalled
= "terminate", "funcCalled = " & funcCalled
)
724 Set obj
= New TermTest
726 Call obj
.Class_Terminate
727 Call ok(funcCalled
= "terminate", "funcCalled = " & funcCalled
)
730 Call ok(funcCalled
= "terminate", "funcCalled = " & funcCalled
)
732 Call (New testclass
).publicSub()
733 Call (New testclass
).publicSub
735 x
= "following ':' is correct syntax" :
736 x
= "following ':' is correct syntax" :: :
737 :: x
= "also correct syntax"
738 rem another ugly way for comments
739 x
= "rem as simplestatement" : rem rem comment
742 Set obj
= new EmptyClass
744 Set y
= new EmptyClass
746 Call ok(obj is x
, "obj is not x")
747 Call ok(x is obj
, "x is not obj")
748 Call ok(not (obj is y
), "obj is not y")
749 Call ok(not obj is y
, "obj is not y")
750 Call ok(not (x is
Nothing), "x is 1")
751 Call ok(Nothing is
Nothing, "Nothing is not Nothing")
752 Call ok(x is obj
and true, "x is obj and true is false")
755 Public Sub Test(MyMe
)
756 Call ok(Me is MyMe
, "Me is not MyMe")
763 Call ok(getVT(test
) = "VT_DISPATCH", "getVT(test) = " & getVT(test
))
764 Call ok(Me is Test
, "Me is not Test")
767 Call ok(c1
= 1, "c1 = " & c1
)
768 Call ok(getVT(c1
) = "VT_I2", "getVT(c1) = " & getVT(c1
))
770 if false then Const conststr
= "str"
771 Call ok(conststr
= "str", "conststr = " & conststr
)
772 Call ok(getVT(conststr
) = "VT_BSTR", "getVT(conststr) = " & getVT(conststr
))
773 Call ok(conststr
= "str", "conststr = " & conststr
)
777 Call ok(c1
= 1, "c1 = " & c1
)
778 Call ok(funcconst
= 1, "funcconst = " & funcconst
)
784 ' Property may be used as an identifier (although it's a keyword)
788 Call ok(property, "property = " & property)
790 for property = 1 to 2
797 Public Sub Property()
800 Sub Test(byref property)
812 Sub Test2(byval property)