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
24 call ok(true, "true is not true?")
25 ok true, "true is not true?"
26 call ok((true), "true is not true?")
28 ok not false, "not false but not true?"
29 ok not not true, "not not true but not true?"
31 Call ok(true = true, "true = true is false")
32 Call ok(false = false, "false = false is false")
33 Call ok(not (true = false), "true = false is true")
34 Call ok("x" = "x", """x"" = ""x"" is false")
35 Call ok(empty = empty, "empty = empty is false")
36 Call ok(empty = "", "empty = """" is false")
37 Call ok(0 = 0.0, "0 <> 0.0")
38 Call ok(16 = &h10&, "16 <> &h10&")
39 Call ok(010 = 10, "010 <> 10")
40 Call ok(10. = 10, "10. <> 10")
41 Call ok(&hffFFffFF& = -1, "&hffFFffFF& <> -1")
42 Call ok(&hffFFffFF& = -1, "&hffFFffFF& <> -1")
43 Call ok(--1 = 1, "--1 = " & --1)
44 Call ok(-empty = 0, "-empty = " & (-empty))
45 Call ok(true = -1, "! true = -1")
46 Call ok(false = 0, "false <> 0")
47 Call ok(&hff = 255, "&hff <> 255")
48 Call ok(&Hff = 255, "&Hff <> 255")
51 Call ok(x = "xx", "x = " & x & " expected ""xx""")
53 Call ok(true <> false, "true <> false is false")
54 Call ok(not (true <> true), "true <> true is true")
55 Call ok(not ("x" <> "x"), """x"" <> ""x"" is true")
56 Call ok(not (empty <> empty), "empty <> empty is true")
57 Call ok(x <> "x", "x = ""x""")
58 Call ok("true" <> true, """true"" = true is true")
60 Call ok("" = true = false, """"" = true = false is false")
61 Call ok(not(false = true = ""), "false = true = """" is true")
62 Call ok(not (false = false <> false = false), "false = false <> false = false is true")
63 Call ok(not ("" <> false = false), """"" <> false = false is true")
65 Call ok(getVT(false) = "VT_BOOL", "getVT(false) is not VT_BOOL")
66 Call ok(getVT(true) = "VT_BOOL", "getVT(true) is not VT_BOOL")
67 Call ok(getVT("") = "VT_BSTR", "getVT("""") is not VT_BSTR")
68 Call ok(getVT("test") = "VT_BSTR", "getVT(""test"") is not VT_BSTR")
69 Call ok(getVT(Empty) = "VT_EMPTY", "getVT(Empty) is not VT_EMPTY")
70 Call ok(getVT(null) = "VT_NULL", "getVT(null) is not VT_NULL")
71 Call ok(getVT(0) = "VT_I2", "getVT(0) is not VT_I2")
72 Call ok(getVT(1) = "VT_I2", "getVT(1) is not VT_I2")
73 Call ok(getVT(0.5) = "VT_R8", "getVT(0.5) is not VT_R8")
74 Call ok(getVT(0.0) = "VT_R8", "getVT(0.0) is not VT_R8")
75 Call ok(getVT(2147483647) = "VT_I4", "getVT(2147483647) is not VT_I4")
76 Call ok(getVT(2147483648) = "VT_R8", "getVT(2147483648) is not VT_R8")
77 Call ok(getVT(&h10&) = "VT_I2", "getVT(&h10&) is not VT_I2")
78 Call ok(getVT(&h10000&) = "VT_I4", "getVT(&h10000&) is not VT_I4")
79 Call ok(getVT(&H10000&) = "VT_I4", "getVT(&H10000&) is not VT_I4")
80 Call ok(getVT(&hffFFffFF&) = "VT_I2", "getVT(&hffFFffFF&) is not VT_I2")
81 Call ok(getVT(1 & 100000) = "VT_BSTR", "getVT(1 & 100000) is not VT_BSTR")
82 Call ok(getVT(-empty) = "VT_I2", "getVT(-empty) = " & getVT(-empty))
83 Call ok(getVT(-null) = "VT_NULL", "getVT(-null) = " & getVT(-null))
84 Call ok(getVT(y) = "VT_EMPTY*", "getVT(y) = " & getVT(y))
85 Call ok(getVT(nothing) = "VT_DISPATCH", "getVT(nothing) = " & getVT(nothing))
87 Call ok(getVT(x) = "VT_DISPATCH*", "getVT(x=nothing) = " & getVT(x))
89 Call ok(getVT(x) = "VT_BOOL*", "getVT(x) = " & getVT(x))
90 Call ok(getVT(false or true) = "VT_BOOL", "getVT(false) is not VT_BOOL")
92 Call ok(getVT(x) = "VT_BSTR*", "getVT(x) is not VT_BSTR*")
94 Call ok(getVT(x) = "VT_R8*", "getVT(x) = " & getVT(x))
96 Call ok(isNullDisp(nothing), "nothing is not nulldisp?")
99 Call ok("ab" & "cd" = "abcd", """ab"" & ""cd"" <> ""abcd""")
100 Call ok("ab " & null = "ab ", """ab"" & null = " & ("ab " & null))
101 Call ok("ab " & empty = "ab ", """ab"" & empty = " & ("ab " & empty))
102 Call ok(1 & 100000 = "1100000", "1 & 100000 = " & (1 & 100000))
103 Call ok("ab" & x = "abxx", """ab"" & x = " & ("ab"&x))
105 if(isEnglishLang) then
106 Call ok("" & true = "True", """"" & true = " & true)
107 Call ok(true & false = "TrueFalse", "true & false = " & (true & false))
110 call ok(true and true, "true and true is not true")
111 call ok(true and not false, "true and not false is not true")
112 call ok(not (false and true), "not (false and true) is not true")
113 call ok(getVT(null and true) = "VT_NULL", "getVT(null and true) = " & getVT(null and true))
115 call ok(false or true, "false or uie is false?")
116 call ok(not (false or false), "false or false is not false?")
117 call ok(false and false or true, "false and false or true is false?")
118 call ok(true or false and false, "true or false and false is false?")
119 call ok(null or true, "null or true is false")
121 call ok(true xor false, "true xor false is false?")
122 call ok(not (false xor false), "false xor false is true?")
123 call ok(not (true or false xor true), "true or false xor true is true?")
124 call ok(not (true xor false or true), "true xor false or true is true?")
126 call ok(false eqv false, "false does not equal false?")
127 call ok(not (false eqv true), "false equals true?")
128 call ok(getVT(false eqv null) = "VT_NULL", "getVT(false eqv null) = " & getVT(false eqv null))
130 call ok(true imp true, "true does not imp true?")
131 call ok(false imp false, "false does not imp false?")
132 call ok(not (true imp false), "true imp false?")
133 call ok(false imp null, "false imp null is false?")
135 Call ok(2 >= 1, "! 2 >= 1")
136 Call ok(2 >= 2, "! 2 >= 2")
137 Call ok(not(true >= 2), "true >= 2 ?")
138 Call ok(2 > 1, "! 2 > 1")
139 Call ok(false > true, "! false < true")
140 Call ok(0 > true, "! 0 > true")
141 Call ok(not (true > 0), "true > 0")
142 Call ok(not (0 > 1 = 1), "0 > 1 = 1")
143 Call ok(1 < 2, "! 1 < 2")
144 Call ok(1 = 1 < 0, "! 1 = 1 < 0")
145 Call ok(1 <= 2, "! 1 <= 2")
146 Call ok(2 <= 2, "! 2 <= 2")
148 Call ok(isNull(0 = null), "'(0 = null)' is not null")
149 Call ok(isNull(null = 1), "'(null = 1)' is not null")
150 Call ok(isNull(0 > null), "'(0 > null)' is not null")
151 Call ok(isNull(null > 1), "'(null > 1)' is not null")
152 Call ok(isNull(0 < null), "'(0 < null)' is not null")
153 Call ok(isNull(null < 1), "'(null < 1)' is not null")
154 Call ok(isNull(0 <> null), "'(0 <> null)' is not null")
155 Call ok(isNull(null <> 1), "'(null <> 1)' is not null")
156 Call ok(isNull(0 >= null), "'(0 >= null)' is not null")
157 Call ok(isNull(null >= 1), "'(null >= 1)' is not null")
158 Call ok(isNull(0 <= null), "'(0 <= null)' is not null")
159 Call ok(isNull(null <= 1), "'(null <= 1)' is not null")
162 Call ok(2+2 = 4, "2+2 = " & (2+2))
163 Call ok(false + 6 + true = 5, "false + 6 + true <> 5")
164 Call ok(getVT(2+null) = "VT_NULL", "getVT(2+null) = " & getVT(2+null))
165 Call ok(2+empty = 2, "2+empty = " & (2+empty))
166 Call ok(x+x = 6, "x+x = " & (x+x))
168 Call ok(5-1 = 4, "5-1 = " & (5-1))
169 Call ok(3+5-true = 9, "3+5-true <> 9")
170 Call ok(getVT(2-null) = "VT_NULL", "getVT(2-null) = " & getVT(2-null))
171 Call ok(2-empty = 2, "2-empty = " & (2-empty))
172 Call ok(2-x = -1, "2-x = " & (2-x))
174 Call ok(9 Mod 6 = 3, "9 Mod 6 = " & (9 Mod 6))
175 Call ok(11.6 Mod 5.5 = False, "11.6 Mod 5.5 = " & (11.6 Mod 5.5 = 0.6))
176 Call ok(7 Mod 4+2 = 5, "7 Mod 4+2 <> 5")
177 Call ok(getVT(2 mod null) = "VT_NULL", "getVT(2 mod null) = " & getVT(2 mod null))
178 Call ok(getVT(null mod 2) = "VT_NULL", "getVT(null mod 2) = " & getVT(null mod 2))
179 'FIXME: Call ok(empty mod 2 = 0, "empty mod 2 = " & (empty mod 2))
181 Call ok(5 \ 2 = 2, "5 \ 2 = " & (5\2))
182 Call ok(4.6 \ 1.5 = 2, "4.6 \ 1.5 = " & (4.6\1.5))
183 Call ok(4.6 \ 1.49 = 5, "4.6 \ 1.49 = " & (4.6\1.49))
184 Call ok(2+3\4 = 2, "2+3\4 = " & (2+3\4))
186 Call ok(2*3 = 6, "2*3 = " & (2*3))
187 Call ok(3/2 = 1.5, "3/2 = " & (3/2))
188 Call ok(5\4/2 = 2, "5\4/2 = " & (5\2/1))
189 Call ok(12/3\2 = 2, "12/3\2 = " & (12/3\2))
191 Call ok(2^3 = 8, "2^3 = " & (2^3))
192 Call ok(2^3^2 = 64, "2^3^2 = " & (2^3^2))
193 Call ok(-3^2 = 9, "-3^2 = " & (-3^2))
194 Call ok(2*3^2 = 18, "2*3^2 = " & (2*3^2))
203 if true then y = true : x = y
206 x = true : if false then x = false
207 ok x, "x is false, if false called?"
209 if not false then x = true
210 ok x, "x is false, if not false not called?"
212 if not false then x = "test" : x = true
213 ok x, "x is false, if not false not called?"
215 if false then x = y : call ok(false, "if false .. : called")
217 if false then x = y : call ok(false, "if false .. : called") else x = "else"
218 Call ok(x = "else", "else not called?")
220 if true then x = y else y = x : Call ok(false, "in else?")
224 if false then x = y : if true then call ok(false, "embedded if called")
226 if false then x=1 else x=2 end if
229 if false then x = true : x = true
230 Call ok(x = false, "x <> false")
233 ok false, "if false called"
240 Call ok(not x, "x is false, if not evaluated?")
244 Call ok(false, "inside if false")
248 Call ok(x, "else not called?")
252 Call ok(false, "inside if false")
254 Call ok(false, "inside elseif not true")
258 Call ok(x, "else not called?")
262 Call ok(false, "inside if false")
265 ElseIf not False Then
268 Call ok(false, "inside else not true")
270 Call ok(x, "elseif not called?")
274 Call ok(false, "inside if false")
275 ElseIf not False Then
278 Call ok(x, "elseif not called?")
282 Call ok(x, "if 1 not run?")
285 if &h10000& then x = true
286 Call ok(x, "if &h10000& not run?")
296 call ok((x and y), "x or y is false after while")
319 do while not (x and y)
325 call ok((x and y), "x or y is false after while")
332 ok false, "exit do didn't work"
343 call ok((x and y), "x or y is false after do until")
350 ok false, "exit do didn't work"
358 call ok(x, "x is false after do..loop?")
368 call ok((x and y), "x or y is false after while")
375 ok false, "exit do didn't work"
385 loop while not (x and y)
386 call ok((x and y), "x or y is false after while")
393 ok false, "exit do didn't work"
400 Call ok(y = "for1: 5 6 7 8", "y = " & y)
403 for x = 5 to 8 step 2
406 Call ok(y = "for2: 5 7", "y = " & y)
413 Call ok(y = "for3: 5 6 7 8", "y = " & y)
419 Call ok(y = "for4:", "y = " & y)
422 for x = 5 to 3 step true
425 Call ok(y = "for5: 5 4 3", "y = " & y)
429 for x = 5 to z step 3-4
433 Call ok(y = "for6: 5 4", "y = " & y)
437 for x = 5 to 8 step z
441 Call ok(y = "for7: 5 6 7 8", "y = " & y)
448 Call ok(y = "for8: 5 7", "y = " & y)
451 Call ok(false, "for..to called when unexpected")
456 Call ok(false, "exit for not escaped the loop?")
465 if null then call ok(false, "if null evaluated")
468 call ok(false, "while null evaluated")
471 Call collectionObj.reset()
474 for each x in collectionObj
476 Call ok(x = y, "x <> y")
478 Call ok(y = 3, "y = " & y)
479 Call ok(getVT(x) = "VT_EMPTY*", "getVT(x) = " & getVT(x))
481 Call collectionObj.reset()
483 for each x in collectionObj
484 if x = 2 then exit for
487 Call ok(y = 1, "y = " & y)
488 Call ok(x = 2, "x = " & x)
490 Set obj = collectionObj
496 Call ok(x = y, "x <> y")
498 Call ok(y = 3, "y = " & y)
499 Call ok(getVT(x) = "VT_EMPTY*", "getVT(x) = " & getVT(x))
504 Call ok(false, "unexpected case")
506 Call ok(false, "unexpected case")
508 Call ok(false, "unexpected case")
511 Call ok(false, "unexpected case")
512 case 0, false, 2+1, 10
514 case ok(false, "unexpected case")
515 Call ok(false, "unexpected case")
517 Call ok(false, "unexpected case")
519 Call ok(x, "wrong case")
526 Call ok(x, "wrong case")
531 Call ok(false, "unexpected case")
535 Call ok(x, "wrong case")
543 Call ok(false, "unexpected case")
545 Call ok(x, "wrong case")
549 Call ok(false, "unexpected case")
551 Call ok(false, "unexpected case")
559 case 3,1,2,4: x = true
561 Call ok(false, "unexpected case")
563 Call ok(x, "wrong case")
566 select case 2: case 5,6,7: Call ok(false, "unexpected case")
569 case else: Call ok(false, "unexpected case else")
571 Call ok(x, "wrong case")
581 Call ok(x, "x is false, testsub not called?")
584 Call ok(not v, "v is not true")
590 Call ok(x, "x was not set by SubSetTrue")
593 Call ok(not false, "false is no longer false?")
595 Sub SubSetTrue2(ByRef v)
596 Call ok(not v, "v is not true")
602 Call ok(x, "x was not set by SubSetTrue")
604 Sub TestSubArgVal(ByVal v)
605 Call ok(not v, "v is not false")
607 Call ok(v, "v is not true?")
611 Call TestSubArgVal(x)
612 Call ok(not x, "x is true after TestSubArgVal call?")
614 Sub TestSubMultiArgs(a,b,c,d,e)
615 Call ok(a=1, "a = " & a)
616 Call ok(b=2, "b = " & b)
617 Call ok(c=3, "c = " & c)
618 Call ok(d=4, "d = " & d)
619 Call ok(e=5, "e = " & e)
622 Sub TestSubExit(ByRef a)
626 Call ok(false, "Exit Sub not called?")
629 Call TestSubExit(true)
638 TestSubMultiArgs 1, 2, 3, 4, 5
639 Call TestSubMultiArgs(1, 2, 3, 4, 5)
643 Call ok(not x, "local x is not false?")
651 Call ok(x, "global x is not true?")
653 Public Sub TestPublicSub
657 Private Sub TestPrivateSub
669 Call ok(x, "x is false, testfunc not called?")
671 Function FuncSetTrue(v)
672 Call ok(not v, "v is not true")
678 Call ok(x, "x was not set by FuncSetTrue")
681 Call ok(not false, "false is no longer false?")
683 Function FuncSetTrue2(ByRef v)
684 Call ok(not v, "v is not true")
690 Call ok(x, "x was not set by FuncSetTrue")
692 Function TestFuncArgVal(ByVal v)
693 Call ok(not v, "v is not false")
695 Call ok(v, "v is not true?")
699 Call TestFuncArgVal(x)
700 Call ok(not x, "x is true after TestFuncArgVal call?")
702 Function TestFuncMultiArgs(a,b,c,d,e)
703 Call ok(a=1, "a = " & a)
704 Call ok(b=2, "b = " & b)
705 Call ok(c=3, "c = " & c)
706 Call ok(d=4, "d = " & d)
707 Call ok(e=5, "e = " & e)
710 TestFuncMultiArgs 1, 2, 3, 4, 5
711 Call TestFuncMultiArgs(1, 2, 3, 4, 5)
713 Function TestFuncLocalVal
715 Call ok(not x, "local x is not false?")
721 Call TestFuncLocalVal
722 Call ok(x, "global x is not true?")
724 Function TestFuncExit(ByRef a)
728 Call ok(false, "Exit Function not called?")
731 Call TestFuncExit(true)
733 Function TestFuncExit2(ByRef a)
739 Call ok(false, "Exit Function not called?")
742 Call TestFuncExit2(true)
748 Function FuncParseTest
749 End Function : x = false
756 Call ok(ReturnTrue(), "ReturnTrue returned false?")
758 Function SetVal(ByRef x, ByVal v)
765 ok SetVal(x, true), "SetVal returned false?"
766 Call ok(x, "x is not set to true by SetVal?")
768 Public Function TestPublicFunc
772 Private Function TestPrivateFunc
776 ' Stop has an effect only in debugging mode
780 Call ok(getVT(x) = "VT_DISPATCH*", "getVT(x=testObj) = " & getVT(x))
782 Set obj = New EmptyClass
783 Call ok(getVT(obj) = "VT_DISPATCH*", "getVT(obj) = " & getVT(obj))
789 Call ok(getVT(x) = "VT_DISPATCH*", "getVT(x) = " & getVT(x))
796 Public Function publicFunction()
801 Public Property Get gsProp()
803 funcCalled = "gsProp get"
805 Call ok(false, "exit property not returned?")
808 Public Default Property Get DefValGet
809 DefValGet = privateProp
810 funcCalled = "GetDefVal"
813 Public Property Let DefValGet(x)
821 Public Property Let gsProp(val)
823 funcCalled = "gsProp let"
825 Call ok(false, "exit property not returned?")
828 Public Property Set gsProp(val)
829 funcCalled = "gsProp set"
831 Call ok(false, "exit property not returned?")
834 Public Sub setPrivateProp(x)
838 Function getPrivateProp
839 getPrivateProp = privateProp
842 Private Sub privateSub
845 Public Sub Class_Initialize
848 Call ok(getVT(privateProp) = "VT_BOOL*", "getVT(privateProp) = " & getVT(privateProp))
849 Call ok(getVT(publicProp2) = "VT_I2*", "getVT(publicProp2) = " & getVT(publicProp2))
850 Call ok(getVT(Me.publicProp2) = "VT_I2", "getVT(Me.publicProp2) = " & getVT(Me.publicProp2))
854 Call testDisp(new testClass)
856 Set obj = New TestClass
858 Call ok(obj.publicFunction = 4, "obj.publicFunction = " & obj.publicFunction)
859 Call ok(obj.publicFunction() = 4, "obj.publicFunction() = " & obj.publicFunction())
863 Call obj.publicFunction()
865 Call ok(getVT(obj.publicProp) = "VT_EMPTY", "getVT(obj.publicProp) = " & getVT(obj.publicProp))
867 Call ok(getVT(obj.publicProp) = "VT_I2", "getVT(obj.publicProp) = " & getVT(obj.publicProp))
868 Call ok(obj.publicProp = 3, "obj.publicProp = " & obj.publicProp)
871 Call ok(obj.getPrivateProp() = true, "obj.getPrivateProp() = " & obj.getPrivateProp())
872 Call obj.setPrivateProp(6)
873 Call ok(obj.getPrivateProp = 6, "obj.getPrivateProp = " & obj.getPrivateProp)
877 Call ok(obj.gsProp = 6, "obj.gsProp = " & obj.gsProp)
878 Call ok(funcCalled = "gsProp get", "funcCalled = " & funcCalled)
880 Call ok(funcCalled = "gsProp let", "funcCalled = " & funcCalled)
881 Call ok(obj.getPrivateProp = 3, "obj.getPrivateProp = " & obj.getPrivateProp)
882 Set obj.gsProp = New testclass
883 Call ok(funcCalled = "gsProp set", "funcCalled = " & funcCalled)
886 Call ok(x = 3, "(x = obj) = " & x)
887 Call ok(funcCalled = "GetDefVal", "funcCalled = " & funcCalled)
889 Call ok(obj = 3, "(x = obj) = " & obj)
890 Call ok(funcCalled = "GetDefVal", "funcCalled = " & funcCalled)
892 Call obj.Class_Initialize
893 Call ok(obj.getPrivateProp() = true, "obj.getPrivateProp() = " & obj.getPrivateProp())
895 x = (New testclass).publicProp
898 Public Sub Class_Terminate()
899 funcCalled = "terminate"
903 Set obj = New TermTest
906 Call ok(funcCalled = "terminate", "funcCalled = " & funcCalled)
908 Set obj = New TermTest
910 Call obj.Class_Terminate
911 Call ok(funcCalled = "terminate", "funcCalled = " & funcCalled)
914 Call ok(funcCalled = "terminate", "funcCalled = " & funcCalled)
916 Call (New testclass).publicSub()
917 Call (New testclass).publicSub
919 x = "following ':' is correct syntax" :
920 x = "following ':' is correct syntax" :: :
921 :: x = "also correct syntax"
922 rem another ugly way for comments
923 x = "rem as simplestatement" : rem rem comment
926 Set obj = new EmptyClass
928 Set y = new EmptyClass
930 Call ok(obj is x, "obj is not x")
931 Call ok(x is obj, "x is not obj")
932 Call ok(not (obj is y), "obj is not y")
933 Call ok(not obj is y, "obj is not y")
934 Call ok(not (x is Nothing), "x is 1")
935 Call ok(Nothing is Nothing, "Nothing is not Nothing")
936 Call ok(x is obj and true, "x is obj and true is false")
939 Public Sub Test(MyMe)
940 Call ok(Me is MyMe, "Me is not MyMe")
947 Call ok(getVT(test) = "VT_DISPATCH", "getVT(test) = " & getVT(test))
948 Call ok(Me is Test, "Me is not Test")
950 Const c1 = 1, c2 = 2, c3 = -3
951 Call ok(c1 = 1, "c1 = " & c1)
952 Call ok(getVT(c1) = "VT_I2", "getVT(c1) = " & getVT(c1))
953 Call ok(c3 = -3, "c3 = " & c3)
954 Call ok(getVT(c3) = "VT_I2", "getVT(c3) = " & getVT(c3))
956 Const cb = True, cs = "test", cnull = null
957 Call ok(cb, "cb = " & cb)
958 Call ok(getVT(cb) = "VT_BOOL", "getVT(cb) = " & getVT(cb))
959 Call ok(cs = "test", "cs = " & cs)
960 Call ok(getVT(cs) = "VT_BSTR", "getVT(cs) = " & getVT(cs))
961 Call ok(isNull(cnull), "cnull = " & cnull)
962 Call ok(getVT(cnull) = "VT_NULL", "getVT(cnull) = " & getVT(cnull))
964 if false then Const conststr = "str"
965 Call ok(conststr = "str", "conststr = " & conststr)
966 Call ok(getVT(conststr) = "VT_BSTR", "getVT(conststr) = " & getVT(conststr))
967 Call ok(conststr = "str", "conststr = " & conststr)
971 Call ok(c1 = 1, "c1 = " & c1)
972 Call ok(funcconst = 1, "funcconst = " & funcconst)
978 ' Property may be used as an identifier (although it's a keyword)
982 Call ok(property, "property = " & property)
984 for property = 1 to 2
991 Public Sub Property()
994 Sub Test(byref property)
1005 Sub Test2(byval property)
1011 Call ok(getVT(arr) = "VT_EMPTY*", "getVT(arr) = " & getVT(arr))
1014 Dim arr2(4,3), arr3(5,4,3), arr0(0), noarr()
1016 Call ok(getVT(arr) = "VT_ARRAY|VT_BYREF|VT_VARIANT*", "getVT(arr) = " & getVT(arr))
1017 Call ok(getVT(arr2) = "VT_ARRAY|VT_BYREF|VT_VARIANT*", "getVT(arr2) = " & getVT(arr2))
1018 Call ok(getVT(arr0) = "VT_ARRAY|VT_BYREF|VT_VARIANT*", "getVT(arr0) = " & getVT(arr0))
1019 Call ok(getVT(noarr) = "VT_ARRAY|VT_BYREF|VT_VARIANT*", "getVT(noarr) = " & getVT(noarr))
1021 Call testArray(1, arr)
1022 Call testArray(2, arr2)
1023 Call testArray(3, arr3)
1024 Call testArray(0, arr0)
1025 Call testArray(-1, noarr)
1027 Call ok(getVT(arr(1)) = "VT_EMPTY*", "getVT(arr(1)) = " & getVT(arr(1)))
1028 Call ok(getVT(arr2(1,2)) = "VT_EMPTY*", "getVT(arr2(1,2)) = " & getVT(arr2(1,2)))
1029 Call ok(getVT(arr3(1,2,2)) = "VT_EMPTY*", "getVT(arr3(1,2,3)) = " & getVT(arr3(1,2,2)))
1030 Call ok(getVT(arr(0)) = "VT_EMPTY*", "getVT(arr(0)) = " & getVT(arr(0)))
1031 Call ok(getVT(arr(3)) = "VT_EMPTY*", "getVT(arr(3)) = " & getVT(arr(3)))
1032 Call ok(getVT(arr0(0)) = "VT_EMPTY*", "getVT(arr0(0)) = " & getVT(arr0(0)))
1035 Call ok(arr(2) = 3, "arr(2) = " & arr(2))
1036 Call ok(getVT(arr(2)) = "VT_I2*", "getVT(arr(2)) = " & getVT(arr(2)))
1040 Call ok(arr3(3,2,1) = 1, "arr3(3,2,1) = " & arr3(3,2,1))
1041 Call ok(arr3(1,2,3) = 2, "arr3(1,2,3) = " & arr3(1,2,3))
1044 Call ok(x(3,2,1) = 1, "x(3,2,1) = " & x(3,2,1))
1054 Call ok(getVT(x) = "VT_ARRAY|VT_VARIANT*", "getVT(x) = " & getVT(x))
1055 Call ok(x(2) = 2, "x(2) = " & x(2))
1056 Call ok(getVT(x(3)) = "VT_EMPTY*", "getVT(x(3)) = " & getVT(x(3)))
1059 Call ok(x(1) = 1, "x(1) = " & x(1))
1061 Call ok(getVT(x(1)) = "VT_EMPTY*", "getVT(x(1)) = " & getVT(x(1)))
1062 Call ok(x(2) = 2, "x(2) = " & x(2))
1067 Call ok(y(1) = 1, "y(1) = " & y(1))
1072 Call ok(getVT(forarr(1)) = "VT_EMPTY*", "getVT(forarr(1)) = " & getVT(forarr(1)))
1074 Call ok(forarr(1) = x, "forarr(1) = " & forarr(1))
1080 Call ok(forarr(x) = 2, "forarr(x) = " & forarr(x))
1087 Private Sub Class_Initialize
1088 Call ok(getVT(classarr) = "VT_ARRAY|VT_BYREF|VT_VARIANT*", "getVT(classarr) = " & getVT(classarr))
1089 Call testArray(-1, classnoarr)
1096 Public Sub testVarVT
1097 Call ok(getVT(var) = "VT_ARRAY|VT_VARIANT*", "getVT(var) = " & getVT(var))
1101 Set obj = new ArrClass
1102 Call ok(getVT(obj.classarr) = "VT_ARRAY|VT_VARIANT", "getVT(obj.classarr) = " & getVT(obj.classarr))
1103 'todo_wine Call ok(obj.classarr(1) = 2, "obj.classarr(1) = " & obj.classarr(1))
1106 Call ok(getVT(obj.var) = "VT_ARRAY|VT_VARIANT", "getVT(obj.var) = " & getVT(obj.var))
1109 Sub arrarg(byref refarr, byval valarr, byref refarr2, byval valarr2)
1110 Call ok(getVT(refarr) = "VT_ARRAY|VT_BYREF|VT_VARIANT*", "getVT(refarr) = " & getVT(refarr))
1111 Call ok(getVT(valarr) = "VT_ARRAY|VT_VARIANT*", "getVT(valarr) = " & getVT(valarr))
1112 Call ok(getVT(refarr2) = "VT_ARRAY|VT_VARIANT*", "getVT(refarr2) = " & getVT(refarr2))
1113 Call ok(getVT(valarr2) = "VT_ARRAY|VT_VARIANT*", "getVT(valarr2) = " & getVT(valarr2))
1116 Call arrarg(arr, arr, obj.classarr, obj.classarr)
1118 Sub arrarg2(byref refarr(), byval valarr(), byref refarr2(), byval valarr2())
1119 Call ok(getVT(refarr) = "VT_ARRAY|VT_BYREF|VT_VARIANT*", "getVT(refarr) = " & getVT(refarr))
1120 Call ok(getVT(valarr) = "VT_ARRAY|VT_VARIANT*", "getVT(valarr) = " & getVT(valarr))
1121 Call ok(getVT(refarr2) = "VT_ARRAY|VT_VARIANT*", "getVT(refarr2) = " & getVT(refarr2))
1122 Call ok(getVT(valarr2) = "VT_ARRAY|VT_VARIANT*", "getVT(valarr2) = " & getVT(valarr2))
1125 Call arrarg2(arr, arr, obj.classarr, obj.classarr)
1127 Sub testarrarg(arg(), vt)
1128 Call ok(getVT(arg) = vt, "getVT() = " & getVT(arg) & " expected " & vt)
1131 Call testarrarg(1, "VT_I2*")
1132 Call testarrarg(false, "VT_BOOL*")
1133 Call testarrarg(Empty, "VT_EMPTY*")
1135 ' It's allowed to declare non-builtin RegExp class...
1137 public property get Global()
1138 Call ok(false, "Global called")
1143 ' ...but there is no way to use it because builtin instance is always created
1145 Call ok(x.Global = false, "x.Global = " & x.Global)