dinput: Fix printing NULL strings.
[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
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
45 x = "xx"
46 Call ok(x = "xx", "x = " & x & " expected ""xx""")
47
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""")
53
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))
79
80 Call ok(isNullDisp(nothing), "nothing is not nulldisp?")
81
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))
88
89 if(isEnglishLang) then
90     Call ok("" & true = "True", """"" & true = " & true)
91     Call ok(true & false = "TrueFalse", "true & false = " & (true & false))
92 end if
93
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))
98
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")
104
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?")
109
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))
113
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?")
118
119 x = 3
120 Call ok(2+2 = 4, "2+2 = " & (2+2))
121 Call ok(false + 6 + true = 5, "false + 6 + true <> 5")
122 Call ok(getVT(2+null) = "VT_NULL", "getVT(2+null) = " & getVT(2+null))
123 Call ok(2+empty = 2, "2+empty = " & (2+empty))
124 Call ok(x+x = 6, "x+x = " & (x+x))
125
126 Call ok(5-1 = 4, "5-1 = " & (5-1))
127 Call ok(3+5-true = 9, "3+5-true <> 9")
128 Call ok(getVT(2-null) = "VT_NULL", "getVT(2-null) = " & getVT(2-null))
129 Call ok(2-empty = 2, "2-empty = " & (2-empty))
130 Call ok(2-x = -1, "2-x = " & (2-x))
131
132 Call ok(9 Mod 6 = 3, "9 Mod 6 = " & (9 Mod 6))
133 Call ok(11.6 Mod 5.5 = False, "11.6 Mod 5.5 = " & (11.6 Mod 5.5 = 0.6))
134 Call ok(7 Mod 4+2 = 5, "7 Mod 4+2 <> 5")
135 Call ok(getVT(2 mod null) = "VT_NULL", "getVT(2 mod null) = " & getVT(2 mod null))
136 Call ok(getVT(null mod 2) = "VT_NULL", "getVT(null mod 2) = " & getVT(null mod 2))
137 'FIXME: Call ok(empty mod 2 = 0, "empty mod 2 = " & (empty mod 2))
138
139 Call ok(5 \ 2 = 2, "5 \ 2 = " & (5\2))
140 Call ok(4.6 \ 1.5 = 2, "4.6 \ 1.5 = " & (4.6\1.5))
141 Call ok(4.6 \ 1.49 = 5, "4.6 \ 1.49 = " & (4.6\1.49))
142 Call ok(2+3\4 = 2, "2+3\4 = " & (2+3\4))
143
144 Call ok(2*3 = 6, "2*3 = " & (2*3))
145 Call ok(3/2 = 1.5, "3/2 = " & (3/2))
146 Call ok(5\4/2 = 2, "5\4/2 = " & (5\2/1))
147 Call ok(12/3\2 = 2, "12/3\2 = " & (12/3\2))
148
149 Call ok(2^3 = 8, "2^3 = " & (2^3))
150 Call ok(2^3^2 = 64, "2^3^2 = " & (2^3^2))
151 Call ok(-3^2 = 9, "-3^2 = " & (-3^2))
152 Call ok(2*3^2 = 18, "2*3^2 = " & (2*3^2))
153
154 if false then
155     ok false, "if false called"
156 end if
157
158 x = true
159 if x then
160     x = false
161 end if
162 Call ok(not x, "x is false, if not evaluated?")
163
164 x = false
165 If false Then
166    Call ok(false, "inside if false")
167 Else
168    x = true
169 End If
170 Call ok(x, "else not called?")
171
172 x = false
173 If false Then
174    Call ok(false, "inside if false")
175 ElseIf not True Then
176    Call ok(false, "inside elseif not true")
177 Else
178    x = true
179 End If
180 Call ok(x, "else not called?")
181
182 x = false
183 If false Then
184    Call ok(false, "inside if false")
185    x = 1
186    y = 10+x
187 ElseIf not False Then
188    x = true
189 Else
190    Call ok(false, "inside else not true")
191 End If
192 Call ok(x, "elseif not called?")
193
194 x = false
195 If false Then
196    Call ok(false, "inside if false")
197 ElseIf not False Then
198    x = true
199 End If
200 Call ok(x, "elseif not called?")
201
202 x = false
203 y = false
204 while not (x and y)
205     if x then
206         y = true
207     end if
208     x = true
209 wend
210 call ok((x and y), "x or y is false after while")
211
212 while false
213 wend
214
215 x = false
216 y = false
217 do while not (x and y)
218     if x then
219         y = true
220     end if
221     x = true
222 loop
223 call ok((x and y), "x or y is false after while")
224
225 do while false
226 loop
227
228 do while true
229     exit do
230     ok false, "exit do didn't work"
231 loop
232
233 x = false
234 y = false
235 do until x and y
236     if x then
237         y = true
238     end if
239     x = true
240 loop
241 call ok((x and y), "x or y is false after do until")
242
243 do until true
244 loop
245
246 do until false
247     exit do
248     ok false, "exit do didn't work"
249 loop
250
251 x = false
252 y = false
253 do
254     if x then
255         y = true
256     end if
257     x = true
258 loop until x and y
259 call ok((x and y), "x or y is false after while")
260
261 do
262 loop until true
263
264 do
265     exit do
266     ok false, "exit do didn't work"
267 loop until false
268
269 x = false
270 y = false
271 do
272     if x then
273         y = true
274     end if
275     x = true
276 loop while not (x and y)
277 call ok((x and y), "x or y is false after while")
278
279 do
280 loop while false
281
282 do
283     exit do
284     ok false, "exit do didn't work"
285 loop while true
286
287 if false then
288 Sub testsub
289     x = true
290 End Sub
291 end if
292
293 x = false
294 Call testsub
295 Call ok(x, "x is false, testsub not called?")
296
297 Sub SubSetTrue(v)
298     Call ok(not v, "v is not true")
299     v = true
300 End Sub
301
302 x = false
303 SubSetTrue x
304 Call ok(x, "x was not set by SubSetTrue")
305
306 SubSetTrue false
307 Call ok(not false, "false is no longer false?")
308
309 Sub SubSetTrue2(ByRef v)
310     Call ok(not v, "v is not true")
311     v = true
312 End Sub
313
314 x = false
315 SubSetTrue2 x
316 Call ok(x, "x was not set by SubSetTrue")
317
318 Sub TestSubArgVal(ByVal v)
319     Call ok(not v, "v is not false")
320     v = true
321     Call ok(v, "v is not true?")
322 End Sub
323
324 x = false
325 Call TestSubArgVal(x)
326 Call ok(not x, "x is true after TestSubArgVal call?")
327
328 Sub TestSubMultiArgs(a,b,c,d,e)
329     Call ok(a=1, "a = " & a)
330     Call ok(b=2, "b = " & b)
331     Call ok(c=3, "c = " & c)
332     Call ok(d=4, "d = " & d)
333     Call ok(e=5, "e = " & e)
334 End Sub
335
336 Sub TestSubExit(ByRef a)
337     If a Then
338         Exit Sub
339     End If
340     Call ok(false, "Exit Sub not called?")
341 End Sub
342
343 Call TestSubExit(true)
344
345 TestSubMultiArgs 1, 2, 3, 4, 5
346 Call TestSubMultiArgs(1, 2, 3, 4, 5)
347
348 Sub TestSubLocalVal
349     x = false
350     Call ok(not x, "local x is not false?")
351     Dim x
352 End Sub
353
354 x = true
355 y = true
356 Call TestSubLocalVal
357 Call ok(x, "global x is not true?")
358
359 Public Sub TestPublicSub
360 End Sub
361 Call TestPublicSub
362
363 Private Sub TestPrivateSub
364 End Sub
365 Call TestPrivateSub
366
367 if false then
368 Function testfunc
369     x = true
370 End Function
371 end if
372
373 x = false
374 Call TestFunc
375 Call ok(x, "x is false, testfunc not called?")
376
377 Function FuncSetTrue(v)
378     Call ok(not v, "v is not true")
379     v = true
380 End Function
381
382 x = false
383 FuncSetTrue x
384 Call ok(x, "x was not set by FuncSetTrue")
385
386 FuncSetTrue false
387 Call ok(not false, "false is no longer false?")
388
389 Function FuncSetTrue2(ByRef v)
390     Call ok(not v, "v is not true")
391     v = true
392 End Function
393
394 x = false
395 FuncSetTrue2 x
396 Call ok(x, "x was not set by FuncSetTrue")
397
398 Function TestFuncArgVal(ByVal v)
399     Call ok(not v, "v is not false")
400     v = true
401     Call ok(v, "v is not true?")
402 End Function
403
404 x = false
405 Call TestFuncArgVal(x)
406 Call ok(not x, "x is true after TestFuncArgVal call?")
407
408 Function TestFuncMultiArgs(a,b,c,d,e)
409     Call ok(a=1, "a = " & a)
410     Call ok(b=2, "b = " & b)
411     Call ok(c=3, "c = " & c)
412     Call ok(d=4, "d = " & d)
413     Call ok(e=5, "e = " & e)
414 End Function
415
416 TestFuncMultiArgs 1, 2, 3, 4, 5
417 Call TestFuncMultiArgs(1, 2, 3, 4, 5)
418
419 Function TestFuncLocalVal
420     x = false
421     Call ok(not x, "local x is not false?")
422     Dim x
423 End Function
424
425 x = true
426 y = true
427 Call TestFuncLocalVal
428 Call ok(x, "global x is not true?")
429
430 Function TestFuncExit(ByRef a)
431     If a Then
432         Exit Function
433     End If
434     Call ok(false, "Exit Function not called?")
435 End Function
436
437 Call TestFuncExit(true)
438
439 Function ReturnTrue
440      ReturnTrue = false
441      ReturnTrue = true
442 End Function
443
444 Call ok(ReturnTrue(), "ReturnTrue returned false?")
445
446 Function SetVal(ByRef x, ByVal v)
447     x = v
448     SetVal = x
449     Exit Function
450 End Function
451
452 x = false
453 ok SetVal(x, true), "SetVal returned false?"
454 Call ok(x, "x is not set to true by SetVal?")
455
456 Public Function TestPublicFunc
457 End Function
458 Call TestPublicFunc
459
460 Private Function TestPrivateFunc
461 End Function
462 Call TestPrivateFunc
463
464 ' Stop has an effect only in debugging mode
465 Stop
466
467 set x = testObj
468 Call ok(getVT(x) = "VT_DISPATCH*", "getVT(x=testObj) = " & getVT(x))
469
470 Dim obj
471 Set obj = New EmptyClass
472 Call ok(getVT(obj) = "VT_DISPATCH*", "getVT(obj) = " & getVT(obj))
473
474 Class EmptyClass
475 End Class
476
477 Class TestClass
478     Public publicProp
479
480     Private privateProp
481
482     Public Function publicFunction()
483         privateSub()
484         publicFunction = 4
485     End Function
486
487     Public Property Get gsProp()
488         gsProp = privateProp
489         funcCalled = "gsProp get"
490         exit property
491         Call ok(false, "exit property not returned?")
492     End Property
493
494     Public Default Property Get DefValGet
495         DefValGet = privateProp
496         funcCalled = "GetDefVal"
497     End Property
498
499     Public Property Let DefValGet(x)
500     End Property
501
502     Public publicProp2
503
504     Public Sub publicSub
505     End Sub
506
507     Public Property Let gsProp(val)
508         privateProp = val
509         funcCalled = "gsProp let"
510         exit property
511         Call ok(false, "exit property not returned?")
512     End Property
513
514     Public Property Set gsProp(val)
515         funcCalled = "gsProp set"
516         exit property
517         Call ok(false, "exit property not returned?")
518     End Property
519
520     Public Sub setPrivateProp(x)
521         privateProp = x
522     End Sub
523
524     Function getPrivateProp
525         getPrivateProp = privateProp
526     End Function
527
528     Private Sub privateSub
529     End Sub
530
531     Public Sub Class_Initialize
532         publicProp2 = 2
533         privateProp = true
534     End Sub
535 End Class
536
537 Call testDisp(new testClass)
538
539 Set obj = New TestClass
540
541 Call ok(obj.publicFunction = 4, "obj.publicFunction = " & obj.publicFunction)
542 Call ok(obj.publicFunction() = 4, "obj.publicFunction() = " & obj.publicFunction())
543
544 obj.publicSub()
545 Call obj.publicSub
546 Call obj.publicFunction()
547
548 Call ok(getVT(obj.publicProp) = "VT_EMPTY", "getVT(obj.publicProp) = " & getVT(obj.publicProp))
549 obj.publicProp = 3
550 Call ok(obj.publicProp = 3, "obj.publicProp = " & obj.publicProp)
551 obj.publicProp() = 3
552
553 Call ok(obj.getPrivateProp() = true, "obj.getPrivateProp() = " & obj.getPrivateProp())
554 Call obj.setPrivateProp(6)
555 Call ok(obj.getPrivateProp = 6, "obj.getPrivateProp = " & obj.getPrivateProp)
556
557 Dim funcCalled
558 funcCalled = ""
559 Call ok(obj.gsProp = 6, "obj.gsProp = " & obj.gsProp)
560 Call ok(funcCalled = "gsProp get", "funcCalled = " & funcCalled)
561 obj.gsProp = 3
562 Call ok(funcCalled = "gsProp let", "funcCalled = " & funcCalled)
563 Call ok(obj.getPrivateProp = 3, "obj.getPrivateProp = " & obj.getPrivateProp)
564 Set obj.gsProp = New testclass
565 Call ok(funcCalled = "gsProp set", "funcCalled = " & funcCalled)
566
567 x = obj
568 Call ok(x = 3, "(x = obj) = " & x)
569 Call ok(funcCalled = "GetDefVal", "funcCalled = " & funcCalled)
570 funcCalled = ""
571 Call ok(obj = 3, "(x = obj) = " & obj)
572 Call ok(funcCalled = "GetDefVal", "funcCalled = " & funcCalled)
573
574 Call obj.Class_Initialize
575 Call ok(obj.getPrivateProp() = true, "obj.getPrivateProp() = " & obj.getPrivateProp())
576
577 x = (New testclass).publicProp
578
579 Class TermTest
580     Public Sub Class_Terminate()
581         funcCalled = "terminate"
582     End Sub
583 End Class
584
585 Set obj = New TermTest
586 funcCalled = ""
587 Set obj = Nothing
588 Call ok(funcCalled = "terminate", "funcCalled = " & funcCalled)
589
590 Set obj = New TermTest
591 funcCalled = ""
592 Call obj.Class_Terminate
593 Call ok(funcCalled = "terminate", "funcCalled = " & funcCalled)
594 funcCalled = ""
595 Set obj = Nothing
596 Call ok(funcCalled = "terminate", "funcCalled = " & funcCalled)
597
598 reportSuccess()