vbscript: Added interp_me implementation.
[wine/multimedia.git] / dlls / vbscript / tests / lang.vbs
blob922fc6ab2afd6510ab112bfe9b74280e3bd43b09
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
21 dim x, y
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))
45 x = "xx"
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))
75 set x = nothing
76 Call ok(getVT(x) = "VT_DISPATCH*", "getVT(x=nothing) = " & getVT(x))
77 x = true
78 Call ok(getVT(x) = "VT_BOOL*", "getVT(x) = " & getVT(x))
80 Call ok(isNullDisp(nothing), "nothing is not nulldisp?")
82 x = "xx"
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))
92 end if
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")
132 x = 3
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))
167 if false then
168 ok false, "if false called"
169 end if
171 x = true
172 if x then
173 x = false
174 end if
175 Call ok(not x, "x is false, if not evaluated?")
177 x = false
178 If false Then
179 Call ok(false, "inside if false")
180 Else
181 x = true
182 End If
183 Call ok(x, "else not called?")
185 x = false
186 If false Then
187 Call ok(false, "inside if false")
188 ElseIf not True Then
189 Call ok(false, "inside elseif not true")
190 Else
191 x = true
192 End If
193 Call ok(x, "else not called?")
195 x = false
196 If false Then
197 Call ok(false, "inside if false")
198 x = 1
199 y = 10+x
200 ElseIf not False Then
201 x = true
202 Else
203 Call ok(false, "inside else not true")
204 End If
205 Call ok(x, "elseif not called?")
207 x = false
208 If false Then
209 Call ok(false, "inside if false")
210 ElseIf not False Then
211 x = true
212 End If
213 Call ok(x, "elseif not called?")
215 x = false
216 y = false
217 while not (x and y)
218 if x then
219 y = true
220 end if
221 x = true
222 wend
223 call ok((x and y), "x or y is false after while")
225 while false
226 wend
228 x = false
229 y = false
230 do while not (x and y)
231 if x then
232 y = true
233 end if
234 x = true
235 loop
236 call ok((x and y), "x or y is false after while")
238 do while false
239 loop
241 do while true
242 exit do
243 ok false, "exit do didn't work"
244 loop
246 x = false
247 y = false
248 do until x and y
249 if x then
250 y = true
251 end if
252 x = true
253 loop
254 call ok((x and y), "x or y is false after do until")
256 do until true
257 loop
259 do until false
260 exit do
261 ok false, "exit do didn't work"
262 loop
264 x = false
265 y = false
267 if x then
268 y = true
269 end if
270 x = true
271 loop until x and y
272 call ok((x and y), "x or y is false after while")
275 loop until true
278 exit do
279 ok false, "exit do didn't work"
280 loop until false
282 x = false
283 y = false
285 if x then
286 y = true
287 end if
288 x = true
289 loop while not (x and y)
290 call ok((x and y), "x or y is false after while")
293 loop while false
296 exit do
297 ok false, "exit do didn't work"
298 loop while true
300 if false then
301 Sub testsub
302 x = true
303 End Sub
304 end if
306 x = false
307 Call testsub
308 Call ok(x, "x is false, testsub not called?")
310 Sub SubSetTrue(v)
311 Call ok(not v, "v is not true")
312 v = true
313 End Sub
315 x = false
316 SubSetTrue x
317 Call ok(x, "x was not set by SubSetTrue")
319 SubSetTrue false
320 Call ok(not false, "false is no longer false?")
322 Sub SubSetTrue2(ByRef v)
323 Call ok(not v, "v is not true")
324 v = true
325 End Sub
327 x = false
328 SubSetTrue2 x
329 Call ok(x, "x was not set by SubSetTrue")
331 Sub TestSubArgVal(ByVal v)
332 Call ok(not v, "v is not false")
333 v = true
334 Call ok(v, "v is not true?")
335 End Sub
337 x = false
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)
347 End Sub
349 Sub TestSubExit(ByRef a)
350 If a Then
351 Exit Sub
352 End If
353 Call ok(false, "Exit Sub not called?")
354 End Sub
356 Call TestSubExit(true)
358 TestSubMultiArgs 1, 2, 3, 4, 5
359 Call TestSubMultiArgs(1, 2, 3, 4, 5)
361 Sub TestSubLocalVal
362 x = false
363 Call ok(not x, "local x is not false?")
364 Dim x
365 End Sub
367 x = true
368 y = true
369 Call TestSubLocalVal
370 Call ok(x, "global x is not true?")
372 Public Sub TestPublicSub
373 End Sub
374 Call TestPublicSub
376 Private Sub TestPrivateSub
377 End Sub
378 Call TestPrivateSub
380 if false then
381 Function testfunc
382 x = true
383 End Function
384 end if
386 x = false
387 Call TestFunc
388 Call ok(x, "x is false, testfunc not called?")
390 Function FuncSetTrue(v)
391 Call ok(not v, "v is not true")
392 v = true
393 End Function
395 x = false
396 FuncSetTrue x
397 Call ok(x, "x was not set by FuncSetTrue")
399 FuncSetTrue false
400 Call ok(not false, "false is no longer false?")
402 Function FuncSetTrue2(ByRef v)
403 Call ok(not v, "v is not true")
404 v = true
405 End Function
407 x = false
408 FuncSetTrue2 x
409 Call ok(x, "x was not set by FuncSetTrue")
411 Function TestFuncArgVal(ByVal v)
412 Call ok(not v, "v is not false")
413 v = true
414 Call ok(v, "v is not true?")
415 End Function
417 x = false
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)
427 End Function
429 TestFuncMultiArgs 1, 2, 3, 4, 5
430 Call TestFuncMultiArgs(1, 2, 3, 4, 5)
432 Function TestFuncLocalVal
433 x = false
434 Call ok(not x, "local x is not false?")
435 Dim x
436 End Function
438 x = true
439 y = true
440 Call TestFuncLocalVal
441 Call ok(x, "global x is not true?")
443 Function TestFuncExit(ByRef a)
444 If a Then
445 Exit Function
446 End If
447 Call ok(false, "Exit Function not called?")
448 End Function
450 Call TestFuncExit(true)
452 Function ReturnTrue
453 ReturnTrue = false
454 ReturnTrue = true
455 End Function
457 Call ok(ReturnTrue(), "ReturnTrue returned false?")
459 Function SetVal(ByRef x, ByVal v)
460 x = v
461 SetVal = x
462 Exit Function
463 End Function
465 x = false
466 ok SetVal(x, true), "SetVal returned false?"
467 Call ok(x, "x is not set to true by SetVal?")
469 Public Function TestPublicFunc
470 End Function
471 Call TestPublicFunc
473 Private Function TestPrivateFunc
474 End Function
475 Call TestPrivateFunc
477 ' Stop has an effect only in debugging mode
478 Stop
480 set x = testObj
481 Call ok(getVT(x) = "VT_DISPATCH*", "getVT(x=testObj) = " & getVT(x))
483 Dim obj
484 Set obj = New EmptyClass
485 Call ok(getVT(obj) = "VT_DISPATCH*", "getVT(obj) = " & getVT(obj))
487 Class EmptyClass
488 End Class
490 Class TestClass
491 Public publicProp
493 Private privateProp
495 Public Function publicFunction()
496 privateSub()
497 publicFunction = 4
498 End Function
500 Public Property Get gsProp()
501 gsProp = privateProp
502 funcCalled = "gsProp get"
503 exit property
504 Call ok(false, "exit property not returned?")
505 End Property
507 Public Default Property Get DefValGet
508 DefValGet = privateProp
509 funcCalled = "GetDefVal"
510 End Property
512 Public Property Let DefValGet(x)
513 End Property
515 Public publicProp2
517 Public Sub publicSub
518 End Sub
520 Public Property Let gsProp(val)
521 privateProp = val
522 funcCalled = "gsProp let"
523 exit property
524 Call ok(false, "exit property not returned?")
525 End Property
527 Public Property Set gsProp(val)
528 funcCalled = "gsProp set"
529 exit property
530 Call ok(false, "exit property not returned?")
531 End Property
533 Public Sub setPrivateProp(x)
534 privateProp = x
535 End Sub
537 Function getPrivateProp
538 getPrivateProp = privateProp
539 End Function
541 Private Sub privateSub
542 End Sub
544 Public Sub Class_Initialize
545 publicProp2 = 2
546 privateProp = true
547 End Sub
548 End Class
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())
557 obj.publicSub()
558 Call obj.publicSub
559 Call obj.publicFunction()
561 Call ok(getVT(obj.publicProp) = "VT_EMPTY", "getVT(obj.publicProp) = " & getVT(obj.publicProp))
562 obj.publicProp = 3
563 Call ok(obj.publicProp = 3, "obj.publicProp = " & obj.publicProp)
564 obj.publicProp() = 3
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)
570 Dim funcCalled
571 funcCalled = ""
572 Call ok(obj.gsProp = 6, "obj.gsProp = " & obj.gsProp)
573 Call ok(funcCalled = "gsProp get", "funcCalled = " & funcCalled)
574 obj.gsProp = 3
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)
580 x = obj
581 Call ok(x = 3, "(x = obj) = " & x)
582 Call ok(funcCalled = "GetDefVal", "funcCalled = " & funcCalled)
583 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
592 Class TermTest
593 Public Sub Class_Terminate()
594 funcCalled = "terminate"
595 End Sub
596 End Class
598 Set obj = New TermTest
599 funcCalled = ""
600 Set obj = Nothing
601 Call ok(funcCalled = "terminate", "funcCalled = " & funcCalled)
603 Set obj = New TermTest
604 funcCalled = ""
605 Call obj.Class_Terminate
606 Call ok(funcCalled = "terminate", "funcCalled = " & funcCalled)
607 funcCalled = ""
608 Set obj = Nothing
609 Call ok(funcCalled = "terminate", "funcCalled = " & funcCalled)
611 Set obj = new EmptyClass
612 Set x = obj
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")
623 Class TestMe
624 Public Sub Test(MyMe)
625 Call ok(Me is MyMe, "Me is not MyMe")
626 End Sub
627 End Class
629 Set obj = New TestMe
630 Call obj.test(obj)
632 Call ok(getVT(test) = "VT_DISPATCH", "getVT(test) = " & getVT(test))
633 Call ok(Me is Test, "Me is not Test")
635 reportSuccess()