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