d3d10: Add support for parsing sample masks to parse_fx10_object().
[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 x=1 else x=2 end if
213
214 if false then
215     ok false, "if false called"
216 end if
217
218 x = true
219 if x then
220     x = false
221 end if
222 Call ok(not x, "x is false, if not evaluated?")
223
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?")
231
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?")
241
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?")
253
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?")
261
262 x = false
263 if 1 then x = true
264 Call ok(x, "if 1 not run?")
265
266 x = false
267 if &h10000& then x = true
268 Call ok(x, "if &h10000& not run?")
269
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")
279
280 while false
281 wend
282
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")
292
293 do while false
294 loop
295
296 do while true
297     exit do
298     ok false, "exit do didn't work"
299 loop
300
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")
310
311 do until true
312 loop
313
314 do until false
315     exit do
316     ok false, "exit do didn't work"
317 loop
318
319 x = false
320 y = false
321 do
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")
328
329 do
330 loop until true
331
332 do
333     exit do
334     ok false, "exit do didn't work"
335 loop until false
336
337 x = false
338 y = false
339 do
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")
346
347 do
348 loop while false
349
350 do
351     exit do
352     ok false, "exit do didn't work"
353 loop while true
354
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)
360
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)
366
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)
373
374 y = "for4:"
375 for x = 5 to 4
376     y = y & " " & x
377 next
378 Call ok(y = "for4:", "y = " & y)
379
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)
385
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)
393
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)
401
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)
408
409 for x = 1.5 to 1
410     Call ok(false, "for..to called when unexpected")
411 next
412
413 for x = 1 to 100
414     exit for
415     Call ok(false, "exit for not escaped the loop?")
416 next
417
418 do while true
419     for x = 1 to 100
420         exit do
421     next
422 loop
423
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))
433
434 Call collectionObj.reset()
435 y = false
436 for each x in collectionObj
437     if x = 2 then exit for
438     y = 1
439 next
440 Call ok(y = 1, "y = " & y)
441 Call ok(x = 2, "x = " & x)
442
443 if false then
444 Sub testsub
445     x = true
446 End Sub
447 end if
448
449 x = false
450 Call testsub
451 Call ok(x, "x is false, testsub not called?")
452
453 Sub SubSetTrue(v)
454     Call ok(not v, "v is not true")
455     v = true
456 End Sub
457
458 x = false
459 SubSetTrue x
460 Call ok(x, "x was not set by SubSetTrue")
461
462 SubSetTrue false
463 Call ok(not false, "false is no longer false?")
464
465 Sub SubSetTrue2(ByRef v)
466     Call ok(not v, "v is not true")
467     v = true
468 End Sub
469
470 x = false
471 SubSetTrue2 x
472 Call ok(x, "x was not set by SubSetTrue")
473
474 Sub TestSubArgVal(ByVal v)
475     Call ok(not v, "v is not false")
476     v = true
477     Call ok(v, "v is not true?")
478 End Sub
479
480 x = false
481 Call TestSubArgVal(x)
482 Call ok(not x, "x is true after TestSubArgVal call?")
483
484 Sub TestSubMultiArgs(a,b,c,d,e)
485     Call ok(a=1, "a = " & a)
486     Call ok(b=2, "b = " & b)
487     Call ok(c=3, "c = " & c)
488     Call ok(d=4, "d = " & d)
489     Call ok(e=5, "e = " & e)
490 End Sub
491
492 Sub TestSubExit(ByRef a)
493     If a Then
494         Exit Sub
495     End If
496     Call ok(false, "Exit Sub not called?")
497 End Sub
498
499 Call TestSubExit(true)
500
501 Sub TestSubExit2
502     for x = 1 to 100
503         Exit Sub
504     next
505 End Sub
506 Call TestSubExit2
507
508 TestSubMultiArgs 1, 2, 3, 4, 5
509 Call TestSubMultiArgs(1, 2, 3, 4, 5)
510
511 Sub TestSubLocalVal
512     x = false
513     Call ok(not x, "local x is not false?")
514     Dim x
515     Dim a,b, c
516 End Sub
517
518 x = true
519 y = true
520 Call TestSubLocalVal
521 Call ok(x, "global x is not true?")
522
523 Public Sub TestPublicSub
524 End Sub
525 Call TestPublicSub
526
527 Private Sub TestPrivateSub
528 End Sub
529 Call TestPrivateSub
530
531 if false then
532 Function testfunc
533     x = true
534 End Function
535 end if
536
537 x = false
538 Call TestFunc
539 Call ok(x, "x is false, testfunc not called?")
540
541 Function FuncSetTrue(v)
542     Call ok(not v, "v is not true")
543     v = true
544 End Function
545
546 x = false
547 FuncSetTrue x
548 Call ok(x, "x was not set by FuncSetTrue")
549
550 FuncSetTrue false
551 Call ok(not false, "false is no longer false?")
552
553 Function FuncSetTrue2(ByRef v)
554     Call ok(not v, "v is not true")
555     v = true
556 End Function
557
558 x = false
559 FuncSetTrue2 x
560 Call ok(x, "x was not set by FuncSetTrue")
561
562 Function TestFuncArgVal(ByVal v)
563     Call ok(not v, "v is not false")
564     v = true
565     Call ok(v, "v is not true?")
566 End Function
567
568 x = false
569 Call TestFuncArgVal(x)
570 Call ok(not x, "x is true after TestFuncArgVal call?")
571
572 Function TestFuncMultiArgs(a,b,c,d,e)
573     Call ok(a=1, "a = " & a)
574     Call ok(b=2, "b = " & b)
575     Call ok(c=3, "c = " & c)
576     Call ok(d=4, "d = " & d)
577     Call ok(e=5, "e = " & e)
578 End Function
579
580 TestFuncMultiArgs 1, 2, 3, 4, 5
581 Call TestFuncMultiArgs(1, 2, 3, 4, 5)
582
583 Function TestFuncLocalVal
584     x = false
585     Call ok(not x, "local x is not false?")
586     Dim x
587 End Function
588
589 x = true
590 y = true
591 Call TestFuncLocalVal
592 Call ok(x, "global x is not true?")
593
594 Function TestFuncExit(ByRef a)
595     If a Then
596         Exit Function
597     End If
598     Call ok(false, "Exit Function not called?")
599 End Function
600
601 Call TestFuncExit(true)
602
603 Function TestFuncExit2(ByRef a)
604     For x = 1 to 100
605         For y = 1 to 100
606             Exit Function
607         Next
608     Next
609     Call ok(false, "Exit Function not called?")
610 End Function
611
612 Call TestFuncExit2(true)
613
614 Sub SubParseTest
615 End Sub : x = false
616 Call SubParseTest
617
618 Function FuncParseTest
619 End Function : x = false
620
621 Function ReturnTrue
622      ReturnTrue = false
623      ReturnTrue = true
624 End Function
625
626 Call ok(ReturnTrue(), "ReturnTrue returned false?")
627
628 Function SetVal(ByRef x, ByVal v)
629     x = v
630     SetVal = x
631     Exit Function
632 End Function
633
634 x = false
635 ok SetVal(x, true), "SetVal returned false?"
636 Call ok(x, "x is not set to true by SetVal?")
637
638 Public Function TestPublicFunc
639 End Function
640 Call TestPublicFunc
641
642 Private Function TestPrivateFunc
643 End Function
644 Call TestPrivateFunc
645
646 ' Stop has an effect only in debugging mode
647 Stop
648
649 set x = testObj
650 Call ok(getVT(x) = "VT_DISPATCH*", "getVT(x=testObj) = " & getVT(x))
651
652 Dim obj
653 Set obj = New EmptyClass
654 Call ok(getVT(obj) = "VT_DISPATCH*", "getVT(obj) = " & getVT(obj))
655
656 Class EmptyClass
657 End Class
658
659 Set x = obj
660 Call ok(getVT(x) = "VT_DISPATCH*", "getVT(x) = " & getVT(x))
661
662 Class TestClass
663     Public publicProp
664
665     Private privateProp
666
667     Public Function publicFunction()
668         privateSub()
669         publicFunction = 4
670     End Function
671
672     Public Property Get gsProp()
673         gsProp = privateProp
674         funcCalled = "gsProp get"
675         exit property
676         Call ok(false, "exit property not returned?")
677     End Property
678
679     Public Default Property Get DefValGet
680         DefValGet = privateProp
681         funcCalled = "GetDefVal"
682     End Property
683
684     Public Property Let DefValGet(x)
685     End Property
686
687     Public publicProp2
688
689     Public Sub publicSub
690     End Sub
691
692     Public Property Let gsProp(val)
693         privateProp = val
694         funcCalled = "gsProp let"
695         exit property
696         Call ok(false, "exit property not returned?")
697     End Property
698
699     Public Property Set gsProp(val)
700         funcCalled = "gsProp set"
701         exit property
702         Call ok(false, "exit property not returned?")
703     End Property
704
705     Public Sub setPrivateProp(x)
706         privateProp = x
707     End Sub
708
709     Function getPrivateProp
710         getPrivateProp = privateProp
711     End Function
712
713     Private Sub privateSub
714     End Sub
715
716     Public Sub Class_Initialize
717         publicProp2 = 2
718         privateProp = true
719     End Sub
720 End Class
721
722 Call testDisp(new testClass)
723
724 Set obj = New TestClass
725
726 Call ok(obj.publicFunction = 4, "obj.publicFunction = " & obj.publicFunction)
727 Call ok(obj.publicFunction() = 4, "obj.publicFunction() = " & obj.publicFunction())
728
729 obj.publicSub()
730 Call obj.publicSub
731 Call obj.publicFunction()
732
733 Call ok(getVT(obj.publicProp) = "VT_EMPTY", "getVT(obj.publicProp) = " & getVT(obj.publicProp))
734 obj.publicProp = 3
735 Call ok(obj.publicProp = 3, "obj.publicProp = " & obj.publicProp)
736 obj.publicProp() = 3
737
738 Call ok(obj.getPrivateProp() = true, "obj.getPrivateProp() = " & obj.getPrivateProp())
739 Call obj.setPrivateProp(6)
740 Call ok(obj.getPrivateProp = 6, "obj.getPrivateProp = " & obj.getPrivateProp)
741
742 Dim funcCalled
743 funcCalled = ""
744 Call ok(obj.gsProp = 6, "obj.gsProp = " & obj.gsProp)
745 Call ok(funcCalled = "gsProp get", "funcCalled = " & funcCalled)
746 obj.gsProp = 3
747 Call ok(funcCalled = "gsProp let", "funcCalled = " & funcCalled)
748 Call ok(obj.getPrivateProp = 3, "obj.getPrivateProp = " & obj.getPrivateProp)
749 Set obj.gsProp = New testclass
750 Call ok(funcCalled = "gsProp set", "funcCalled = " & funcCalled)
751
752 x = obj
753 Call ok(x = 3, "(x = obj) = " & x)
754 Call ok(funcCalled = "GetDefVal", "funcCalled = " & funcCalled)
755 funcCalled = ""
756 Call ok(obj = 3, "(x = obj) = " & obj)
757 Call ok(funcCalled = "GetDefVal", "funcCalled = " & funcCalled)
758
759 Call obj.Class_Initialize
760 Call ok(obj.getPrivateProp() = true, "obj.getPrivateProp() = " & obj.getPrivateProp())
761
762 x = (New testclass).publicProp
763
764 Class TermTest
765     Public Sub Class_Terminate()
766         funcCalled = "terminate"
767     End Sub
768 End Class
769
770 Set obj = New TermTest
771 funcCalled = ""
772 Set obj = Nothing
773 Call ok(funcCalled = "terminate", "funcCalled = " & funcCalled)
774
775 Set obj = New TermTest
776 funcCalled = ""
777 Call obj.Class_Terminate
778 Call ok(funcCalled = "terminate", "funcCalled = " & funcCalled)
779 funcCalled = ""
780 Set obj = Nothing
781 Call ok(funcCalled = "terminate", "funcCalled = " & funcCalled)
782
783 Call (New testclass).publicSub()
784 Call (New testclass).publicSub
785
786 x = "following ':' is correct syntax" :
787 x = "following ':' is correct syntax" :: :
788 :: x = "also correct syntax"
789 rem another ugly way for comments
790 x = "rem as simplestatement" : rem rem comment
791 :
792
793 Set obj = new EmptyClass
794 Set x = obj
795 Set y = new EmptyClass
796
797 Call ok(obj is x, "obj is not x")
798 Call ok(x is obj, "x is not obj")
799 Call ok(not (obj is y), "obj is not y")
800 Call ok(not obj is y, "obj is not y")
801 Call ok(not (x is Nothing), "x is 1")
802 Call ok(Nothing is Nothing, "Nothing is not Nothing")
803 Call ok(x is obj and true, "x is obj and true is false")
804
805 Class TestMe
806     Public Sub Test(MyMe)
807         Call ok(Me is MyMe, "Me is not MyMe")
808     End Sub
809 End Class
810
811 Set obj = New TestMe
812 Call obj.test(obj)
813
814 Call ok(getVT(test) = "VT_DISPATCH", "getVT(test) = " & getVT(test))
815 Call ok(Me is Test, "Me is not Test")
816
817 Const c1 = 1, c2 = 2
818 Call ok(c1 = 1, "c1 = " & c1)
819 Call ok(getVT(c1) = "VT_I2", "getVT(c1) = " & getVT(c1))
820
821 if false then Const conststr = "str"
822 Call ok(conststr = "str", "conststr = " & conststr)
823 Call ok(getVT(conststr) = "VT_BSTR", "getVT(conststr) = " & getVT(conststr))
824 Call ok(conststr = "str", "conststr = " & conststr)
825
826 Sub ConstTestSub
827     Const funcconst = 1
828     Call ok(c1 = 1, "c1 = " & c1)
829     Call ok(funcconst = 1, "funcconst = " & funcconst)
830 End Sub
831
832 Call ConstTestSub
833 Dim funcconst
834
835 ' Property may be used as an identifier (although it's a keyword)
836 Sub TestProperty
837     Dim Property
838     PROPERTY = true
839     Call ok(property, "property = " & property)
840
841     for property = 1 to 2
842     next
843 End Sub
844
845 Call TestProperty
846
847 Class Property
848     Public Sub Property()
849     End Sub
850
851     Sub Test(byref property)
852     End Sub
853 End Class
854
855 Class Property2
856     Function Property()
857     End Function
858
859
860     Sub Test(property)
861     End Sub
862
863     Sub Test2(byval property)
864     End Sub
865 End Class
866
867 reportSuccess()