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?")
264 Call ok(x, "if 1 not run?")
267 if &h10000& then x = true
268 Call ok(x, "if &h10000& not run?")
278 call ok((x and y), "x or y is false after while")
285 do while not (x and y)
291 call ok((x and y), "x or y is false after while")
298 ok false, "exit do didn't work"
309 call ok((x and y), "x or y is false after do until")
316 ok false, "exit do didn't work"
327 call ok((x and y), "x or y is false after while")
334 ok false, "exit do didn't work"
344 loop while not (x and y)
345 call ok((x and y), "x or y is false after while")
352 ok false, "exit do didn't work"
359 Call ok(y = "for1: 5 6 7 8", "y = " & y)
362 for x = 5 to 8 step 2
365 Call ok(y = "for2: 5 7", "y = " & y)
372 Call ok(y = "for3: 5 6 7 8", "y = " & y)
378 Call ok(y = "for4:", "y = " & y)
381 for x = 5 to 3 step true
384 Call ok(y = "for5: 5 4 3", "y = " & y)
388 for x = 5 to z step 3-4
392 Call ok(y = "for6: 5 4", "y = " & y)
396 for x = 5 to 8 step z
400 Call ok(y = "for7: 5 6 7 8", "y = " & y)
407 Call ok(y = "for8: 5 7", "y = " & y)
410 Call ok(false, "for..to called when unexpected")
415 Call ok(false, "exit for not escaped the loop?")
424 Call collectionObj.reset()
427 for each x in collectionObj
429 Call ok(x = y, "x <> y")
431 Call ok(y = 3, "y = " & y)
432 Call ok(getVT(x) = "VT_EMPTY*", "getVT(x) = " & getVT(x))
434 Call collectionObj.reset()
436 for each x in collectionObj
437 if x = 2 then exit for
440 Call ok(y = 1, "y = " & y)
441 Call ok(x = 2, "x = " & x)
446 Call ok(false, "unexpected case")
448 Call ok(false, "unexpected case")
450 Call ok(false, "unexpected case")
453 Call ok(false, "unexpected case")
454 case 0, false, 2+1, 10
456 case ok(false, "unexpected case")
457 Call ok(false, "unexpected case")
459 Call ok(false, "unexpected case")
461 Call ok(x, "wrong case")
468 Call ok(x, "wrong case")
473 Call ok(false, "unexpected case")
477 Call ok(x, "wrong case")
485 Call ok(false, "unexpected case")
487 Call ok(x, "wrong case")
491 Call ok(false, "unexpected case")
493 Call ok(false, "unexpected case")
507 Call ok(x, "x is false, testsub not called?")
510 Call ok(not v, "v is not true")
516 Call ok(x, "x was not set by SubSetTrue")
519 Call ok(not false, "false is no longer false?")
521 Sub SubSetTrue2(ByRef v)
522 Call ok(not v, "v is not true")
528 Call ok(x, "x was not set by SubSetTrue")
530 Sub TestSubArgVal(ByVal v)
531 Call ok(not v, "v is not false")
533 Call ok(v, "v is not true?")
537 Call TestSubArgVal(x)
538 Call ok(not x, "x is true after TestSubArgVal call?")
540 Sub TestSubMultiArgs(a,b,c,d,e)
541 Call ok(a=1, "a = " & a)
542 Call ok(b=2, "b = " & b)
543 Call ok(c=3, "c = " & c)
544 Call ok(d=4, "d = " & d)
545 Call ok(e=5, "e = " & e)
548 Sub TestSubExit(ByRef a)
552 Call ok(false, "Exit Sub not called?")
555 Call TestSubExit(true)
564 TestSubMultiArgs 1, 2, 3, 4, 5
565 Call TestSubMultiArgs(1, 2, 3, 4, 5)
569 Call ok(not x, "local x is not false?")
577 Call ok(x, "global x is not true?")
579 Public Sub TestPublicSub
583 Private Sub TestPrivateSub
595 Call ok(x, "x is false, testfunc not called?")
597 Function FuncSetTrue(v)
598 Call ok(not v, "v is not true")
604 Call ok(x, "x was not set by FuncSetTrue")
607 Call ok(not false, "false is no longer false?")
609 Function FuncSetTrue2(ByRef v)
610 Call ok(not v, "v is not true")
616 Call ok(x, "x was not set by FuncSetTrue")
618 Function TestFuncArgVal(ByVal v)
619 Call ok(not v, "v is not false")
621 Call ok(v, "v is not true?")
625 Call TestFuncArgVal(x)
626 Call ok(not x, "x is true after TestFuncArgVal call?")
628 Function TestFuncMultiArgs(a,b,c,d,e)
629 Call ok(a=1, "a = " & a)
630 Call ok(b=2, "b = " & b)
631 Call ok(c=3, "c = " & c)
632 Call ok(d=4, "d = " & d)
633 Call ok(e=5, "e = " & e)
636 TestFuncMultiArgs 1, 2, 3, 4, 5
637 Call TestFuncMultiArgs(1, 2, 3, 4, 5)
639 Function TestFuncLocalVal
641 Call ok(not x, "local x is not false?")
647 Call TestFuncLocalVal
648 Call ok(x, "global x is not true?")
650 Function TestFuncExit(ByRef a)
654 Call ok(false, "Exit Function not called?")
657 Call TestFuncExit(true)
659 Function TestFuncExit2(ByRef a)
665 Call ok(false, "Exit Function not called?")
668 Call TestFuncExit2(true)
674 Function FuncParseTest
675 End Function : x = false
682 Call ok(ReturnTrue(), "ReturnTrue returned false?")
684 Function SetVal(ByRef x, ByVal v)
691 ok SetVal(x, true), "SetVal returned false?"
692 Call ok(x, "x is not set to true by SetVal?")
694 Public Function TestPublicFunc
698 Private Function TestPrivateFunc
702 ' Stop has an effect only in debugging mode
706 Call ok(getVT(x) = "VT_DISPATCH*", "getVT(x=testObj) = " & getVT(x))
709 Set obj = New EmptyClass
710 Call ok(getVT(obj) = "VT_DISPATCH*", "getVT(obj) = " & getVT(obj))
716 Call ok(getVT(x) = "VT_DISPATCH*", "getVT(x) = " & getVT(x))
723 Public Function publicFunction()
728 Public Property Get gsProp()
730 funcCalled = "gsProp get"
732 Call ok(false, "exit property not returned?")
735 Public Default Property Get DefValGet
736 DefValGet = privateProp
737 funcCalled = "GetDefVal"
740 Public Property Let DefValGet(x)
748 Public Property Let gsProp(val)
750 funcCalled = "gsProp let"
752 Call ok(false, "exit property not returned?")
755 Public Property Set gsProp(val)
756 funcCalled = "gsProp set"
758 Call ok(false, "exit property not returned?")
761 Public Sub setPrivateProp(x)
765 Function getPrivateProp
766 getPrivateProp = privateProp
769 Private Sub privateSub
772 Public Sub Class_Initialize
778 Call testDisp(new testClass)
780 Set obj = New TestClass
782 Call ok(obj.publicFunction = 4, "obj.publicFunction = " & obj.publicFunction)
783 Call ok(obj.publicFunction() = 4, "obj.publicFunction() = " & obj.publicFunction())
787 Call obj.publicFunction()
789 Call ok(getVT(obj.publicProp) = "VT_EMPTY", "getVT(obj.publicProp) = " & getVT(obj.publicProp))
791 Call ok(obj.publicProp = 3, "obj.publicProp = " & obj.publicProp)
794 Call ok(obj.getPrivateProp() = true, "obj.getPrivateProp() = " & obj.getPrivateProp())
795 Call obj.setPrivateProp(6)
796 Call ok(obj.getPrivateProp = 6, "obj.getPrivateProp = " & obj.getPrivateProp)
800 Call ok(obj.gsProp = 6, "obj.gsProp = " & obj.gsProp)
801 Call ok(funcCalled = "gsProp get", "funcCalled = " & funcCalled)
803 Call ok(funcCalled = "gsProp let", "funcCalled = " & funcCalled)
804 Call ok(obj.getPrivateProp = 3, "obj.getPrivateProp = " & obj.getPrivateProp)
805 Set obj.gsProp = New testclass
806 Call ok(funcCalled = "gsProp set", "funcCalled = " & funcCalled)
809 Call ok(x = 3, "(x = obj) = " & x)
810 Call ok(funcCalled = "GetDefVal", "funcCalled = " & funcCalled)
812 Call ok(obj = 3, "(x = obj) = " & obj)
813 Call ok(funcCalled = "GetDefVal", "funcCalled = " & funcCalled)
815 Call obj.Class_Initialize
816 Call ok(obj.getPrivateProp() = true, "obj.getPrivateProp() = " & obj.getPrivateProp())
818 x = (New testclass).publicProp
821 Public Sub Class_Terminate()
822 funcCalled = "terminate"
826 Set obj = New TermTest
829 Call ok(funcCalled = "terminate", "funcCalled = " & funcCalled)
831 Set obj = New TermTest
833 Call obj.Class_Terminate
834 Call ok(funcCalled = "terminate", "funcCalled = " & funcCalled)
837 Call ok(funcCalled = "terminate", "funcCalled = " & funcCalled)
839 Call (New testclass).publicSub()
840 Call (New testclass).publicSub
842 x = "following ':' is correct syntax" :
843 x = "following ':' is correct syntax" :: :
844 :: x = "also correct syntax"
845 rem another ugly way for comments
846 x = "rem as simplestatement" : rem rem comment
849 Set obj = new EmptyClass
851 Set y = new EmptyClass
853 Call ok(obj is x, "obj is not x")
854 Call ok(x is obj, "x is not obj")
855 Call ok(not (obj is y), "obj is not y")
856 Call ok(not obj is y, "obj is not y")
857 Call ok(not (x is Nothing), "x is 1")
858 Call ok(Nothing is Nothing, "Nothing is not Nothing")
859 Call ok(x is obj and true, "x is obj and true is false")
862 Public Sub Test(MyMe)
863 Call ok(Me is MyMe, "Me is not MyMe")
870 Call ok(getVT(test) = "VT_DISPATCH", "getVT(test) = " & getVT(test))
871 Call ok(Me is Test, "Me is not Test")
874 Call ok(c1 = 1, "c1 = " & c1)
875 Call ok(getVT(c1) = "VT_I2", "getVT(c1) = " & getVT(c1))
877 if false then Const conststr = "str"
878 Call ok(conststr = "str", "conststr = " & conststr)
879 Call ok(getVT(conststr) = "VT_BSTR", "getVT(conststr) = " & getVT(conststr))
880 Call ok(conststr = "str", "conststr = " & conststr)
884 Call ok(c1 = 1, "c1 = " & c1)
885 Call ok(funcconst = 1, "funcconst = " & funcconst)
891 ' Property may be used as an identifier (although it's a keyword)
895 Call ok(property, "property = " & property)
897 for property = 1 to 2
904 Public Sub Property()
907 Sub Test(byref property)
919 Sub Test2(byval property)