]> git.saurik.com Git - apple/javascriptcore.git/blob - qt/tests/qscriptvalue/tst_qscriptvalue_generated.cpp
970c96083aee0e8f3e601bdbc8239edc84ffb9db
[apple/javascriptcore.git] / qt / tests / qscriptvalue / tst_qscriptvalue_generated.cpp
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
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 DEFINE_TEST_VALUE(engine->evaluate("a = new Object(); a.foo = 22; a.foo"));
134 DEFINE_TEST_VALUE(engine->evaluate("Undefined"));
135 DEFINE_TEST_VALUE(engine->evaluate("Null"));
136 DEFINE_TEST_VALUE(engine->evaluate("True"));
137 DEFINE_TEST_VALUE(engine->evaluate("False"));
138 DEFINE_TEST_VALUE(engine->evaluate("undefined"));
139 DEFINE_TEST_VALUE(engine->evaluate("null"));
140 DEFINE_TEST_VALUE(engine->evaluate("true"));
141 DEFINE_TEST_VALUE(engine->evaluate("false"));
142 DEFINE_TEST_VALUE(engine->evaluate("122"));
143 DEFINE_TEST_VALUE(engine->evaluate("124"));
144 DEFINE_TEST_VALUE(engine->evaluate("0"));
145 DEFINE_TEST_VALUE(engine->evaluate("0.0"));
146 DEFINE_TEST_VALUE(engine->evaluate("123.0"));
147 DEFINE_TEST_VALUE(engine->evaluate("6.37e-8"));
148 DEFINE_TEST_VALUE(engine->evaluate("-6.37e-8"));
149 DEFINE_TEST_VALUE(engine->evaluate("0x43211234"));
150 DEFINE_TEST_VALUE(engine->evaluate("0x10000"));
151 DEFINE_TEST_VALUE(engine->evaluate("0x10001"));
152 DEFINE_TEST_VALUE(engine->evaluate("NaN"));
153 DEFINE_TEST_VALUE(engine->evaluate("Infinity"));
154 DEFINE_TEST_VALUE(engine->evaluate("-Infinity"));
155 DEFINE_TEST_VALUE(engine->evaluate("'ciao'"));
156 DEFINE_TEST_VALUE(engine->evaluate("''"));
157 DEFINE_TEST_VALUE(engine->evaluate("'0'"));
158 DEFINE_TEST_VALUE(engine->evaluate("'123'"));
159 DEFINE_TEST_VALUE(engine->evaluate("'12.4'"));
160 DEFINE_TEST_VALUE(engine->nullValue());
161 DEFINE_TEST_VALUE(engine->undefinedValue());
162 }
163
164
165 void tst_QScriptValue::isValid_initData()
166 {
167 QTest::addColumn<bool>("expected");
168 initScriptValues();
169 }
170
171 void tst_QScriptValue::isValid_makeData(const char* expr)
172 {
173 static QSet<QString> isValid;
174 if (isValid.isEmpty()) {
175 isValid << "QScriptValue(QScriptValue::UndefinedValue)"
176 << "QScriptValue(QScriptValue::NullValue)"
177 << "QScriptValue(true)"
178 << "QScriptValue(false)"
179 << "QScriptValue(int(122))"
180 << "QScriptValue(uint(124))"
181 << "QScriptValue(0)"
182 << "QScriptValue(0.0)"
183 << "QScriptValue(123.0)"
184 << "QScriptValue(6.37e-8)"
185 << "QScriptValue(-6.37e-8)"
186 << "QScriptValue(0x43211234)"
187 << "QScriptValue(0x10000)"
188 << "QScriptValue(0x10001)"
189 << "QScriptValue(qSNaN())"
190 << "QScriptValue(qQNaN())"
191 << "QScriptValue(qInf())"
192 << "QScriptValue(-qInf())"
193 << "QScriptValue(\"NaN\")"
194 << "QScriptValue(\"Infinity\")"
195 << "QScriptValue(\"-Infinity\")"
196 << "QScriptValue(\"ciao\")"
197 << "QScriptValue(QString::fromLatin1(\"ciao\"))"
198 << "QScriptValue(QString(\"\"))"
199 << "QScriptValue(QString())"
200 << "QScriptValue(QString(\"0\"))"
201 << "QScriptValue(QString(\"123\"))"
202 << "QScriptValue(QString(\"12.4\"))"
203 << "QScriptValue(0, QScriptValue::UndefinedValue)"
204 << "QScriptValue(0, QScriptValue::NullValue)"
205 << "QScriptValue(0, true)"
206 << "QScriptValue(0, false)"
207 << "QScriptValue(0, int(122))"
208 << "QScriptValue(0, uint(124))"
209 << "QScriptValue(0, 0)"
210 << "QScriptValue(0, 0.0)"
211 << "QScriptValue(0, 123.0)"
212 << "QScriptValue(0, 6.37e-8)"
213 << "QScriptValue(0, -6.37e-8)"
214 << "QScriptValue(0, 0x43211234)"
215 << "QScriptValue(0, 0x10000)"
216 << "QScriptValue(0, 0x10001)"
217 << "QScriptValue(0, qSNaN())"
218 << "QScriptValue(0, qQNaN())"
219 << "QScriptValue(0, qInf())"
220 << "QScriptValue(0, -qInf())"
221 << "QScriptValue(0, \"NaN\")"
222 << "QScriptValue(0, \"Infinity\")"
223 << "QScriptValue(0, \"-Infinity\")"
224 << "QScriptValue(0, \"ciao\")"
225 << "QScriptValue(0, QString::fromLatin1(\"ciao\"))"
226 << "QScriptValue(0, QString(\"\"))"
227 << "QScriptValue(0, QString())"
228 << "QScriptValue(0, QString(\"0\"))"
229 << "QScriptValue(0, QString(\"123\"))"
230 << "QScriptValue(0, QString(\"12.3\"))"
231 << "QScriptValue(engine, QScriptValue::UndefinedValue)"
232 << "QScriptValue(engine, QScriptValue::NullValue)"
233 << "QScriptValue(engine, true)"
234 << "QScriptValue(engine, false)"
235 << "QScriptValue(engine, int(122))"
236 << "QScriptValue(engine, uint(124))"
237 << "QScriptValue(engine, 0)"
238 << "QScriptValue(engine, 0.0)"
239 << "QScriptValue(engine, 123.0)"
240 << "QScriptValue(engine, 6.37e-8)"
241 << "QScriptValue(engine, -6.37e-8)"
242 << "QScriptValue(engine, 0x43211234)"
243 << "QScriptValue(engine, 0x10000)"
244 << "QScriptValue(engine, 0x10001)"
245 << "QScriptValue(engine, qSNaN())"
246 << "QScriptValue(engine, qQNaN())"
247 << "QScriptValue(engine, qInf())"
248 << "QScriptValue(engine, -qInf())"
249 << "QScriptValue(engine, \"NaN\")"
250 << "QScriptValue(engine, \"Infinity\")"
251 << "QScriptValue(engine, \"-Infinity\")"
252 << "QScriptValue(engine, \"ciao\")"
253 << "QScriptValue(engine, QString::fromLatin1(\"ciao\"))"
254 << "QScriptValue(engine, QString(\"\"))"
255 << "QScriptValue(engine, QString())"
256 << "QScriptValue(engine, QString(\"0\"))"
257 << "QScriptValue(engine, QString(\"123\"))"
258 << "QScriptValue(engine, QString(\"1.23\"))"
259 << "engine->evaluate(\"[]\")"
260 << "engine->evaluate(\"{}\")"
261 << "engine->evaluate(\"Object.prototype\")"
262 << "engine->evaluate(\"Date.prototype\")"
263 << "engine->evaluate(\"Array.prototype\")"
264 << "engine->evaluate(\"Function.prototype\")"
265 << "engine->evaluate(\"Error.prototype\")"
266 << "engine->evaluate(\"Object\")"
267 << "engine->evaluate(\"Array\")"
268 << "engine->evaluate(\"Number\")"
269 << "engine->evaluate(\"Function\")"
270 << "engine->evaluate(\"(function() { return 1; })\")"
271 << "engine->evaluate(\"(function() { return 'ciao'; })\")"
272 << "engine->evaluate(\"(function() { throw new Error('foo'); })\")"
273 << "engine->evaluate(\"/foo/\")"
274 << "engine->evaluate(\"new Object()\")"
275 << "engine->evaluate(\"new Array()\")"
276 << "engine->evaluate(\"new Error()\")"
277 << "engine->evaluate(\"a = new Object(); a.foo = 22; a.foo\")"
278 << "engine->evaluate(\"Undefined\")"
279 << "engine->evaluate(\"Null\")"
280 << "engine->evaluate(\"True\")"
281 << "engine->evaluate(\"False\")"
282 << "engine->evaluate(\"undefined\")"
283 << "engine->evaluate(\"null\")"
284 << "engine->evaluate(\"true\")"
285 << "engine->evaluate(\"false\")"
286 << "engine->evaluate(\"122\")"
287 << "engine->evaluate(\"124\")"
288 << "engine->evaluate(\"0\")"
289 << "engine->evaluate(\"0.0\")"
290 << "engine->evaluate(\"123.0\")"
291 << "engine->evaluate(\"6.37e-8\")"
292 << "engine->evaluate(\"-6.37e-8\")"
293 << "engine->evaluate(\"0x43211234\")"
294 << "engine->evaluate(\"0x10000\")"
295 << "engine->evaluate(\"0x10001\")"
296 << "engine->evaluate(\"NaN\")"
297 << "engine->evaluate(\"Infinity\")"
298 << "engine->evaluate(\"-Infinity\")"
299 << "engine->evaluate(\"'ciao'\")"
300 << "engine->evaluate(\"''\")"
301 << "engine->evaluate(\"'0'\")"
302 << "engine->evaluate(\"'123'\")"
303 << "engine->evaluate(\"'12.4'\")"
304 << "engine->nullValue()"
305 << "engine->undefinedValue()";
306 }
307 newRow(expr) << isValid.contains(expr);
308 }
309
310 void tst_QScriptValue::isValid_test(const char*, const QScriptValue& value)
311 {
312 QFETCH(bool, expected);
313 QCOMPARE(value.isValid(), expected);
314 QCOMPARE(value.isValid(), expected);
315 }
316
317 DEFINE_TEST_FUNCTION(isValid)
318
319
320 void tst_QScriptValue::isBool_initData()
321 {
322 QTest::addColumn<bool>("expected");
323 initScriptValues();
324 }
325
326 void tst_QScriptValue::isBool_makeData(const char* expr)
327 {
328 static QSet<QString> isBool;
329 if (isBool.isEmpty()) {
330 isBool << "QScriptValue(true)"
331 << "QScriptValue(false)"
332 << "QScriptValue(0, true)"
333 << "QScriptValue(0, false)"
334 << "QScriptValue(engine, true)"
335 << "QScriptValue(engine, false)"
336 << "engine->evaluate(\"true\")"
337 << "engine->evaluate(\"false\")";
338 }
339 newRow(expr) << isBool.contains(expr);
340 }
341
342 void tst_QScriptValue::isBool_test(const char*, const QScriptValue& value)
343 {
344 QFETCH(bool, expected);
345 QCOMPARE(value.isBool(), expected);
346 QCOMPARE(value.isBool(), expected);
347 }
348
349 DEFINE_TEST_FUNCTION(isBool)
350
351
352 void tst_QScriptValue::isBoolean_initData()
353 {
354 QTest::addColumn<bool>("expected");
355 initScriptValues();
356 }
357
358 void tst_QScriptValue::isBoolean_makeData(const char* expr)
359 {
360 static QSet<QString> isBoolean;
361 if (isBoolean.isEmpty()) {
362 isBoolean << "QScriptValue(true)"
363 << "QScriptValue(false)"
364 << "QScriptValue(0, true)"
365 << "QScriptValue(0, false)"
366 << "QScriptValue(engine, true)"
367 << "QScriptValue(engine, false)"
368 << "engine->evaluate(\"true\")"
369 << "engine->evaluate(\"false\")";
370 }
371 newRow(expr) << isBoolean.contains(expr);
372 }
373
374 void tst_QScriptValue::isBoolean_test(const char*, const QScriptValue& value)
375 {
376 QFETCH(bool, expected);
377 QCOMPARE(value.isBoolean(), expected);
378 QCOMPARE(value.isBoolean(), expected);
379 }
380
381 DEFINE_TEST_FUNCTION(isBoolean)
382
383
384 void tst_QScriptValue::isNumber_initData()
385 {
386 QTest::addColumn<bool>("expected");
387 initScriptValues();
388 }
389
390 void tst_QScriptValue::isNumber_makeData(const char* expr)
391 {
392 static QSet<QString> isNumber;
393 if (isNumber.isEmpty()) {
394 isNumber << "QScriptValue(int(122))"
395 << "QScriptValue(uint(124))"
396 << "QScriptValue(0)"
397 << "QScriptValue(0.0)"
398 << "QScriptValue(123.0)"
399 << "QScriptValue(6.37e-8)"
400 << "QScriptValue(-6.37e-8)"
401 << "QScriptValue(0x43211234)"
402 << "QScriptValue(0x10000)"
403 << "QScriptValue(0x10001)"
404 << "QScriptValue(qSNaN())"
405 << "QScriptValue(qQNaN())"
406 << "QScriptValue(qInf())"
407 << "QScriptValue(-qInf())"
408 << "QScriptValue(0, int(122))"
409 << "QScriptValue(0, uint(124))"
410 << "QScriptValue(0, 0)"
411 << "QScriptValue(0, 0.0)"
412 << "QScriptValue(0, 123.0)"
413 << "QScriptValue(0, 6.37e-8)"
414 << "QScriptValue(0, -6.37e-8)"
415 << "QScriptValue(0, 0x43211234)"
416 << "QScriptValue(0, 0x10000)"
417 << "QScriptValue(0, 0x10001)"
418 << "QScriptValue(0, qSNaN())"
419 << "QScriptValue(0, qQNaN())"
420 << "QScriptValue(0, qInf())"
421 << "QScriptValue(0, -qInf())"
422 << "QScriptValue(engine, int(122))"
423 << "QScriptValue(engine, uint(124))"
424 << "QScriptValue(engine, 0)"
425 << "QScriptValue(engine, 0.0)"
426 << "QScriptValue(engine, 123.0)"
427 << "QScriptValue(engine, 6.37e-8)"
428 << "QScriptValue(engine, -6.37e-8)"
429 << "QScriptValue(engine, 0x43211234)"
430 << "QScriptValue(engine, 0x10000)"
431 << "QScriptValue(engine, 0x10001)"
432 << "QScriptValue(engine, qSNaN())"
433 << "QScriptValue(engine, qQNaN())"
434 << "QScriptValue(engine, qInf())"
435 << "QScriptValue(engine, -qInf())"
436 << "engine->evaluate(\"a = new Object(); a.foo = 22; a.foo\")"
437 << "engine->evaluate(\"122\")"
438 << "engine->evaluate(\"124\")"
439 << "engine->evaluate(\"0\")"
440 << "engine->evaluate(\"0.0\")"
441 << "engine->evaluate(\"123.0\")"
442 << "engine->evaluate(\"6.37e-8\")"
443 << "engine->evaluate(\"-6.37e-8\")"
444 << "engine->evaluate(\"0x43211234\")"
445 << "engine->evaluate(\"0x10000\")"
446 << "engine->evaluate(\"0x10001\")"
447 << "engine->evaluate(\"NaN\")"
448 << "engine->evaluate(\"Infinity\")"
449 << "engine->evaluate(\"-Infinity\")";
450 }
451 newRow(expr) << isNumber.contains(expr);
452 }
453
454 void tst_QScriptValue::isNumber_test(const char*, const QScriptValue& value)
455 {
456 QFETCH(bool, expected);
457 QCOMPARE(value.isNumber(), expected);
458 QCOMPARE(value.isNumber(), expected);
459 }
460
461 DEFINE_TEST_FUNCTION(isNumber)
462
463
464 void tst_QScriptValue::isFunction_initData()
465 {
466 QTest::addColumn<bool>("expected");
467 initScriptValues();
468 }
469
470 void tst_QScriptValue::isFunction_makeData(const char* expr)
471 {
472 static QSet<QString> isFunction;
473 if (isFunction.isEmpty()) {
474 isFunction << "engine->evaluate(\"Function.prototype\")"
475 << "engine->evaluate(\"Object\")"
476 << "engine->evaluate(\"Array\")"
477 << "engine->evaluate(\"Number\")"
478 << "engine->evaluate(\"Function\")"
479 << "engine->evaluate(\"(function() { return 1; })\")"
480 << "engine->evaluate(\"(function() { return 'ciao'; })\")"
481 << "engine->evaluate(\"(function() { throw new Error('foo'); })\")"
482 << "engine->evaluate(\"/foo/\")";
483 }
484 newRow(expr) << isFunction.contains(expr);
485 }
486
487 void tst_QScriptValue::isFunction_test(const char*, const QScriptValue& value)
488 {
489 QFETCH(bool, expected);
490 QCOMPARE(value.isFunction(), expected);
491 QCOMPARE(value.isFunction(), expected);
492 }
493
494 DEFINE_TEST_FUNCTION(isFunction)
495
496
497 void tst_QScriptValue::isNull_initData()
498 {
499 QTest::addColumn<bool>("expected");
500 initScriptValues();
501 }
502
503 void tst_QScriptValue::isNull_makeData(const char* expr)
504 {
505 static QSet<QString> isNull;
506 if (isNull.isEmpty()) {
507 isNull << "QScriptValue(QScriptValue::NullValue)"
508 << "QScriptValue(0, QScriptValue::NullValue)"
509 << "QScriptValue(engine, QScriptValue::NullValue)"
510 << "engine->evaluate(\"null\")"
511 << "engine->nullValue()";
512 }
513 newRow(expr) << isNull.contains(expr);
514 }
515
516 void tst_QScriptValue::isNull_test(const char*, const QScriptValue& value)
517 {
518 QFETCH(bool, expected);
519 QCOMPARE(value.isNull(), expected);
520 QCOMPARE(value.isNull(), expected);
521 }
522
523 DEFINE_TEST_FUNCTION(isNull)
524
525
526 void tst_QScriptValue::isString_initData()
527 {
528 QTest::addColumn<bool>("expected");
529 initScriptValues();
530 }
531
532 void tst_QScriptValue::isString_makeData(const char* expr)
533 {
534 static QSet<QString> isString;
535 if (isString.isEmpty()) {
536 isString << "QScriptValue(\"NaN\")"
537 << "QScriptValue(\"Infinity\")"
538 << "QScriptValue(\"-Infinity\")"
539 << "QScriptValue(\"ciao\")"
540 << "QScriptValue(QString::fromLatin1(\"ciao\"))"
541 << "QScriptValue(QString(\"\"))"
542 << "QScriptValue(QString())"
543 << "QScriptValue(QString(\"0\"))"
544 << "QScriptValue(QString(\"123\"))"
545 << "QScriptValue(QString(\"12.4\"))"
546 << "QScriptValue(0, \"NaN\")"
547 << "QScriptValue(0, \"Infinity\")"
548 << "QScriptValue(0, \"-Infinity\")"
549 << "QScriptValue(0, \"ciao\")"
550 << "QScriptValue(0, QString::fromLatin1(\"ciao\"))"
551 << "QScriptValue(0, QString(\"\"))"
552 << "QScriptValue(0, QString())"
553 << "QScriptValue(0, QString(\"0\"))"
554 << "QScriptValue(0, QString(\"123\"))"
555 << "QScriptValue(0, QString(\"12.3\"))"
556 << "QScriptValue(engine, \"NaN\")"
557 << "QScriptValue(engine, \"Infinity\")"
558 << "QScriptValue(engine, \"-Infinity\")"
559 << "QScriptValue(engine, \"ciao\")"
560 << "QScriptValue(engine, QString::fromLatin1(\"ciao\"))"
561 << "QScriptValue(engine, QString(\"\"))"
562 << "QScriptValue(engine, QString())"
563 << "QScriptValue(engine, QString(\"0\"))"
564 << "QScriptValue(engine, QString(\"123\"))"
565 << "QScriptValue(engine, QString(\"1.23\"))"
566 << "engine->evaluate(\"'ciao'\")"
567 << "engine->evaluate(\"''\")"
568 << "engine->evaluate(\"'0'\")"
569 << "engine->evaluate(\"'123'\")"
570 << "engine->evaluate(\"'12.4'\")";
571 }
572 newRow(expr) << isString.contains(expr);
573 }
574
575 void tst_QScriptValue::isString_test(const char*, const QScriptValue& value)
576 {
577 QFETCH(bool, expected);
578 QCOMPARE(value.isString(), expected);
579 QCOMPARE(value.isString(), expected);
580 }
581
582 DEFINE_TEST_FUNCTION(isString)
583
584
585 void tst_QScriptValue::isUndefined_initData()
586 {
587 QTest::addColumn<bool>("expected");
588 initScriptValues();
589 }
590
591 void tst_QScriptValue::isUndefined_makeData(const char* expr)
592 {
593 static QSet<QString> isUndefined;
594 if (isUndefined.isEmpty()) {
595 isUndefined << "QScriptValue(QScriptValue::UndefinedValue)"
596 << "QScriptValue(0, QScriptValue::UndefinedValue)"
597 << "QScriptValue(engine, QScriptValue::UndefinedValue)"
598 << "engine->evaluate(\"{}\")"
599 << "engine->evaluate(\"undefined\")"
600 << "engine->undefinedValue()";
601 }
602 newRow(expr) << isUndefined.contains(expr);
603 }
604
605 void tst_QScriptValue::isUndefined_test(const char*, const QScriptValue& value)
606 {
607 QFETCH(bool, expected);
608 QCOMPARE(value.isUndefined(), expected);
609 QCOMPARE(value.isUndefined(), expected);
610 }
611
612 DEFINE_TEST_FUNCTION(isUndefined)
613
614
615
616
617
618 void tst_QScriptValue::isObject_initData()
619 {
620 QTest::addColumn<bool>("expected");
621 initScriptValues();
622 }
623
624 void tst_QScriptValue::isObject_makeData(const char* expr)
625 {
626 static QSet<QString> isObject;
627 if (isObject.isEmpty()) {
628 isObject << "engine->evaluate(\"[]\")"
629 << "engine->evaluate(\"Object.prototype\")"
630 << "engine->evaluate(\"Date.prototype\")"
631 << "engine->evaluate(\"Array.prototype\")"
632 << "engine->evaluate(\"Function.prototype\")"
633 << "engine->evaluate(\"Error.prototype\")"
634 << "engine->evaluate(\"Object\")"
635 << "engine->evaluate(\"Array\")"
636 << "engine->evaluate(\"Number\")"
637 << "engine->evaluate(\"Function\")"
638 << "engine->evaluate(\"(function() { return 1; })\")"
639 << "engine->evaluate(\"(function() { return 'ciao'; })\")"
640 << "engine->evaluate(\"(function() { throw new Error('foo'); })\")"
641 << "engine->evaluate(\"/foo/\")"
642 << "engine->evaluate(\"new Object()\")"
643 << "engine->evaluate(\"new Array()\")"
644 << "engine->evaluate(\"new Error()\")"
645 << "engine->evaluate(\"Undefined\")"
646 << "engine->evaluate(\"Null\")"
647 << "engine->evaluate(\"True\")"
648 << "engine->evaluate(\"False\")";
649 }
650 newRow(expr) << isObject.contains(expr);
651 }
652
653 void tst_QScriptValue::isObject_test(const char*, const QScriptValue& value)
654 {
655 QFETCH(bool, expected);
656 QCOMPARE(value.isObject(), expected);
657 QCOMPARE(value.isObject(), expected);
658 }
659
660 DEFINE_TEST_FUNCTION(isObject)
661
662
663 void tst_QScriptValue::toString_initData()
664 {
665 QTest::addColumn<QString>("expected");
666 initScriptValues();
667 }
668
669 void tst_QScriptValue::toString_makeData(const char* expr)
670 {
671 static QHash<QString, QString> toString;
672 if (toString.isEmpty()) {
673 toString.insert("QScriptValue()", "");
674 toString.insert("QScriptValue(QScriptValue::UndefinedValue)", "undefined");
675 toString.insert("QScriptValue(QScriptValue::NullValue)", "null");
676 toString.insert("QScriptValue(true)", "true");
677 toString.insert("QScriptValue(false)", "false");
678 toString.insert("QScriptValue(int(122))", "122");
679 toString.insert("QScriptValue(uint(124))", "124");
680 toString.insert("QScriptValue(0)", "0");
681 toString.insert("QScriptValue(0.0)", "0");
682 toString.insert("QScriptValue(123.0)", "123");
683 toString.insert("QScriptValue(6.37e-8)", "6.37e-8");
684 toString.insert("QScriptValue(-6.37e-8)", "-6.37e-8");
685 toString.insert("QScriptValue(0x43211234)", "1126240820");
686 toString.insert("QScriptValue(0x10000)", "65536");
687 toString.insert("QScriptValue(0x10001)", "65537");
688 toString.insert("QScriptValue(qSNaN())", "NaN");
689 toString.insert("QScriptValue(qQNaN())", "NaN");
690 toString.insert("QScriptValue(qInf())", "Infinity");
691 toString.insert("QScriptValue(-qInf())", "-Infinity");
692 toString.insert("QScriptValue(\"NaN\")", "NaN");
693 toString.insert("QScriptValue(\"Infinity\")", "Infinity");
694 toString.insert("QScriptValue(\"-Infinity\")", "-Infinity");
695 toString.insert("QScriptValue(\"ciao\")", "ciao");
696 toString.insert("QScriptValue(QString::fromLatin1(\"ciao\"))", "ciao");
697 toString.insert("QScriptValue(QString(\"\"))", "");
698 toString.insert("QScriptValue(QString())", "");
699 toString.insert("QScriptValue(QString(\"0\"))", "0");
700 toString.insert("QScriptValue(QString(\"123\"))", "123");
701 toString.insert("QScriptValue(QString(\"12.4\"))", "12.4");
702 toString.insert("QScriptValue(0, QScriptValue::UndefinedValue)", "undefined");
703 toString.insert("QScriptValue(0, QScriptValue::NullValue)", "null");
704 toString.insert("QScriptValue(0, true)", "true");
705 toString.insert("QScriptValue(0, false)", "false");
706 toString.insert("QScriptValue(0, int(122))", "122");
707 toString.insert("QScriptValue(0, uint(124))", "124");
708 toString.insert("QScriptValue(0, 0)", "0");
709 toString.insert("QScriptValue(0, 0.0)", "0");
710 toString.insert("QScriptValue(0, 123.0)", "123");
711 toString.insert("QScriptValue(0, 6.37e-8)", "6.37e-8");
712 toString.insert("QScriptValue(0, -6.37e-8)", "-6.37e-8");
713 toString.insert("QScriptValue(0, 0x43211234)", "1126240820");
714 toString.insert("QScriptValue(0, 0x10000)", "65536");
715 toString.insert("QScriptValue(0, 0x10001)", "65537");
716 toString.insert("QScriptValue(0, qSNaN())", "NaN");
717 toString.insert("QScriptValue(0, qQNaN())", "NaN");
718 toString.insert("QScriptValue(0, qInf())", "Infinity");
719 toString.insert("QScriptValue(0, -qInf())", "-Infinity");
720 toString.insert("QScriptValue(0, \"NaN\")", "NaN");
721 toString.insert("QScriptValue(0, \"Infinity\")", "Infinity");
722 toString.insert("QScriptValue(0, \"-Infinity\")", "-Infinity");
723 toString.insert("QScriptValue(0, \"ciao\")", "ciao");
724 toString.insert("QScriptValue(0, QString::fromLatin1(\"ciao\"))", "ciao");
725 toString.insert("QScriptValue(0, QString(\"\"))", "");
726 toString.insert("QScriptValue(0, QString())", "");
727 toString.insert("QScriptValue(0, QString(\"0\"))", "0");
728 toString.insert("QScriptValue(0, QString(\"123\"))", "123");
729 toString.insert("QScriptValue(0, QString(\"12.3\"))", "12.3");
730 toString.insert("QScriptValue(engine, QScriptValue::UndefinedValue)", "undefined");
731 toString.insert("QScriptValue(engine, QScriptValue::NullValue)", "null");
732 toString.insert("QScriptValue(engine, true)", "true");
733 toString.insert("QScriptValue(engine, false)", "false");
734 toString.insert("QScriptValue(engine, int(122))", "122");
735 toString.insert("QScriptValue(engine, uint(124))", "124");
736 toString.insert("QScriptValue(engine, 0)", "0");
737 toString.insert("QScriptValue(engine, 0.0)", "0");
738 toString.insert("QScriptValue(engine, 123.0)", "123");
739 toString.insert("QScriptValue(engine, 6.37e-8)", "6.37e-8");
740 toString.insert("QScriptValue(engine, -6.37e-8)", "-6.37e-8");
741 toString.insert("QScriptValue(engine, 0x43211234)", "1126240820");
742 toString.insert("QScriptValue(engine, 0x10000)", "65536");
743 toString.insert("QScriptValue(engine, 0x10001)", "65537");
744 toString.insert("QScriptValue(engine, qSNaN())", "NaN");
745 toString.insert("QScriptValue(engine, qQNaN())", "NaN");
746 toString.insert("QScriptValue(engine, qInf())", "Infinity");
747 toString.insert("QScriptValue(engine, -qInf())", "-Infinity");
748 toString.insert("QScriptValue(engine, \"NaN\")", "NaN");
749 toString.insert("QScriptValue(engine, \"Infinity\")", "Infinity");
750 toString.insert("QScriptValue(engine, \"-Infinity\")", "-Infinity");
751 toString.insert("QScriptValue(engine, \"ciao\")", "ciao");
752 toString.insert("QScriptValue(engine, QString::fromLatin1(\"ciao\"))", "ciao");
753 toString.insert("QScriptValue(engine, QString(\"\"))", "");
754 toString.insert("QScriptValue(engine, QString())", "");
755 toString.insert("QScriptValue(engine, QString(\"0\"))", "0");
756 toString.insert("QScriptValue(engine, QString(\"123\"))", "123");
757 toString.insert("QScriptValue(engine, QString(\"1.23\"))", "1.23");
758 toString.insert("engine->evaluate(\"[]\")", "");
759 toString.insert("engine->evaluate(\"{}\")", "undefined");
760 toString.insert("engine->evaluate(\"Object.prototype\")", "[object Object]");
761 toString.insert("engine->evaluate(\"Date.prototype\")", "Invalid Date");
762 toString.insert("engine->evaluate(\"Array.prototype\")", "");
763 toString.insert("engine->evaluate(\"Function.prototype\")", "function () {\n [native code]\n}");
764 toString.insert("engine->evaluate(\"Error.prototype\")", "Error: Unknown error");
765 toString.insert("engine->evaluate(\"Object\")", "function Object() {\n [native code]\n}");
766 toString.insert("engine->evaluate(\"Array\")", "function Array() {\n [native code]\n}");
767 toString.insert("engine->evaluate(\"Number\")", "function Number() {\n [native code]\n}");
768 toString.insert("engine->evaluate(\"Function\")", "function Function() {\n [native code]\n}");
769 toString.insert("engine->evaluate(\"(function() { return 1; })\")", "function () { return 1; }");
770 toString.insert("engine->evaluate(\"(function() { return 'ciao'; })\")", "function () { return 'ciao'; }");
771 toString.insert("engine->evaluate(\"(function() { throw new Error('foo'); })\")", "function () { throw new Error('foo'); }");
772 toString.insert("engine->evaluate(\"/foo/\")", "/foo/");
773 toString.insert("engine->evaluate(\"new Object()\")", "[object Object]");
774 toString.insert("engine->evaluate(\"new Array()\")", "");
775 toString.insert("engine->evaluate(\"new Error()\")", "Error: Unknown error");
776 toString.insert("engine->evaluate(\"a = new Object(); a.foo = 22; a.foo\")", "22");
777 toString.insert("engine->evaluate(\"Undefined\")", "ReferenceError: Can't find variable: Undefined");
778 toString.insert("engine->evaluate(\"Null\")", "ReferenceError: Can't find variable: Null");
779 toString.insert("engine->evaluate(\"True\")", "ReferenceError: Can't find variable: True");
780 toString.insert("engine->evaluate(\"False\")", "ReferenceError: Can't find variable: False");
781 toString.insert("engine->evaluate(\"undefined\")", "undefined");
782 toString.insert("engine->evaluate(\"null\")", "null");
783 toString.insert("engine->evaluate(\"true\")", "true");
784 toString.insert("engine->evaluate(\"false\")", "false");
785 toString.insert("engine->evaluate(\"122\")", "122");
786 toString.insert("engine->evaluate(\"124\")", "124");
787 toString.insert("engine->evaluate(\"0\")", "0");
788 toString.insert("engine->evaluate(\"0.0\")", "0");
789 toString.insert("engine->evaluate(\"123.0\")", "123");
790 toString.insert("engine->evaluate(\"6.37e-8\")", "6.37e-8");
791 toString.insert("engine->evaluate(\"-6.37e-8\")", "-6.37e-8");
792 toString.insert("engine->evaluate(\"0x43211234\")", "1126240820");
793 toString.insert("engine->evaluate(\"0x10000\")", "65536");
794 toString.insert("engine->evaluate(\"0x10001\")", "65537");
795 toString.insert("engine->evaluate(\"NaN\")", "NaN");
796 toString.insert("engine->evaluate(\"Infinity\")", "Infinity");
797 toString.insert("engine->evaluate(\"-Infinity\")", "-Infinity");
798 toString.insert("engine->evaluate(\"'ciao'\")", "ciao");
799 toString.insert("engine->evaluate(\"''\")", "");
800 toString.insert("engine->evaluate(\"'0'\")", "0");
801 toString.insert("engine->evaluate(\"'123'\")", "123");
802 toString.insert("engine->evaluate(\"'12.4'\")", "12.4");
803 toString.insert("engine->nullValue()", "null");
804 toString.insert("engine->undefinedValue()", "undefined");
805 }
806 newRow(expr) << toString.value(expr);
807 }
808
809 void tst_QScriptValue::toString_test(const char*, const QScriptValue& value)
810 {
811 QFETCH(QString, expected);
812 QCOMPARE(value.toString(), expected);
813 QCOMPARE(value.toString(), expected);
814 }
815
816 DEFINE_TEST_FUNCTION(toString)
817
818
819 void tst_QScriptValue::toNumber_initData()
820 {
821 QTest::addColumn<qsreal>("expected");
822 initScriptValues();
823 }
824
825 void tst_QScriptValue::toNumber_makeData(const char* expr)
826 {
827 static QHash<QString, qsreal> toNumber;
828 if (toNumber.isEmpty()) {
829 toNumber.insert("QScriptValue()", 0);
830 toNumber.insert("QScriptValue(QScriptValue::UndefinedValue)", qQNaN());
831 toNumber.insert("QScriptValue(QScriptValue::NullValue)", 0);
832 toNumber.insert("QScriptValue(true)", 1);
833 toNumber.insert("QScriptValue(false)", 0);
834 toNumber.insert("QScriptValue(int(122))", 122);
835 toNumber.insert("QScriptValue(uint(124))", 124);
836 toNumber.insert("QScriptValue(0)", 0);
837 toNumber.insert("QScriptValue(0.0)", 0);
838 toNumber.insert("QScriptValue(123.0)", 123);
839 toNumber.insert("QScriptValue(6.37e-8)", 6.369999999999999e-08);
840 toNumber.insert("QScriptValue(-6.37e-8)", -6.369999999999999e-08);
841 toNumber.insert("QScriptValue(0x43211234)", 1126240820);
842 toNumber.insert("QScriptValue(0x10000)", 65536);
843 toNumber.insert("QScriptValue(0x10001)", 65537);
844 toNumber.insert("QScriptValue(qSNaN())", qQNaN());
845 toNumber.insert("QScriptValue(qQNaN())", qQNaN());
846 toNumber.insert("QScriptValue(qInf())", qInf());
847 toNumber.insert("QScriptValue(-qInf())", qInf());
848 toNumber.insert("QScriptValue(\"NaN\")", qQNaN());
849 toNumber.insert("QScriptValue(\"Infinity\")", qInf());
850 toNumber.insert("QScriptValue(\"-Infinity\")", qInf());
851 toNumber.insert("QScriptValue(\"ciao\")", qQNaN());
852 toNumber.insert("QScriptValue(QString::fromLatin1(\"ciao\"))", qQNaN());
853 toNumber.insert("QScriptValue(QString(\"\"))", 0);
854 toNumber.insert("QScriptValue(QString())", 0);
855 toNumber.insert("QScriptValue(QString(\"0\"))", 0);
856 toNumber.insert("QScriptValue(QString(\"123\"))", 123);
857 toNumber.insert("QScriptValue(QString(\"12.4\"))", 12.4);
858 toNumber.insert("QScriptValue(0, QScriptValue::UndefinedValue)", qQNaN());
859 toNumber.insert("QScriptValue(0, QScriptValue::NullValue)", 0);
860 toNumber.insert("QScriptValue(0, true)", 1);
861 toNumber.insert("QScriptValue(0, false)", 0);
862 toNumber.insert("QScriptValue(0, int(122))", 122);
863 toNumber.insert("QScriptValue(0, uint(124))", 124);
864 toNumber.insert("QScriptValue(0, 0)", 0);
865 toNumber.insert("QScriptValue(0, 0.0)", 0);
866 toNumber.insert("QScriptValue(0, 123.0)", 123);
867 toNumber.insert("QScriptValue(0, 6.37e-8)", 6.369999999999999e-08);
868 toNumber.insert("QScriptValue(0, -6.37e-8)", -6.369999999999999e-08);
869 toNumber.insert("QScriptValue(0, 0x43211234)", 1126240820);
870 toNumber.insert("QScriptValue(0, 0x10000)", 65536);
871 toNumber.insert("QScriptValue(0, 0x10001)", 65537);
872 toNumber.insert("QScriptValue(0, qSNaN())", qQNaN());
873 toNumber.insert("QScriptValue(0, qQNaN())", qQNaN());
874 toNumber.insert("QScriptValue(0, qInf())", qInf());
875 toNumber.insert("QScriptValue(0, -qInf())", qInf());
876 toNumber.insert("QScriptValue(0, \"NaN\")", qQNaN());
877 toNumber.insert("QScriptValue(0, \"Infinity\")", qInf());
878 toNumber.insert("QScriptValue(0, \"-Infinity\")", qInf());
879 toNumber.insert("QScriptValue(0, \"ciao\")", qQNaN());
880 toNumber.insert("QScriptValue(0, QString::fromLatin1(\"ciao\"))", qQNaN());
881 toNumber.insert("QScriptValue(0, QString(\"\"))", 0);
882 toNumber.insert("QScriptValue(0, QString())", 0);
883 toNumber.insert("QScriptValue(0, QString(\"0\"))", 0);
884 toNumber.insert("QScriptValue(0, QString(\"123\"))", 123);
885 toNumber.insert("QScriptValue(0, QString(\"12.3\"))", 12.3);
886 toNumber.insert("QScriptValue(engine, QScriptValue::UndefinedValue)", qQNaN());
887 toNumber.insert("QScriptValue(engine, QScriptValue::NullValue)", 0);
888 toNumber.insert("QScriptValue(engine, true)", 1);
889 toNumber.insert("QScriptValue(engine, false)", 0);
890 toNumber.insert("QScriptValue(engine, int(122))", 122);
891 toNumber.insert("QScriptValue(engine, uint(124))", 124);
892 toNumber.insert("QScriptValue(engine, 0)", 0);
893 toNumber.insert("QScriptValue(engine, 0.0)", 0);
894 toNumber.insert("QScriptValue(engine, 123.0)", 123);
895 toNumber.insert("QScriptValue(engine, 6.37e-8)", 6.369999999999999e-08);
896 toNumber.insert("QScriptValue(engine, -6.37e-8)", -6.369999999999999e-08);
897 toNumber.insert("QScriptValue(engine, 0x43211234)", 1126240820);
898 toNumber.insert("QScriptValue(engine, 0x10000)", 65536);
899 toNumber.insert("QScriptValue(engine, 0x10001)", 65537);
900 toNumber.insert("QScriptValue(engine, qSNaN())", qQNaN());
901 toNumber.insert("QScriptValue(engine, qQNaN())", qQNaN());
902 toNumber.insert("QScriptValue(engine, qInf())", qInf());
903 toNumber.insert("QScriptValue(engine, -qInf())", qInf());
904 toNumber.insert("QScriptValue(engine, \"NaN\")", qQNaN());
905 toNumber.insert("QScriptValue(engine, \"Infinity\")", qInf());
906 toNumber.insert("QScriptValue(engine, \"-Infinity\")", qInf());
907 toNumber.insert("QScriptValue(engine, \"ciao\")", qQNaN());
908 toNumber.insert("QScriptValue(engine, QString::fromLatin1(\"ciao\"))", qQNaN());
909 toNumber.insert("QScriptValue(engine, QString(\"\"))", 0);
910 toNumber.insert("QScriptValue(engine, QString())", 0);
911 toNumber.insert("QScriptValue(engine, QString(\"0\"))", 0);
912 toNumber.insert("QScriptValue(engine, QString(\"123\"))", 123);
913 toNumber.insert("QScriptValue(engine, QString(\"1.23\"))", 1.23);
914 toNumber.insert("engine->evaluate(\"[]\")", 0);
915 toNumber.insert("engine->evaluate(\"{}\")", qQNaN());
916 toNumber.insert("engine->evaluate(\"Object.prototype\")", qQNaN());
917 toNumber.insert("engine->evaluate(\"Date.prototype\")", qQNaN());
918 toNumber.insert("engine->evaluate(\"Array.prototype\")", 0);
919 toNumber.insert("engine->evaluate(\"Function.prototype\")", qQNaN());
920 toNumber.insert("engine->evaluate(\"Error.prototype\")", qQNaN());
921 toNumber.insert("engine->evaluate(\"Object\")", qQNaN());
922 toNumber.insert("engine->evaluate(\"Array\")", qQNaN());
923 toNumber.insert("engine->evaluate(\"Number\")", qQNaN());
924 toNumber.insert("engine->evaluate(\"Function\")", qQNaN());
925 toNumber.insert("engine->evaluate(\"(function() { return 1; })\")", qQNaN());
926 toNumber.insert("engine->evaluate(\"(function() { return 'ciao'; })\")", qQNaN());
927 toNumber.insert("engine->evaluate(\"(function() { throw new Error('foo'); })\")", qQNaN());
928 toNumber.insert("engine->evaluate(\"/foo/\")", qQNaN());
929 toNumber.insert("engine->evaluate(\"new Object()\")", qQNaN());
930 toNumber.insert("engine->evaluate(\"new Array()\")", 0);
931 toNumber.insert("engine->evaluate(\"new Error()\")", qQNaN());
932 toNumber.insert("engine->evaluate(\"a = new Object(); a.foo = 22; a.foo\")", 22);
933 toNumber.insert("engine->evaluate(\"Undefined\")", qQNaN());
934 toNumber.insert("engine->evaluate(\"Null\")", qQNaN());
935 toNumber.insert("engine->evaluate(\"True\")", qQNaN());
936 toNumber.insert("engine->evaluate(\"False\")", qQNaN());
937 toNumber.insert("engine->evaluate(\"undefined\")", qQNaN());
938 toNumber.insert("engine->evaluate(\"null\")", 0);
939 toNumber.insert("engine->evaluate(\"true\")", 1);
940 toNumber.insert("engine->evaluate(\"false\")", 0);
941 toNumber.insert("engine->evaluate(\"122\")", 122);
942 toNumber.insert("engine->evaluate(\"124\")", 124);
943 toNumber.insert("engine->evaluate(\"0\")", 0);
944 toNumber.insert("engine->evaluate(\"0.0\")", 0);
945 toNumber.insert("engine->evaluate(\"123.0\")", 123);
946 toNumber.insert("engine->evaluate(\"6.37e-8\")", 6.369999999999999e-08);
947 toNumber.insert("engine->evaluate(\"-6.37e-8\")", -6.369999999999999e-08);
948 toNumber.insert("engine->evaluate(\"0x43211234\")", 1126240820);
949 toNumber.insert("engine->evaluate(\"0x10000\")", 65536);
950 toNumber.insert("engine->evaluate(\"0x10001\")", 65537);
951 toNumber.insert("engine->evaluate(\"NaN\")", qQNaN());
952 toNumber.insert("engine->evaluate(\"Infinity\")", qInf());
953 toNumber.insert("engine->evaluate(\"-Infinity\")", qInf());
954 toNumber.insert("engine->evaluate(\"'ciao'\")", qQNaN());
955 toNumber.insert("engine->evaluate(\"''\")", 0);
956 toNumber.insert("engine->evaluate(\"'0'\")", 0);
957 toNumber.insert("engine->evaluate(\"'123'\")", 123);
958 toNumber.insert("engine->evaluate(\"'12.4'\")", 12.4);
959 toNumber.insert("engine->nullValue()", 0);
960 toNumber.insert("engine->undefinedValue()", qQNaN());
961 }
962 newRow(expr) << toNumber.value(expr);
963 }
964
965 void tst_QScriptValue::toNumber_test(const char*, const QScriptValue& value)
966 {
967 QFETCH(qsreal, expected);
968 if (qIsNaN(expected)) {
969 QVERIFY(qIsNaN(value.toNumber()));
970 return;
971 }
972 if (qIsInf(expected)) {
973 QVERIFY(qIsInf(value.toNumber()));
974 QVERIFY(qIsInf(value.toNumber()));
975 return;
976 }
977 QCOMPARE(value.toNumber(), expected);
978 QCOMPARE(value.toNumber(), expected);
979 }
980
981 DEFINE_TEST_FUNCTION(toNumber)
982
983
984 void tst_QScriptValue::toBool_initData()
985 {
986 QTest::addColumn<bool>("expected");
987 initScriptValues();
988 }
989
990 void tst_QScriptValue::toBool_makeData(const char* expr)
991 {
992 static QHash<QString, bool> toBool;
993 if (toBool.isEmpty()) {
994 toBool.insert("QScriptValue()", false);
995 toBool.insert("QScriptValue(QScriptValue::UndefinedValue)", false);
996 toBool.insert("QScriptValue(QScriptValue::NullValue)", false);
997 toBool.insert("QScriptValue(true)", true);
998 toBool.insert("QScriptValue(false)", false);
999 toBool.insert("QScriptValue(int(122))", true);
1000 toBool.insert("QScriptValue(uint(124))", true);
1001 toBool.insert("QScriptValue(0)", false);
1002 toBool.insert("QScriptValue(0.0)", false);
1003 toBool.insert("QScriptValue(123.0)", true);
1004 toBool.insert("QScriptValue(6.37e-8)", true);
1005 toBool.insert("QScriptValue(-6.37e-8)", true);
1006 toBool.insert("QScriptValue(0x43211234)", true);
1007 toBool.insert("QScriptValue(0x10000)", true);
1008 toBool.insert("QScriptValue(0x10001)", true);
1009 toBool.insert("QScriptValue(qSNaN())", false);
1010 toBool.insert("QScriptValue(qQNaN())", false);
1011 toBool.insert("QScriptValue(qInf())", true);
1012 toBool.insert("QScriptValue(-qInf())", true);
1013 toBool.insert("QScriptValue(\"NaN\")", true);
1014 toBool.insert("QScriptValue(\"Infinity\")", true);
1015 toBool.insert("QScriptValue(\"-Infinity\")", true);
1016 toBool.insert("QScriptValue(\"ciao\")", true);
1017 toBool.insert("QScriptValue(QString::fromLatin1(\"ciao\"))", true);
1018 toBool.insert("QScriptValue(QString(\"\"))", false);
1019 toBool.insert("QScriptValue(QString())", false);
1020 toBool.insert("QScriptValue(QString(\"0\"))", true);
1021 toBool.insert("QScriptValue(QString(\"123\"))", true);
1022 toBool.insert("QScriptValue(QString(\"12.4\"))", true);
1023 toBool.insert("QScriptValue(0, QScriptValue::UndefinedValue)", false);
1024 toBool.insert("QScriptValue(0, QScriptValue::NullValue)", false);
1025 toBool.insert("QScriptValue(0, true)", true);
1026 toBool.insert("QScriptValue(0, false)", false);
1027 toBool.insert("QScriptValue(0, int(122))", true);
1028 toBool.insert("QScriptValue(0, uint(124))", true);
1029 toBool.insert("QScriptValue(0, 0)", false);
1030 toBool.insert("QScriptValue(0, 0.0)", false);
1031 toBool.insert("QScriptValue(0, 123.0)", true);
1032 toBool.insert("QScriptValue(0, 6.37e-8)", true);
1033 toBool.insert("QScriptValue(0, -6.37e-8)", true);
1034 toBool.insert("QScriptValue(0, 0x43211234)", true);
1035 toBool.insert("QScriptValue(0, 0x10000)", true);
1036 toBool.insert("QScriptValue(0, 0x10001)", true);
1037 toBool.insert("QScriptValue(0, qSNaN())", false);
1038 toBool.insert("QScriptValue(0, qQNaN())", false);
1039 toBool.insert("QScriptValue(0, qInf())", true);
1040 toBool.insert("QScriptValue(0, -qInf())", true);
1041 toBool.insert("QScriptValue(0, \"NaN\")", true);
1042 toBool.insert("QScriptValue(0, \"Infinity\")", true);
1043 toBool.insert("QScriptValue(0, \"-Infinity\")", true);
1044 toBool.insert("QScriptValue(0, \"ciao\")", true);
1045 toBool.insert("QScriptValue(0, QString::fromLatin1(\"ciao\"))", true);
1046 toBool.insert("QScriptValue(0, QString(\"\"))", false);
1047 toBool.insert("QScriptValue(0, QString())", false);
1048 toBool.insert("QScriptValue(0, QString(\"0\"))", true);
1049 toBool.insert("QScriptValue(0, QString(\"123\"))", true);
1050 toBool.insert("QScriptValue(0, QString(\"12.3\"))", true);
1051 toBool.insert("QScriptValue(engine, QScriptValue::UndefinedValue)", false);
1052 toBool.insert("QScriptValue(engine, QScriptValue::NullValue)", false);
1053 toBool.insert("QScriptValue(engine, true)", true);
1054 toBool.insert("QScriptValue(engine, false)", false);
1055 toBool.insert("QScriptValue(engine, int(122))", true);
1056 toBool.insert("QScriptValue(engine, uint(124))", true);
1057 toBool.insert("QScriptValue(engine, 0)", false);
1058 toBool.insert("QScriptValue(engine, 0.0)", false);
1059 toBool.insert("QScriptValue(engine, 123.0)", true);
1060 toBool.insert("QScriptValue(engine, 6.37e-8)", true);
1061 toBool.insert("QScriptValue(engine, -6.37e-8)", true);
1062 toBool.insert("QScriptValue(engine, 0x43211234)", true);
1063 toBool.insert("QScriptValue(engine, 0x10000)", true);
1064 toBool.insert("QScriptValue(engine, 0x10001)", true);
1065 toBool.insert("QScriptValue(engine, qSNaN())", false);
1066 toBool.insert("QScriptValue(engine, qQNaN())", false);
1067 toBool.insert("QScriptValue(engine, qInf())", true);
1068 toBool.insert("QScriptValue(engine, -qInf())", true);
1069 toBool.insert("QScriptValue(engine, \"NaN\")", true);
1070 toBool.insert("QScriptValue(engine, \"Infinity\")", true);
1071 toBool.insert("QScriptValue(engine, \"-Infinity\")", true);
1072 toBool.insert("QScriptValue(engine, \"ciao\")", true);
1073 toBool.insert("QScriptValue(engine, QString::fromLatin1(\"ciao\"))", true);
1074 toBool.insert("QScriptValue(engine, QString(\"\"))", false);
1075 toBool.insert("QScriptValue(engine, QString())", false);
1076 toBool.insert("QScriptValue(engine, QString(\"0\"))", true);
1077 toBool.insert("QScriptValue(engine, QString(\"123\"))", true);
1078 toBool.insert("QScriptValue(engine, QString(\"1.23\"))", true);
1079 toBool.insert("engine->evaluate(\"[]\")", true);
1080 toBool.insert("engine->evaluate(\"{}\")", false);
1081 toBool.insert("engine->evaluate(\"Object.prototype\")", true);
1082 toBool.insert("engine->evaluate(\"Date.prototype\")", true);
1083 toBool.insert("engine->evaluate(\"Array.prototype\")", true);
1084 toBool.insert("engine->evaluate(\"Function.prototype\")", true);
1085 toBool.insert("engine->evaluate(\"Error.prototype\")", true);
1086 toBool.insert("engine->evaluate(\"Object\")", true);
1087 toBool.insert("engine->evaluate(\"Array\")", true);
1088 toBool.insert("engine->evaluate(\"Number\")", true);
1089 toBool.insert("engine->evaluate(\"Function\")", true);
1090 toBool.insert("engine->evaluate(\"(function() { return 1; })\")", true);
1091 toBool.insert("engine->evaluate(\"(function() { return 'ciao'; })\")", true);
1092 toBool.insert("engine->evaluate(\"(function() { throw new Error('foo'); })\")", true);
1093 toBool.insert("engine->evaluate(\"/foo/\")", true);
1094 toBool.insert("engine->evaluate(\"new Object()\")", true);
1095 toBool.insert("engine->evaluate(\"new Array()\")", true);
1096 toBool.insert("engine->evaluate(\"new Error()\")", true);
1097 toBool.insert("engine->evaluate(\"a = new Object(); a.foo = 22; a.foo\")", true);
1098 toBool.insert("engine->evaluate(\"Undefined\")", true);
1099 toBool.insert("engine->evaluate(\"Null\")", true);
1100 toBool.insert("engine->evaluate(\"True\")", true);
1101 toBool.insert("engine->evaluate(\"False\")", true);
1102 toBool.insert("engine->evaluate(\"undefined\")", false);
1103 toBool.insert("engine->evaluate(\"null\")", false);
1104 toBool.insert("engine->evaluate(\"true\")", true);
1105 toBool.insert("engine->evaluate(\"false\")", false);
1106 toBool.insert("engine->evaluate(\"122\")", true);
1107 toBool.insert("engine->evaluate(\"124\")", true);
1108 toBool.insert("engine->evaluate(\"0\")", false);
1109 toBool.insert("engine->evaluate(\"0.0\")", false);
1110 toBool.insert("engine->evaluate(\"123.0\")", true);
1111 toBool.insert("engine->evaluate(\"6.37e-8\")", true);
1112 toBool.insert("engine->evaluate(\"-6.37e-8\")", true);
1113 toBool.insert("engine->evaluate(\"0x43211234\")", true);
1114 toBool.insert("engine->evaluate(\"0x10000\")", true);
1115 toBool.insert("engine->evaluate(\"0x10001\")", true);
1116 toBool.insert("engine->evaluate(\"NaN\")", false);
1117 toBool.insert("engine->evaluate(\"Infinity\")", true);
1118 toBool.insert("engine->evaluate(\"-Infinity\")", true);
1119 toBool.insert("engine->evaluate(\"'ciao'\")", true);
1120 toBool.insert("engine->evaluate(\"''\")", false);
1121 toBool.insert("engine->evaluate(\"'0'\")", true);
1122 toBool.insert("engine->evaluate(\"'123'\")", true);
1123 toBool.insert("engine->evaluate(\"'12.4'\")", true);
1124 toBool.insert("engine->nullValue()", false);
1125 toBool.insert("engine->undefinedValue()", false);
1126 }
1127 newRow(expr) << toBool.value(expr);
1128 }
1129
1130 void tst_QScriptValue::toBool_test(const char*, const QScriptValue& value)
1131 {
1132 QFETCH(bool, expected);
1133 QCOMPARE(value.toBool(), expected);
1134 QCOMPARE(value.toBool(), expected);
1135 }
1136
1137 DEFINE_TEST_FUNCTION(toBool)
1138
1139
1140 void tst_QScriptValue::toBoolean_initData()
1141 {
1142 QTest::addColumn<bool>("expected");
1143 initScriptValues();
1144 }
1145
1146 void tst_QScriptValue::toBoolean_makeData(const char* expr)
1147 {
1148 static QHash<QString, bool> toBoolean;
1149 if (toBoolean.isEmpty()) {
1150 toBoolean.insert("QScriptValue()", false);
1151 toBoolean.insert("QScriptValue(QScriptValue::UndefinedValue)", false);
1152 toBoolean.insert("QScriptValue(QScriptValue::NullValue)", false);
1153 toBoolean.insert("QScriptValue(true)", true);
1154 toBoolean.insert("QScriptValue(false)", false);
1155 toBoolean.insert("QScriptValue(int(122))", true);
1156 toBoolean.insert("QScriptValue(uint(124))", true);
1157 toBoolean.insert("QScriptValue(0)", false);
1158 toBoolean.insert("QScriptValue(0.0)", false);
1159 toBoolean.insert("QScriptValue(123.0)", true);
1160 toBoolean.insert("QScriptValue(6.37e-8)", true);
1161 toBoolean.insert("QScriptValue(-6.37e-8)", true);
1162 toBoolean.insert("QScriptValue(0x43211234)", true);
1163 toBoolean.insert("QScriptValue(0x10000)", true);
1164 toBoolean.insert("QScriptValue(0x10001)", true);
1165 toBoolean.insert("QScriptValue(qSNaN())", false);
1166 toBoolean.insert("QScriptValue(qQNaN())", false);
1167 toBoolean.insert("QScriptValue(qInf())", true);
1168 toBoolean.insert("QScriptValue(-qInf())", true);
1169 toBoolean.insert("QScriptValue(\"NaN\")", true);
1170 toBoolean.insert("QScriptValue(\"Infinity\")", true);
1171 toBoolean.insert("QScriptValue(\"-Infinity\")", true);
1172 toBoolean.insert("QScriptValue(\"ciao\")", true);
1173 toBoolean.insert("QScriptValue(QString::fromLatin1(\"ciao\"))", true);
1174 toBoolean.insert("QScriptValue(QString(\"\"))", false);
1175 toBoolean.insert("QScriptValue(QString())", false);
1176 toBoolean.insert("QScriptValue(QString(\"0\"))", true);
1177 toBoolean.insert("QScriptValue(QString(\"123\"))", true);
1178 toBoolean.insert("QScriptValue(QString(\"12.4\"))", true);
1179 toBoolean.insert("QScriptValue(0, QScriptValue::UndefinedValue)", false);
1180 toBoolean.insert("QScriptValue(0, QScriptValue::NullValue)", false);
1181 toBoolean.insert("QScriptValue(0, true)", true);
1182 toBoolean.insert("QScriptValue(0, false)", false);
1183 toBoolean.insert("QScriptValue(0, int(122))", true);
1184 toBoolean.insert("QScriptValue(0, uint(124))", true);
1185 toBoolean.insert("QScriptValue(0, 0)", false);
1186 toBoolean.insert("QScriptValue(0, 0.0)", false);
1187 toBoolean.insert("QScriptValue(0, 123.0)", true);
1188 toBoolean.insert("QScriptValue(0, 6.37e-8)", true);
1189 toBoolean.insert("QScriptValue(0, -6.37e-8)", true);
1190 toBoolean.insert("QScriptValue(0, 0x43211234)", true);
1191 toBoolean.insert("QScriptValue(0, 0x10000)", true);
1192 toBoolean.insert("QScriptValue(0, 0x10001)", true);
1193 toBoolean.insert("QScriptValue(0, qSNaN())", false);
1194 toBoolean.insert("QScriptValue(0, qQNaN())", false);
1195 toBoolean.insert("QScriptValue(0, qInf())", true);
1196 toBoolean.insert("QScriptValue(0, -qInf())", true);
1197 toBoolean.insert("QScriptValue(0, \"NaN\")", true);
1198 toBoolean.insert("QScriptValue(0, \"Infinity\")", true);
1199 toBoolean.insert("QScriptValue(0, \"-Infinity\")", true);
1200 toBoolean.insert("QScriptValue(0, \"ciao\")", true);
1201 toBoolean.insert("QScriptValue(0, QString::fromLatin1(\"ciao\"))", true);
1202 toBoolean.insert("QScriptValue(0, QString(\"\"))", false);
1203 toBoolean.insert("QScriptValue(0, QString())", false);
1204 toBoolean.insert("QScriptValue(0, QString(\"0\"))", true);
1205 toBoolean.insert("QScriptValue(0, QString(\"123\"))", true);
1206 toBoolean.insert("QScriptValue(0, QString(\"12.3\"))", true);
1207 toBoolean.insert("QScriptValue(engine, QScriptValue::UndefinedValue)", false);
1208 toBoolean.insert("QScriptValue(engine, QScriptValue::NullValue)", false);
1209 toBoolean.insert("QScriptValue(engine, true)", true);
1210 toBoolean.insert("QScriptValue(engine, false)", false);
1211 toBoolean.insert("QScriptValue(engine, int(122))", true);
1212 toBoolean.insert("QScriptValue(engine, uint(124))", true);
1213 toBoolean.insert("QScriptValue(engine, 0)", false);
1214 toBoolean.insert("QScriptValue(engine, 0.0)", false);
1215 toBoolean.insert("QScriptValue(engine, 123.0)", true);
1216 toBoolean.insert("QScriptValue(engine, 6.37e-8)", true);
1217 toBoolean.insert("QScriptValue(engine, -6.37e-8)", true);
1218 toBoolean.insert("QScriptValue(engine, 0x43211234)", true);
1219 toBoolean.insert("QScriptValue(engine, 0x10000)", true);
1220 toBoolean.insert("QScriptValue(engine, 0x10001)", true);
1221 toBoolean.insert("QScriptValue(engine, qSNaN())", false);
1222 toBoolean.insert("QScriptValue(engine, qQNaN())", false);
1223 toBoolean.insert("QScriptValue(engine, qInf())", true);
1224 toBoolean.insert("QScriptValue(engine, -qInf())", true);
1225 toBoolean.insert("QScriptValue(engine, \"NaN\")", true);
1226 toBoolean.insert("QScriptValue(engine, \"Infinity\")", true);
1227 toBoolean.insert("QScriptValue(engine, \"-Infinity\")", true);
1228 toBoolean.insert("QScriptValue(engine, \"ciao\")", true);
1229 toBoolean.insert("QScriptValue(engine, QString::fromLatin1(\"ciao\"))", true);
1230 toBoolean.insert("QScriptValue(engine, QString(\"\"))", false);
1231 toBoolean.insert("QScriptValue(engine, QString())", false);
1232 toBoolean.insert("QScriptValue(engine, QString(\"0\"))", true);
1233 toBoolean.insert("QScriptValue(engine, QString(\"123\"))", true);
1234 toBoolean.insert("QScriptValue(engine, QString(\"1.23\"))", true);
1235 toBoolean.insert("engine->evaluate(\"[]\")", true);
1236 toBoolean.insert("engine->evaluate(\"{}\")", false);
1237 toBoolean.insert("engine->evaluate(\"Object.prototype\")", true);
1238 toBoolean.insert("engine->evaluate(\"Date.prototype\")", true);
1239 toBoolean.insert("engine->evaluate(\"Array.prototype\")", true);
1240 toBoolean.insert("engine->evaluate(\"Function.prototype\")", true);
1241 toBoolean.insert("engine->evaluate(\"Error.prototype\")", true);
1242 toBoolean.insert("engine->evaluate(\"Object\")", true);
1243 toBoolean.insert("engine->evaluate(\"Array\")", true);
1244 toBoolean.insert("engine->evaluate(\"Number\")", true);
1245 toBoolean.insert("engine->evaluate(\"Function\")", true);
1246 toBoolean.insert("engine->evaluate(\"(function() { return 1; })\")", true);
1247 toBoolean.insert("engine->evaluate(\"(function() { return 'ciao'; })\")", true);
1248 toBoolean.insert("engine->evaluate(\"(function() { throw new Error('foo'); })\")", true);
1249 toBoolean.insert("engine->evaluate(\"/foo/\")", true);
1250 toBoolean.insert("engine->evaluate(\"new Object()\")", true);
1251 toBoolean.insert("engine->evaluate(\"new Array()\")", true);
1252 toBoolean.insert("engine->evaluate(\"new Error()\")", true);
1253 toBoolean.insert("engine->evaluate(\"a = new Object(); a.foo = 22; a.foo\")", true);
1254 toBoolean.insert("engine->evaluate(\"Undefined\")", true);
1255 toBoolean.insert("engine->evaluate(\"Null\")", true);
1256 toBoolean.insert("engine->evaluate(\"True\")", true);
1257 toBoolean.insert("engine->evaluate(\"False\")", true);
1258 toBoolean.insert("engine->evaluate(\"undefined\")", false);
1259 toBoolean.insert("engine->evaluate(\"null\")", false);
1260 toBoolean.insert("engine->evaluate(\"true\")", true);
1261 toBoolean.insert("engine->evaluate(\"false\")", false);
1262 toBoolean.insert("engine->evaluate(\"122\")", true);
1263 toBoolean.insert("engine->evaluate(\"124\")", true);
1264 toBoolean.insert("engine->evaluate(\"0\")", false);
1265 toBoolean.insert("engine->evaluate(\"0.0\")", false);
1266 toBoolean.insert("engine->evaluate(\"123.0\")", true);
1267 toBoolean.insert("engine->evaluate(\"6.37e-8\")", true);
1268 toBoolean.insert("engine->evaluate(\"-6.37e-8\")", true);
1269 toBoolean.insert("engine->evaluate(\"0x43211234\")", true);
1270 toBoolean.insert("engine->evaluate(\"0x10000\")", true);
1271 toBoolean.insert("engine->evaluate(\"0x10001\")", true);
1272 toBoolean.insert("engine->evaluate(\"NaN\")", false);
1273 toBoolean.insert("engine->evaluate(\"Infinity\")", true);
1274 toBoolean.insert("engine->evaluate(\"-Infinity\")", true);
1275 toBoolean.insert("engine->evaluate(\"'ciao'\")", true);
1276 toBoolean.insert("engine->evaluate(\"''\")", false);
1277 toBoolean.insert("engine->evaluate(\"'0'\")", true);
1278 toBoolean.insert("engine->evaluate(\"'123'\")", true);
1279 toBoolean.insert("engine->evaluate(\"'12.4'\")", true);
1280 toBoolean.insert("engine->nullValue()", false);
1281 toBoolean.insert("engine->undefinedValue()", false);
1282 }
1283 newRow(expr) << toBoolean.value(expr);
1284 }
1285
1286 void tst_QScriptValue::toBoolean_test(const char*, const QScriptValue& value)
1287 {
1288 QFETCH(bool, expected);
1289 QCOMPARE(value.toBoolean(), expected);
1290 QCOMPARE(value.toBoolean(), expected);
1291 }
1292
1293 DEFINE_TEST_FUNCTION(toBoolean)
1294
1295
1296 void tst_QScriptValue::toInteger_initData()
1297 {
1298 QTest::addColumn<qsreal>("expected");
1299 initScriptValues();
1300 }
1301
1302 void tst_QScriptValue::toInteger_makeData(const char* expr)
1303 {
1304 static QHash<QString, qsreal> toInteger;
1305 if (toInteger.isEmpty()) {
1306 toInteger.insert("QScriptValue()", 0);
1307 toInteger.insert("QScriptValue(QScriptValue::UndefinedValue)", 0);
1308 toInteger.insert("QScriptValue(QScriptValue::NullValue)", 0);
1309 toInteger.insert("QScriptValue(true)", 1);
1310 toInteger.insert("QScriptValue(false)", 0);
1311 toInteger.insert("QScriptValue(int(122))", 122);
1312 toInteger.insert("QScriptValue(uint(124))", 124);
1313 toInteger.insert("QScriptValue(0)", 0);
1314 toInteger.insert("QScriptValue(0.0)", 0);
1315 toInteger.insert("QScriptValue(123.0)", 123);
1316 toInteger.insert("QScriptValue(6.37e-8)", 0);
1317 toInteger.insert("QScriptValue(-6.37e-8)", 0);
1318 toInteger.insert("QScriptValue(0x43211234)", 1126240820);
1319 toInteger.insert("QScriptValue(0x10000)", 65536);
1320 toInteger.insert("QScriptValue(0x10001)", 65537);
1321 toInteger.insert("QScriptValue(qSNaN())", 0);
1322 toInteger.insert("QScriptValue(qQNaN())", 0);
1323 toInteger.insert("QScriptValue(qInf())", qInf());
1324 toInteger.insert("QScriptValue(-qInf())", qInf());
1325 toInteger.insert("QScriptValue(\"NaN\")", 0);
1326 toInteger.insert("QScriptValue(\"Infinity\")", qInf());
1327 toInteger.insert("QScriptValue(\"-Infinity\")", qInf());
1328 toInteger.insert("QScriptValue(\"ciao\")", 0);
1329 toInteger.insert("QScriptValue(QString::fromLatin1(\"ciao\"))", 0);
1330 toInteger.insert("QScriptValue(QString(\"\"))", 0);
1331 toInteger.insert("QScriptValue(QString())", 0);
1332 toInteger.insert("QScriptValue(QString(\"0\"))", 0);
1333 toInteger.insert("QScriptValue(QString(\"123\"))", 123);
1334 toInteger.insert("QScriptValue(QString(\"12.4\"))", 12);
1335 toInteger.insert("QScriptValue(0, QScriptValue::UndefinedValue)", 0);
1336 toInteger.insert("QScriptValue(0, QScriptValue::NullValue)", 0);
1337 toInteger.insert("QScriptValue(0, true)", 1);
1338 toInteger.insert("QScriptValue(0, false)", 0);
1339 toInteger.insert("QScriptValue(0, int(122))", 122);
1340 toInteger.insert("QScriptValue(0, uint(124))", 124);
1341 toInteger.insert("QScriptValue(0, 0)", 0);
1342 toInteger.insert("QScriptValue(0, 0.0)", 0);
1343 toInteger.insert("QScriptValue(0, 123.0)", 123);
1344 toInteger.insert("QScriptValue(0, 6.37e-8)", 0);
1345 toInteger.insert("QScriptValue(0, -6.37e-8)", 0);
1346 toInteger.insert("QScriptValue(0, 0x43211234)", 1126240820);
1347 toInteger.insert("QScriptValue(0, 0x10000)", 65536);
1348 toInteger.insert("QScriptValue(0, 0x10001)", 65537);
1349 toInteger.insert("QScriptValue(0, qSNaN())", 0);
1350 toInteger.insert("QScriptValue(0, qQNaN())", 0);
1351 toInteger.insert("QScriptValue(0, qInf())", qInf());
1352 toInteger.insert("QScriptValue(0, -qInf())", qInf());
1353 toInteger.insert("QScriptValue(0, \"NaN\")", 0);
1354 toInteger.insert("QScriptValue(0, \"Infinity\")", qInf());
1355 toInteger.insert("QScriptValue(0, \"-Infinity\")", qInf());
1356 toInteger.insert("QScriptValue(0, \"ciao\")", 0);
1357 toInteger.insert("QScriptValue(0, QString::fromLatin1(\"ciao\"))", 0);
1358 toInteger.insert("QScriptValue(0, QString(\"\"))", 0);
1359 toInteger.insert("QScriptValue(0, QString())", 0);
1360 toInteger.insert("QScriptValue(0, QString(\"0\"))", 0);
1361 toInteger.insert("QScriptValue(0, QString(\"123\"))", 123);
1362 toInteger.insert("QScriptValue(0, QString(\"12.3\"))", 12);
1363 toInteger.insert("QScriptValue(engine, QScriptValue::UndefinedValue)", 0);
1364 toInteger.insert("QScriptValue(engine, QScriptValue::NullValue)", 0);
1365 toInteger.insert("QScriptValue(engine, true)", 1);
1366 toInteger.insert("QScriptValue(engine, false)", 0);
1367 toInteger.insert("QScriptValue(engine, int(122))", 122);
1368 toInteger.insert("QScriptValue(engine, uint(124))", 124);
1369 toInteger.insert("QScriptValue(engine, 0)", 0);
1370 toInteger.insert("QScriptValue(engine, 0.0)", 0);
1371 toInteger.insert("QScriptValue(engine, 123.0)", 123);
1372 toInteger.insert("QScriptValue(engine, 6.37e-8)", 0);
1373 toInteger.insert("QScriptValue(engine, -6.37e-8)", 0);
1374 toInteger.insert("QScriptValue(engine, 0x43211234)", 1126240820);
1375 toInteger.insert("QScriptValue(engine, 0x10000)", 65536);
1376 toInteger.insert("QScriptValue(engine, 0x10001)", 65537);
1377 toInteger.insert("QScriptValue(engine, qSNaN())", 0);
1378 toInteger.insert("QScriptValue(engine, qQNaN())", 0);
1379 toInteger.insert("QScriptValue(engine, qInf())", qInf());
1380 toInteger.insert("QScriptValue(engine, -qInf())", qInf());
1381 toInteger.insert("QScriptValue(engine, \"NaN\")", 0);
1382 toInteger.insert("QScriptValue(engine, \"Infinity\")", qInf());
1383 toInteger.insert("QScriptValue(engine, \"-Infinity\")", qInf());
1384 toInteger.insert("QScriptValue(engine, \"ciao\")", 0);
1385 toInteger.insert("QScriptValue(engine, QString::fromLatin1(\"ciao\"))", 0);
1386 toInteger.insert("QScriptValue(engine, QString(\"\"))", 0);
1387 toInteger.insert("QScriptValue(engine, QString())", 0);
1388 toInteger.insert("QScriptValue(engine, QString(\"0\"))", 0);
1389 toInteger.insert("QScriptValue(engine, QString(\"123\"))", 123);
1390 toInteger.insert("QScriptValue(engine, QString(\"1.23\"))", 1);
1391 toInteger.insert("engine->evaluate(\"[]\")", 0);
1392 toInteger.insert("engine->evaluate(\"{}\")", 0);
1393 toInteger.insert("engine->evaluate(\"Object.prototype\")", 0);
1394 toInteger.insert("engine->evaluate(\"Date.prototype\")", 0);
1395 toInteger.insert("engine->evaluate(\"Array.prototype\")", 0);
1396 toInteger.insert("engine->evaluate(\"Function.prototype\")", 0);
1397 toInteger.insert("engine->evaluate(\"Error.prototype\")", 0);
1398 toInteger.insert("engine->evaluate(\"Object\")", 0);
1399 toInteger.insert("engine->evaluate(\"Array\")", 0);
1400 toInteger.insert("engine->evaluate(\"Number\")", 0);
1401 toInteger.insert("engine->evaluate(\"Function\")", 0);
1402 toInteger.insert("engine->evaluate(\"(function() { return 1; })\")", 0);
1403 toInteger.insert("engine->evaluate(\"(function() { return 'ciao'; })\")", 0);
1404 toInteger.insert("engine->evaluate(\"(function() { throw new Error('foo'); })\")", 0);
1405 toInteger.insert("engine->evaluate(\"/foo/\")", 0);
1406 toInteger.insert("engine->evaluate(\"new Object()\")", 0);
1407 toInteger.insert("engine->evaluate(\"new Array()\")", 0);
1408 toInteger.insert("engine->evaluate(\"new Error()\")", 0);
1409 toInteger.insert("engine->evaluate(\"a = new Object(); a.foo = 22; a.foo\")", 22);
1410 toInteger.insert("engine->evaluate(\"Undefined\")", 0);
1411 toInteger.insert("engine->evaluate(\"Null\")", 0);
1412 toInteger.insert("engine->evaluate(\"True\")", 0);
1413 toInteger.insert("engine->evaluate(\"False\")", 0);
1414 toInteger.insert("engine->evaluate(\"undefined\")", 0);
1415 toInteger.insert("engine->evaluate(\"null\")", 0);
1416 toInteger.insert("engine->evaluate(\"true\")", 1);
1417 toInteger.insert("engine->evaluate(\"false\")", 0);
1418 toInteger.insert("engine->evaluate(\"122\")", 122);
1419 toInteger.insert("engine->evaluate(\"124\")", 124);
1420 toInteger.insert("engine->evaluate(\"0\")", 0);
1421 toInteger.insert("engine->evaluate(\"0.0\")", 0);
1422 toInteger.insert("engine->evaluate(\"123.0\")", 123);
1423 toInteger.insert("engine->evaluate(\"6.37e-8\")", 0);
1424 toInteger.insert("engine->evaluate(\"-6.37e-8\")", 0);
1425 toInteger.insert("engine->evaluate(\"0x43211234\")", 1126240820);
1426 toInteger.insert("engine->evaluate(\"0x10000\")", 65536);
1427 toInteger.insert("engine->evaluate(\"0x10001\")", 65537);
1428 toInteger.insert("engine->evaluate(\"NaN\")", 0);
1429 toInteger.insert("engine->evaluate(\"Infinity\")", qInf());
1430 toInteger.insert("engine->evaluate(\"-Infinity\")", qInf());
1431 toInteger.insert("engine->evaluate(\"'ciao'\")", 0);
1432 toInteger.insert("engine->evaluate(\"''\")", 0);
1433 toInteger.insert("engine->evaluate(\"'0'\")", 0);
1434 toInteger.insert("engine->evaluate(\"'123'\")", 123);
1435 toInteger.insert("engine->evaluate(\"'12.4'\")", 12);
1436 toInteger.insert("engine->nullValue()", 0);
1437 toInteger.insert("engine->undefinedValue()", 0);
1438 }
1439 newRow(expr) << toInteger.value(expr);
1440 }
1441
1442 void tst_QScriptValue::toInteger_test(const char*, const QScriptValue& value)
1443 {
1444 QFETCH(qsreal, expected);
1445 if (qIsInf(expected)) {
1446 QVERIFY(qIsInf(value.toInteger()));
1447 QVERIFY(qIsInf(value.toInteger()));
1448 return;
1449 }
1450 QCOMPARE(value.toInteger(), expected);
1451 QCOMPARE(value.toInteger(), expected);
1452 }
1453
1454 DEFINE_TEST_FUNCTION(toInteger)
1455
1456
1457 void tst_QScriptValue::toInt32_initData()
1458 {
1459 QTest::addColumn<qint32>("expected");
1460 initScriptValues();
1461 }
1462
1463 void tst_QScriptValue::toInt32_makeData(const char* expr)
1464 {
1465 static QHash<QString, qint32> toInt32;
1466 if (toInt32.isEmpty()) {
1467 toInt32.insert("QScriptValue()", 0);
1468 toInt32.insert("QScriptValue(QScriptValue::UndefinedValue)", 0);
1469 toInt32.insert("QScriptValue(QScriptValue::NullValue)", 0);
1470 toInt32.insert("QScriptValue(true)", 1);
1471 toInt32.insert("QScriptValue(false)", 0);
1472 toInt32.insert("QScriptValue(int(122))", 122);
1473 toInt32.insert("QScriptValue(uint(124))", 124);
1474 toInt32.insert("QScriptValue(0)", 0);
1475 toInt32.insert("QScriptValue(0.0)", 0);
1476 toInt32.insert("QScriptValue(123.0)", 123);
1477 toInt32.insert("QScriptValue(6.37e-8)", 0);
1478 toInt32.insert("QScriptValue(-6.37e-8)", 0);
1479 toInt32.insert("QScriptValue(0x43211234)", 1126240820);
1480 toInt32.insert("QScriptValue(0x10000)", 65536);
1481 toInt32.insert("QScriptValue(0x10001)", 65537);
1482 toInt32.insert("QScriptValue(qSNaN())", 0);
1483 toInt32.insert("QScriptValue(qQNaN())", 0);
1484 toInt32.insert("QScriptValue(qInf())", 0);
1485 toInt32.insert("QScriptValue(-qInf())", 0);
1486 toInt32.insert("QScriptValue(\"NaN\")", 0);
1487 toInt32.insert("QScriptValue(\"Infinity\")", 0);
1488 toInt32.insert("QScriptValue(\"-Infinity\")", 0);
1489 toInt32.insert("QScriptValue(\"ciao\")", 0);
1490 toInt32.insert("QScriptValue(QString::fromLatin1(\"ciao\"))", 0);
1491 toInt32.insert("QScriptValue(QString(\"\"))", 0);
1492 toInt32.insert("QScriptValue(QString())", 0);
1493 toInt32.insert("QScriptValue(QString(\"0\"))", 0);
1494 toInt32.insert("QScriptValue(QString(\"123\"))", 123);
1495 toInt32.insert("QScriptValue(QString(\"12.4\"))", 12);
1496 toInt32.insert("QScriptValue(0, QScriptValue::UndefinedValue)", 0);
1497 toInt32.insert("QScriptValue(0, QScriptValue::NullValue)", 0);
1498 toInt32.insert("QScriptValue(0, true)", 1);
1499 toInt32.insert("QScriptValue(0, false)", 0);
1500 toInt32.insert("QScriptValue(0, int(122))", 122);
1501 toInt32.insert("QScriptValue(0, uint(124))", 124);
1502 toInt32.insert("QScriptValue(0, 0)", 0);
1503 toInt32.insert("QScriptValue(0, 0.0)", 0);
1504 toInt32.insert("QScriptValue(0, 123.0)", 123);
1505 toInt32.insert("QScriptValue(0, 6.37e-8)", 0);
1506 toInt32.insert("QScriptValue(0, -6.37e-8)", 0);
1507 toInt32.insert("QScriptValue(0, 0x43211234)", 1126240820);
1508 toInt32.insert("QScriptValue(0, 0x10000)", 65536);
1509 toInt32.insert("QScriptValue(0, 0x10001)", 65537);
1510 toInt32.insert("QScriptValue(0, qSNaN())", 0);
1511 toInt32.insert("QScriptValue(0, qQNaN())", 0);
1512 toInt32.insert("QScriptValue(0, qInf())", 0);
1513 toInt32.insert("QScriptValue(0, -qInf())", 0);
1514 toInt32.insert("QScriptValue(0, \"NaN\")", 0);
1515 toInt32.insert("QScriptValue(0, \"Infinity\")", 0);
1516 toInt32.insert("QScriptValue(0, \"-Infinity\")", 0);
1517 toInt32.insert("QScriptValue(0, \"ciao\")", 0);
1518 toInt32.insert("QScriptValue(0, QString::fromLatin1(\"ciao\"))", 0);
1519 toInt32.insert("QScriptValue(0, QString(\"\"))", 0);
1520 toInt32.insert("QScriptValue(0, QString())", 0);
1521 toInt32.insert("QScriptValue(0, QString(\"0\"))", 0);
1522 toInt32.insert("QScriptValue(0, QString(\"123\"))", 123);
1523 toInt32.insert("QScriptValue(0, QString(\"12.3\"))", 12);
1524 toInt32.insert("QScriptValue(engine, QScriptValue::UndefinedValue)", 0);
1525 toInt32.insert("QScriptValue(engine, QScriptValue::NullValue)", 0);
1526 toInt32.insert("QScriptValue(engine, true)", 1);
1527 toInt32.insert("QScriptValue(engine, false)", 0);
1528 toInt32.insert("QScriptValue(engine, int(122))", 122);
1529 toInt32.insert("QScriptValue(engine, uint(124))", 124);
1530 toInt32.insert("QScriptValue(engine, 0)", 0);
1531 toInt32.insert("QScriptValue(engine, 0.0)", 0);
1532 toInt32.insert("QScriptValue(engine, 123.0)", 123);
1533 toInt32.insert("QScriptValue(engine, 6.37e-8)", 0);
1534 toInt32.insert("QScriptValue(engine, -6.37e-8)", 0);
1535 toInt32.insert("QScriptValue(engine, 0x43211234)", 1126240820);
1536 toInt32.insert("QScriptValue(engine, 0x10000)", 65536);
1537 toInt32.insert("QScriptValue(engine, 0x10001)", 65537);
1538 toInt32.insert("QScriptValue(engine, qSNaN())", 0);
1539 toInt32.insert("QScriptValue(engine, qQNaN())", 0);
1540 toInt32.insert("QScriptValue(engine, qInf())", 0);
1541 toInt32.insert("QScriptValue(engine, -qInf())", 0);
1542 toInt32.insert("QScriptValue(engine, \"NaN\")", 0);
1543 toInt32.insert("QScriptValue(engine, \"Infinity\")", 0);
1544 toInt32.insert("QScriptValue(engine, \"-Infinity\")", 0);
1545 toInt32.insert("QScriptValue(engine, \"ciao\")", 0);
1546 toInt32.insert("QScriptValue(engine, QString::fromLatin1(\"ciao\"))", 0);
1547 toInt32.insert("QScriptValue(engine, QString(\"\"))", 0);
1548 toInt32.insert("QScriptValue(engine, QString())", 0);
1549 toInt32.insert("QScriptValue(engine, QString(\"0\"))", 0);
1550 toInt32.insert("QScriptValue(engine, QString(\"123\"))", 123);
1551 toInt32.insert("QScriptValue(engine, QString(\"1.23\"))", 1);
1552 toInt32.insert("engine->evaluate(\"[]\")", 0);
1553 toInt32.insert("engine->evaluate(\"{}\")", 0);
1554 toInt32.insert("engine->evaluate(\"Object.prototype\")", 0);
1555 toInt32.insert("engine->evaluate(\"Date.prototype\")", 0);
1556 toInt32.insert("engine->evaluate(\"Array.prototype\")", 0);
1557 toInt32.insert("engine->evaluate(\"Function.prototype\")", 0);
1558 toInt32.insert("engine->evaluate(\"Error.prototype\")", 0);
1559 toInt32.insert("engine->evaluate(\"Object\")", 0);
1560 toInt32.insert("engine->evaluate(\"Array\")", 0);
1561 toInt32.insert("engine->evaluate(\"Number\")", 0);
1562 toInt32.insert("engine->evaluate(\"Function\")", 0);
1563 toInt32.insert("engine->evaluate(\"(function() { return 1; })\")", 0);
1564 toInt32.insert("engine->evaluate(\"(function() { return 'ciao'; })\")", 0);
1565 toInt32.insert("engine->evaluate(\"(function() { throw new Error('foo'); })\")", 0);
1566 toInt32.insert("engine->evaluate(\"/foo/\")", 0);
1567 toInt32.insert("engine->evaluate(\"new Object()\")", 0);
1568 toInt32.insert("engine->evaluate(\"new Array()\")", 0);
1569 toInt32.insert("engine->evaluate(\"new Error()\")", 0);
1570 toInt32.insert("engine->evaluate(\"a = new Object(); a.foo = 22; a.foo\")", 22);
1571 toInt32.insert("engine->evaluate(\"Undefined\")", 0);
1572 toInt32.insert("engine->evaluate(\"Null\")", 0);
1573 toInt32.insert("engine->evaluate(\"True\")", 0);
1574 toInt32.insert("engine->evaluate(\"False\")", 0);
1575 toInt32.insert("engine->evaluate(\"undefined\")", 0);
1576 toInt32.insert("engine->evaluate(\"null\")", 0);
1577 toInt32.insert("engine->evaluate(\"true\")", 1);
1578 toInt32.insert("engine->evaluate(\"false\")", 0);
1579 toInt32.insert("engine->evaluate(\"122\")", 122);
1580 toInt32.insert("engine->evaluate(\"124\")", 124);
1581 toInt32.insert("engine->evaluate(\"0\")", 0);
1582 toInt32.insert("engine->evaluate(\"0.0\")", 0);
1583 toInt32.insert("engine->evaluate(\"123.0\")", 123);
1584 toInt32.insert("engine->evaluate(\"6.37e-8\")", 0);
1585 toInt32.insert("engine->evaluate(\"-6.37e-8\")", 0);
1586 toInt32.insert("engine->evaluate(\"0x43211234\")", 1126240820);
1587 toInt32.insert("engine->evaluate(\"0x10000\")", 65536);
1588 toInt32.insert("engine->evaluate(\"0x10001\")", 65537);
1589 toInt32.insert("engine->evaluate(\"NaN\")", 0);
1590 toInt32.insert("engine->evaluate(\"Infinity\")", 0);
1591 toInt32.insert("engine->evaluate(\"-Infinity\")", 0);
1592 toInt32.insert("engine->evaluate(\"'ciao'\")", 0);
1593 toInt32.insert("engine->evaluate(\"''\")", 0);
1594 toInt32.insert("engine->evaluate(\"'0'\")", 0);
1595 toInt32.insert("engine->evaluate(\"'123'\")", 123);
1596 toInt32.insert("engine->evaluate(\"'12.4'\")", 12);
1597 toInt32.insert("engine->nullValue()", 0);
1598 toInt32.insert("engine->undefinedValue()", 0);
1599 }
1600 newRow(expr) << toInt32.value(expr);
1601 }
1602
1603 void tst_QScriptValue::toInt32_test(const char*, const QScriptValue& value)
1604 {
1605 QFETCH(qint32, expected);
1606 QCOMPARE(value.toInt32(), expected);
1607 QCOMPARE(value.toInt32(), expected);
1608 }
1609
1610 DEFINE_TEST_FUNCTION(toInt32)
1611
1612
1613 void tst_QScriptValue::toUInt32_initData()
1614 {
1615 QTest::addColumn<quint32>("expected");
1616 initScriptValues();
1617 }
1618
1619 void tst_QScriptValue::toUInt32_makeData(const char* expr)
1620 {
1621 static QHash<QString, quint32> toUInt32;
1622 if (toUInt32.isEmpty()) {
1623 toUInt32.insert("QScriptValue()", 0);
1624 toUInt32.insert("QScriptValue(QScriptValue::UndefinedValue)", 0);
1625 toUInt32.insert("QScriptValue(QScriptValue::NullValue)", 0);
1626 toUInt32.insert("QScriptValue(true)", 1);
1627 toUInt32.insert("QScriptValue(false)", 0);
1628 toUInt32.insert("QScriptValue(int(122))", 122);
1629 toUInt32.insert("QScriptValue(uint(124))", 124);
1630 toUInt32.insert("QScriptValue(0)", 0);
1631 toUInt32.insert("QScriptValue(0.0)", 0);
1632 toUInt32.insert("QScriptValue(123.0)", 123);
1633 toUInt32.insert("QScriptValue(6.37e-8)", 0);
1634 toUInt32.insert("QScriptValue(-6.37e-8)", 0);
1635 toUInt32.insert("QScriptValue(0x43211234)", 1126240820);
1636 toUInt32.insert("QScriptValue(0x10000)", 65536);
1637 toUInt32.insert("QScriptValue(0x10001)", 65537);
1638 toUInt32.insert("QScriptValue(qSNaN())", 0);
1639 toUInt32.insert("QScriptValue(qQNaN())", 0);
1640 toUInt32.insert("QScriptValue(qInf())", 0);
1641 toUInt32.insert("QScriptValue(-qInf())", 0);
1642 toUInt32.insert("QScriptValue(\"NaN\")", 0);
1643 toUInt32.insert("QScriptValue(\"Infinity\")", 0);
1644 toUInt32.insert("QScriptValue(\"-Infinity\")", 0);
1645 toUInt32.insert("QScriptValue(\"ciao\")", 0);
1646 toUInt32.insert("QScriptValue(QString::fromLatin1(\"ciao\"))", 0);
1647 toUInt32.insert("QScriptValue(QString(\"\"))", 0);
1648 toUInt32.insert("QScriptValue(QString())", 0);
1649 toUInt32.insert("QScriptValue(QString(\"0\"))", 0);
1650 toUInt32.insert("QScriptValue(QString(\"123\"))", 123);
1651 toUInt32.insert("QScriptValue(QString(\"12.4\"))", 12);
1652 toUInt32.insert("QScriptValue(0, QScriptValue::UndefinedValue)", 0);
1653 toUInt32.insert("QScriptValue(0, QScriptValue::NullValue)", 0);
1654 toUInt32.insert("QScriptValue(0, true)", 1);
1655 toUInt32.insert("QScriptValue(0, false)", 0);
1656 toUInt32.insert("QScriptValue(0, int(122))", 122);
1657 toUInt32.insert("QScriptValue(0, uint(124))", 124);
1658 toUInt32.insert("QScriptValue(0, 0)", 0);
1659 toUInt32.insert("QScriptValue(0, 0.0)", 0);
1660 toUInt32.insert("QScriptValue(0, 123.0)", 123);
1661 toUInt32.insert("QScriptValue(0, 6.37e-8)", 0);
1662 toUInt32.insert("QScriptValue(0, -6.37e-8)", 0);
1663 toUInt32.insert("QScriptValue(0, 0x43211234)", 1126240820);
1664 toUInt32.insert("QScriptValue(0, 0x10000)", 65536);
1665 toUInt32.insert("QScriptValue(0, 0x10001)", 65537);
1666 toUInt32.insert("QScriptValue(0, qSNaN())", 0);
1667 toUInt32.insert("QScriptValue(0, qQNaN())", 0);
1668 toUInt32.insert("QScriptValue(0, qInf())", 0);
1669 toUInt32.insert("QScriptValue(0, -qInf())", 0);
1670 toUInt32.insert("QScriptValue(0, \"NaN\")", 0);
1671 toUInt32.insert("QScriptValue(0, \"Infinity\")", 0);
1672 toUInt32.insert("QScriptValue(0, \"-Infinity\")", 0);
1673 toUInt32.insert("QScriptValue(0, \"ciao\")", 0);
1674 toUInt32.insert("QScriptValue(0, QString::fromLatin1(\"ciao\"))", 0);
1675 toUInt32.insert("QScriptValue(0, QString(\"\"))", 0);
1676 toUInt32.insert("QScriptValue(0, QString())", 0);
1677 toUInt32.insert("QScriptValue(0, QString(\"0\"))", 0);
1678 toUInt32.insert("QScriptValue(0, QString(\"123\"))", 123);
1679 toUInt32.insert("QScriptValue(0, QString(\"12.3\"))", 12);
1680 toUInt32.insert("QScriptValue(engine, QScriptValue::UndefinedValue)", 0);
1681 toUInt32.insert("QScriptValue(engine, QScriptValue::NullValue)", 0);
1682 toUInt32.insert("QScriptValue(engine, true)", 1);
1683 toUInt32.insert("QScriptValue(engine, false)", 0);
1684 toUInt32.insert("QScriptValue(engine, int(122))", 122);
1685 toUInt32.insert("QScriptValue(engine, uint(124))", 124);
1686 toUInt32.insert("QScriptValue(engine, 0)", 0);
1687 toUInt32.insert("QScriptValue(engine, 0.0)", 0);
1688 toUInt32.insert("QScriptValue(engine, 123.0)", 123);
1689 toUInt32.insert("QScriptValue(engine, 6.37e-8)", 0);
1690 toUInt32.insert("QScriptValue(engine, -6.37e-8)", 0);
1691 toUInt32.insert("QScriptValue(engine, 0x43211234)", 1126240820);
1692 toUInt32.insert("QScriptValue(engine, 0x10000)", 65536);
1693 toUInt32.insert("QScriptValue(engine, 0x10001)", 65537);
1694 toUInt32.insert("QScriptValue(engine, qSNaN())", 0);
1695 toUInt32.insert("QScriptValue(engine, qQNaN())", 0);
1696 toUInt32.insert("QScriptValue(engine, qInf())", 0);
1697 toUInt32.insert("QScriptValue(engine, -qInf())", 0);
1698 toUInt32.insert("QScriptValue(engine, \"NaN\")", 0);
1699 toUInt32.insert("QScriptValue(engine, \"Infinity\")", 0);
1700 toUInt32.insert("QScriptValue(engine, \"-Infinity\")", 0);
1701 toUInt32.insert("QScriptValue(engine, \"ciao\")", 0);
1702 toUInt32.insert("QScriptValue(engine, QString::fromLatin1(\"ciao\"))", 0);
1703 toUInt32.insert("QScriptValue(engine, QString(\"\"))", 0);
1704 toUInt32.insert("QScriptValue(engine, QString())", 0);
1705 toUInt32.insert("QScriptValue(engine, QString(\"0\"))", 0);
1706 toUInt32.insert("QScriptValue(engine, QString(\"123\"))", 123);
1707 toUInt32.insert("QScriptValue(engine, QString(\"1.23\"))", 1);
1708 toUInt32.insert("engine->evaluate(\"[]\")", 0);
1709 toUInt32.insert("engine->evaluate(\"{}\")", 0);
1710 toUInt32.insert("engine->evaluate(\"Object.prototype\")", 0);
1711 toUInt32.insert("engine->evaluate(\"Date.prototype\")", 0);
1712 toUInt32.insert("engine->evaluate(\"Array.prototype\")", 0);
1713 toUInt32.insert("engine->evaluate(\"Function.prototype\")", 0);
1714 toUInt32.insert("engine->evaluate(\"Error.prototype\")", 0);
1715 toUInt32.insert("engine->evaluate(\"Object\")", 0);
1716 toUInt32.insert("engine->evaluate(\"Array\")", 0);
1717 toUInt32.insert("engine->evaluate(\"Number\")", 0);
1718 toUInt32.insert("engine->evaluate(\"Function\")", 0);
1719 toUInt32.insert("engine->evaluate(\"(function() { return 1; })\")", 0);
1720 toUInt32.insert("engine->evaluate(\"(function() { return 'ciao'; })\")", 0);
1721 toUInt32.insert("engine->evaluate(\"(function() { throw new Error('foo'); })\")", 0);
1722 toUInt32.insert("engine->evaluate(\"/foo/\")", 0);
1723 toUInt32.insert("engine->evaluate(\"new Object()\")", 0);
1724 toUInt32.insert("engine->evaluate(\"new Array()\")", 0);
1725 toUInt32.insert("engine->evaluate(\"new Error()\")", 0);
1726 toUInt32.insert("engine->evaluate(\"a = new Object(); a.foo = 22; a.foo\")", 22);
1727 toUInt32.insert("engine->evaluate(\"Undefined\")", 0);
1728 toUInt32.insert("engine->evaluate(\"Null\")", 0);
1729 toUInt32.insert("engine->evaluate(\"True\")", 0);
1730 toUInt32.insert("engine->evaluate(\"False\")", 0);
1731 toUInt32.insert("engine->evaluate(\"undefined\")", 0);
1732 toUInt32.insert("engine->evaluate(\"null\")", 0);
1733 toUInt32.insert("engine->evaluate(\"true\")", 1);
1734 toUInt32.insert("engine->evaluate(\"false\")", 0);
1735 toUInt32.insert("engine->evaluate(\"122\")", 122);
1736 toUInt32.insert("engine->evaluate(\"124\")", 124);
1737 toUInt32.insert("engine->evaluate(\"0\")", 0);
1738 toUInt32.insert("engine->evaluate(\"0.0\")", 0);
1739 toUInt32.insert("engine->evaluate(\"123.0\")", 123);
1740 toUInt32.insert("engine->evaluate(\"6.37e-8\")", 0);
1741 toUInt32.insert("engine->evaluate(\"-6.37e-8\")", 0);
1742 toUInt32.insert("engine->evaluate(\"0x43211234\")", 1126240820);
1743 toUInt32.insert("engine->evaluate(\"0x10000\")", 65536);
1744 toUInt32.insert("engine->evaluate(\"0x10001\")", 65537);
1745 toUInt32.insert("engine->evaluate(\"NaN\")", 0);
1746 toUInt32.insert("engine->evaluate(\"Infinity\")", 0);
1747 toUInt32.insert("engine->evaluate(\"-Infinity\")", 0);
1748 toUInt32.insert("engine->evaluate(\"'ciao'\")", 0);
1749 toUInt32.insert("engine->evaluate(\"''\")", 0);
1750 toUInt32.insert("engine->evaluate(\"'0'\")", 0);
1751 toUInt32.insert("engine->evaluate(\"'123'\")", 123);
1752 toUInt32.insert("engine->evaluate(\"'12.4'\")", 12);
1753 toUInt32.insert("engine->nullValue()", 0);
1754 toUInt32.insert("engine->undefinedValue()", 0);
1755 }
1756 newRow(expr) << toUInt32.value(expr);
1757 }
1758
1759 void tst_QScriptValue::toUInt32_test(const char*, const QScriptValue& value)
1760 {
1761 QFETCH(quint32, expected);
1762 QCOMPARE(value.toUInt32(), expected);
1763 QCOMPARE(value.toUInt32(), expected);
1764 }
1765
1766 DEFINE_TEST_FUNCTION(toUInt32)
1767
1768
1769 void tst_QScriptValue::toUInt16_initData()
1770 {
1771 QTest::addColumn<quint16>("expected");
1772 initScriptValues();
1773 }
1774
1775 void tst_QScriptValue::toUInt16_makeData(const char* expr)
1776 {
1777 static QHash<QString, quint16> toUInt16;
1778 if (toUInt16.isEmpty()) {
1779 toUInt16.insert("QScriptValue()", 0);
1780 toUInt16.insert("QScriptValue(QScriptValue::UndefinedValue)", 0);
1781 toUInt16.insert("QScriptValue(QScriptValue::NullValue)", 0);
1782 toUInt16.insert("QScriptValue(true)", 1);
1783 toUInt16.insert("QScriptValue(false)", 0);
1784 toUInt16.insert("QScriptValue(int(122))", 122);
1785 toUInt16.insert("QScriptValue(uint(124))", 124);
1786 toUInt16.insert("QScriptValue(0)", 0);
1787 toUInt16.insert("QScriptValue(0.0)", 0);
1788 toUInt16.insert("QScriptValue(123.0)", 123);
1789 toUInt16.insert("QScriptValue(6.37e-8)", 0);
1790 toUInt16.insert("QScriptValue(-6.37e-8)", 0);
1791 toUInt16.insert("QScriptValue(0x43211234)", 4660);
1792 toUInt16.insert("QScriptValue(0x10000)", 0);
1793 toUInt16.insert("QScriptValue(0x10001)", 1);
1794 toUInt16.insert("QScriptValue(qSNaN())", 0);
1795 toUInt16.insert("QScriptValue(qQNaN())", 0);
1796 toUInt16.insert("QScriptValue(qInf())", 0);
1797 toUInt16.insert("QScriptValue(-qInf())", 0);
1798 toUInt16.insert("QScriptValue(\"NaN\")", 0);
1799 toUInt16.insert("QScriptValue(\"Infinity\")", 0);
1800 toUInt16.insert("QScriptValue(\"-Infinity\")", 0);
1801 toUInt16.insert("QScriptValue(\"ciao\")", 0);
1802 toUInt16.insert("QScriptValue(QString::fromLatin1(\"ciao\"))", 0);
1803 toUInt16.insert("QScriptValue(QString(\"\"))", 0);
1804 toUInt16.insert("QScriptValue(QString())", 0);
1805 toUInt16.insert("QScriptValue(QString(\"0\"))", 0);
1806 toUInt16.insert("QScriptValue(QString(\"123\"))", 123);
1807 toUInt16.insert("QScriptValue(QString(\"12.4\"))", 12);
1808 toUInt16.insert("QScriptValue(0, QScriptValue::UndefinedValue)", 0);
1809 toUInt16.insert("QScriptValue(0, QScriptValue::NullValue)", 0);
1810 toUInt16.insert("QScriptValue(0, true)", 1);
1811 toUInt16.insert("QScriptValue(0, false)", 0);
1812 toUInt16.insert("QScriptValue(0, int(122))", 122);
1813 toUInt16.insert("QScriptValue(0, uint(124))", 124);
1814 toUInt16.insert("QScriptValue(0, 0)", 0);
1815 toUInt16.insert("QScriptValue(0, 0.0)", 0);
1816 toUInt16.insert("QScriptValue(0, 123.0)", 123);
1817 toUInt16.insert("QScriptValue(0, 6.37e-8)", 0);
1818 toUInt16.insert("QScriptValue(0, -6.37e-8)", 0);
1819 toUInt16.insert("QScriptValue(0, 0x43211234)", 4660);
1820 toUInt16.insert("QScriptValue(0, 0x10000)", 0);
1821 toUInt16.insert("QScriptValue(0, 0x10001)", 1);
1822 toUInt16.insert("QScriptValue(0, qSNaN())", 0);
1823 toUInt16.insert("QScriptValue(0, qQNaN())", 0);
1824 toUInt16.insert("QScriptValue(0, qInf())", 0);
1825 toUInt16.insert("QScriptValue(0, -qInf())", 0);
1826 toUInt16.insert("QScriptValue(0, \"NaN\")", 0);
1827 toUInt16.insert("QScriptValue(0, \"Infinity\")", 0);
1828 toUInt16.insert("QScriptValue(0, \"-Infinity\")", 0);
1829 toUInt16.insert("QScriptValue(0, \"ciao\")", 0);
1830 toUInt16.insert("QScriptValue(0, QString::fromLatin1(\"ciao\"))", 0);
1831 toUInt16.insert("QScriptValue(0, QString(\"\"))", 0);
1832 toUInt16.insert("QScriptValue(0, QString())", 0);
1833 toUInt16.insert("QScriptValue(0, QString(\"0\"))", 0);
1834 toUInt16.insert("QScriptValue(0, QString(\"123\"))", 123);
1835 toUInt16.insert("QScriptValue(0, QString(\"12.3\"))", 12);
1836 toUInt16.insert("QScriptValue(engine, QScriptValue::UndefinedValue)", 0);
1837 toUInt16.insert("QScriptValue(engine, QScriptValue::NullValue)", 0);
1838 toUInt16.insert("QScriptValue(engine, true)", 1);
1839 toUInt16.insert("QScriptValue(engine, false)", 0);
1840 toUInt16.insert("QScriptValue(engine, int(122))", 122);
1841 toUInt16.insert("QScriptValue(engine, uint(124))", 124);
1842 toUInt16.insert("QScriptValue(engine, 0)", 0);
1843 toUInt16.insert("QScriptValue(engine, 0.0)", 0);
1844 toUInt16.insert("QScriptValue(engine, 123.0)", 123);
1845 toUInt16.insert("QScriptValue(engine, 6.37e-8)", 0);
1846 toUInt16.insert("QScriptValue(engine, -6.37e-8)", 0);
1847 toUInt16.insert("QScriptValue(engine, 0x43211234)", 4660);
1848 toUInt16.insert("QScriptValue(engine, 0x10000)", 0);
1849 toUInt16.insert("QScriptValue(engine, 0x10001)", 1);
1850 toUInt16.insert("QScriptValue(engine, qSNaN())", 0);
1851 toUInt16.insert("QScriptValue(engine, qQNaN())", 0);
1852 toUInt16.insert("QScriptValue(engine, qInf())", 0);
1853 toUInt16.insert("QScriptValue(engine, -qInf())", 0);
1854 toUInt16.insert("QScriptValue(engine, \"NaN\")", 0);
1855 toUInt16.insert("QScriptValue(engine, \"Infinity\")", 0);
1856 toUInt16.insert("QScriptValue(engine, \"-Infinity\")", 0);
1857 toUInt16.insert("QScriptValue(engine, \"ciao\")", 0);
1858 toUInt16.insert("QScriptValue(engine, QString::fromLatin1(\"ciao\"))", 0);
1859 toUInt16.insert("QScriptValue(engine, QString(\"\"))", 0);
1860 toUInt16.insert("QScriptValue(engine, QString())", 0);
1861 toUInt16.insert("QScriptValue(engine, QString(\"0\"))", 0);
1862 toUInt16.insert("QScriptValue(engine, QString(\"123\"))", 123);
1863 toUInt16.insert("QScriptValue(engine, QString(\"1.23\"))", 1);
1864 toUInt16.insert("engine->evaluate(\"[]\")", 0);
1865 toUInt16.insert("engine->evaluate(\"{}\")", 0);
1866 toUInt16.insert("engine->evaluate(\"Object.prototype\")", 0);
1867 toUInt16.insert("engine->evaluate(\"Date.prototype\")", 0);
1868 toUInt16.insert("engine->evaluate(\"Array.prototype\")", 0);
1869 toUInt16.insert("engine->evaluate(\"Function.prototype\")", 0);
1870 toUInt16.insert("engine->evaluate(\"Error.prototype\")", 0);
1871 toUInt16.insert("engine->evaluate(\"Object\")", 0);
1872 toUInt16.insert("engine->evaluate(\"Array\")", 0);
1873 toUInt16.insert("engine->evaluate(\"Number\")", 0);
1874 toUInt16.insert("engine->evaluate(\"Function\")", 0);
1875 toUInt16.insert("engine->evaluate(\"(function() { return 1; })\")", 0);
1876 toUInt16.insert("engine->evaluate(\"(function() { return 'ciao'; })\")", 0);
1877 toUInt16.insert("engine->evaluate(\"(function() { throw new Error('foo'); })\")", 0);
1878 toUInt16.insert("engine->evaluate(\"/foo/\")", 0);
1879 toUInt16.insert("engine->evaluate(\"new Object()\")", 0);
1880 toUInt16.insert("engine->evaluate(\"new Array()\")", 0);
1881 toUInt16.insert("engine->evaluate(\"new Error()\")", 0);
1882 toUInt16.insert("engine->evaluate(\"a = new Object(); a.foo = 22; a.foo\")", 22);
1883 toUInt16.insert("engine->evaluate(\"Undefined\")", 0);
1884 toUInt16.insert("engine->evaluate(\"Null\")", 0);
1885 toUInt16.insert("engine->evaluate(\"True\")", 0);
1886 toUInt16.insert("engine->evaluate(\"False\")", 0);
1887 toUInt16.insert("engine->evaluate(\"undefined\")", 0);
1888 toUInt16.insert("engine->evaluate(\"null\")", 0);
1889 toUInt16.insert("engine->evaluate(\"true\")", 1);
1890 toUInt16.insert("engine->evaluate(\"false\")", 0);
1891 toUInt16.insert("engine->evaluate(\"122\")", 122);
1892 toUInt16.insert("engine->evaluate(\"124\")", 124);
1893 toUInt16.insert("engine->evaluate(\"0\")", 0);
1894 toUInt16.insert("engine->evaluate(\"0.0\")", 0);
1895 toUInt16.insert("engine->evaluate(\"123.0\")", 123);
1896 toUInt16.insert("engine->evaluate(\"6.37e-8\")", 0);
1897 toUInt16.insert("engine->evaluate(\"-6.37e-8\")", 0);
1898 toUInt16.insert("engine->evaluate(\"0x43211234\")", 4660);
1899 toUInt16.insert("engine->evaluate(\"0x10000\")", 0);
1900 toUInt16.insert("engine->evaluate(\"0x10001\")", 1);
1901 toUInt16.insert("engine->evaluate(\"NaN\")", 0);
1902 toUInt16.insert("engine->evaluate(\"Infinity\")", 0);
1903 toUInt16.insert("engine->evaluate(\"-Infinity\")", 0);
1904 toUInt16.insert("engine->evaluate(\"'ciao'\")", 0);
1905 toUInt16.insert("engine->evaluate(\"''\")", 0);
1906 toUInt16.insert("engine->evaluate(\"'0'\")", 0);
1907 toUInt16.insert("engine->evaluate(\"'123'\")", 123);
1908 toUInt16.insert("engine->evaluate(\"'12.4'\")", 12);
1909 toUInt16.insert("engine->nullValue()", 0);
1910 toUInt16.insert("engine->undefinedValue()", 0);
1911 }
1912 newRow(expr) << toUInt16.value(expr);
1913 }
1914
1915 void tst_QScriptValue::toUInt16_test(const char*, const QScriptValue& value)
1916 {
1917 QFETCH(quint16, expected);
1918 QCOMPARE(value.toUInt16(), expected);
1919 QCOMPARE(value.toUInt16(), expected);
1920 }
1921
1922 DEFINE_TEST_FUNCTION(toUInt16)