vbscript: Fixed 'exit do' statements crossing for in loops.
[wine/multimedia.git] / dlls / vbscript / tests / lang.vbs
blobf203e8332d596afb2d3a1a7ed070510dd5ee86ad
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, z
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")
49 x = "xx"
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))
85 set x = nothing
86 Call ok(getVT(x) = "VT_DISPATCH*", "getVT(x=nothing) = " & getVT(x))
87 x = true
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")
90 x = "x"
91 Call ok(getVT(x) = "VT_BSTR*", "getVT(x) is not VT_BSTR*")
92 x = 0.0
93 Call ok(getVT(x) = "VT_R8*", "getVT(x) = " & getVT(x))
95 Call ok(isNullDisp(nothing), "nothing is not nulldisp?")
97 x = "xx"
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))
107 end if
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")
147 x = 3
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))
182 x =_
187 x = 3
189 if true then y = true : x = y
190 ok x, "x is false"
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?")
208 if false then :
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
214 if false then
215 ok false, "if false called"
216 end if
218 x = true
219 if x then
220 x = false
221 end if
222 Call ok(not x, "x is false, if not evaluated?")
224 x = false
225 If false Then
226 Call ok(false, "inside if false")
227 Else
228 x = true
229 End If
230 Call ok(x, "else not called?")
232 x = false
233 If false Then
234 Call ok(false, "inside if false")
235 ElseIf not True Then
236 Call ok(false, "inside elseif not true")
237 Else
238 x = true
239 End If
240 Call ok(x, "else not called?")
242 x = false
243 If false Then
244 Call ok(false, "inside if false")
245 x = 1
246 y = 10+x
247 ElseIf not False Then
248 x = true
249 Else
250 Call ok(false, "inside else not true")
251 End If
252 Call ok(x, "elseif not called?")
254 x = false
255 If false Then
256 Call ok(false, "inside if false")
257 ElseIf not False Then
258 x = true
259 End If
260 Call ok(x, "elseif not called?")
262 x = false
263 if 1 then x = true
264 Call ok(x, "if 1 not run?")
266 x = false
267 if &h10000& then x = true
268 Call ok(x, "if &h10000& not run?")
270 x = false
271 y = false
272 while not (x and y)
273 if x then
274 y = true
275 end if
276 x = true
277 wend
278 call ok((x and y), "x or y is false after while")
280 while false
281 wend
283 x = false
284 y = false
285 do while not (x and y)
286 if x then
287 y = true
288 end if
289 x = true
290 loop
291 call ok((x and y), "x or y is false after while")
293 do while false
294 loop
296 do while true
297 exit do
298 ok false, "exit do didn't work"
299 loop
301 x = false
302 y = false
303 do until x and y
304 if x then
305 y = true
306 end if
307 x = true
308 loop
309 call ok((x and y), "x or y is false after do until")
311 do until true
312 loop
314 do until false
315 exit do
316 ok false, "exit do didn't work"
317 loop
319 x = false
320 y = false
322 if x then
323 y = true
324 end if
325 x = true
326 loop until x and y
327 call ok((x and y), "x or y is false after while")
330 loop until true
333 exit do
334 ok false, "exit do didn't work"
335 loop until false
337 x = false
338 y = false
340 if x then
341 y = true
342 end if
343 x = true
344 loop while not (x and y)
345 call ok((x and y), "x or y is false after while")
348 loop while false
351 exit do
352 ok false, "exit do didn't work"
353 loop while true
355 y = "for1:"
356 for x = 5 to 8
357 y = y & " " & x
358 next
359 Call ok(y = "for1: 5 6 7 8", "y = " & y)
361 y = "for2:"
362 for x = 5 to 8 step 2
363 y = y & " " & x
364 next
365 Call ok(y = "for2: 5 7", "y = " & y)
367 y = "for3:"
368 x = 2
369 for x = x+3 to 8
370 y = y & " " & x
371 next
372 Call ok(y = "for3: 5 6 7 8", "y = " & y)
374 y = "for4:"
375 for x = 5 to 4
376 y = y & " " & x
377 next
378 Call ok(y = "for4:", "y = " & y)
380 y = "for5:"
381 for x = 5 to 3 step true
382 y = y & " " & x
383 next
384 Call ok(y = "for5: 5 4 3", "y = " & y)
386 y = "for6:"
387 z = 4
388 for x = 5 to z step 3-4
389 y = y & " " & x
390 z = 0
391 next
392 Call ok(y = "for6: 5 4", "y = " & y)
394 y = "for7:"
395 z = 1
396 for x = 5 to 8 step z
397 y = y & " " & x
398 z = 2
399 next
400 Call ok(y = "for7: 5 6 7 8", "y = " & y)
402 y = "for8:"
403 for x = 5 to 8
404 y = y & " " & x
405 x = x+1
406 next
407 Call ok(y = "for8: 5 7", "y = " & y)
409 for x = 1.5 to 1
410 Call ok(false, "for..to called when unexpected")
411 next
413 for x = 1 to 100
414 exit for
415 Call ok(false, "exit for not escaped the loop?")
416 next
418 do while true
419 for x = 1 to 100
420 exit do
421 next
422 loop
424 Call collectionObj.reset()
425 y = 0
426 x = 10
427 for each x in collectionObj
428 y = y+1
429 Call ok(x = y, "x <> y")
430 next
431 Call ok(y = 3, "y = " & y)
432 Call ok(getVT(x) = "VT_EMPTY*", "getVT(x) = " & getVT(x))
434 if false then
435 Sub testsub
436 x = true
437 End Sub
438 end if
440 x = false
441 Call testsub
442 Call ok(x, "x is false, testsub not called?")
444 Sub SubSetTrue(v)
445 Call ok(not v, "v is not true")
446 v = true
447 End Sub
449 x = false
450 SubSetTrue x
451 Call ok(x, "x was not set by SubSetTrue")
453 SubSetTrue false
454 Call ok(not false, "false is no longer false?")
456 Sub SubSetTrue2(ByRef v)
457 Call ok(not v, "v is not true")
458 v = true
459 End Sub
461 x = false
462 SubSetTrue2 x
463 Call ok(x, "x was not set by SubSetTrue")
465 Sub TestSubArgVal(ByVal v)
466 Call ok(not v, "v is not false")
467 v = true
468 Call ok(v, "v is not true?")
469 End Sub
471 x = false
472 Call TestSubArgVal(x)
473 Call ok(not x, "x is true after TestSubArgVal call?")
475 Sub TestSubMultiArgs(a,b,c,d,e)
476 Call ok(a=1, "a = " & a)
477 Call ok(b=2, "b = " & b)
478 Call ok(c=3, "c = " & c)
479 Call ok(d=4, "d = " & d)
480 Call ok(e=5, "e = " & e)
481 End Sub
483 Sub TestSubExit(ByRef a)
484 If a Then
485 Exit Sub
486 End If
487 Call ok(false, "Exit Sub not called?")
488 End Sub
490 Call TestSubExit(true)
492 TestSubMultiArgs 1, 2, 3, 4, 5
493 Call TestSubMultiArgs(1, 2, 3, 4, 5)
495 Sub TestSubLocalVal
496 x = false
497 Call ok(not x, "local x is not false?")
498 Dim x
499 Dim a,b, c
500 End Sub
502 x = true
503 y = true
504 Call TestSubLocalVal
505 Call ok(x, "global x is not true?")
507 Public Sub TestPublicSub
508 End Sub
509 Call TestPublicSub
511 Private Sub TestPrivateSub
512 End Sub
513 Call TestPrivateSub
515 if false then
516 Function testfunc
517 x = true
518 End Function
519 end if
521 x = false
522 Call TestFunc
523 Call ok(x, "x is false, testfunc not called?")
525 Function FuncSetTrue(v)
526 Call ok(not v, "v is not true")
527 v = true
528 End Function
530 x = false
531 FuncSetTrue x
532 Call ok(x, "x was not set by FuncSetTrue")
534 FuncSetTrue false
535 Call ok(not false, "false is no longer false?")
537 Function FuncSetTrue2(ByRef v)
538 Call ok(not v, "v is not true")
539 v = true
540 End Function
542 x = false
543 FuncSetTrue2 x
544 Call ok(x, "x was not set by FuncSetTrue")
546 Function TestFuncArgVal(ByVal v)
547 Call ok(not v, "v is not false")
548 v = true
549 Call ok(v, "v is not true?")
550 End Function
552 x = false
553 Call TestFuncArgVal(x)
554 Call ok(not x, "x is true after TestFuncArgVal call?")
556 Function TestFuncMultiArgs(a,b,c,d,e)
557 Call ok(a=1, "a = " & a)
558 Call ok(b=2, "b = " & b)
559 Call ok(c=3, "c = " & c)
560 Call ok(d=4, "d = " & d)
561 Call ok(e=5, "e = " & e)
562 End Function
564 TestFuncMultiArgs 1, 2, 3, 4, 5
565 Call TestFuncMultiArgs(1, 2, 3, 4, 5)
567 Function TestFuncLocalVal
568 x = false
569 Call ok(not x, "local x is not false?")
570 Dim x
571 End Function
573 x = true
574 y = true
575 Call TestFuncLocalVal
576 Call ok(x, "global x is not true?")
578 Function TestFuncExit(ByRef a)
579 If a Then
580 Exit Function
581 End If
582 Call ok(false, "Exit Function not called?")
583 End Function
585 Call TestFuncExit(true)
587 Sub SubParseTest
588 End Sub : x = false
589 Call SubParseTest
591 Function FuncParseTest
592 End Function : x = false
594 Function ReturnTrue
595 ReturnTrue = false
596 ReturnTrue = true
597 End Function
599 Call ok(ReturnTrue(), "ReturnTrue returned false?")
601 Function SetVal(ByRef x, ByVal v)
602 x = v
603 SetVal = x
604 Exit Function
605 End Function
607 x = false
608 ok SetVal(x, true), "SetVal returned false?"
609 Call ok(x, "x is not set to true by SetVal?")
611 Public Function TestPublicFunc
612 End Function
613 Call TestPublicFunc
615 Private Function TestPrivateFunc
616 End Function
617 Call TestPrivateFunc
619 ' Stop has an effect only in debugging mode
620 Stop
622 set x = testObj
623 Call ok(getVT(x) = "VT_DISPATCH*", "getVT(x=testObj) = " & getVT(x))
625 Dim obj
626 Set obj = New EmptyClass
627 Call ok(getVT(obj) = "VT_DISPATCH*", "getVT(obj) = " & getVT(obj))
629 Class EmptyClass
630 End Class
632 Set x = obj
633 Call ok(getVT(x) = "VT_DISPATCH*", "getVT(x) = " & getVT(x))
635 Class TestClass
636 Public publicProp
638 Private privateProp
640 Public Function publicFunction()
641 privateSub()
642 publicFunction = 4
643 End Function
645 Public Property Get gsProp()
646 gsProp = privateProp
647 funcCalled = "gsProp get"
648 exit property
649 Call ok(false, "exit property not returned?")
650 End Property
652 Public Default Property Get DefValGet
653 DefValGet = privateProp
654 funcCalled = "GetDefVal"
655 End Property
657 Public Property Let DefValGet(x)
658 End Property
660 Public publicProp2
662 Public Sub publicSub
663 End Sub
665 Public Property Let gsProp(val)
666 privateProp = val
667 funcCalled = "gsProp let"
668 exit property
669 Call ok(false, "exit property not returned?")
670 End Property
672 Public Property Set gsProp(val)
673 funcCalled = "gsProp set"
674 exit property
675 Call ok(false, "exit property not returned?")
676 End Property
678 Public Sub setPrivateProp(x)
679 privateProp = x
680 End Sub
682 Function getPrivateProp
683 getPrivateProp = privateProp
684 End Function
686 Private Sub privateSub
687 End Sub
689 Public Sub Class_Initialize
690 publicProp2 = 2
691 privateProp = true
692 End Sub
693 End Class
695 Call testDisp(new testClass)
697 Set obj = New TestClass
699 Call ok(obj.publicFunction = 4, "obj.publicFunction = " & obj.publicFunction)
700 Call ok(obj.publicFunction() = 4, "obj.publicFunction() = " & obj.publicFunction())
702 obj.publicSub()
703 Call obj.publicSub
704 Call obj.publicFunction()
706 Call ok(getVT(obj.publicProp) = "VT_EMPTY", "getVT(obj.publicProp) = " & getVT(obj.publicProp))
707 obj.publicProp = 3
708 Call ok(obj.publicProp = 3, "obj.publicProp = " & obj.publicProp)
709 obj.publicProp() = 3
711 Call ok(obj.getPrivateProp() = true, "obj.getPrivateProp() = " & obj.getPrivateProp())
712 Call obj.setPrivateProp(6)
713 Call ok(obj.getPrivateProp = 6, "obj.getPrivateProp = " & obj.getPrivateProp)
715 Dim funcCalled
716 funcCalled = ""
717 Call ok(obj.gsProp = 6, "obj.gsProp = " & obj.gsProp)
718 Call ok(funcCalled = "gsProp get", "funcCalled = " & funcCalled)
719 obj.gsProp = 3
720 Call ok(funcCalled = "gsProp let", "funcCalled = " & funcCalled)
721 Call ok(obj.getPrivateProp = 3, "obj.getPrivateProp = " & obj.getPrivateProp)
722 Set obj.gsProp = New testclass
723 Call ok(funcCalled = "gsProp set", "funcCalled = " & funcCalled)
725 x = obj
726 Call ok(x = 3, "(x = obj) = " & x)
727 Call ok(funcCalled = "GetDefVal", "funcCalled = " & funcCalled)
728 funcCalled = ""
729 Call ok(obj = 3, "(x = obj) = " & obj)
730 Call ok(funcCalled = "GetDefVal", "funcCalled = " & funcCalled)
732 Call obj.Class_Initialize
733 Call ok(obj.getPrivateProp() = true, "obj.getPrivateProp() = " & obj.getPrivateProp())
735 x = (New testclass).publicProp
737 Class TermTest
738 Public Sub Class_Terminate()
739 funcCalled = "terminate"
740 End Sub
741 End Class
743 Set obj = New TermTest
744 funcCalled = ""
745 Set obj = Nothing
746 Call ok(funcCalled = "terminate", "funcCalled = " & funcCalled)
748 Set obj = New TermTest
749 funcCalled = ""
750 Call obj.Class_Terminate
751 Call ok(funcCalled = "terminate", "funcCalled = " & funcCalled)
752 funcCalled = ""
753 Set obj = Nothing
754 Call ok(funcCalled = "terminate", "funcCalled = " & funcCalled)
756 Call (New testclass).publicSub()
757 Call (New testclass).publicSub
759 x = "following ':' is correct syntax" :
760 x = "following ':' is correct syntax" :: :
761 :: x = "also correct syntax"
762 rem another ugly way for comments
763 x = "rem as simplestatement" : rem rem comment
766 Set obj = new EmptyClass
767 Set x = obj
768 Set y = new EmptyClass
770 Call ok(obj is x, "obj is not x")
771 Call ok(x is obj, "x is not obj")
772 Call ok(not (obj is y), "obj is not y")
773 Call ok(not obj is y, "obj is not y")
774 Call ok(not (x is Nothing), "x is 1")
775 Call ok(Nothing is Nothing, "Nothing is not Nothing")
776 Call ok(x is obj and true, "x is obj and true is false")
778 Class TestMe
779 Public Sub Test(MyMe)
780 Call ok(Me is MyMe, "Me is not MyMe")
781 End Sub
782 End Class
784 Set obj = New TestMe
785 Call obj.test(obj)
787 Call ok(getVT(test) = "VT_DISPATCH", "getVT(test) = " & getVT(test))
788 Call ok(Me is Test, "Me is not Test")
790 Const c1 = 1, c2 = 2
791 Call ok(c1 = 1, "c1 = " & c1)
792 Call ok(getVT(c1) = "VT_I2", "getVT(c1) = " & getVT(c1))
794 if false then Const conststr = "str"
795 Call ok(conststr = "str", "conststr = " & conststr)
796 Call ok(getVT(conststr) = "VT_BSTR", "getVT(conststr) = " & getVT(conststr))
797 Call ok(conststr = "str", "conststr = " & conststr)
799 Sub ConstTestSub
800 Const funcconst = 1
801 Call ok(c1 = 1, "c1 = " & c1)
802 Call ok(funcconst = 1, "funcconst = " & funcconst)
803 End Sub
805 Call ConstTestSub
806 Dim funcconst
808 ' Property may be used as an identifier (although it's a keyword)
809 Sub TestProperty
810 Dim Property
811 PROPERTY = true
812 Call ok(property, "property = " & property)
814 for property = 1 to 2
815 next
816 End Sub
818 Call TestProperty
820 Class Property
821 Public Sub Property()
822 End Sub
824 Sub Test(byref property)
825 End Sub
826 End Class
828 Class Property2
829 Function Property()
830 End Function
833 Sub Test(property)
834 End Sub
836 Sub Test2(byval property)
837 End Sub
838 End Class
840 reportSuccess()