Home | History | Annotate | Download | only in qscriptvalue
      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 }
    134 
    135 
    136 void tst_QScriptValue::isValid_initData()
    137 {
    138     QTest::addColumn<bool>("expected");
    139     initScriptValues();
    140 }
    141 
    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 
    252 void tst_QScriptValue::isValid_test(const char*, const QScriptValue& value)
    253 {
    254     QFETCH(bool, expected);
    255     QCOMPARE(value.isValid(), expected);
    256 }
    257 
    258 DEFINE_TEST_FUNCTION(isValid)
    259 
    260 
    261 void tst_QScriptValue::isBool_initData()
    262 {
    263     QTest::addColumn<bool>("expected");
    264     initScriptValues();
    265 }
    266 
    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 
    281 void tst_QScriptValue::isBool_test(const char*, const QScriptValue& value)
    282 {
    283     QFETCH(bool, expected);
    284     QCOMPARE(value.isBool(), expected);
    285 }
    286 
    287 DEFINE_TEST_FUNCTION(isBool)
    288 
    289 
    290 void tst_QScriptValue::isBoolean_initData()
    291 {
    292     QTest::addColumn<bool>("expected");
    293     initScriptValues();
    294 }
    295 
    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 
    310 void tst_QScriptValue::isBoolean_test(const char*, const QScriptValue& value)
    311 {
    312     QFETCH(bool, expected);
    313     QCOMPARE(value.isBoolean(), expected);
    314 }
    315 
    316 DEFINE_TEST_FUNCTION(isBoolean)
    317 
    318 void tst_QScriptValue::isNumber_initData()
    319 {
    320     QTest::addColumn<bool>("expected");
    321     initScriptValues();
    322 }
    323 
    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 
    374 void tst_QScriptValue::isNumber_test(const char*, const QScriptValue& value)
    375 {
    376     QFETCH(bool, expected);
    377     QCOMPARE(value.isNumber(), expected);
    378 }
    379 
    380 DEFINE_TEST_FUNCTION(isNumber)
    381 
    382 
    383 void tst_QScriptValue::isFunction_initData()
    384 {
    385     QTest::addColumn<bool>("expected");
    386     initScriptValues();
    387 }
    388 
    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 
    406 void tst_QScriptValue::isFunction_test(const char*, const QScriptValue& value)
    407 {
    408     QFETCH(bool, expected);
    409     QCOMPARE(value.isFunction(), expected);
    410 }
    411 
    412 DEFINE_TEST_FUNCTION(isFunction)
    413 
    414 
    415 void tst_QScriptValue::isNull_initData()
    416 {
    417     QTest::addColumn<bool>("expected");
    418     initScriptValues();
    419 }
    420 
    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 
    432 void tst_QScriptValue::isNull_test(const char*, const QScriptValue& value)
    433 {
    434     QFETCH(bool, expected);
    435     QCOMPARE(value.isNull(), expected);
    436 }
    437 
    438 DEFINE_TEST_FUNCTION(isNull)
    439 
    440 
    441 void tst_QScriptValue::isString_initData()
    442 {
    443     QTest::addColumn<bool>("expected");
    444     initScriptValues();
    445 }
    446 
    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 
    485 void tst_QScriptValue::isString_test(const char*, const QScriptValue& value)
    486 {
    487     QFETCH(bool, expected);
    488     QCOMPARE(value.isString(), expected);
    489 }
    490 
    491 DEFINE_TEST_FUNCTION(isString)
    492 
    493 
    494 void tst_QScriptValue::isUndefined_initData()
    495 {
    496     QTest::addColumn<bool>("expected");
    497     initScriptValues();
    498 }
    499 
    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 
    512 void tst_QScriptValue::isUndefined_test(const char*, const QScriptValue& value)
    513 {
    514     QFETCH(bool, expected);
    515     QCOMPARE(value.isUndefined(), expected);
    516 }
    517 
    518 DEFINE_TEST_FUNCTION(isUndefined)
    519 
    520 void tst_QScriptValue::isObject_initData()
    521 {
    522     QTest::addColumn<bool>("expected");
    523     initScriptValues();
    524 }
    525 
    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 
    551 void tst_QScriptValue::isObject_test(const char*, const QScriptValue& value)
    552 {
    553     QFETCH(bool, expected);
    554     QCOMPARE(value.isObject(), expected);
    555 }
    556 
    557 DEFINE_TEST_FUNCTION(isObject)
    558 
    559 void tst_QScriptValue::toNumber_initData()
    560 {
    561     QTest::addColumn<qsreal>("expected");
    562     initScriptValues();
    563 }
    564 
    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 
    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 
    690 DEFINE_TEST_FUNCTION(toNumber)
    691 
    692 
    693 void tst_QScriptValue::toBool_initData()
    694 {
    695     QTest::addColumn<bool>("expected");
    696     initScriptValues();
    697 }
    698 
    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 
    810 void tst_QScriptValue::toBool_test(const char*, const QScriptValue& value)
    811 {
    812     QFETCH(bool, expected);
    813     QCOMPARE(value.toBool(), expected);
    814 }
    815 
    816 DEFINE_TEST_FUNCTION(toBool)
    817 
    818 
    819 void tst_QScriptValue::toBoolean_initData()
    820 {
    821     QTest::addColumn<bool>("expected");
    822     initScriptValues();
    823 }
    824 
    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 
    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