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 "qscriptengine.h" 21#include "qscriptstring.h" 22#include "qscriptvalue.h" 23#include <qtest.h> 24 25Q_DECLARE_METATYPE(QScriptValue); 26 27class tst_QScriptValue : public QObject { 28 Q_OBJECT 29 30public: 31 tst_QScriptValue() 32 : m_engine(0) 33 {} 34 35 ~tst_QScriptValue() 36 { 37 if (m_engine) 38 delete m_engine; 39 } 40 41private slots: 42 void values_data(); 43 44 void ctorBool(); 45 void ctorReal(); 46 void ctorNumber(); 47 void ctorQString(); 48 void ctorCString(); 49 void ctorSpecial(); 50 void ctorQScriptValue(); 51 52 void isValid_data(); 53 void isValid(); 54 void isBool_data(); 55 void isBool(); 56 void isNumber_data(); 57 void isNumber(); 58 void isFunction_data(); 59 void isFunction(); 60 void isNull_data(); 61 void isNull(); 62 void isString_data(); 63 void isString(); 64 void isUndefined_data(); 65 void isUndefined(); 66 void isObject_data(); 67 void isObject(); 68 void isError_data(); 69 void isError(); 70 71 void toString_data(); 72 void toString(); 73 void toNumber_data(); 74 void toNumber(); 75 void toBool_data(); 76 void toBool(); 77 void toInteger_data(); 78 void toInteger(); 79 void toInt32_data(); 80 void toInt32(); 81 void toUInt32_data(); 82 void toUInt32(); 83 void toUInt16_data(); 84 void toUInt16(); 85 void toObject_data(); 86 void toObject(); 87 88 void equals_data(); 89 void equals(); 90 void strictlyEquals_data(); 91 void strictlyEquals(); 92 void instanceOf_data(); 93 void instanceOf(); 94 95private: 96 QScriptEngine* m_engine; 97}; 98 99void tst_QScriptValue::values_data() 100{ 101 if (m_engine) 102 delete m_engine; 103 m_engine = new QScriptEngine; 104 105 QTest::addColumn<QScriptValue>("value"); 106 107 QTest::newRow("invalid") << QScriptValue(); 108 109 QTest::newRow("cbool") << QScriptValue(true); 110 QTest::newRow("cnumber") << QScriptValue(1234); 111 QTest::newRow("cstring") << QScriptValue("abc"); 112 QTest::newRow("cnull") << QScriptValue(QScriptValue::NullValue); 113 QTest::newRow("cundefined") << QScriptValue(QScriptValue::UndefinedValue); 114 115 QTest::newRow("jsbool") << m_engine->evaluate("true"); 116 QTest::newRow("jsnumber") << m_engine->evaluate("12345"); 117 QTest::newRow("jsstring") << m_engine->evaluate("'go'"); 118 QTest::newRow("jsfunction") << m_engine->evaluate("(function {})"); 119 QTest::newRow("jsnull") << m_engine->nullValue(); 120 QTest::newRow("jsundefined") << m_engine->undefinedValue(); 121 QTest::newRow("jsobject") << m_engine->newObject(); 122 QTest::newRow("jserror") << m_engine->evaluate("new Error()"); 123} 124 125void tst_QScriptValue::ctorBool() 126{ 127 QBENCHMARK { 128 QScriptValue(true); 129 } 130} 131 132void tst_QScriptValue::ctorReal() 133{ 134 QBENCHMARK { 135 QScriptValue(12.3); 136 } 137} 138 139void tst_QScriptValue::ctorNumber() 140{ 141 QBENCHMARK { 142 QScriptValue(123); 143 } 144} 145 146void tst_QScriptValue::ctorQString() 147{ 148 QString str = QString::fromLatin1("ciao"); 149 QBENCHMARK { 150 QScriptValue(str); 151 } 152} 153 154void tst_QScriptValue::ctorCString() 155{ 156 QBENCHMARK { 157 QScriptValue("Pong!"); 158 } 159} 160 161void tst_QScriptValue::ctorSpecial() 162{ 163 QBENCHMARK { 164 (void)QScriptValue(QScriptValue::NullValue); 165 } 166} 167 168void tst_QScriptValue::ctorQScriptValue() 169{ 170 QScriptValue tmp(1234); 171 QBENCHMARK { 172 QScriptValue(tmp); 173 } 174} 175 176void tst_QScriptValue::isValid_data() 177{ 178 values_data(); 179} 180 181void tst_QScriptValue::isValid() 182{ 183 QFETCH(QScriptValue, value); 184 QBENCHMARK { 185 value.isValid(); 186 } 187} 188 189void tst_QScriptValue::isBool_data() 190{ 191 values_data(); 192} 193 194void tst_QScriptValue::isBool() 195{ 196 QFETCH(QScriptValue, value); 197 QBENCHMARK { 198 value.isBool(); 199 } 200} 201 202void tst_QScriptValue::isNumber_data() 203{ 204 values_data(); 205} 206 207void tst_QScriptValue::isNumber() 208{ 209 QFETCH(QScriptValue, value); 210 QBENCHMARK { 211 value.isNumber(); 212 } 213} 214 215void tst_QScriptValue::isFunction_data() 216{ 217 values_data(); 218} 219 220void tst_QScriptValue::isFunction() 221{ 222 QFETCH(QScriptValue, value); 223 QBENCHMARK { 224 value.isFunction(); 225 } 226} 227 228void tst_QScriptValue::isNull_data() 229{ 230 values_data(); 231} 232 233void tst_QScriptValue::isNull() 234{ 235 QFETCH(QScriptValue, value); 236 QBENCHMARK { 237 value.isNull(); 238 } 239} 240 241void tst_QScriptValue::isString_data() 242{ 243 values_data(); 244} 245 246void tst_QScriptValue::isString() 247{ 248 QFETCH(QScriptValue, value); 249 QBENCHMARK { 250 value.isString(); 251 } 252} 253 254void tst_QScriptValue::isUndefined_data() 255{ 256 values_data(); 257} 258 259void tst_QScriptValue::isUndefined() 260{ 261 QFETCH(QScriptValue, value); 262 QBENCHMARK { 263 value.isUndefined(); 264 } 265} 266 267void tst_QScriptValue::isObject_data() 268{ 269 values_data(); 270} 271 272void tst_QScriptValue::isObject() 273{ 274 QFETCH(QScriptValue, value); 275 QBENCHMARK { 276 value.isObject(); 277 } 278} 279 280void tst_QScriptValue::isError_data() 281{ 282 values_data(); 283} 284 285void tst_QScriptValue::isError() 286{ 287 QFETCH(QScriptValue, value); 288 QBENCHMARK { 289 value.isError(); 290 } 291} 292 293void tst_QScriptValue::toString_data() 294{ 295 values_data(); 296} 297 298void tst_QScriptValue::toString() 299{ 300 QFETCH(QScriptValue, value); 301 QBENCHMARK { 302 value.toString(); 303 } 304} 305 306void tst_QScriptValue::toNumber_data() 307{ 308 values_data(); 309} 310 311void tst_QScriptValue::toNumber() 312{ 313 QFETCH(QScriptValue, value); 314 QBENCHMARK { 315 value.toNumber(); 316 } 317} 318 319void tst_QScriptValue::toBool_data() 320{ 321 values_data(); 322} 323 324void tst_QScriptValue::toBool() 325{ 326 QFETCH(QScriptValue, value); 327 QBENCHMARK { 328 value.toBool(); 329 } 330} 331 332void tst_QScriptValue::toInteger_data() 333{ 334 values_data(); 335} 336 337void tst_QScriptValue::toInteger() 338{ 339 QFETCH(QScriptValue, value); 340 QBENCHMARK { 341 value.toInteger(); 342 } 343} 344 345void tst_QScriptValue::toInt32_data() 346{ 347 values_data(); 348} 349 350void tst_QScriptValue::toInt32() 351{ 352 QFETCH(QScriptValue, value); 353 QBENCHMARK { 354 value.toInt32(); 355 } 356} 357 358void tst_QScriptValue::toUInt32_data() 359{ 360 values_data(); 361} 362 363void tst_QScriptValue::toUInt32() 364{ 365 QFETCH(QScriptValue, value); 366 QBENCHMARK { 367 value.toUInt32(); 368 } 369} 370 371void tst_QScriptValue::toUInt16_data() 372{ 373 values_data(); 374} 375 376void tst_QScriptValue::toUInt16() 377{ 378 QFETCH(QScriptValue, value); 379 QBENCHMARK { 380 value.toUInt16(); 381 } 382} 383 384void tst_QScriptValue::toObject_data() 385{ 386 values_data(); 387} 388 389void tst_QScriptValue::toObject() 390{ 391 QFETCH(QScriptValue, value); 392 QBENCHMARK { 393 value.toObject(); 394 } 395} 396 397void tst_QScriptValue::equals_data() 398{ 399 values_data(); 400} 401 402void tst_QScriptValue::equals() 403{ 404 QFETCH(QScriptValue, value); 405 static QScriptValue previous; 406 QBENCHMARK { 407 value.equals(previous); 408 } 409 previous = value; 410} 411 412void tst_QScriptValue::strictlyEquals_data() 413{ 414 values_data(); 415} 416 417void tst_QScriptValue::strictlyEquals() 418{ 419 QFETCH(QScriptValue, value); 420 static QScriptValue previous; 421 QBENCHMARK { 422 value.strictlyEquals(previous); 423 } 424 previous = value; 425} 426 427void tst_QScriptValue::instanceOf_data() 428{ 429 values_data(); 430} 431 432void tst_QScriptValue::instanceOf() 433{ 434 QFETCH(QScriptValue, value); 435 static QScriptValue object = m_engine->newObject(); 436 QBENCHMARK { 437 value.instanceOf(object); 438 } 439} 440 441QTEST_MAIN(tst_QScriptValue) 442#include "tst_qscriptvalue.moc" 443