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