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
19 OPTION EXPLICIT : : DIM W
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(34e5
= 3400000, "34e5 <> 3400000")
44 Call ok(56.789e5
= 5678900, "56.789e5 = 5678900")
45 Call ok(56.789e-2 = 0.56789, "56.789e-2 <> 0.56789")
46 Call ok(1e-94938484 = 0, "1e-... <> 0")
47 Call ok(34e0
= 34, "34e0 <> 34")
48 Call ok(34E1
= 340, "34E0 <> 340")
49 Call ok(--1 = 1, "--1 = " & --1)
50 Call ok(-empty
= 0, "-empty = " & (-empty
))
51 Call ok(true = -1, "! true = -1")
52 Call ok(false = 0, "false <> 0")
53 Call ok(&hff
= 255, "&hff <> 255")
54 Call ok(&Hff
= 255, "&Hff <> 255")
57 Call ok(W
= 5, "W = " & W
& " expected " & 5)
60 Call ok(x
= "xx", "x = " & x
& " expected ""xx""")
62 Call ok(true <> false, "true <> false is false")
63 Call ok(not (true <> true), "true <> true is true")
64 Call ok(not ("x" <> "x"), """x"" <> ""x"" is true")
65 Call ok(not (empty
<> empty
), "empty <> empty is true")
66 Call ok(x
<> "x", "x = ""x""")
67 Call ok("true" <> true, """true"" = true is true")
69 Call ok("" = true = false, """"" = true = false is false")
70 Call ok(not(false = true = ""), "false = true = """" is true")
71 Call ok(not (false = false <> false = false), "false = false <> false = false is true")
72 Call ok(not ("" <> false = false), """"" <> false = false is true")
74 Call ok(getVT(false) = "VT_BOOL", "getVT(false) is not VT_BOOL")
75 Call ok(getVT(true) = "VT_BOOL", "getVT(true) is not VT_BOOL")
76 Call ok(getVT("") = "VT_BSTR", "getVT("""") is not VT_BSTR")
77 Call ok(getVT("test") = "VT_BSTR", "getVT(""test"") is not VT_BSTR")
78 Call ok(getVT(Empty
) = "VT_EMPTY", "getVT(Empty) is not VT_EMPTY")
79 Call ok(getVT(null
) = "VT_NULL", "getVT(null) is not VT_NULL")
80 Call ok(getVT(0) = "VT_I2", "getVT(0) is not VT_I2")
81 Call ok(getVT(1) = "VT_I2", "getVT(1) is not VT_I2")
82 Call ok(getVT(0.5) = "VT_R8", "getVT(0.5) is not VT_R8")
83 Call ok(getVT(0.0) = "VT_R8", "getVT(0.0) is not VT_R8")
84 Call ok(getVT(2147483647) = "VT_I4", "getVT(2147483647) is not VT_I4")
85 Call ok(getVT(2147483648) = "VT_R8", "getVT(2147483648) is not VT_R8")
86 Call ok(getVT(&h10
&) = "VT_I2", "getVT(&h10&) is not VT_I2")
87 Call ok(getVT(&h10000
&) = "VT_I4", "getVT(&h10000&) is not VT_I4")
88 Call ok(getVT(&H10000
&) = "VT_I4", "getVT(&H10000&) is not VT_I4")
89 Call ok(getVT(&hffFFffFF
&) = "VT_I2", "getVT(&hffFFffFF&) is not VT_I2")
90 Call ok(getVT(1e2
) = "VT_R8", "getVT(1e2) is not VT_R8")
91 Call ok(getVT(1e0
) = "VT_R8", "getVT(1e0) is not VT_R8")
92 Call ok(getVT(0.1e2
) = "VT_R8", "getVT(0.1e2) is not VT_R8")
93 Call ok(getVT(1 & 100000) = "VT_BSTR", "getVT(1 & 100000) is not VT_BSTR")
94 Call ok(getVT(-empty
) = "VT_I2", "getVT(-empty) = " & getVT(-empty
))
95 Call ok(getVT(-null
) = "VT_NULL", "getVT(-null) = " & getVT(-null
))
96 Call ok(getVT(y
) = "VT_EMPTY*", "getVT(y) = " & getVT(y
))
97 Call ok(getVT(nothing) = "VT_DISPATCH", "getVT(nothing) = " & getVT(nothing))
99 Call ok(getVT(x
) = "VT_DISPATCH*", "getVT(x=nothing) = " & getVT(x
))
101 Call ok(getVT(x
) = "VT_BOOL*", "getVT(x) = " & getVT(x
))
102 Call ok(getVT(false or true) = "VT_BOOL", "getVT(false) is not VT_BOOL")
104 Call ok(getVT(x
) = "VT_BSTR*", "getVT(x) is not VT_BSTR*")
106 Call ok(getVT(x
) = "VT_R8*", "getVT(x) = " & getVT(x
))
108 Call ok(isNullDisp(nothing), "nothing is not nulldisp?")
111 Call ok("ab" & "cd" = "abcd", """ab"" & ""cd"" <> ""abcd""")
112 Call ok("ab " & null
= "ab ", """ab"" & null = " & ("ab " & null
))
113 Call ok("ab " & empty
= "ab ", """ab"" & empty = " & ("ab " & empty
))
114 Call ok(1 & 100000 = "1100000", "1 & 100000 = " & (1 & 100000))
115 Call ok("ab" & x
= "abxx", """ab"" & x = " & ("ab"&x
))
117 if(isEnglishLang
) then
118 Call ok("" & true = "True", """"" & true = " & true)
119 Call ok(true & false = "TrueFalse", "true & false = " & (true & false))
122 call ok(true and true, "true and true is not true")
123 call ok(true and not false, "true and not false is not true")
124 call ok(not (false and true), "not (false and true) is not true")
125 call ok(getVT(null
and true) = "VT_NULL", "getVT(null and true) = " & getVT(null
and true))
127 call ok(false or true, "false or uie is false?")
128 call ok(not (false or false), "false or false is not false?")
129 call ok(false and false or true, "false and false or true is false?")
130 call ok(true or false and false, "true or false and false is false?")
131 call ok(null
or true, "null or true is false")
133 call ok(true xor
false, "true xor false is false?")
134 call ok(not (false xor
false), "false xor false is true?")
135 call ok(not (true or false xor
true), "true or false xor true is true?")
136 call ok(not (true xor
false or true), "true xor false or true is true?")
138 call ok(false eqv
false, "false does not equal false?")
139 call ok(not (false eqv
true), "false equals true?")
140 call ok(getVT(false eqv null
) = "VT_NULL", "getVT(false eqv null) = " & getVT(false eqv null
))
142 call ok(true imp
true, "true does not imp true?")
143 call ok(false imp
false, "false does not imp false?")
144 call ok(not (true imp
false), "true imp false?")
145 call ok(false imp null
, "false imp null is false?")
147 Call ok(2 >= 1, "! 2 >= 1")
148 Call ok(2 >= 2, "! 2 >= 2")
149 Call ok(not(true >= 2), "true >= 2 ?")
150 Call ok(2 > 1, "! 2 > 1")
151 Call ok(false > true, "! false < true")
152 Call ok(0 > true, "! 0 > true")
153 Call ok(not (true > 0), "true > 0")
154 Call ok(not (0 > 1 = 1), "0 > 1 = 1")
155 Call ok(1 < 2, "! 1 < 2")
156 Call ok(1 = 1 < 0, "! 1 = 1 < 0")
157 Call ok(1 <= 2, "! 1 <= 2")
158 Call ok(2 <= 2, "! 2 <= 2")
160 Call ok(isNull(0 = null
), "'(0 = null)' is not null")
161 Call ok(isNull(null
= 1), "'(null = 1)' is not null")
162 Call ok(isNull(0 > null
), "'(0 > null)' is not null")
163 Call ok(isNull(null
> 1), "'(null > 1)' is not null")
164 Call ok(isNull(0 < null
), "'(0 < null)' is not null")
165 Call ok(isNull(null
< 1), "'(null < 1)' is not null")
166 Call ok(isNull(0 <> null
), "'(0 <> null)' is not null")
167 Call ok(isNull(null
<> 1), "'(null <> 1)' is not null")
168 Call ok(isNull(0 >= null
), "'(0 >= null)' is not null")
169 Call ok(isNull(null
>= 1), "'(null >= 1)' is not null")
170 Call ok(isNull(0 <= null
), "'(0 <= null)' is not null")
171 Call ok(isNull(null
<= 1), "'(null <= 1)' is not null")
174 Call ok(2+2 = 4, "2+2 = " & (2+2))
175 Call ok(false + 6 + true = 5, "false + 6 + true <> 5")
176 Call ok(getVT(2+null
) = "VT_NULL", "getVT(2+null) = " & getVT(2+null
))
177 Call ok(2+empty
= 2, "2+empty = " & (2+empty
))
178 Call ok(x
+x
= 6, "x+x = " & (x
+x
))
180 Call ok(5-1 = 4, "5-1 = " & (5-1))
181 Call ok(3+5-true = 9, "3+5-true <> 9")
182 Call ok(getVT(2-null
) = "VT_NULL", "getVT(2-null) = " & getVT(2-null
))
183 Call ok(2-empty
= 2, "2-empty = " & (2-empty
))
184 Call ok(2-x
= -1, "2-x = " & (2-x
))
186 Call ok(9 Mod
6 = 3, "9 Mod 6 = " & (9 Mod
6))
187 Call ok(11.6 Mod
5.5 = False, "11.6 Mod 5.5 = " & (11.6 Mod
5.5 = 0.6))
188 Call ok(7 Mod
4+2 = 5, "7 Mod 4+2 <> 5")
189 Call ok(getVT(2 mod null
) = "VT_NULL", "getVT(2 mod null) = " & getVT(2 mod null
))
190 Call ok(getVT(null mod
2) = "VT_NULL", "getVT(null mod 2) = " & getVT(null mod
2))
191 'FIXME: Call ok(empty mod 2 = 0, "empty mod 2 = " & (empty mod 2))
193 Call ok(5 \
2 = 2, "5 \ 2 = " & (5\
2))
194 Call ok(4.6 \
1.5 = 2, "4.6 \ 1.5 = " & (4.6\
1.5))
195 Call ok(4.6 \
1.49 = 5, "4.6 \ 1.49 = " & (4.6\
1.49))
196 Call ok(2+3\
4 = 2, "2+3\4 = " & (2+3\
4))
198 Call ok(2*3 = 6, "2*3 = " & (2*3))
199 Call ok(3/2 = 1.5, "3/2 = " & (3/2))
200 Call ok(5\
4/2 = 2, "5\4/2 = " & (5\
2/1))
201 Call ok(12/3\
2 = 2, "12/3\2 = " & (12/3\
2))
202 Call ok(5/1000000 = 0.000005, "5/1000000 = " & (5/1000000))
204 Call ok(2^
3 = 8, "2^3 = " & (2^
3))
205 Call ok(2^
3^
2 = 64, "2^3^2 = " & (2^
3^
2))
206 Call ok(-3^
2 = 9, "-3^2 = " & (-3^
2))
207 Call ok(2*3^
2 = 18, "2*3^2 = " & (2*3^
2))
216 if true then y
= true : x
= y
219 x
= true : if false then x
= false
220 ok x
, "x is false, if false called?"
222 if not false then x
= true
223 ok x
, "x is false, if not false not called?"
225 if not false then x
= "test" : x
= true
226 ok x
, "x is false, if not false not called?"
228 if false then x
= y
: call ok(false, "if false .. : called")
230 if false then x
= y
: call ok(false, "if false .. : called") else x
= "else"
231 Call ok(x
= "else", "else not called?")
233 if true then x
= y
else y
= x
: Call ok(false, "in else?")
237 if false then x
= y
: if true then call ok(false, "embedded if called")
239 if false then x
=1 else x
=2 end if
240 if true then x
=1 end if
243 if false then x
= true : x
= true
244 Call ok(x
= false, "x <> false")
247 ok
false, "if false called"
254 Call ok(not x
, "x is false, if not evaluated?")
258 Call ok(false, "inside if false")
262 Call ok(x
, "else not called?")
266 Call ok(false, "inside if false")
268 Call ok(false, "inside elseif not true")
272 Call ok(x
, "else not called?")
276 Call ok(false, "inside if false")
279 ElseIf not False Then
282 Call ok(false, "inside else not true")
284 Call ok(x
, "elseif not called?")
288 Call ok(false, "inside if false")
289 ElseIf not False Then
292 Call ok(x
, "elseif not called?")
296 Call ok(x
, "if 1 not run?")
299 if &h10000
& then x
= true
300 Call ok(x
, "if &h10000& not run?")
310 call ok((x
and y
), "x or y is false after while")
332 WHILE x
< 3 : x
= x
+ 1
334 Call ok(x
= 3, "x not equal to 3")
345 do while not (x
and y
)
351 call ok((x
and y
), "x or y is false after while")
358 ok
false, "exit do didn't work"
362 Do While x
< 2 : x
= x
+ 1
364 Call ok(x
= 2, "x not equal to 2")
370 Call ok(x
= -3, "x not equal to -3")
380 call ok((x
and y
), "x or y is false after do until")
387 ok
false, "exit do didn't work"
393 Call ok(x
= 4, "x not equal to 4")
400 Call ok(x
= 40, "x not equal to 40")
408 call ok(x
, "x is false after do..loop?")
416 Call ok(x
= 6, "x not equal to 6")
426 call ok((x
and y
), "x or y is false after while")
433 ok
false, "exit do didn't work"
443 loop while not (x
and y
)
444 call ok((x
and y
), "x or y is false after while")
451 ok
false, "exit do didn't work"
458 Call ok(y
= "for1: 5 6 7 8", "y = " & y
)
461 for x
= 5 to 8 step
2
464 Call ok(y
= "for2: 5 7", "y = " & y
)
471 Call ok(y
= "for3: 5 6 7 8", "y = " & y
)
477 Call ok(y
= "for4:", "y = " & y
)
480 for x
= 5 to 3 step
true
483 Call ok(y
= "for5: 5 4 3", "y = " & y
)
487 for x
= 5 to z step
3-4
491 Call ok(y
= "for6: 5 4", "y = " & y
)
495 for x
= 5 to 8 step z
499 Call ok(y
= "for7: 5 6 7 8", "y = " & y
)
502 For x
= 10 To 18 Step
2 : : z
= z
+ 1
504 Call ok(z
= 5, "z not equal to 5")
511 Call ok(y
= "for8: 5 7", "y = " & y
)
514 Call ok(false, "for..to called when unexpected")
519 Call ok(false, "exit for not escaped the loop?")
525 Call ok(false, "exit for not escaped the loop?")
534 if null
then call ok(false, "if null evaluated")
537 call ok(false, "while null evaluated")
540 Call collectionObj
.reset()
542 for each x
in collectionObj
:
546 Call ok(y
= 9, "y = " & y
)
548 Call collectionObj
.reset()
552 for each x
in collectionObj
: z
= z
+ 2
554 Call ok(x
= y
, "x <> y")
556 Call ok(y
= 3, "y = " & y
)
557 Call ok(z
= 6, "z = " & z
)
558 Call ok(getVT(x
) = "VT_EMPTY*", "getVT(x) = " & getVT(x
))
560 Call collectionObj
.reset()
562 for each x
in collectionObj
563 if x
= 2 then exit for
566 Call ok(y
= 1, "y = " & y
)
567 Call ok(x
= 2, "x = " & x
)
569 Set obj
= collectionObj
575 Call ok(x
= y
, "x <> y")
577 Call ok(y
= 3, "y = " & y
)
578 Call ok(getVT(x
) = "VT_EMPTY*", "getVT(x) = " & getVT(x
))
583 Call ok(false, "unexpected case")
585 Call ok(false, "unexpected case")
587 Call ok(false, "unexpected case")
590 Call ok(false, "unexpected case")
591 case 0, false, 2+1, 10
593 case ok(false, "unexpected case")
594 Call ok(false, "unexpected case")
596 Call ok(false, "unexpected case")
598 Call ok(x
, "wrong case")
605 Call ok(x
, "wrong case")
610 Call ok(false, "unexpected case")
614 Call ok(x
, "wrong case")
622 Call ok(false, "unexpected case")
624 Call ok(x
, "wrong case")
628 Call ok(false, "unexpected case")
630 Call ok(false, "unexpected case")
638 case 3,1,2,4: x
= true
640 Call ok(false, "unexpected case")
642 Call ok(x
, "wrong case")
645 select case 2: case 5,6,7: Call ok(false, "unexpected case")
648 case else: Call ok(false, "unexpected case else")
650 Call ok(x
, "wrong case")
660 Call ok(false, "unexpected case") :
665 Call ok(x
, "wrong case")
675 Call ok(x
, "x is false, testsub not called?")
678 Call ok(not v
, "v is not true")
684 Call ok(x
, "x was not set by SubSetTrue")
687 Call ok(not false, "false is no longer false?")
689 Sub SubSetTrue2(ByRef v
)
690 Call ok(not v
, "v is not true")
696 Call ok(x
, "x was not set by SubSetTrue")
698 Sub TestSubArgVal(ByVal v
)
699 Call ok(not v
, "v is not false")
701 Call ok(v
, "v is not true?")
705 Call TestSubArgVal(x
)
706 Call ok(not x
, "x is true after TestSubArgVal call?")
708 Sub TestSubMultiArgs(a
,b
,c
,d
,e
)
709 Call ok(a
=1, "a = " & a
)
710 Call ok(b
=2, "b = " & b
)
711 Call ok(c
=3, "c = " & c
)
712 Call ok(d
=4, "d = " & d
)
713 Call ok(e
=5, "e = " & e
)
716 Sub TestSubExit(ByRef a
)
720 Call ok(false, "Exit Sub not called?")
723 Call TestSubExit(true)
732 TestSubMultiArgs
1, 2, 3, 4, 5
733 Call TestSubMultiArgs(1, 2, 3, 4, 5)
737 Call ok(not x
, "local x is not false?")
745 Call ok(x
, "global x is not true?")
747 Public Sub TestPublicSub
751 Private Sub TestPrivateSub
755 Public Sub TestSeparatorSub
: :
758 Call TestSeparatorSub
768 Call ok(x
, "x is false, testfunc not called?")
770 Function FuncSetTrue(v
)
771 Call ok(not v
, "v is not true")
777 Call ok(x
, "x was not set by FuncSetTrue")
780 Call ok(not false, "false is no longer false?")
782 Function FuncSetTrue2(ByRef v
)
783 Call ok(not v
, "v is not true")
789 Call ok(x
, "x was not set by FuncSetTrue")
791 Function TestFuncArgVal(ByVal v
)
792 Call ok(not v
, "v is not false")
794 Call ok(v
, "v is not true?")
798 Call TestFuncArgVal(x
)
799 Call ok(not x
, "x is true after TestFuncArgVal call?")
801 Function TestFuncMultiArgs(a
,b
,c
,d
,e
)
802 Call ok(a
=1, "a = " & a
)
803 Call ok(b
=2, "b = " & b
)
804 Call ok(c
=3, "c = " & c
)
805 Call ok(d
=4, "d = " & d
)
806 Call ok(e
=5, "e = " & e
)
809 TestFuncMultiArgs
1, 2, 3, 4, 5
810 Call TestFuncMultiArgs(1, 2, 3, 4, 5)
812 Function TestFuncLocalVal
814 Call ok(not x
, "local x is not false?")
820 Call TestFuncLocalVal
821 Call ok(x
, "global x is not true?")
823 Function TestFuncExit(ByRef a
)
827 Call ok(false, "Exit Function not called?")
830 Call TestFuncExit(true)
832 Function TestFuncExit2(ByRef a
)
838 Call ok(false, "Exit Function not called?")
841 Call TestFuncExit2(true)
847 Function FuncParseTest
848 End Function : x
= false
855 Call ok(ReturnTrue(), "ReturnTrue returned false?")
857 Function SetVal(ByRef x
, ByVal v
)
864 ok
SetVal(x
, true), "SetVal returned false?"
865 Call ok(x
, "x is not set to true by SetVal?")
867 Public Function TestPublicFunc
871 Private Function TestPrivateFunc
875 Public Function TestSepFunc(ByVal a
) : :
878 Call ok(TestSepFunc(1) = 1, "Function did not return 1")
881 ' Stop has an effect only in debugging mode
885 Call ok(getVT(x
) = "VT_DISPATCH*", "getVT(x=testObj) = " & getVT(x
))
887 Set obj
= New EmptyClass
888 Call ok(getVT(obj
) = "VT_DISPATCH*", "getVT(obj) = " & getVT(obj
))
894 Call ok(getVT(x
) = "VT_DISPATCH*", "getVT(x) = " & getVT(x
))
901 Public Function publicFunction()
906 Public Property Get gsProp()
908 funcCalled
= "gsProp get"
910 Call ok(false, "exit property not returned?")
913 Public Default
Property Get DefValGet
914 DefValGet
= privateProp
915 funcCalled
= "GetDefVal"
918 Public Property Let DefValGet(x
)
926 Public Property Let gsProp(val
)
928 funcCalled
= "gsProp let"
930 Call ok(false, "exit property not returned?")
933 Public Property Set gsProp(val
)
934 funcCalled
= "gsProp set"
936 Call ok(false, "exit property not returned?")
939 Public Sub setPrivateProp(x
)
943 Function getPrivateProp
944 getPrivateProp
= privateProp
947 Private Sub privateSub
950 Public Sub Class_Initialize
953 Call ok(getVT(privateProp
) = "VT_BOOL*", "getVT(privateProp) = " & getVT(privateProp
))
954 Call ok(getVT(publicProp2
) = "VT_I2*", "getVT(publicProp2) = " & getVT(publicProp2
))
955 Call ok(getVT(Me.publicProp2
) = "VT_I2", "getVT(Me.publicProp2) = " & getVT(Me.publicProp2
))
958 Property Get gsGetProp(x
)
963 Call testDisp(new testClass
)
965 Set obj
= New TestClass
967 Call ok(obj
.publicFunction
= 4, "obj.publicFunction = " & obj
.publicFunction
)
968 Call ok(obj
.publicFunction() = 4, "obj.publicFunction() = " & obj
.publicFunction())
972 Call obj
.publicFunction()
974 Call ok(getVT(obj
.publicProp
) = "VT_EMPTY", "getVT(obj.publicProp) = " & getVT(obj
.publicProp
))
976 Call ok(getVT(obj
.publicProp
) = "VT_I2", "getVT(obj.publicProp) = " & getVT(obj
.publicProp
))
977 Call ok(obj
.publicProp
= 3, "obj.publicProp = " & obj
.publicProp
)
980 Call ok(obj
.getPrivateProp() = true, "obj.getPrivateProp() = " & obj
.getPrivateProp())
981 Call obj
.setPrivateProp(6)
982 Call ok(obj
.getPrivateProp
= 6, "obj.getPrivateProp = " & obj
.getPrivateProp
)
986 Call ok(obj
.gsProp
= 6, "obj.gsProp = " & obj
.gsProp
)
987 Call ok(funcCalled
= "gsProp get", "funcCalled = " & funcCalled
)
989 Call ok(funcCalled
= "gsProp let", "funcCalled = " & funcCalled
)
990 Call ok(obj
.getPrivateProp
= 3, "obj.getPrivateProp = " & obj
.getPrivateProp
)
991 Set obj
.gsProp
= New testclass
992 Call ok(funcCalled
= "gsProp set", "funcCalled = " & funcCalled
)
995 Call ok(x
= 3, "(x = obj) = " & x
)
996 Call ok(funcCalled
= "GetDefVal", "funcCalled = " & funcCalled
)
998 Call ok(obj
= 3, "(x = obj) = " & obj
)
999 Call ok(funcCalled
= "GetDefVal", "funcCalled = " & funcCalled
)
1001 Call obj
.Class_Initialize
1002 Call ok(obj
.getPrivateProp() = true, "obj.getPrivateProp() = " & obj
.getPrivateProp())
1004 x
= (New testclass
).publicProp
1007 Public Sub Class_Terminate()
1008 funcCalled
= "terminate"
1012 Set obj
= New TermTest
1015 Call ok(funcCalled
= "terminate", "funcCalled = " & funcCalled
)
1017 Set obj
= New TermTest
1019 Call obj
.Class_Terminate
1020 Call ok(funcCalled
= "terminate", "funcCalled = " & funcCalled
)
1023 Call ok(funcCalled
= "terminate", "funcCalled = " & funcCalled
)
1025 Call (New testclass
).publicSub()
1026 Call (New testclass
).publicSub
1029 property get prop0()
1033 property get prop1(x
)
1037 property get prop2(x
, y
)
1042 set obj
= new PropTest
1044 call ok(obj
.prop0
= 1, "obj.prop0 = " & obj
.prop0
)
1045 call ok(obj
.prop1(3) = 4, "obj.prop1(3) = " & obj
.prop1(3))
1046 call ok(obj
.prop2(3,4) = 7, "obj.prop2(3,4) = " & obj
.prop2(3,4))
1051 x
= "following ':' is correct syntax" :
1052 x
= "following ':' is correct syntax" :: :
1053 :: x
= "also correct syntax"
1054 rem another ugly way for comments
1055 x
= "rem as simplestatement" : rem rem comment
1058 Set obj
= new EmptyClass
1060 Set y
= new EmptyClass
1062 Call ok(obj is x
, "obj is not x")
1063 Call ok(x is obj
, "x is not obj")
1064 Call ok(not (obj is y
), "obj is not y")
1065 Call ok(not obj is y
, "obj is not y")
1066 Call ok(not (x is
Nothing), "x is 1")
1067 Call ok(Nothing is
Nothing, "Nothing is not Nothing")
1068 Call ok(x is obj
and true, "x is obj and true is false")
1071 Public Sub Test(MyMe
)
1072 Call ok(Me is MyMe
, "Me is not MyMe")
1076 Set obj
= New TestMe
1079 Call ok(getVT(test
) = "VT_DISPATCH", "getVT(test) = " & getVT(test
))
1080 Call ok(Me is Test
, "Me is not Test")
1082 Const c1
= 1, c2
= 2, c3
= -3
1083 Call ok(c1
= 1, "c1 = " & c1
)
1084 Call ok(getVT(c1
) = "VT_I2", "getVT(c1) = " & getVT(c1
))
1085 Call ok(c3
= -3, "c3 = " & c3
)
1086 Call ok(getVT(c3
) = "VT_I2", "getVT(c3) = " & getVT(c3
))
1088 Const cb
= True, cs
= "test", cnull
= null
1089 Call ok(cb
, "cb = " & cb
)
1090 Call ok(getVT(cb
) = "VT_BOOL", "getVT(cb) = " & getVT(cb
))
1091 Call ok(cs
= "test", "cs = " & cs
)
1092 Call ok(getVT(cs
) = "VT_BSTR", "getVT(cs) = " & getVT(cs
))
1093 Call ok(isNull(cnull
), "cnull = " & cnull
)
1094 Call ok(getVT(cnull
) = "VT_NULL", "getVT(cnull) = " & getVT(cnull
))
1096 if false then Const conststr
= "str"
1097 Call ok(conststr
= "str", "conststr = " & conststr
)
1098 Call ok(getVT(conststr
) = "VT_BSTR", "getVT(conststr) = " & getVT(conststr
))
1099 Call ok(conststr
= "str", "conststr = " & conststr
)
1103 Call ok(c1
= 1, "c1 = " & c1
)
1104 Call ok(funcconst
= 1, "funcconst = " & funcconst
)
1110 ' Property may be used as an identifier (although it's a keyword)
1114 Call ok(property, "property = " & property)
1116 for property = 1 to 2
1123 Public Sub Property()
1126 Sub Test(byref property)
1137 Sub Test2(byval property)
1141 Class SeparatorTest
: : Dim varTest1
1143 Private Sub Class_Initialize
: varTest1
= 1
1146 Property Get Test1() :
1150 Property Let Test1(a
) :
1154 Public Function AddToTest1(ByVal a
) :: :
1155 varTest1
= varTest1
+ a
1156 AddToTest1
= varTest1
1157 End Function : End Class
: :: Set obj
= New SeparatorTest
1159 Call ok(obj
.Test1
= 1, "obj.Test1 is not 1")
1161 Call ok(obj
.Test1
= 6, "obj.Test1 is not 6")
1163 Call ok(obj
.Test1
= 11, "obj.Test1 is not 11")
1167 Call ok(getVT(arr
) = "VT_EMPTY*", "getVT(arr) = " & getVT(arr
))
1170 Dim arr2(4,3), arr3(5,4,3), arr0(0), noarr()
1172 Call ok(getVT(arr
) = "VT_ARRAY|VT_BYREF|VT_VARIANT*", "getVT(arr) = " & getVT(arr
))
1173 Call ok(getVT(arr2
) = "VT_ARRAY|VT_BYREF|VT_VARIANT*", "getVT(arr2) = " & getVT(arr2
))
1174 Call ok(getVT(arr0
) = "VT_ARRAY|VT_BYREF|VT_VARIANT*", "getVT(arr0) = " & getVT(arr0
))
1175 Call ok(getVT(noarr
) = "VT_ARRAY|VT_BYREF|VT_VARIANT*", "getVT(noarr) = " & getVT(noarr
))
1177 Call testArray(1, arr
)
1178 Call testArray(2, arr2
)
1179 Call testArray(3, arr3
)
1180 Call testArray(0, arr0
)
1181 Call testArray(-1, noarr
)
1183 Call ok(getVT(arr(1)) = "VT_EMPTY*", "getVT(arr(1)) = " & getVT(arr(1)))
1184 Call ok(getVT(arr2(1,2)) = "VT_EMPTY*", "getVT(arr2(1,2)) = " & getVT(arr2(1,2)))
1185 Call ok(getVT(arr3(1,2,2)) = "VT_EMPTY*", "getVT(arr3(1,2,3)) = " & getVT(arr3(1,2,2)))
1186 Call ok(getVT(arr(0)) = "VT_EMPTY*", "getVT(arr(0)) = " & getVT(arr(0)))
1187 Call ok(getVT(arr(3)) = "VT_EMPTY*", "getVT(arr(3)) = " & getVT(arr(3)))
1188 Call ok(getVT(arr0(0)) = "VT_EMPTY*", "getVT(arr0(0)) = " & getVT(arr0(0)))
1191 Call ok(arr(2) = 3, "arr(2) = " & arr(2))
1192 Call ok(getVT(arr(2)) = "VT_I2*", "getVT(arr(2)) = " & getVT(arr(2)))
1196 Call ok(arr3(3,2,1) = 1, "arr3(3,2,1) = " & arr3(3,2,1))
1197 Call ok(arr3(1,2,3) = 2, "arr3(1,2,3) = " & arr3(1,2,3))
1199 Call ok(arr2(4,3) = 1, "arr2(4,3) = " & arr2(4,3))
1202 Call ok(x(3,2,1) = 1, "x(3,2,1) = " & x(3,2,1))
1212 Call ok(getVT(x
) = "VT_ARRAY|VT_VARIANT*", "getVT(x) = " & getVT(x
))
1213 Call ok(x(2) = 2, "x(2) = " & x(2))
1214 Call ok(getVT(x(3)) = "VT_EMPTY*", "getVT(x(3)) = " & getVT(x(3)))
1217 Call ok(x(1) = 1, "x(1) = " & x(1))
1219 Call ok(getVT(x(1)) = "VT_EMPTY*", "getVT(x(1)) = " & getVT(x(1)))
1220 Call ok(x(2) = 2, "x(2) = " & x(2))
1225 Call ok(y(1) = 1, "y(1) = " & y(1))
1230 Call ok(getVT(forarr(1)) = "VT_EMPTY*", "getVT(forarr(1)) = " & getVT(forarr(1)))
1232 Call ok(forarr(1) = x
, "forarr(1) = " & forarr(1))
1238 Call ok(forarr(x
) = 2, "forarr(x) = " & forarr(x
))
1245 Private Sub Class_Initialize
1246 Call ok(getVT(classarr
) = "VT_ARRAY|VT_BYREF|VT_VARIANT*", "getVT(classarr) = " & getVT(classarr
))
1247 Call testArray(-1, classnoarr
)
1254 Public Sub testVarVT
1255 Call ok(getVT(var
) = "VT_ARRAY|VT_VARIANT*", "getVT(var) = " & getVT(var
))
1259 Set obj
= new ArrClass
1260 Call ok(getVT(obj
.classarr
) = "VT_ARRAY|VT_VARIANT", "getVT(obj.classarr) = " & getVT(obj
.classarr
))
1261 'todo_wine Call ok(obj.classarr(1) = 2, "obj.classarr(1) = " & obj.classarr(1))
1264 Call ok(getVT(obj
.var
) = "VT_ARRAY|VT_VARIANT", "getVT(obj.var) = " & getVT(obj
.var
))
1267 Sub arrarg(byref refarr
, byval valarr
, byref refarr2
, byval valarr2
)
1268 Call ok(getVT(refarr
) = "VT_ARRAY|VT_BYREF|VT_VARIANT*", "getVT(refarr) = " & getVT(refarr
))
1269 Call ok(getVT(valarr
) = "VT_ARRAY|VT_VARIANT*", "getVT(valarr) = " & getVT(valarr
))
1270 Call ok(getVT(refarr2
) = "VT_ARRAY|VT_VARIANT*", "getVT(refarr2) = " & getVT(refarr2
))
1271 Call ok(getVT(valarr2
) = "VT_ARRAY|VT_VARIANT*", "getVT(valarr2) = " & getVT(valarr2
))
1274 Call arrarg(arr
, arr
, obj
.classarr
, obj
.classarr
)
1276 Sub arrarg2(byref refarr(), byval valarr(), byref refarr2(), byval valarr2())
1277 Call ok(getVT(refarr
) = "VT_ARRAY|VT_BYREF|VT_VARIANT*", "getVT(refarr) = " & getVT(refarr
))
1278 Call ok(getVT(valarr
) = "VT_ARRAY|VT_VARIANT*", "getVT(valarr) = " & getVT(valarr
))
1279 Call ok(getVT(refarr2
) = "VT_ARRAY|VT_VARIANT*", "getVT(refarr2) = " & getVT(refarr2
))
1280 Call ok(getVT(valarr2
) = "VT_ARRAY|VT_VARIANT*", "getVT(valarr2) = " & getVT(valarr2
))
1283 Call arrarg2(arr
, arr
, obj
.classarr
, obj
.classarr
)
1285 Sub testarrarg(arg(), vt
)
1286 Call ok(getVT(arg
) = vt
, "getVT() = " & getVT(arg
) & " expected " & vt
)
1289 Call testarrarg(1, "VT_I2*")
1290 Call testarrarg(false, "VT_BOOL*")
1291 Call testarrarg(Empty
, "VT_EMPTY*")
1294 'Following test crashes on wine
1295 'Call ok(arr(0) = "not modified", "arr(0) = " & arr(0))
1299 arr(0) = "not modified"
1301 Call ok(arr(0) = "modified", "arr(0) = " & arr(0))
1303 arr(0) = "not modified"
1305 Call todo_wine_ok(arr(0) = "not modified", "arr(0) = " & arr(0))
1307 for x
= 0 to UBound(arr
)
1312 Call ok(x
= y
, "x = " & x
& ", expected " & y
)
1313 Call ok(arr(y
) = y
, "arr(" & y
& ") = " & arr(y
))
1318 Call ok(y
= 4, "y = " & y
& " after array enumeration")
1320 for x
=0 to UBound(arr2
, 1)
1321 for y
=0 to UBound(arr2
, 2)
1322 arr2(x
, y
) = x
+ y
*(UBound(arr2
, 1)+1)
1327 Call ok(x
= y
, "x = " & x
& ", expected " & y
)
1330 Call ok(y
= 20, "y = " & y
& " after array enumeration")
1333 Call ok(false, "Empty array contains: " & x
)
1336 ' It's allowed to declare non-builtin RegExp class...
1338 public property get Global()
1339 Call ok(false, "Global called")
1344 ' ...but there is no way to use it because builtin instance is always created
1346 Call ok(x
.Global = false, "x.Global = " & x
.Global)