1 /*
2 Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies)
3
4 This library is free software; you can redistribute it and/or
5 modify it under the terms of the GNU Library General Public
6 License as published by the Free Software Foundation; either
7 version 2 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 Library General Public License for more details.
13
14 You should have received a copy of the GNU Library General Public License
15 along with this library; see the file COPYING.LIB. If not, write to
16 the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
17 Boston, MA 02110-1301, USA.
18 */
19
20 #include "tst_qscriptvalue.h"
21
22 #define DEFINE_TEST_VALUE(expr) m_values.insert(QString::fromLatin1(#expr), expr)
23
initScriptValues()24 void tst_QScriptValue::initScriptValues()
25 {
26 m_values.clear();
27 if (engine)
28 delete engine;
29 engine = new QScriptEngine;
30 DEFINE_TEST_VALUE(QScriptValue());
31 DEFINE_TEST_VALUE(QScriptValue(QScriptValue::UndefinedValue));
32 DEFINE_TEST_VALUE(QScriptValue(QScriptValue::NullValue));
33 DEFINE_TEST_VALUE(QScriptValue(true));
34 DEFINE_TEST_VALUE(QScriptValue(false));
35 DEFINE_TEST_VALUE(QScriptValue(int(122)));
36 DEFINE_TEST_VALUE(QScriptValue(uint(124)));
37 DEFINE_TEST_VALUE(QScriptValue(0));
38 DEFINE_TEST_VALUE(QScriptValue(0.0));
39 DEFINE_TEST_VALUE(QScriptValue(123.0));
40 DEFINE_TEST_VALUE(QScriptValue(6.37e-8));
41 DEFINE_TEST_VALUE(QScriptValue(-6.37e-8));
42 DEFINE_TEST_VALUE(QScriptValue(0x43211234));
43 DEFINE_TEST_VALUE(QScriptValue(0x10000));
44 DEFINE_TEST_VALUE(QScriptValue(0x10001));
45 DEFINE_TEST_VALUE(QScriptValue(qSNaN()));
46 DEFINE_TEST_VALUE(QScriptValue(qQNaN()));
47 DEFINE_TEST_VALUE(QScriptValue(qInf()));
48 DEFINE_TEST_VALUE(QScriptValue(-qInf()));
49 DEFINE_TEST_VALUE(QScriptValue("NaN"));
50 DEFINE_TEST_VALUE(QScriptValue("Infinity"));
51 DEFINE_TEST_VALUE(QScriptValue("-Infinity"));
52 DEFINE_TEST_VALUE(QScriptValue("ciao"));
53 DEFINE_TEST_VALUE(QScriptValue(QString::fromLatin1("ciao")));
54 DEFINE_TEST_VALUE(QScriptValue(QString("")));
55 DEFINE_TEST_VALUE(QScriptValue(QString()));
56 DEFINE_TEST_VALUE(QScriptValue(QString("0")));
57 DEFINE_TEST_VALUE(QScriptValue(QString("123")));
58 DEFINE_TEST_VALUE(QScriptValue(QString("12.4")));
59 DEFINE_TEST_VALUE(QScriptValue(0, QScriptValue::UndefinedValue));
60 DEFINE_TEST_VALUE(QScriptValue(0, QScriptValue::NullValue));
61 DEFINE_TEST_VALUE(QScriptValue(0, true));
62 DEFINE_TEST_VALUE(QScriptValue(0, false));
63 DEFINE_TEST_VALUE(QScriptValue(0, int(122)));
64 DEFINE_TEST_VALUE(QScriptValue(0, uint(124)));
65 DEFINE_TEST_VALUE(QScriptValue(0, 0));
66 DEFINE_TEST_VALUE(QScriptValue(0, 0.0));
67 DEFINE_TEST_VALUE(QScriptValue(0, 123.0));
68 DEFINE_TEST_VALUE(QScriptValue(0, 6.37e-8));
69 DEFINE_TEST_VALUE(QScriptValue(0, -6.37e-8));
70 DEFINE_TEST_VALUE(QScriptValue(0, 0x43211234));
71 DEFINE_TEST_VALUE(QScriptValue(0, 0x10000));
72 DEFINE_TEST_VALUE(QScriptValue(0, 0x10001));
73 DEFINE_TEST_VALUE(QScriptValue(0, qSNaN()));
74 DEFINE_TEST_VALUE(QScriptValue(0, qQNaN()));
75 DEFINE_TEST_VALUE(QScriptValue(0, qInf()));
76 DEFINE_TEST_VALUE(QScriptValue(0, -qInf()));
77 DEFINE_TEST_VALUE(QScriptValue(0, "NaN"));
78 DEFINE_TEST_VALUE(QScriptValue(0, "Infinity"));
79 DEFINE_TEST_VALUE(QScriptValue(0, "-Infinity"));
80 DEFINE_TEST_VALUE(QScriptValue(0, "ciao"));
81 DEFINE_TEST_VALUE(QScriptValue(0, QString::fromLatin1("ciao")));
82 DEFINE_TEST_VALUE(QScriptValue(0, QString("")));
83 DEFINE_TEST_VALUE(QScriptValue(0, QString()));
84 DEFINE_TEST_VALUE(QScriptValue(0, QString("0")));
85 DEFINE_TEST_VALUE(QScriptValue(0, QString("123")));
86 DEFINE_TEST_VALUE(QScriptValue(0, QString("12.3")));
87 DEFINE_TEST_VALUE(QScriptValue(engine, QScriptValue::UndefinedValue));
88 DEFINE_TEST_VALUE(QScriptValue(engine, QScriptValue::NullValue));
89 DEFINE_TEST_VALUE(QScriptValue(engine, true));
90 DEFINE_TEST_VALUE(QScriptValue(engine, false));
91 DEFINE_TEST_VALUE(QScriptValue(engine, int(122)));
92 DEFINE_TEST_VALUE(QScriptValue(engine, uint(124)));
93 DEFINE_TEST_VALUE(QScriptValue(engine, 0));
94 DEFINE_TEST_VALUE(QScriptValue(engine, 0.0));
95 DEFINE_TEST_VALUE(QScriptValue(engine, 123.0));
96 DEFINE_TEST_VALUE(QScriptValue(engine, 6.37e-8));
97 DEFINE_TEST_VALUE(QScriptValue(engine, -6.37e-8));
98 DEFINE_TEST_VALUE(QScriptValue(engine, 0x43211234));
99 DEFINE_TEST_VALUE(QScriptValue(engine, 0x10000));
100 DEFINE_TEST_VALUE(QScriptValue(engine, 0x10001));
101 DEFINE_TEST_VALUE(QScriptValue(engine, qSNaN()));
102 DEFINE_TEST_VALUE(QScriptValue(engine, qQNaN()));
103 DEFINE_TEST_VALUE(QScriptValue(engine, qInf()));
104 DEFINE_TEST_VALUE(QScriptValue(engine, -qInf()));
105 DEFINE_TEST_VALUE(QScriptValue(engine, "NaN"));
106 DEFINE_TEST_VALUE(QScriptValue(engine, "Infinity"));
107 DEFINE_TEST_VALUE(QScriptValue(engine, "-Infinity"));
108 DEFINE_TEST_VALUE(QScriptValue(engine, "ciao"));
109 DEFINE_TEST_VALUE(QScriptValue(engine, QString::fromLatin1("ciao")));
110 DEFINE_TEST_VALUE(QScriptValue(engine, QString("")));
111 DEFINE_TEST_VALUE(QScriptValue(engine, QString()));
112 DEFINE_TEST_VALUE(QScriptValue(engine, QString("0")));
113 DEFINE_TEST_VALUE(QScriptValue(engine, QString("123")));
114 DEFINE_TEST_VALUE(QScriptValue(engine, QString("1.23")));
115 DEFINE_TEST_VALUE(engine->evaluate("[]"));
116 DEFINE_TEST_VALUE(engine->evaluate("{}"));
117 DEFINE_TEST_VALUE(engine->evaluate("Object.prototype"));
118 DEFINE_TEST_VALUE(engine->evaluate("Date.prototype"));
119 DEFINE_TEST_VALUE(engine->evaluate("Array.prototype"));
120 DEFINE_TEST_VALUE(engine->evaluate("Function.prototype"));
121 DEFINE_TEST_VALUE(engine->evaluate("Error.prototype"));
122 DEFINE_TEST_VALUE(engine->evaluate("Object"));
123 DEFINE_TEST_VALUE(engine->evaluate("Array"));
124 DEFINE_TEST_VALUE(engine->evaluate("Number"));
125 DEFINE_TEST_VALUE(engine->evaluate("Function"));
126 DEFINE_TEST_VALUE(engine->evaluate("(function() { return 1; })"));
127 DEFINE_TEST_VALUE(engine->evaluate("(function() { return 'ciao'; })"));
128 DEFINE_TEST_VALUE(engine->evaluate("(function() { throw new Error('foo'); })"));
129 DEFINE_TEST_VALUE(engine->evaluate("/foo/"));
130 DEFINE_TEST_VALUE(engine->evaluate("new Object()"));
131 DEFINE_TEST_VALUE(engine->evaluate("new Array()"));
132 DEFINE_TEST_VALUE(engine->evaluate("new Error()"));
133 }
134
135
isValid_initData()136 void tst_QScriptValue::isValid_initData()
137 {
138 QTest::addColumn<bool>("expected");
139 initScriptValues();
140 }
141
isValid_makeData(const char * expr)142 void tst_QScriptValue::isValid_makeData(const char* expr)
143 {
144 static QSet<QString> isValid;
145 if (isValid.isEmpty()) {
146 isValid << "QScriptValue(QScriptValue::UndefinedValue)"
147 << "QScriptValue(QScriptValue::NullValue)"
148 << "QScriptValue(true)"
149 << "QScriptValue(false)"
150 << "QScriptValue(int(122))"
151 << "QScriptValue(uint(124))"
152 << "QScriptValue(0)"
153 << "QScriptValue(0.0)"
154 << "QScriptValue(123.0)"
155 << "QScriptValue(6.37e-8)"
156 << "QScriptValue(-6.37e-8)"
157 << "QScriptValue(0x43211234)"
158 << "QScriptValue(0x10000)"
159 << "QScriptValue(0x10001)"
160 << "QScriptValue(qSNaN())"
161 << "QScriptValue(qQNaN())"
162 << "QScriptValue(qInf())"
163 << "QScriptValue(-qInf())"
164 << "QScriptValue(\"NaN\")"
165 << "QScriptValue(\"Infinity\")"
166 << "QScriptValue(\"-Infinity\")"
167 << "QScriptValue(\"ciao\")"
168 << "QScriptValue(QString::fromLatin1(\"ciao\"))"
169 << "QScriptValue(QString(\"\"))"
170 << "QScriptValue(QString())"
171 << "QScriptValue(QString(\"0\"))"
172 << "QScriptValue(QString(\"123\"))"
173 << "QScriptValue(QString(\"12.4\"))"
174 << "QScriptValue(0, QScriptValue::UndefinedValue)"
175 << "QScriptValue(0, QScriptValue::NullValue)"
176 << "QScriptValue(0, true)"
177 << "QScriptValue(0, false)"
178 << "QScriptValue(0, int(122))"
179 << "QScriptValue(0, uint(124))"
180 << "QScriptValue(0, 0)"
181 << "QScriptValue(0, 0.0)"
182 << "QScriptValue(0, 123.0)"
183 << "QScriptValue(0, 6.37e-8)"
184 << "QScriptValue(0, -6.37e-8)"
185 << "QScriptValue(0, 0x43211234)"
186 << "QScriptValue(0, 0x10000)"
187 << "QScriptValue(0, 0x10001)"
188 << "QScriptValue(0, qSNaN())"
189 << "QScriptValue(0, qQNaN())"
190 << "QScriptValue(0, qInf())"
191 << "QScriptValue(0, -qInf())"
192 << "QScriptValue(0, \"NaN\")"
193 << "QScriptValue(0, \"Infinity\")"
194 << "QScriptValue(0, \"-Infinity\")"
195 << "QScriptValue(0, \"ciao\")"
196 << "QScriptValue(0, QString::fromLatin1(\"ciao\"))"
197 << "QScriptValue(0, QString(\"\"))"
198 << "QScriptValue(0, QString())"
199 << "QScriptValue(0, QString(\"0\"))"
200 << "QScriptValue(0, QString(\"123\"))"
201 << "QScriptValue(0, QString(\"12.3\"))"
202 << "QScriptValue(engine, QScriptValue::UndefinedValue)"
203 << "QScriptValue(engine, QScriptValue::NullValue)"
204 << "QScriptValue(engine, true)"
205 << "QScriptValue(engine, false)"
206 << "QScriptValue(engine, int(122))"
207 << "QScriptValue(engine, uint(124))"
208 << "QScriptValue(engine, 0)"
209 << "QScriptValue(engine, 0.0)"
210 << "QScriptValue(engine, 123.0)"
211 << "QScriptValue(engine, 6.37e-8)"
212 << "QScriptValue(engine, -6.37e-8)"
213 << "QScriptValue(engine, 0x43211234)"
214 << "QScriptValue(engine, 0x10000)"
215 << "QScriptValue(engine, 0x10001)"
216 << "QScriptValue(engine, qSNaN())"
217 << "QScriptValue(engine, qQNaN())"
218 << "QScriptValue(engine, qInf())"
219 << "QScriptValue(engine, -qInf())"
220 << "QScriptValue(engine, \"NaN\")"
221 << "QScriptValue(engine, \"Infinity\")"
222 << "QScriptValue(engine, \"-Infinity\")"
223 << "QScriptValue(engine, \"ciao\")"
224 << "QScriptValue(engine, QString::fromLatin1(\"ciao\"))"
225 << "QScriptValue(engine, QString(\"\"))"
226 << "QScriptValue(engine, QString())"
227 << "QScriptValue(engine, QString(\"0\"))"
228 << "QScriptValue(engine, QString(\"123\"))"
229 << "QScriptValue(engine, QString(\"1.23\"))"
230 << "engine->evaluate(\"[]\")"
231 << "engine->evaluate(\"{}\")"
232 << "engine->evaluate(\"Object.prototype\")"
233 << "engine->evaluate(\"Date.prototype\")"
234 << "engine->evaluate(\"Array.prototype\")"
235 << "engine->evaluate(\"Function.prototype\")"
236 << "engine->evaluate(\"Error.prototype\")"
237 << "engine->evaluate(\"Object\")"
238 << "engine->evaluate(\"Array\")"
239 << "engine->evaluate(\"Number\")"
240 << "engine->evaluate(\"Function\")"
241 << "engine->evaluate(\"(function() { return 1; })\")"
242 << "engine->evaluate(\"(function() { return 'ciao'; })\")"
243 << "engine->evaluate(\"(function() { throw new Error('foo'); })\")"
244 << "engine->evaluate(\"/foo/\")"
245 << "engine->evaluate(\"new Object()\")"
246 << "engine->evaluate(\"new Array()\")"
247 << "engine->evaluate(\"new Error()\")";
248 }
249 newRow(expr) << isValid.contains(expr);
250 }
251
isValid_test(const char *,const QScriptValue & value)252 void tst_QScriptValue::isValid_test(const char*, const QScriptValue& value)
253 {
254 QFETCH(bool, expected);
255 QCOMPARE(value.isValid(), expected);
256 }
257
DEFINE_TEST_FUNCTION(isValid)258 DEFINE_TEST_FUNCTION(isValid)
259
260
261 void tst_QScriptValue::isBool_initData()
262 {
263 QTest::addColumn<bool>("expected");
264 initScriptValues();
265 }
266
isBool_makeData(const char * expr)267 void tst_QScriptValue::isBool_makeData(const char* expr)
268 {
269 static QSet<QString> isBool;
270 if (isBool.isEmpty()) {
271 isBool << "QScriptValue(true)"
272 << "QScriptValue(false)"
273 << "QScriptValue(0, true)"
274 << "QScriptValue(0, false)"
275 << "QScriptValue(engine, true)"
276 << "QScriptValue(engine, false)";
277 }
278 newRow(expr) << isBool.contains(expr);
279 }
280
isBool_test(const char *,const QScriptValue & value)281 void tst_QScriptValue::isBool_test(const char*, const QScriptValue& value)
282 {
283 QFETCH(bool, expected);
284 QCOMPARE(value.isBool(), expected);
285 }
286
DEFINE_TEST_FUNCTION(isBool)287 DEFINE_TEST_FUNCTION(isBool)
288
289
290 void tst_QScriptValue::isBoolean_initData()
291 {
292 QTest::addColumn<bool>("expected");
293 initScriptValues();
294 }
295
isBoolean_makeData(const char * expr)296 void tst_QScriptValue::isBoolean_makeData(const char* expr)
297 {
298 static QSet<QString> isBoolean;
299 if (isBoolean.isEmpty()) {
300 isBoolean << "QScriptValue(true)"
301 << "QScriptValue(false)"
302 << "QScriptValue(0, true)"
303 << "QScriptValue(0, false)"
304 << "QScriptValue(engine, true)"
305 << "QScriptValue(engine, false)";
306 }
307 newRow(expr) << isBoolean.contains(expr);
308 }
309
isBoolean_test(const char *,const QScriptValue & value)310 void tst_QScriptValue::isBoolean_test(const char*, const QScriptValue& value)
311 {
312 QFETCH(bool, expected);
313 QCOMPARE(value.isBoolean(), expected);
314 }
315
DEFINE_TEST_FUNCTION(isBoolean)316 DEFINE_TEST_FUNCTION(isBoolean)
317
318 void tst_QScriptValue::isNumber_initData()
319 {
320 QTest::addColumn<bool>("expected");
321 initScriptValues();
322 }
323
isNumber_makeData(const char * expr)324 void tst_QScriptValue::isNumber_makeData(const char* expr)
325 {
326 static QSet<QString> isNumber;
327 if (isNumber.isEmpty()) {
328 isNumber << "QScriptValue(int(122))"
329 << "QScriptValue(uint(124))"
330 << "QScriptValue(0)"
331 << "QScriptValue(0.0)"
332 << "QScriptValue(123.0)"
333 << "QScriptValue(6.37e-8)"
334 << "QScriptValue(-6.37e-8)"
335 << "QScriptValue(0x43211234)"
336 << "QScriptValue(0x10000)"
337 << "QScriptValue(0x10001)"
338 << "QScriptValue(qSNaN())"
339 << "QScriptValue(qQNaN())"
340 << "QScriptValue(qInf())"
341 << "QScriptValue(-qInf())"
342 << "QScriptValue(0, int(122))"
343 << "QScriptValue(0, uint(124))"
344 << "QScriptValue(0, 0)"
345 << "QScriptValue(0, 0.0)"
346 << "QScriptValue(0, 123.0)"
347 << "QScriptValue(0, 6.37e-8)"
348 << "QScriptValue(0, -6.37e-8)"
349 << "QScriptValue(0, 0x43211234)"
350 << "QScriptValue(0, 0x10000)"
351 << "QScriptValue(0, 0x10001)"
352 << "QScriptValue(0, qSNaN())"
353 << "QScriptValue(0, qQNaN())"
354 << "QScriptValue(0, qInf())"
355 << "QScriptValue(0, -qInf())"
356 << "QScriptValue(engine, int(122))"
357 << "QScriptValue(engine, uint(124))"
358 << "QScriptValue(engine, 0)"
359 << "QScriptValue(engine, 0.0)"
360 << "QScriptValue(engine, 123.0)"
361 << "QScriptValue(engine, 6.37e-8)"
362 << "QScriptValue(engine, -6.37e-8)"
363 << "QScriptValue(engine, 0x43211234)"
364 << "QScriptValue(engine, 0x10000)"
365 << "QScriptValue(engine, 0x10001)"
366 << "QScriptValue(engine, qSNaN())"
367 << "QScriptValue(engine, qQNaN())"
368 << "QScriptValue(engine, qInf())"
369 << "QScriptValue(engine, -qInf())";
370 }
371 newRow(expr) << isNumber.contains(expr);
372 }
373
isNumber_test(const char *,const QScriptValue & value)374 void tst_QScriptValue::isNumber_test(const char*, const QScriptValue& value)
375 {
376 QFETCH(bool, expected);
377 QCOMPARE(value.isNumber(), expected);
378 }
379
DEFINE_TEST_FUNCTION(isNumber)380 DEFINE_TEST_FUNCTION(isNumber)
381
382
383 void tst_QScriptValue::isFunction_initData()
384 {
385 QTest::addColumn<bool>("expected");
386 initScriptValues();
387 }
388
isFunction_makeData(const char * expr)389 void tst_QScriptValue::isFunction_makeData(const char* expr)
390 {
391 static QSet<QString> isFunction;
392 if (isFunction.isEmpty()) {
393 isFunction << "engine->evaluate(\"Function.prototype\")"
394 << "engine->evaluate(\"Object\")"
395 << "engine->evaluate(\"Array\")"
396 << "engine->evaluate(\"Number\")"
397 << "engine->evaluate(\"Function\")"
398 << "engine->evaluate(\"(function() { return 1; })\")"
399 << "engine->evaluate(\"(function() { return 'ciao'; })\")"
400 << "engine->evaluate(\"(function() { throw new Error('foo'); })\")"
401 << "engine->evaluate(\"/foo/\")";
402 }
403 newRow(expr) << isFunction.contains(expr);
404 }
405
isFunction_test(const char *,const QScriptValue & value)406 void tst_QScriptValue::isFunction_test(const char*, const QScriptValue& value)
407 {
408 QFETCH(bool, expected);
409 QCOMPARE(value.isFunction(), expected);
410 }
411
DEFINE_TEST_FUNCTION(isFunction)412 DEFINE_TEST_FUNCTION(isFunction)
413
414
415 void tst_QScriptValue::isNull_initData()
416 {
417 QTest::addColumn<bool>("expected");
418 initScriptValues();
419 }
420
isNull_makeData(const char * expr)421 void tst_QScriptValue::isNull_makeData(const char* expr)
422 {
423 static QSet<QString> isNull;
424 if (isNull.isEmpty()) {
425 isNull << "QScriptValue(QScriptValue::NullValue)"
426 << "QScriptValue(0, QScriptValue::NullValue)"
427 << "QScriptValue(engine, QScriptValue::NullValue)";
428 }
429 newRow(expr) << isNull.contains(expr);
430 }
431
isNull_test(const char *,const QScriptValue & value)432 void tst_QScriptValue::isNull_test(const char*, const QScriptValue& value)
433 {
434 QFETCH(bool, expected);
435 QCOMPARE(value.isNull(), expected);
436 }
437
DEFINE_TEST_FUNCTION(isNull)438 DEFINE_TEST_FUNCTION(isNull)
439
440
441 void tst_QScriptValue::isString_initData()
442 {
443 QTest::addColumn<bool>("expected");
444 initScriptValues();
445 }
446
isString_makeData(const char * expr)447 void tst_QScriptValue::isString_makeData(const char* expr)
448 {
449 static QSet<QString> isString;
450 if (isString.isEmpty()) {
451 isString << "QScriptValue(\"NaN\")"
452 << "QScriptValue(\"Infinity\")"
453 << "QScriptValue(\"-Infinity\")"
454 << "QScriptValue(\"ciao\")"
455 << "QScriptValue(QString::fromLatin1(\"ciao\"))"
456 << "QScriptValue(QString(\"\"))"
457 << "QScriptValue(QString())"
458 << "QScriptValue(QString(\"0\"))"
459 << "QScriptValue(QString(\"123\"))"
460 << "QScriptValue(QString(\"12.4\"))"
461 << "QScriptValue(0, \"NaN\")"
462 << "QScriptValue(0, \"Infinity\")"
463 << "QScriptValue(0, \"-Infinity\")"
464 << "QScriptValue(0, \"ciao\")"
465 << "QScriptValue(0, QString::fromLatin1(\"ciao\"))"
466 << "QScriptValue(0, QString(\"\"))"
467 << "QScriptValue(0, QString())"
468 << "QScriptValue(0, QString(\"0\"))"
469 << "QScriptValue(0, QString(\"123\"))"
470 << "QScriptValue(0, QString(\"12.3\"))"
471 << "QScriptValue(engine, \"NaN\")"
472 << "QScriptValue(engine, \"Infinity\")"
473 << "QScriptValue(engine, \"-Infinity\")"
474 << "QScriptValue(engine, \"ciao\")"
475 << "QScriptValue(engine, QString::fromLatin1(\"ciao\"))"
476 << "QScriptValue(engine, QString(\"\"))"
477 << "QScriptValue(engine, QString())"
478 << "QScriptValue(engine, QString(\"0\"))"
479 << "QScriptValue(engine, QString(\"123\"))"
480 << "QScriptValue(engine, QString(\"1.23\"))";
481 }
482 newRow(expr) << isString.contains(expr);
483 }
484
isString_test(const char *,const QScriptValue & value)485 void tst_QScriptValue::isString_test(const char*, const QScriptValue& value)
486 {
487 QFETCH(bool, expected);
488 QCOMPARE(value.isString(), expected);
489 }
490
DEFINE_TEST_FUNCTION(isString)491 DEFINE_TEST_FUNCTION(isString)
492
493
494 void tst_QScriptValue::isUndefined_initData()
495 {
496 QTest::addColumn<bool>("expected");
497 initScriptValues();
498 }
499
isUndefined_makeData(const char * expr)500 void tst_QScriptValue::isUndefined_makeData(const char* expr)
501 {
502 static QSet<QString> isUndefined;
503 if (isUndefined.isEmpty()) {
504 isUndefined << "QScriptValue(QScriptValue::UndefinedValue)"
505 << "QScriptValue(0, QScriptValue::UndefinedValue)"
506 << "QScriptValue(engine, QScriptValue::UndefinedValue)"
507 << "engine->evaluate(\"{}\")";
508 }
509 newRow(expr) << isUndefined.contains(expr);
510 }
511
isUndefined_test(const char *,const QScriptValue & value)512 void tst_QScriptValue::isUndefined_test(const char*, const QScriptValue& value)
513 {
514 QFETCH(bool, expected);
515 QCOMPARE(value.isUndefined(), expected);
516 }
517
DEFINE_TEST_FUNCTION(isUndefined)518 DEFINE_TEST_FUNCTION(isUndefined)
519
520 void tst_QScriptValue::isObject_initData()
521 {
522 QTest::addColumn<bool>("expected");
523 initScriptValues();
524 }
525
isObject_makeData(const char * expr)526 void tst_QScriptValue::isObject_makeData(const char* expr)
527 {
528 static QSet<QString> isObject;
529 if (isObject.isEmpty()) {
530 isObject << "engine->evaluate(\"[]\")"
531 << "engine->evaluate(\"Object.prototype\")"
532 << "engine->evaluate(\"Date.prototype\")"
533 << "engine->evaluate(\"Array.prototype\")"
534 << "engine->evaluate(\"Function.prototype\")"
535 << "engine->evaluate(\"Error.prototype\")"
536 << "engine->evaluate(\"Object\")"
537 << "engine->evaluate(\"Array\")"
538 << "engine->evaluate(\"Number\")"
539 << "engine->evaluate(\"Function\")"
540 << "engine->evaluate(\"(function() { return 1; })\")"
541 << "engine->evaluate(\"(function() { return 'ciao'; })\")"
542 << "engine->evaluate(\"(function() { throw new Error('foo'); })\")"
543 << "engine->evaluate(\"/foo/\")"
544 << "engine->evaluate(\"new Object()\")"
545 << "engine->evaluate(\"new Array()\")"
546 << "engine->evaluate(\"new Error()\")";
547 }
548 newRow(expr) << isObject.contains(expr);
549 }
550
isObject_test(const char *,const QScriptValue & value)551 void tst_QScriptValue::isObject_test(const char*, const QScriptValue& value)
552 {
553 QFETCH(bool, expected);
554 QCOMPARE(value.isObject(), expected);
555 }
556
DEFINE_TEST_FUNCTION(isObject)557 DEFINE_TEST_FUNCTION(isObject)
558
559 void tst_QScriptValue::toNumber_initData()
560 {
561 QTest::addColumn<qsreal>("expected");
562 initScriptValues();
563 }
564
toNumber_makeData(const char * expr)565 void tst_QScriptValue::toNumber_makeData(const char* expr)
566 {
567 static QHash<QString, qsreal> toNumber;
568 if (toNumber.isEmpty()) {
569 toNumber.insert("QScriptValue()", 0);
570 toNumber.insert("QScriptValue(QScriptValue::UndefinedValue)", qQNaN());
571 toNumber.insert("QScriptValue(QScriptValue::NullValue)", 0);
572 toNumber.insert("QScriptValue(true)", 1);
573 toNumber.insert("QScriptValue(false)", 0);
574 toNumber.insert("QScriptValue(int(122))", 122);
575 toNumber.insert("QScriptValue(uint(124))", 124);
576 toNumber.insert("QScriptValue(0)", 0);
577 toNumber.insert("QScriptValue(0.0)", 0);
578 toNumber.insert("QScriptValue(123.0)", 123);
579 toNumber.insert("QScriptValue(6.37e-8)", 6.369999999999999e-08);
580 toNumber.insert("QScriptValue(-6.37e-8)", -6.369999999999999e-08);
581 toNumber.insert("QScriptValue(0x43211234)", 1126240820);
582 toNumber.insert("QScriptValue(0x10000)", 65536);
583 toNumber.insert("QScriptValue(0x10001)", 65537);
584 toNumber.insert("QScriptValue(qSNaN())", qQNaN());
585 toNumber.insert("QScriptValue(qQNaN())", qQNaN());
586 toNumber.insert("QScriptValue(qInf())", qInf());
587 toNumber.insert("QScriptValue(-qInf())", qInf());
588 toNumber.insert("QScriptValue(\"NaN\")", qQNaN());
589 toNumber.insert("QScriptValue(\"Infinity\")", qInf());
590 toNumber.insert("QScriptValue(\"-Infinity\")", qInf());
591 toNumber.insert("QScriptValue(\"ciao\")", qQNaN());
592 toNumber.insert("QScriptValue(QString::fromLatin1(\"ciao\"))", qQNaN());
593 toNumber.insert("QScriptValue(QString(\"\"))", 0);
594 toNumber.insert("QScriptValue(QString())", 0);
595 toNumber.insert("QScriptValue(QString(\"0\"))", 0);
596 toNumber.insert("QScriptValue(QString(\"123\"))", 123);
597 toNumber.insert("QScriptValue(QString(\"12.4\"))", 12.4);
598 toNumber.insert("QScriptValue(0, QScriptValue::UndefinedValue)", qQNaN());
599 toNumber.insert("QScriptValue(0, QScriptValue::NullValue)", 0);
600 toNumber.insert("QScriptValue(0, true)", 1);
601 toNumber.insert("QScriptValue(0, false)", 0);
602 toNumber.insert("QScriptValue(0, int(122))", 122);
603 toNumber.insert("QScriptValue(0, uint(124))", 124);
604 toNumber.insert("QScriptValue(0, 0)", 0);
605 toNumber.insert("QScriptValue(0, 0.0)", 0);
606 toNumber.insert("QScriptValue(0, 123.0)", 123);
607 toNumber.insert("QScriptValue(0, 6.37e-8)", 6.369999999999999e-08);
608 toNumber.insert("QScriptValue(0, -6.37e-8)", -6.369999999999999e-08);
609 toNumber.insert("QScriptValue(0, 0x43211234)", 1126240820);
610 toNumber.insert("QScriptValue(0, 0x10000)", 65536);
611 toNumber.insert("QScriptValue(0, 0x10001)", 65537);
612 toNumber.insert("QScriptValue(0, qSNaN())", qQNaN());
613 toNumber.insert("QScriptValue(0, qQNaN())", qQNaN());
614 toNumber.insert("QScriptValue(0, qInf())", qInf());
615 toNumber.insert("QScriptValue(0, -qInf())", qInf());
616 toNumber.insert("QScriptValue(0, \"NaN\")", qQNaN());
617 toNumber.insert("QScriptValue(0, \"Infinity\")", qInf());
618 toNumber.insert("QScriptValue(0, \"-Infinity\")", qInf());
619 toNumber.insert("QScriptValue(0, \"ciao\")", qQNaN());
620 toNumber.insert("QScriptValue(0, QString::fromLatin1(\"ciao\"))", qQNaN());
621 toNumber.insert("QScriptValue(0, QString(\"\"))", 0);
622 toNumber.insert("QScriptValue(0, QString())", 0);
623 toNumber.insert("QScriptValue(0, QString(\"0\"))", 0);
624 toNumber.insert("QScriptValue(0, QString(\"123\"))", 123);
625 toNumber.insert("QScriptValue(0, QString(\"12.3\"))", 12.3);
626 toNumber.insert("QScriptValue(engine, QScriptValue::UndefinedValue)", qQNaN());
627 toNumber.insert("QScriptValue(engine, QScriptValue::NullValue)", 0);
628 toNumber.insert("QScriptValue(engine, true)", 1);
629 toNumber.insert("QScriptValue(engine, false)", 0);
630 toNumber.insert("QScriptValue(engine, int(122))", 122);
631 toNumber.insert("QScriptValue(engine, uint(124))", 124);
632 toNumber.insert("QScriptValue(engine, 0)", 0);
633 toNumber.insert("QScriptValue(engine, 0.0)", 0);
634 toNumber.insert("QScriptValue(engine, 123.0)", 123);
635 toNumber.insert("QScriptValue(engine, 6.37e-8)", 6.369999999999999e-08);
636 toNumber.insert("QScriptValue(engine, -6.37e-8)", -6.369999999999999e-08);
637 toNumber.insert("QScriptValue(engine, 0x43211234)", 1126240820);
638 toNumber.insert("QScriptValue(engine, 0x10000)", 65536);
639 toNumber.insert("QScriptValue(engine, 0x10001)", 65537);
640 toNumber.insert("QScriptValue(engine, qSNaN())", qQNaN());
641 toNumber.insert("QScriptValue(engine, qQNaN())", qQNaN());
642 toNumber.insert("QScriptValue(engine, qInf())", qInf());
643 toNumber.insert("QScriptValue(engine, -qInf())", qInf());
644 toNumber.insert("QScriptValue(engine, \"NaN\")", qQNaN());
645 toNumber.insert("QScriptValue(engine, \"Infinity\")", qInf());
646 toNumber.insert("QScriptValue(engine, \"-Infinity\")", qInf());
647 toNumber.insert("QScriptValue(engine, \"ciao\")", qQNaN());
648 toNumber.insert("QScriptValue(engine, QString::fromLatin1(\"ciao\"))", qQNaN());
649 toNumber.insert("QScriptValue(engine, QString(\"\"))", 0);
650 toNumber.insert("QScriptValue(engine, QString())", 0);
651 toNumber.insert("QScriptValue(engine, QString(\"0\"))", 0);
652 toNumber.insert("QScriptValue(engine, QString(\"123\"))", 123);
653 toNumber.insert("QScriptValue(engine, QString(\"1.23\"))", 1.23);
654 toNumber.insert("engine->evaluate(\"[]\")", 0);
655 toNumber.insert("engine->evaluate(\"{}\")", qQNaN());
656 toNumber.insert("engine->evaluate(\"Object.prototype\")", qQNaN());
657 toNumber.insert("engine->evaluate(\"Date.prototype\")", qQNaN());
658 toNumber.insert("engine->evaluate(\"Array.prototype\")", 0);
659 toNumber.insert("engine->evaluate(\"Function.prototype\")", qQNaN());
660 toNumber.insert("engine->evaluate(\"Error.prototype\")", qQNaN());
661 toNumber.insert("engine->evaluate(\"Object\")", qQNaN());
662 toNumber.insert("engine->evaluate(\"Array\")", qQNaN());
663 toNumber.insert("engine->evaluate(\"Number\")", qQNaN());
664 toNumber.insert("engine->evaluate(\"Function\")", qQNaN());
665 toNumber.insert("engine->evaluate(\"(function() { return 1; })\")", qQNaN());
666 toNumber.insert("engine->evaluate(\"(function() { return 'ciao'; })\")", qQNaN());
667 toNumber.insert("engine->evaluate(\"(function() { throw new Error('foo'); })\")", qQNaN());
668 toNumber.insert("engine->evaluate(\"/foo/\")", qQNaN());
669 toNumber.insert("engine->evaluate(\"new Object()\")", qQNaN());
670 toNumber.insert("engine->evaluate(\"new Array()\")", 0);
671 toNumber.insert("engine->evaluate(\"new Error()\")", qQNaN());
672 }
673 newRow(expr) << toNumber.value(expr);
674 }
675
toNumber_test(const char *,const QScriptValue & value)676 void tst_QScriptValue::toNumber_test(const char*, const QScriptValue& value)
677 {
678 QFETCH(qsreal, expected);
679 if (qIsNaN(expected)) {
680 QVERIFY(qIsNaN(value.toNumber()));
681 return;
682 }
683 if (qIsInf(expected)) {
684 QVERIFY(qIsInf(value.toNumber()));
685 return;
686 }
687 QCOMPARE(value.toNumber(), expected);
688 }
689
DEFINE_TEST_FUNCTION(toNumber)690 DEFINE_TEST_FUNCTION(toNumber)
691
692
693 void tst_QScriptValue::toBool_initData()
694 {
695 QTest::addColumn<bool>("expected");
696 initScriptValues();
697 }
698
toBool_makeData(const char * expr)699 void tst_QScriptValue::toBool_makeData(const char* expr)
700 {
701 static QHash<QString, bool> toBool;
702 if (toBool.isEmpty()) {
703 toBool.insert("QScriptValue()", false);
704 toBool.insert("QScriptValue(QScriptValue::UndefinedValue)", false);
705 toBool.insert("QScriptValue(QScriptValue::NullValue)", false);
706 toBool.insert("QScriptValue(true)", true);
707 toBool.insert("QScriptValue(false)", false);
708 toBool.insert("QScriptValue(int(122))", true);
709 toBool.insert("QScriptValue(uint(124))", true);
710 toBool.insert("QScriptValue(0)", false);
711 toBool.insert("QScriptValue(0.0)", false);
712 toBool.insert("QScriptValue(123.0)", true);
713 toBool.insert("QScriptValue(6.37e-8)", true);
714 toBool.insert("QScriptValue(-6.37e-8)", true);
715 toBool.insert("QScriptValue(0x43211234)", true);
716 toBool.insert("QScriptValue(0x10000)", true);
717 toBool.insert("QScriptValue(0x10001)", true);
718 toBool.insert("QScriptValue(qSNaN())", false);
719 toBool.insert("QScriptValue(qQNaN())", false);
720 toBool.insert("QScriptValue(qInf())", true);
721 toBool.insert("QScriptValue(-qInf())", true);
722 toBool.insert("QScriptValue(\"NaN\")", true);
723 toBool.insert("QScriptValue(\"Infinity\")", true);
724 toBool.insert("QScriptValue(\"-Infinity\")", true);
725 toBool.insert("QScriptValue(\"ciao\")", true);
726 toBool.insert("QScriptValue(QString::fromLatin1(\"ciao\"))", true);
727 toBool.insert("QScriptValue(QString(\"\"))", false);
728 toBool.insert("QScriptValue(QString())", false);
729 toBool.insert("QScriptValue(QString(\"0\"))", true);
730 toBool.insert("QScriptValue(QString(\"123\"))", true);
731 toBool.insert("QScriptValue(QString(\"12.4\"))", true);
732 toBool.insert("QScriptValue(0, QScriptValue::UndefinedValue)", false);
733 toBool.insert("QScriptValue(0, QScriptValue::NullValue)", false);
734 toBool.insert("QScriptValue(0, true)", true);
735 toBool.insert("QScriptValue(0, false)", false);
736 toBool.insert("QScriptValue(0, int(122))", true);
737 toBool.insert("QScriptValue(0, uint(124))", true);
738 toBool.insert("QScriptValue(0, 0)", false);
739 toBool.insert("QScriptValue(0, 0.0)", false);
740 toBool.insert("QScriptValue(0, 123.0)", true);
741 toBool.insert("QScriptValue(0, 6.37e-8)", true);
742 toBool.insert("QScriptValue(0, -6.37e-8)", true);
743 toBool.insert("QScriptValue(0, 0x43211234)", true);
744 toBool.insert("QScriptValue(0, 0x10000)", true);
745 toBool.insert("QScriptValue(0, 0x10001)", true);
746 toBool.insert("QScriptValue(0, qSNaN())", false);
747 toBool.insert("QScriptValue(0, qQNaN())", false);
748 toBool.insert("QScriptValue(0, qInf())", true);
749 toBool.insert("QScriptValue(0, -qInf())", true);
750 toBool.insert("QScriptValue(0, \"NaN\")", true);
751 toBool.insert("QScriptValue(0, \"Infinity\")", true);
752 toBool.insert("QScriptValue(0, \"-Infinity\")", true);
753 toBool.insert("QScriptValue(0, \"ciao\")", true);
754 toBool.insert("QScriptValue(0, QString::fromLatin1(\"ciao\"))", true);
755 toBool.insert("QScriptValue(0, QString(\"\"))", false);
756 toBool.insert("QScriptValue(0, QString())", false);
757 toBool.insert("QScriptValue(0, QString(\"0\"))", true);
758 toBool.insert("QScriptValue(0, QString(\"123\"))", true);
759 toBool.insert("QScriptValue(0, QString(\"12.3\"))", true);
760 toBool.insert("QScriptValue(engine, QScriptValue::UndefinedValue)", false);
761 toBool.insert("QScriptValue(engine, QScriptValue::NullValue)", false);
762 toBool.insert("QScriptValue(engine, true)", true);
763 toBool.insert("QScriptValue(engine, false)", false);
764 toBool.insert("QScriptValue(engine, int(122))", true);
765 toBool.insert("QScriptValue(engine, uint(124))", true);
766 toBool.insert("QScriptValue(engine, 0)", false);
767 toBool.insert("QScriptValue(engine, 0.0)", false);
768 toBool.insert("QScriptValue(engine, 123.0)", true);
769 toBool.insert("QScriptValue(engine, 6.37e-8)", true);
770 toBool.insert("QScriptValue(engine, -6.37e-8)", true);
771 toBool.insert("QScriptValue(engine, 0x43211234)", true);
772 toBool.insert("QScriptValue(engine, 0x10000)", true);
773 toBool.insert("QScriptValue(engine, 0x10001)", true);
774 toBool.insert("QScriptValue(engine, qSNaN())", false);
775 toBool.insert("QScriptValue(engine, qQNaN())", false);
776 toBool.insert("QScriptValue(engine, qInf())", true);
777 toBool.insert("QScriptValue(engine, -qInf())", true);
778 toBool.insert("QScriptValue(engine, \"NaN\")", true);
779 toBool.insert("QScriptValue(engine, \"Infinity\")", true);
780 toBool.insert("QScriptValue(engine, \"-Infinity\")", true);
781 toBool.insert("QScriptValue(engine, \"ciao\")", true);
782 toBool.insert("QScriptValue(engine, QString::fromLatin1(\"ciao\"))", true);
783 toBool.insert("QScriptValue(engine, QString(\"\"))", false);
784 toBool.insert("QScriptValue(engine, QString())", false);
785 toBool.insert("QScriptValue(engine, QString(\"0\"))", true);
786 toBool.insert("QScriptValue(engine, QString(\"123\"))", true);
787 toBool.insert("QScriptValue(engine, QString(\"1.23\"))", true);
788 toBool.insert("engine->evaluate(\"[]\")", true);
789 toBool.insert("engine->evaluate(\"{}\")", false);
790 toBool.insert("engine->evaluate(\"Object.prototype\")", true);
791 toBool.insert("engine->evaluate(\"Date.prototype\")", true);
792 toBool.insert("engine->evaluate(\"Array.prototype\")", true);
793 toBool.insert("engine->evaluate(\"Function.prototype\")", true);
794 toBool.insert("engine->evaluate(\"Error.prototype\")", true);
795 toBool.insert("engine->evaluate(\"Object\")", true);
796 toBool.insert("engine->evaluate(\"Array\")", true);
797 toBool.insert("engine->evaluate(\"Number\")", true);
798 toBool.insert("engine->evaluate(\"Function\")", true);
799 toBool.insert("engine->evaluate(\"(function() { return 1; })\")", true);
800 toBool.insert("engine->evaluate(\"(function() { return 'ciao'; })\")", true);
801 toBool.insert("engine->evaluate(\"(function() { throw new Error('foo'); })\")", true);
802 toBool.insert("engine->evaluate(\"/foo/\")", true);
803 toBool.insert("engine->evaluate(\"new Object()\")", true);
804 toBool.insert("engine->evaluate(\"new Array()\")", true);
805 toBool.insert("engine->evaluate(\"new Error()\")", true);
806 }
807 newRow(expr) << toBool.value(expr);
808 }
809
toBool_test(const char *,const QScriptValue & value)810 void tst_QScriptValue::toBool_test(const char*, const QScriptValue& value)
811 {
812 QFETCH(bool, expected);
813 QCOMPARE(value.toBool(), expected);
814 }
815
DEFINE_TEST_FUNCTION(toBool)816 DEFINE_TEST_FUNCTION(toBool)
817
818
819 void tst_QScriptValue::toBoolean_initData()
820 {
821 QTest::addColumn<bool>("expected");
822 initScriptValues();
823 }
824
toBoolean_makeData(const char * expr)825 void tst_QScriptValue::toBoolean_makeData(const char* expr)
826 {
827 static QHash<QString, bool> toBoolean;
828 if (toBoolean.isEmpty()) {
829 toBoolean.insert("QScriptValue()", false);
830 toBoolean.insert("QScriptValue(QScriptValue::UndefinedValue)", false);
831 toBoolean.insert("QScriptValue(QScriptValue::NullValue)", false);
832 toBoolean.insert("QScriptValue(true)", true);
833 toBoolean.insert("QScriptValue(false)", false);
834 toBoolean.insert("QScriptValue(int(122))", true);
835 toBoolean.insert("QScriptValue(uint(124))", true);
836 toBoolean.insert("QScriptValue(0)", false);
837 toBoolean.insert("QScriptValue(0.0)", false);
838 toBoolean.insert("QScriptValue(123.0)", true);
839 toBoolean.insert("QScriptValue(6.37e-8)", true);
840 toBoolean.insert("QScriptValue(-6.37e-8)", true);
841 toBoolean.insert("QScriptValue(0x43211234)", true);
842 toBoolean.insert("QScriptValue(0x10000)", true);
843 toBoolean.insert("QScriptValue(0x10001)", true);
844 toBoolean.insert("QScriptValue(qSNaN())", false);
845 toBoolean.insert("QScriptValue(qQNaN())", false);
846 toBoolean.insert("QScriptValue(qInf())", true);
847 toBoolean.insert("QScriptValue(-qInf())", true);
848 toBoolean.insert("QScriptValue(\"NaN\")", true);
849 toBoolean.insert("QScriptValue(\"Infinity\")", true);
850 toBoolean.insert("QScriptValue(\"-Infinity\")", true);
851 toBoolean.insert("QScriptValue(\"ciao\")", true);
852 toBoolean.insert("QScriptValue(QString::fromLatin1(\"ciao\"))", true);
853 toBoolean.insert("QScriptValue(QString(\"\"))", false);
854 toBoolean.insert("QScriptValue(QString())", false);
855 toBoolean.insert("QScriptValue(QString(\"0\"))", true);
856 toBoolean.insert("QScriptValue(QString(\"123\"))", true);
857 toBoolean.insert("QScriptValue(QString(\"12.4\"))", true);
858 toBoolean.insert("QScriptValue(0, QScriptValue::UndefinedValue)", false);
859 toBoolean.insert("QScriptValue(0, QScriptValue::NullValue)", false);
860 toBoolean.insert("QScriptValue(0, true)", true);
861 toBoolean.insert("QScriptValue(0, false)", false);
862 toBoolean.insert("QScriptValue(0, int(122))", true);
863 toBoolean.insert("QScriptValue(0, uint(124))", true);
864 toBoolean.insert("QScriptValue(0, 0)", false);
865 toBoolean.insert("QScriptValue(0, 0.0)", false);
866 toBoolean.insert("QScriptValue(0, 123.0)", true);
867 toBoolean.insert("QScriptValue(0, 6.37e-8)", true);
868 toBoolean.insert("QScriptValue(0, -6.37e-8)", true);
869 toBoolean.insert("QScriptValue(0, 0x43211234)", true);
870 toBoolean.insert("QScriptValue(0, 0x10000)", true);
871 toBoolean.insert("QScriptValue(0, 0x10001)", true);
872 toBoolean.insert("QScriptValue(0, qSNaN())", false);
873 toBoolean.insert("QScriptValue(0, qQNaN())", false);
874 toBoolean.insert("QScriptValue(0, qInf())", true);
875 toBoolean.insert("QScriptValue(0, -qInf())", true);
876 toBoolean.insert("QScriptValue(0, \"NaN\")", true);
877 toBoolean.insert("QScriptValue(0, \"Infinity\")", true);
878 toBoolean.insert("QScriptValue(0, \"-Infinity\")", true);
879 toBoolean.insert("QScriptValue(0, \"ciao\")", true);
880 toBoolean.insert("QScriptValue(0, QString::fromLatin1(\"ciao\"))", true);
881 toBoolean.insert("QScriptValue(0, QString(\"\"))", false);
882 toBoolean.insert("QScriptValue(0, QString())", false);
883 toBoolean.insert("QScriptValue(0, QString(\"0\"))", true);
884 toBoolean.insert("QScriptValue(0, QString(\"123\"))", true);
885 toBoolean.insert("QScriptValue(0, QString(\"12.3\"))", true);
886 toBoolean.insert("QScriptValue(engine, QScriptValue::UndefinedValue)", false);
887 toBoolean.insert("QScriptValue(engine, QScriptValue::NullValue)", false);
888 toBoolean.insert("QScriptValue(engine, true)", true);
889 toBoolean.insert("QScriptValue(engine, false)", false);
890 toBoolean.insert("QScriptValue(engine, int(122))", true);
891 toBoolean.insert("QScriptValue(engine, uint(124))", true);
892 toBoolean.insert("QScriptValue(engine, 0)", false);
893 toBoolean.insert("QScriptValue(engine, 0.0)", false);
894 toBoolean.insert("QScriptValue(engine, 123.0)", true);
895 toBoolean.insert("QScriptValue(engine, 6.37e-8)", true);
896 toBoolean.insert("QScriptValue(engine, -6.37e-8)", true);
897 toBoolean.insert("QScriptValue(engine, 0x43211234)", true);
898 toBoolean.insert("QScriptValue(engine, 0x10000)", true);
899 toBoolean.insert("QScriptValue(engine, 0x10001)", true);
900 toBoolean.insert("QScriptValue(engine, qSNaN())", false);
901 toBoolean.insert("QScriptValue(engine, qQNaN())", false);
902 toBoolean.insert("QScriptValue(engine, qInf())", true);
903 toBoolean.insert("QScriptValue(engine, -qInf())", true);
904 toBoolean.insert("QScriptValue(engine, \"NaN\")", true);
905 toBoolean.insert("QScriptValue(engine, \"Infinity\")", true);
906 toBoolean.insert("QScriptValue(engine, \"-Infinity\")", true);
907 toBoolean.insert("QScriptValue(engine, \"ciao\")", true);
908 toBoolean.insert("QScriptValue(engine, QString::fromLatin1(\"ciao\"))", true);
909 toBoolean.insert("QScriptValue(engine, QString(\"\"))", false);
910 toBoolean.insert("QScriptValue(engine, QString())", false);
911 toBoolean.insert("QScriptValue(engine, QString(\"0\"))", true);
912 toBoolean.insert("QScriptValue(engine, QString(\"123\"))", true);
913 toBoolean.insert("QScriptValue(engine, QString(\"1.23\"))", true);
914 toBoolean.insert("engine->evaluate(\"[]\")", true);
915 toBoolean.insert("engine->evaluate(\"{}\")", false);
916 toBoolean.insert("engine->evaluate(\"Object.prototype\")", true);
917 toBoolean.insert("engine->evaluate(\"Date.prototype\")", true);
918 toBoolean.insert("engine->evaluate(\"Array.prototype\")", true);
919 toBoolean.insert("engine->evaluate(\"Function.prototype\")", true);
920 toBoolean.insert("engine->evaluate(\"Error.prototype\")", true);
921 toBoolean.insert("engine->evaluate(\"Object\")", true);
922 toBoolean.insert("engine->evaluate(\"Array\")", true);
923 toBoolean.insert("engine->evaluate(\"Number\")", true);
924 toBoolean.insert("engine->evaluate(\"Function\")", true);
925 toBoolean.insert("engine->evaluate(\"(function() { return 1; })\")", true);
926 toBoolean.insert("engine->evaluate(\"(function() { return 'ciao'; })\")", true);
927 toBoolean.insert("engine->evaluate(\"(function() { throw new Error('foo'); })\")", true);
928 toBoolean.insert("engine->evaluate(\"/foo/\")", true);
929 toBoolean.insert("engine->evaluate(\"new Object()\")", true);
930 toBoolean.insert("engine->evaluate(\"new Array()\")", true);
931 toBoolean.insert("engine->evaluate(\"new Error()\")", true);
932 }
933 newRow(expr) << toBoolean.value(expr);
934 }
935
toBoolean_test(const char *,const QScriptValue & value)936 void tst_QScriptValue::toBoolean_test(const char*, const QScriptValue& value)
937 {
938 QFETCH(bool, expected);
939 QCOMPARE(value.toBoolean(), expected);
940 }
941
942 DEFINE_TEST_FUNCTION(toBoolean)
943