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
))
46 Call ok(x
= "xx", "x = " & x
& " expected ""xx""")
48 Call ok(true <> false, "true <> false is false")
49 Call ok(not (true <> true), "true <> true is true")
50 Call ok(not ("x" <> "x"), """x"" <> ""x"" is true")
51 Call ok(not (empty
<> empty
), "empty <> empty is true")
52 Call ok(x
<> "x", "x = ""x""")
54 Call ok(getVT(false) = "VT_BOOL", "getVT(false) is not VT_BOOL")
55 Call ok(getVT(true) = "VT_BOOL", "getVT(true) is not VT_BOOL")
56 Call ok(getVT("") = "VT_BSTR", "getVT("""") is not VT_BSTR")
57 Call ok(getVT("test") = "VT_BSTR", "getVT(""test"") is not VT_BSTR")
58 Call ok(getVT(Empty
) = "VT_EMPTY", "getVT(Empty) is not VT_EMPTY")
59 Call ok(getVT(null
) = "VT_NULL", "getVT(null) is not VT_NULL")
60 Call ok(getVT(0) = "VT_I2", "getVT(0) is not VT_I2")
61 Call ok(getVT(1) = "VT_I2", "getVT(1) is not VT_I2")
62 Call ok(getVT(0.5) = "VT_R8", "getVT(0.5) is not VT_R8")
63 Call ok(getVT(0.0) = "VT_R8", "getVT(0.0) is not VT_R8")
64 Call ok(getVT(2147483647) = "VT_I4", "getVT(2147483647) is not VT_I4")
65 Call ok(getVT(2147483648) = "VT_R8", "getVT(2147483648) is not VT_R8")
66 Call ok(getVT(&h10
&) = "VT_I2", "getVT(&h10&) is not VT_I2")
67 Call ok(getVT(&h10000
&) = "VT_I4", "getVT(&h10000&) is not VT_I4")
68 Call ok(getVT(&H10000
&) = "VT_I4", "getVT(&H10000&) is not VT_I4")
69 Call ok(getVT(&hffFFffFF
&) = "VT_I2", "getVT(&hffFFffFF&) is not VT_I2")
70 Call ok(getVT(1 & 100000) = "VT_BSTR", "getVT(1 & 100000) is not VT_BSTR")
71 Call ok(getVT(-empty
) = "VT_I2", "getVT(-empty) = " & getVT(-empty
))
72 Call ok(getVT(-null
) = "VT_NULL", "getVT(-null) = " & getVT(-null
))
73 Call ok(getVT(y
) = "VT_EMPTY*", "getVT(y) = " & getVT(y
))
74 Call ok(getVT(nothing) = "VT_DISPATCH", "getVT(nothing) = " & getVT(nothing))
76 Call ok(getVT(x
) = "VT_DISPATCH*", "getVT(x=nothing) = " & getVT(x
))
78 Call ok(getVT(x
) = "VT_BOOL*", "getVT(x) = " & getVT(x
))
80 Call ok(isNullDisp(nothing), "nothing is not nulldisp?")
83 Call ok("ab" & "cd" = "abcd", """ab"" & ""cd"" <> ""abcd""")
84 Call ok("ab " & null
= "ab ", """ab"" & null = " & ("ab " & null
))
85 Call ok("ab " & empty
= "ab ", """ab"" & empty = " & ("ab " & empty
))
86 Call ok(1 & 100000 = "1100000", "1 & 100000 = " & (1 & 100000))
87 Call ok("ab" & x
= "abxx", """ab"" & x = " & ("ab"&x
))
89 if(isEnglishLang
) then
90 Call ok("" & true = "True", """"" & true = " & true)
91 Call ok(true & false = "TrueFalse", "true & false = " & (true & false))
94 call ok(true and true, "true and true is not true")
95 call ok(true and not false, "true and not false is not true")
96 call ok(not (false and true), "not (false and true) is not true")
97 call ok(getVT(null
and true) = "VT_NULL", "getVT(null and true) = " & getVT(null
and true))
99 call ok(false or true, "false or uie is false?")
100 call ok(not (false or false), "false or false is not false?")
101 call ok(false and false or true, "false and false or true is false?")
102 call ok(true or false and false, "true or false and false is false?")
103 call ok(null
or true, "null or true is false")
105 call ok(true xor
false, "true xor false is false?")
106 call ok(not (false xor
false), "false xor false is true?")
107 call ok(not (true or false xor
true), "true or false xor true is true?")
108 call ok(not (true xor
false or true), "true xor false or true is true?")
110 call ok(false eqv
false, "false does not equal false?")
111 call ok(not (false eqv
true), "false equals true?")
112 call ok(getVT(false eqv null
) = "VT_NULL", "getVT(false eqv null) = " & getVT(false eqv null
))
114 call ok(true imp
true, "true does not imp true?")
115 call ok(false imp
false, "false does not imp false?")
116 call ok(not (true imp
false), "true imp false?")
117 call ok(false imp null
, "false imp null is false?")
119 Call ok(2 >= 1, "! 2 >= 1")
120 Call ok(2 >= 2, "! 2 >= 2")
121 Call ok(not(true >= 2), "true >= 2 ?")
122 Call ok(2 > 1, "! 2 > 1")
123 Call ok(false > true, "! false < true")
124 Call ok(0 > true, "! 0 > true")
125 Call ok(not (true > 0), "true > 0")
126 Call ok(not (0 > 1 = 1), "0 > 1 = 1")
127 Call ok(1 < 2, "! 1 < 2")
128 Call ok(1 = 1 < 0, "! 1 = 1 < 0")
129 Call ok(1 <= 2, "! 1 <= 2")
130 Call ok(2 <= 2, "! 2 <= 2")
133 Call ok(2+2 = 4, "2+2 = " & (2+2))
134 Call ok(false + 6 + true = 5, "false + 6 + true <> 5")
135 Call ok(getVT(2+null
) = "VT_NULL", "getVT(2+null) = " & getVT(2+null
))
136 Call ok(2+empty
= 2, "2+empty = " & (2+empty
))
137 Call ok(x
+x
= 6, "x+x = " & (x
+x
))
139 Call ok(5-1 = 4, "5-1 = " & (5-1))
140 Call ok(3+5-true = 9, "3+5-true <> 9")
141 Call ok(getVT(2-null
) = "VT_NULL", "getVT(2-null) = " & getVT(2-null
))
142 Call ok(2-empty
= 2, "2-empty = " & (2-empty
))
143 Call ok(2-x
= -1, "2-x = " & (2-x
))
145 Call ok(9 Mod
6 = 3, "9 Mod 6 = " & (9 Mod
6))
146 Call ok(11.6 Mod
5.5 = False, "11.6 Mod 5.5 = " & (11.6 Mod
5.5 = 0.6))
147 Call ok(7 Mod
4+2 = 5, "7 Mod 4+2 <> 5")
148 Call ok(getVT(2 mod null
) = "VT_NULL", "getVT(2 mod null) = " & getVT(2 mod null
))
149 Call ok(getVT(null mod
2) = "VT_NULL", "getVT(null mod 2) = " & getVT(null mod
2))
150 'FIXME: Call ok(empty mod 2 = 0, "empty mod 2 = " & (empty mod 2))
152 Call ok(5 \
2 = 2, "5 \ 2 = " & (5\
2))
153 Call ok(4.6 \
1.5 = 2, "4.6 \ 1.5 = " & (4.6\
1.5))
154 Call ok(4.6 \
1.49 = 5, "4.6 \ 1.49 = " & (4.6\
1.49))
155 Call ok(2+3\
4 = 2, "2+3\4 = " & (2+3\
4))
157 Call ok(2*3 = 6, "2*3 = " & (2*3))
158 Call ok(3/2 = 1.5, "3/2 = " & (3/2))
159 Call ok(5\
4/2 = 2, "5\4/2 = " & (5\
2/1))
160 Call ok(12/3\
2 = 2, "12/3\2 = " & (12/3\
2))
162 Call ok(2^
3 = 8, "2^3 = " & (2^
3))
163 Call ok(2^
3^
2 = 64, "2^3^2 = " & (2^
3^
2))
164 Call ok(-3^
2 = 9, "-3^2 = " & (-3^
2))
165 Call ok(2*3^
2 = 18, "2*3^2 = " & (2*3^
2))
168 ok
false, "if false called"
175 Call ok(not x
, "x is false, if not evaluated?")
179 Call ok(false, "inside if false")
183 Call ok(x
, "else not called?")
187 Call ok(false, "inside if false")
189 Call ok(false, "inside elseif not true")
193 Call ok(x
, "else not called?")
197 Call ok(false, "inside if false")
200 ElseIf not False Then
203 Call ok(false, "inside else not true")
205 Call ok(x
, "elseif not called?")
209 Call ok(false, "inside if false")
210 ElseIf not False Then
213 Call ok(x
, "elseif not called?")
223 call ok((x
and y
), "x or y is false after while")
230 do while not (x
and y
)
236 call ok((x
and y
), "x or y is false after while")
243 ok
false, "exit do didn't work"
254 call ok((x
and y
), "x or y is false after do until")
261 ok
false, "exit do didn't work"
272 call ok((x
and y
), "x or y is false after while")
279 ok
false, "exit do didn't work"
289 loop while not (x
and y
)
290 call ok((x
and y
), "x or y is false after while")
297 ok
false, "exit do didn't work"
308 Call ok(x
, "x is false, testsub not called?")
311 Call ok(not v
, "v is not true")
317 Call ok(x
, "x was not set by SubSetTrue")
320 Call ok(not false, "false is no longer false?")
322 Sub SubSetTrue2(ByRef v
)
323 Call ok(not v
, "v is not true")
329 Call ok(x
, "x was not set by SubSetTrue")
331 Sub TestSubArgVal(ByVal v
)
332 Call ok(not v
, "v is not false")
334 Call ok(v
, "v is not true?")
338 Call TestSubArgVal(x
)
339 Call ok(not x
, "x is true after TestSubArgVal call?")
341 Sub TestSubMultiArgs(a
,b
,c
,d
,e
)
342 Call ok(a
=1, "a = " & a
)
343 Call ok(b
=2, "b = " & b
)
344 Call ok(c
=3, "c = " & c
)
345 Call ok(d
=4, "d = " & d
)
346 Call ok(e
=5, "e = " & e
)
349 Sub TestSubExit(ByRef a
)
353 Call ok(false, "Exit Sub not called?")
356 Call TestSubExit(true)
358 TestSubMultiArgs
1, 2, 3, 4, 5
359 Call TestSubMultiArgs(1, 2, 3, 4, 5)
363 Call ok(not x
, "local x is not false?")
370 Call ok(x
, "global x is not true?")
372 Public Sub TestPublicSub
376 Private Sub TestPrivateSub
388 Call ok(x
, "x is false, testfunc not called?")
390 Function FuncSetTrue(v
)
391 Call ok(not v
, "v is not true")
397 Call ok(x
, "x was not set by FuncSetTrue")
400 Call ok(not false, "false is no longer false?")
402 Function FuncSetTrue2(ByRef v
)
403 Call ok(not v
, "v is not true")
409 Call ok(x
, "x was not set by FuncSetTrue")
411 Function TestFuncArgVal(ByVal v
)
412 Call ok(not v
, "v is not false")
414 Call ok(v
, "v is not true?")
418 Call TestFuncArgVal(x
)
419 Call ok(not x
, "x is true after TestFuncArgVal call?")
421 Function TestFuncMultiArgs(a
,b
,c
,d
,e
)
422 Call ok(a
=1, "a = " & a
)
423 Call ok(b
=2, "b = " & b
)
424 Call ok(c
=3, "c = " & c
)
425 Call ok(d
=4, "d = " & d
)
426 Call ok(e
=5, "e = " & e
)
429 TestFuncMultiArgs
1, 2, 3, 4, 5
430 Call TestFuncMultiArgs(1, 2, 3, 4, 5)
432 Function TestFuncLocalVal
434 Call ok(not x
, "local x is not false?")
440 Call TestFuncLocalVal
441 Call ok(x
, "global x is not true?")
443 Function TestFuncExit(ByRef a
)
447 Call ok(false, "Exit Function not called?")
450 Call TestFuncExit(true)
457 Call ok(ReturnTrue(), "ReturnTrue returned false?")
459 Function SetVal(ByRef x
, ByVal v
)
466 ok
SetVal(x
, true), "SetVal returned false?"
467 Call ok(x
, "x is not set to true by SetVal?")
469 Public Function TestPublicFunc
473 Private Function TestPrivateFunc
477 ' Stop has an effect only in debugging mode
481 Call ok(getVT(x
) = "VT_DISPATCH*", "getVT(x=testObj) = " & getVT(x
))
484 Set obj
= New EmptyClass
485 Call ok(getVT(obj
) = "VT_DISPATCH*", "getVT(obj) = " & getVT(obj
))
495 Public Function publicFunction()
500 Public Property Get gsProp()
502 funcCalled
= "gsProp get"
504 Call ok(false, "exit property not returned?")
507 Public Default
Property Get DefValGet
508 DefValGet
= privateProp
509 funcCalled
= "GetDefVal"
512 Public Property Let DefValGet(x
)
520 Public Property Let gsProp(val
)
522 funcCalled
= "gsProp let"
524 Call ok(false, "exit property not returned?")
527 Public Property Set gsProp(val
)
528 funcCalled
= "gsProp set"
530 Call ok(false, "exit property not returned?")
533 Public Sub setPrivateProp(x
)
537 Function getPrivateProp
538 getPrivateProp
= privateProp
541 Private Sub privateSub
544 Public Sub Class_Initialize
550 Call testDisp(new testClass
)
552 Set obj
= New TestClass
554 Call ok(obj
.publicFunction
= 4, "obj.publicFunction = " & obj
.publicFunction
)
555 Call ok(obj
.publicFunction() = 4, "obj.publicFunction() = " & obj
.publicFunction())
559 Call obj
.publicFunction()
561 Call ok(getVT(obj
.publicProp
) = "VT_EMPTY", "getVT(obj.publicProp) = " & getVT(obj
.publicProp
))
563 Call ok(obj
.publicProp
= 3, "obj.publicProp = " & obj
.publicProp
)
566 Call ok(obj
.getPrivateProp() = true, "obj.getPrivateProp() = " & obj
.getPrivateProp())
567 Call obj
.setPrivateProp(6)
568 Call ok(obj
.getPrivateProp
= 6, "obj.getPrivateProp = " & obj
.getPrivateProp
)
572 Call ok(obj
.gsProp
= 6, "obj.gsProp = " & obj
.gsProp
)
573 Call ok(funcCalled
= "gsProp get", "funcCalled = " & funcCalled
)
575 Call ok(funcCalled
= "gsProp let", "funcCalled = " & funcCalled
)
576 Call ok(obj
.getPrivateProp
= 3, "obj.getPrivateProp = " & obj
.getPrivateProp
)
577 Set obj
.gsProp
= New testclass
578 Call ok(funcCalled
= "gsProp set", "funcCalled = " & funcCalled
)
581 Call ok(x
= 3, "(x = obj) = " & x
)
582 Call ok(funcCalled
= "GetDefVal", "funcCalled = " & funcCalled
)
584 Call ok(obj
= 3, "(x = obj) = " & obj
)
585 Call ok(funcCalled
= "GetDefVal", "funcCalled = " & funcCalled
)
587 Call obj
.Class_Initialize
588 Call ok(obj
.getPrivateProp() = true, "obj.getPrivateProp() = " & obj
.getPrivateProp())
590 x
= (New testclass
).publicProp
593 Public Sub Class_Terminate()
594 funcCalled
= "terminate"
598 Set obj
= New TermTest
601 Call ok(funcCalled
= "terminate", "funcCalled = " & funcCalled
)
603 Set obj
= New TermTest
605 Call obj
.Class_Terminate
606 Call ok(funcCalled
= "terminate", "funcCalled = " & funcCalled
)
609 Call ok(funcCalled
= "terminate", "funcCalled = " & funcCalled
)
611 Set obj
= new EmptyClass
613 Set y
= new EmptyClass
615 Call ok(obj is x
, "obj is not x")
616 Call ok(x is obj
, "x is not obj")
617 Call ok(not (obj is y
), "obj is not y")
618 Call ok(not obj is y
, "obj is not y")
619 Call ok(not (x is
Nothing), "x is 1")
620 Call ok(Nothing is
Nothing, "Nothing is not Nothing")
621 Call ok(x is obj
and true, "x is obj and true is false")
624 Public Sub Test(MyMe
)
625 Call ok(Me is MyMe
, "Me is not MyMe")
632 Call ok(getVT(test
) = "VT_DISPATCH", "getVT(test) = " & getVT(test
))
633 Call ok(Me is Test
, "Me is not Test")