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