msxml3: Accept lexical handler parameter entities switch.
[wine] / dlls / vbscript / tests / lang.vbs
1 '
2 ' Copyright 2011 Jacek Caban for CodeWeavers
3 '
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.
8 '
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.
13 '
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
17 '
18
19 Option Explicit
20
21 dim x, y, z
22
23 call ok(true, "true is not true?")
24 ok true, "true is not true?"
25 call ok((true), "true is not true?")
26
27 ok not false, "not false but not true?"
28 ok not not true, "not not true but not true?"
29
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
47 x = "xx"
48 Call ok(x = "xx", "x = " & x & " expected ""xx""")
49
50 Call ok(true <> false, "true <> false is false")
51 Call ok(not (true <> true), "true <> true is true")
52 Call ok(not ("x" <> "x"), """x"" <> ""x"" is true")
53 Call ok(not (empty <> empty), "empty <> empty is true")
54 Call ok(x <> "x", "x = ""x""")
55 Call ok("true" <> true, """true"" = true is true")
56
57 Call ok("" = true = false, """"" = true = false is false")
58 Call ok(not(false = true = ""), "false = true = """" is true")
59 Call ok(not (false = false <> false = false), "false = false <> false = false is true")
60 Call ok(not ("" <> false = false), """"" <> false = false is true")
61
62 Call ok(getVT(false) = "VT_BOOL", "getVT(false) is not VT_BOOL")
63 Call ok(getVT(true) = "VT_BOOL", "getVT(true) is not VT_BOOL")
64 Call ok(getVT("") = "VT_BSTR", "getVT("""") is not VT_BSTR")
65 Call ok(getVT("test") = "VT_BSTR", "getVT(""test"") is not VT_BSTR")
66 Call ok(getVT(Empty) = "VT_EMPTY", "getVT(Empty) is not VT_EMPTY")
67 Call ok(getVT(null) = "VT_NULL", "getVT(null) is not VT_NULL")
68 Call ok(getVT(0) = "VT_I2", "getVT(0) is not VT_I2")
69 Call ok(getVT(1) = "VT_I2", "getVT(1) is not VT_I2")
70 Call ok(getVT(0.5) = "VT_R8", "getVT(0.5) is not VT_R8")
71 Call ok(getVT(0.0) = "VT_R8", "getVT(0.0) is not VT_R8")
72 Call ok(getVT(2147483647) = "VT_I4", "getVT(2147483647) is not VT_I4")
73 Call ok(getVT(2147483648) = "VT_R8", "getVT(2147483648) is not VT_R8")
74 Call ok(getVT(&h10&) = "VT_I2", "getVT(&h10&) is not VT_I2")
75 Call ok(getVT(&h10000&) = "VT_I4", "getVT(&h10000&) is not VT_I4")
76 Call ok(getVT(&H10000&) = "VT_I4", "getVT(&H10000&) is not VT_I4")
77 Call ok(getVT(&hffFFffFF&) = "VT_I2", "getVT(&hffFFffFF&) is not VT_I2")
78 Call ok(getVT(1 & 100000) = "VT_BSTR", "getVT(1 & 100000) is not VT_BSTR")
79 Call ok(getVT(-empty) = "VT_I2", "getVT(-empty) = " & getVT(-empty))
80 Call ok(getVT(-null) = "VT_NULL", "getVT(-null) = " & getVT(-null))
81 Call ok(getVT(y) = "VT_EMPTY*", "getVT(y) = " & getVT(y))
82 Call ok(getVT(nothing) = "VT_DISPATCH", "getVT(nothing) = " & getVT(nothing))
83 set x = nothing
84 Call ok(getVT(x) = "VT_DISPATCH*", "getVT(x=nothing) = " & getVT(x))
85 x = true
86 Call ok(getVT(x) = "VT_BOOL*", "getVT(x) = " & getVT(x))
87 Call ok(getVT(false or true) = "VT_BOOL", "getVT(false) is not VT_BOOL")
88 x = "x"
89 Call ok(getVT(x) = "VT_BSTR*", "getVT(x) is not VT_BSTR*")
90 x = 0.0
91 Call ok(getVT(x) = "VT_R8*", "getVT(x) = " & getVT(x))
92
93 Call ok(isNullDisp(nothing), "nothing is not nulldisp?")
94
95 x = "xx"
96 Call ok("ab" & "cd" = "abcd", """ab"" & ""cd"" <> ""abcd""")
97 Call ok("ab " & null = "ab ", """ab"" & null = " & ("ab " & null))
98 Call ok("ab " & empty = "ab ", """ab"" & empty = " & ("ab " & empty))
99 Call ok(1 & 100000 = "1100000", "1 & 100000 = " & (1 & 100000))
100 Call ok("ab" & x = "abxx", """ab"" & x = " & ("ab"&x))
101
102 if(isEnglishLang) then
103     Call ok("" & true = "True", """"" & true = " & true)
104     Call ok(true & false = "TrueFalse", "true & false = " & (true & false))
105 end if
106
107 call ok(true and true, "true and true is not true")
108 call ok(true and not false, "true and not false is not true")
109 call ok(not (false and true), "not (false and true) is not true")
110 call ok(getVT(null and true) = "VT_NULL", "getVT(null and true) = " & getVT(null and true))
111
112 call ok(false or true, "false or uie is false?")
113 call ok(not (false or false), "false or false is not false?")
114 call ok(false and false or true, "false and false or true is false?")
115 call ok(true or false and false, "true or false and false is false?")
116 call ok(null or true, "null or true is false")
117
118 call ok(true xor false, "true xor false is false?")
119 call ok(not (false xor false), "false xor false is true?")
120 call ok(not (true or false xor true), "true or false xor true is true?")
121 call ok(not (true xor false or true), "true xor false or true is true?")
122
123 call ok(false eqv false, "false does not equal false?")
124 call ok(not (false eqv true), "false equals true?")
125 call ok(getVT(false eqv null) = "VT_NULL", "getVT(false eqv null) = " & getVT(false eqv null))
126
127 call ok(true imp true, "true does not imp true?")
128 call ok(false imp false, "false does not imp false?")
129 call ok(not (true imp false), "true imp false?")
130 call ok(false imp null, "false imp null is false?")
131
132 Call ok(2 >= 1, "! 2 >= 1")
133 Call ok(2 >= 2, "! 2 >= 2")
134 Call ok(not(true >= 2), "true >= 2 ?")
135 Call ok(2 > 1, "! 2 > 1")
136 Call ok(false > true, "! false < true")
137 Call ok(0 > true, "! 0 > true")
138 Call ok(not (true > 0), "true > 0")
139 Call ok(not (0 > 1 = 1), "0 > 1 = 1")
140 Call ok(1 < 2, "! 1 < 2")
141 Call ok(1 = 1 < 0, "! 1 = 1 < 0")
142 Call ok(1 <= 2, "! 1 <= 2")
143 Call ok(2 <= 2, "! 2 <= 2")
144
145 x = 3
146 Call ok(2+2 = 4, "2+2 = " & (2+2))
147 Call ok(false + 6 + true = 5, "false + 6 + true <> 5")
148 Call ok(getVT(2+null) = "VT_NULL", "getVT(2+null) = " & getVT(2+null))
149 Call ok(2+empty = 2, "2+empty = " & (2+empty))
150 Call ok(x+x = 6, "x+x = " & (x+x))
151
152 Call ok(5-1 = 4, "5-1 = " & (5-1))
153 Call ok(3+5-true = 9, "3+5-true <> 9")
154 Call ok(getVT(2-null) = "VT_NULL", "getVT(2-null) = " & getVT(2-null))
155 Call ok(2-empty = 2, "2-empty = " & (2-empty))
156 Call ok(2-x = -1, "2-x = " & (2-x))
157
158 Call ok(9 Mod 6 = 3, "9 Mod 6 = " & (9 Mod 6))
159 Call ok(11.6 Mod 5.5 = False, "11.6 Mod 5.5 = " & (11.6 Mod 5.5 = 0.6))
160 Call ok(7 Mod 4+2 = 5, "7 Mod 4+2 <> 5")
161 Call ok(getVT(2 mod null) = "VT_NULL", "getVT(2 mod null) = " & getVT(2 mod null))
162 Call ok(getVT(null mod 2) = "VT_NULL", "getVT(null mod 2) = " & getVT(null mod 2))
163 'FIXME: Call ok(empty mod 2 = 0, "empty mod 2 = " & (empty mod 2))
164
165 Call ok(5 \ 2 = 2, "5 \ 2 = " & (5\2))
166 Call ok(4.6 \ 1.5 = 2, "4.6 \ 1.5 = " & (4.6\1.5))
167 Call ok(4.6 \ 1.49 = 5, "4.6 \ 1.49 = " & (4.6\1.49))
168 Call ok(2+3\4 = 2, "2+3\4 = " & (2+3\4))
169
170 Call ok(2*3 = 6, "2*3 = " & (2*3))
171 Call ok(3/2 = 1.5, "3/2 = " & (3/2))
172 Call ok(5\4/2 = 2, "5\4/2 = " & (5\2/1))
173 Call ok(12/3\2 = 2, "12/3\2 = " & (12/3\2))
174
175 Call ok(2^3 = 8, "2^3 = " & (2^3))
176 Call ok(2^3^2 = 64, "2^3^2 = " & (2^3^2))
177 Call ok(-3^2 = 9, "-3^2 = " & (-3^2))
178 Call ok(2*3^2 = 18, "2*3^2 = " & (2*3^2))
179
180 if true then y = true : x = y
181 ok x, "x is false"
182
183 x = true : if false then x = false
184 ok x, "x is false, if false called?"
185
186 if not false then x = true
187 ok x, "x is false, if not false not called?"
188
189 if not false then x = "test" : x = true
190 ok x, "x is false, if not false not called?"
191
192 if false then x = y : call ok(false, "if false .. : called")
193
194 if false then x = y : call ok(false, "if false .. : called") else x = "else"
195 Call ok(x = "else", "else not called?")
196
197 if true then x = y else y = x : Call ok(false, "in else?")
198
199 if false then :
200
201 if false then x = y : if true then call ok(false, "embedded if called")
202
203 if false then
204     ok false, "if false called"
205 end if
206
207 x = true
208 if x then
209     x = false
210 end if
211 Call ok(not x, "x is false, if not evaluated?")
212
213 x = false
214 If false Then
215    Call ok(false, "inside if false")
216 Else
217    x = true
218 End If
219 Call ok(x, "else not called?")
220
221 x = false
222 If false Then
223    Call ok(false, "inside if false")
224 ElseIf not True Then
225    Call ok(false, "inside elseif not true")
226 Else
227    x = true
228 End If
229 Call ok(x, "else not called?")
230
231 x = false
232 If false Then
233    Call ok(false, "inside if false")
234    x = 1
235    y = 10+x
236 ElseIf not False Then
237    x = true
238 Else
239    Call ok(false, "inside else not true")
240 End If
241 Call ok(x, "elseif not called?")
242
243 x = false
244 If false Then
245    Call ok(false, "inside if false")
246 ElseIf not False Then
247    x = true
248 End If
249 Call ok(x, "elseif not called?")
250
251 x = false
252 y = false
253 while not (x and y)
254     if x then
255         y = true
256     end if
257     x = true
258 wend
259 call ok((x and y), "x or y is false after while")
260
261 while false
262 wend
263
264 x = false
265 y = false
266 do while not (x and y)
267     if x then
268         y = true
269     end if
270     x = true
271 loop
272 call ok((x and y), "x or y is false after while")
273
274 do while false
275 loop
276
277 do while true
278     exit do
279     ok false, "exit do didn't work"
280 loop
281
282 x = false
283 y = false
284 do until x and y
285     if x then
286         y = true
287     end if
288     x = true
289 loop
290 call ok((x and y), "x or y is false after do until")
291
292 do until true
293 loop
294
295 do until false
296     exit do
297     ok false, "exit do didn't work"
298 loop
299
300 x = false
301 y = false
302 do
303     if x then
304         y = true
305     end if
306     x = true
307 loop until x and y
308 call ok((x and y), "x or y is false after while")
309
310 do
311 loop until true
312
313 do
314     exit do
315     ok false, "exit do didn't work"
316 loop until false
317
318 x = false
319 y = false
320 do
321     if x then
322         y = true
323     end if
324     x = true
325 loop while not (x and y)
326 call ok((x and y), "x or y is false after while")
327
328 do
329 loop while false
330
331 do
332     exit do
333     ok false, "exit do didn't work"
334 loop while true
335
336 y = "for1:"
337 for x = 5 to 8
338     y = y & " " & x
339 next
340 Call ok(y = "for1: 5 6 7 8", "y = " & y)
341
342 y = "for2:"
343 for x = 5 to 8 step 2
344     y = y & " " & x
345 next
346 Call ok(y = "for2: 5 7", "y = " & y)
347
348 y = "for3:"
349 x = 2
350 for x = x+3 to 8
351     y = y & " " & x
352 next
353 Call ok(y = "for3: 5 6 7 8", "y = " & y)
354
355 y = "for4:"
356 for x = 5 to 4
357     y = y & " " & x
358 next
359 Call ok(y = "for4:", "y = " & y)
360
361 y = "for5:"
362 for x = 5 to 3 step true
363     y = y & " " & x
364 next
365 Call ok(y = "for5: 5 4 3", "y = " & y)
366
367 y = "for6:"
368 z = 4
369 for x = 5 to z step 3-4
370     y = y & " " & x
371     z = 0
372 next
373 Call ok(y = "for6: 5 4", "y = " & y)
374
375 y = "for7:"
376 z = 1
377 for x = 5 to 8 step z
378     y = y & " " & x
379     z = 2
380 next
381 Call ok(y = "for7: 5 6 7 8", "y = " & y)
382
383 y = "for8:"
384 for x = 5 to 8
385     y = y & " " & x
386     x = x+1
387 next
388 Call ok(y = "for8: 5 7", "y = " & y)
389
390 for x = 1.5 to 1
391     Call ok(false, "for..to called when unexpected")
392 next
393
394 for x = 1 to 100
395     exit for
396     Call ok(false, "exit for not escaped the loop?")
397 next
398
399 if false then
400 Sub testsub
401     x = true
402 End Sub
403 end if
404
405 x = false
406 Call testsub
407 Call ok(x, "x is false, testsub not called?")
408
409 Sub SubSetTrue(v)
410     Call ok(not v, "v is not true")
411     v = true
412 End Sub
413
414 x = false
415 SubSetTrue x
416 Call ok(x, "x was not set by SubSetTrue")
417
418 SubSetTrue false
419 Call ok(not false, "false is no longer false?")
420
421 Sub SubSetTrue2(ByRef v)
422     Call ok(not v, "v is not true")
423     v = true
424 End Sub
425
426 x = false
427 SubSetTrue2 x
428 Call ok(x, "x was not set by SubSetTrue")
429
430 Sub TestSubArgVal(ByVal v)
431     Call ok(not v, "v is not false")
432     v = true
433     Call ok(v, "v is not true?")
434 End Sub
435
436 x = false
437 Call TestSubArgVal(x)
438 Call ok(not x, "x is true after TestSubArgVal call?")
439
440 Sub TestSubMultiArgs(a,b,c,d,e)
441     Call ok(a=1, "a = " & a)
442     Call ok(b=2, "b = " & b)
443     Call ok(c=3, "c = " & c)
444     Call ok(d=4, "d = " & d)
445     Call ok(e=5, "e = " & e)
446 End Sub
447
448 Sub TestSubExit(ByRef a)
449     If a Then
450         Exit Sub
451     End If
452     Call ok(false, "Exit Sub not called?")
453 End Sub
454
455 Call TestSubExit(true)
456
457 TestSubMultiArgs 1, 2, 3, 4, 5
458 Call TestSubMultiArgs(1, 2, 3, 4, 5)
459
460 Sub TestSubLocalVal
461     x = false
462     Call ok(not x, "local x is not false?")
463     Dim x
464 End Sub
465
466 x = true
467 y = true
468 Call TestSubLocalVal
469 Call ok(x, "global x is not true?")
470
471 Public Sub TestPublicSub
472 End Sub
473 Call TestPublicSub
474
475 Private Sub TestPrivateSub
476 End Sub
477 Call TestPrivateSub
478
479 if false then
480 Function testfunc
481     x = true
482 End Function
483 end if
484
485 x = false
486 Call TestFunc
487 Call ok(x, "x is false, testfunc not called?")
488
489 Function FuncSetTrue(v)
490     Call ok(not v, "v is not true")
491     v = true
492 End Function
493
494 x = false
495 FuncSetTrue x
496 Call ok(x, "x was not set by FuncSetTrue")
497
498 FuncSetTrue false
499 Call ok(not false, "false is no longer false?")
500
501 Function FuncSetTrue2(ByRef v)
502     Call ok(not v, "v is not true")
503     v = true
504 End Function
505
506 x = false
507 FuncSetTrue2 x
508 Call ok(x, "x was not set by FuncSetTrue")
509
510 Function TestFuncArgVal(ByVal v)
511     Call ok(not v, "v is not false")
512     v = true
513     Call ok(v, "v is not true?")
514 End Function
515
516 x = false
517 Call TestFuncArgVal(x)
518 Call ok(not x, "x is true after TestFuncArgVal call?")
519
520 Function TestFuncMultiArgs(a,b,c,d,e)
521     Call ok(a=1, "a = " & a)
522     Call ok(b=2, "b = " & b)
523     Call ok(c=3, "c = " & c)
524     Call ok(d=4, "d = " & d)
525     Call ok(e=5, "e = " & e)
526 End Function
527
528 TestFuncMultiArgs 1, 2, 3, 4, 5
529 Call TestFuncMultiArgs(1, 2, 3, 4, 5)
530
531 Function TestFuncLocalVal
532     x = false
533     Call ok(not x, "local x is not false?")
534     Dim x
535 End Function
536
537 x = true
538 y = true
539 Call TestFuncLocalVal
540 Call ok(x, "global x is not true?")
541
542 Function TestFuncExit(ByRef a)
543     If a Then
544         Exit Function
545     End If
546     Call ok(false, "Exit Function not called?")
547 End Function
548
549 Call TestFuncExit(true)
550
551 Sub SubParseTest
552 End Sub : x = false
553 Call SubParseTest
554
555 Function FuncParseTest
556 End Function : x = false
557
558 Function ReturnTrue
559      ReturnTrue = false
560      ReturnTrue = true
561 End Function
562
563 Call ok(ReturnTrue(), "ReturnTrue returned false?")
564
565 Function SetVal(ByRef x, ByVal v)
566     x = v
567     SetVal = x
568     Exit Function
569 End Function
570
571 x = false
572 ok SetVal(x, true), "SetVal returned false?"
573 Call ok(x, "x is not set to true by SetVal?")
574
575 Public Function TestPublicFunc
576 End Function
577 Call TestPublicFunc
578
579 Private Function TestPrivateFunc
580 End Function
581 Call TestPrivateFunc
582
583 ' Stop has an effect only in debugging mode
584 Stop
585
586 set x = testObj
587 Call ok(getVT(x) = "VT_DISPATCH*", "getVT(x=testObj) = " & getVT(x))
588
589 Dim obj
590 Set obj = New EmptyClass
591 Call ok(getVT(obj) = "VT_DISPATCH*", "getVT(obj) = " & getVT(obj))
592
593 Class EmptyClass
594 End Class
595
596 Set x = obj
597 Call ok(getVT(x) = "VT_DISPATCH*", "getVT(x) = " & getVT(x))
598
599 Class TestClass
600     Public publicProp
601
602     Private privateProp
603
604     Public Function publicFunction()
605         privateSub()
606         publicFunction = 4
607     End Function
608
609     Public Property Get gsProp()
610         gsProp = privateProp
611         funcCalled = "gsProp get"
612         exit property
613         Call ok(false, "exit property not returned?")
614     End Property
615
616     Public Default Property Get DefValGet
617         DefValGet = privateProp
618         funcCalled = "GetDefVal"
619     End Property
620
621     Public Property Let DefValGet(x)
622     End Property
623
624     Public publicProp2
625
626     Public Sub publicSub
627     End Sub
628
629     Public Property Let gsProp(val)
630         privateProp = val
631         funcCalled = "gsProp let"
632         exit property
633         Call ok(false, "exit property not returned?")
634     End Property
635
636     Public Property Set gsProp(val)
637         funcCalled = "gsProp set"
638         exit property
639         Call ok(false, "exit property not returned?")
640     End Property
641
642     Public Sub setPrivateProp(x)
643         privateProp = x
644     End Sub
645
646     Function getPrivateProp
647         getPrivateProp = privateProp
648     End Function
649
650     Private Sub privateSub
651     End Sub
652
653     Public Sub Class_Initialize
654         publicProp2 = 2
655         privateProp = true
656     End Sub
657 End Class
658
659 Call testDisp(new testClass)
660
661 Set obj = New TestClass
662
663 Call ok(obj.publicFunction = 4, "obj.publicFunction = " & obj.publicFunction)
664 Call ok(obj.publicFunction() = 4, "obj.publicFunction() = " & obj.publicFunction())
665
666 obj.publicSub()
667 Call obj.publicSub
668 Call obj.publicFunction()
669
670 Call ok(getVT(obj.publicProp) = "VT_EMPTY", "getVT(obj.publicProp) = " & getVT(obj.publicProp))
671 obj.publicProp = 3
672 Call ok(obj.publicProp = 3, "obj.publicProp = " & obj.publicProp)
673 obj.publicProp() = 3
674
675 Call ok(obj.getPrivateProp() = true, "obj.getPrivateProp() = " & obj.getPrivateProp())
676 Call obj.setPrivateProp(6)
677 Call ok(obj.getPrivateProp = 6, "obj.getPrivateProp = " & obj.getPrivateProp)
678
679 Dim funcCalled
680 funcCalled = ""
681 Call ok(obj.gsProp = 6, "obj.gsProp = " & obj.gsProp)
682 Call ok(funcCalled = "gsProp get", "funcCalled = " & funcCalled)
683 obj.gsProp = 3
684 Call ok(funcCalled = "gsProp let", "funcCalled = " & funcCalled)
685 Call ok(obj.getPrivateProp = 3, "obj.getPrivateProp = " & obj.getPrivateProp)
686 Set obj.gsProp = New testclass
687 Call ok(funcCalled = "gsProp set", "funcCalled = " & funcCalled)
688
689 x = obj
690 Call ok(x = 3, "(x = obj) = " & x)
691 Call ok(funcCalled = "GetDefVal", "funcCalled = " & funcCalled)
692 funcCalled = ""
693 Call ok(obj = 3, "(x = obj) = " & obj)
694 Call ok(funcCalled = "GetDefVal", "funcCalled = " & funcCalled)
695
696 Call obj.Class_Initialize
697 Call ok(obj.getPrivateProp() = true, "obj.getPrivateProp() = " & obj.getPrivateProp())
698
699 x = (New testclass).publicProp
700
701 Class TermTest
702     Public Sub Class_Terminate()
703         funcCalled = "terminate"
704     End Sub
705 End Class
706
707 Set obj = New TermTest
708 funcCalled = ""
709 Set obj = Nothing
710 Call ok(funcCalled = "terminate", "funcCalled = " & funcCalled)
711
712 Set obj = New TermTest
713 funcCalled = ""
714 Call obj.Class_Terminate
715 Call ok(funcCalled = "terminate", "funcCalled = " & funcCalled)
716 funcCalled = ""
717 Set obj = Nothing
718 Call ok(funcCalled = "terminate", "funcCalled = " & funcCalled)
719
720 Call (New testclass).publicSub()
721 Call (New testclass).publicSub
722
723 x = "following ':' is correct syntax" :
724 x = "following ':' is correct syntax" :: :
725 :: x = "also correct syntax"
726 rem another ugly way for comments
727 x = "rem as simplestatement" : rem rem comment
728 :
729
730 Set obj = new EmptyClass
731 Set x = obj
732 Set y = new EmptyClass
733
734 Call ok(obj is x, "obj is not x")
735 Call ok(x is obj, "x is not obj")
736 Call ok(not (obj is y), "obj is not y")
737 Call ok(not obj is y, "obj is not y")
738 Call ok(not (x is Nothing), "x is 1")
739 Call ok(Nothing is Nothing, "Nothing is not Nothing")
740 Call ok(x is obj and true, "x is obj and true is false")
741
742 Class TestMe
743     Public Sub Test(MyMe)
744         Call ok(Me is MyMe, "Me is not MyMe")
745     End Sub
746 End Class
747
748 Set obj = New TestMe
749 Call obj.test(obj)
750
751 Call ok(getVT(test) = "VT_DISPATCH", "getVT(test) = " & getVT(test))
752 Call ok(Me is Test, "Me is not Test")
753
754 Const c1 = 1, c2 = 2
755 Call ok(c1 = 1, "c1 = " & c1)
756 Call ok(getVT(c1) = "VT_I2", "getVT(c1) = " & getVT(c1))
757
758 if false then Const conststr = "str"
759 Call ok(conststr = "str", "conststr = " & conststr)
760 Call ok(getVT(conststr) = "VT_BSTR", "getVT(conststr) = " & getVT(conststr))
761 Call ok(conststr = "str", "conststr = " & conststr)
762
763 Sub ConstTestSub
764     Const funcconst = 1
765     Call ok(c1 = 1, "c1 = " & c1)
766     Call ok(funcconst = 1, "funcconst = " & funcconst)
767 End Sub
768
769 Call ConstTestSub
770 Dim funcconst
771
772 reportSuccess()