tests/auto/qscriptvalue/tst_qscriptvalue.cpp
changeset 7 f7bc934e204c
parent 0 1918ee327afb
equal deleted inserted replaced
3:41300fa6a67c 7:f7bc934e204c
     1 /****************************************************************************
     1 /****************************************************************************
     2 **
     2 **
     3 ** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
     3 ** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
     4 ** All rights reserved.
     4 ** All rights reserved.
     5 ** Contact: Nokia Corporation (qt-info@nokia.com)
     5 ** Contact: Nokia Corporation (qt-info@nokia.com)
     6 **
     6 **
     7 ** This file is part of the test suite of the Qt Toolkit.
     7 ** This file is part of the test suite of the Qt Toolkit.
     8 **
     8 **
    37 **
    37 **
    38 ** $QT_END_LICENSE$
    38 ** $QT_END_LICENSE$
    39 **
    39 **
    40 ****************************************************************************/
    40 ****************************************************************************/
    41 
    41 
    42 
    42 #include "tst_qscriptvalue.h"
    43 #include <QtTest/QtTest>
       
    44 #include <QtGui/QPushButton>
    43 #include <QtGui/QPushButton>
    45 #include <QtCore/qnumeric.h>
       
    46 
       
    47 #include <QtScript/qscriptclass.h>
       
    48 #include <QtScript/qscriptvalue.h>
       
    49 #include <QtScript/qscriptengine.h>
       
    50 
    44 
    51 //TESTED_CLASS=
    45 //TESTED_CLASS=
    52 //TESTED_FILES=
    46 //TESTED_FILES=
    53 
    47 
    54 QT_BEGIN_NAMESPACE
    48 QT_BEGIN_NAMESPACE
    55 extern bool qt_script_isJITEnabled();
    49 extern bool qt_script_isJITEnabled();
    56 QT_END_NAMESPACE
    50 QT_END_NAMESPACE
    57 
    51 
    58 class tst_QScriptValue : public QObject
       
    59 {
       
    60     Q_OBJECT
       
    61 
       
    62 public:
       
    63     tst_QScriptValue();
       
    64     virtual ~tst_QScriptValue();
       
    65 
       
    66 private slots:
       
    67     void ctor();
       
    68     void engine();
       
    69     void toString();
       
    70     void toNumber();
       
    71     void toBoolean();
       
    72     void toBool();
       
    73     void toInteger();
       
    74     void toInt32();
       
    75     void toUInt32();
       
    76     void toUInt16();
       
    77     void toVariant();
       
    78     void toQObject();
       
    79     void toObject();
       
    80     void toDateTime();
       
    81     void toRegExp();
       
    82     void instanceOf();
       
    83     void isArray();
       
    84     void isDate();
       
    85     void isError();
       
    86     void isRegExp();
       
    87     void getSetPrototype();
       
    88     void getSetScope();
       
    89     void getSetProperty();
       
    90     void arrayElementGetterSetter();
       
    91     void getSetData();
       
    92     void getSetScriptClass();
       
    93     void call();
       
    94     void construct();
       
    95     void lessThan();
       
    96     void equals();
       
    97     void strictlyEquals();
       
    98     void castToPointer();
       
    99     void prettyPrinter_data();
       
   100     void prettyPrinter();
       
   101     void engineDeleted();
       
   102     void valueOfWithClosure();
       
   103     void objectId();
       
   104 };
       
   105 
       
   106 tst_QScriptValue::tst_QScriptValue()
    52 tst_QScriptValue::tst_QScriptValue()
       
    53     : engine(0)
   107 {
    54 {
   108 }
    55 }
   109 
    56 
   110 tst_QScriptValue::~tst_QScriptValue()
    57 tst_QScriptValue::~tst_QScriptValue()
   111 {
    58 {
   112 }
    59     delete engine;
       
    60 }
       
    61 
       
    62 void tst_QScriptValue::dataHelper(InitDataFunction init, DefineDataFunction define)
       
    63 {
       
    64     QTest::addColumn<QString>("__expression__");
       
    65     (this->*init)();
       
    66     QHash<QString,QScriptValue>::const_iterator it;
       
    67     for (it = m_values.constBegin(); it != m_values.constEnd(); ++it) {
       
    68         m_currentExpression = it.key();
       
    69         (this->*define)(it.key().toLatin1());
       
    70     }
       
    71     m_currentExpression = QString();
       
    72 }
       
    73 
       
    74 QTestData &tst_QScriptValue::newRow(const char *tag)
       
    75 {
       
    76     return QTest::newRow(tag) << m_currentExpression;
       
    77 }
       
    78 
       
    79 void tst_QScriptValue::testHelper(TestFunction fun)
       
    80 {
       
    81     QFETCH(QString, __expression__);
       
    82     QScriptValue value = m_values.value(__expression__);
       
    83     (this->*fun)(__expression__.toLatin1(), value);
       
    84 }
       
    85 
       
    86 void tst_QScriptValue::assignAndCopyConstruct_initData()
       
    87 {
       
    88     QTest::addColumn<int>("dummy");
       
    89     initScriptValues();
       
    90 }
       
    91 
       
    92 void tst_QScriptValue::assignAndCopyConstruct_makeData(const char *expr)
       
    93 {
       
    94     newRow(expr) << 0;
       
    95 }
       
    96 
       
    97 void tst_QScriptValue::assignAndCopyConstruct_test(const char *, const QScriptValue &value)
       
    98 {
       
    99     QScriptValue copy(value);
       
   100     QCOMPARE(copy.strictlyEquals(value), !value.isNumber() || !qIsNaN(value.toNumber()));
       
   101     QCOMPARE(copy.engine(), value.engine());
       
   102 
       
   103     QScriptValue assigned = copy;
       
   104     QCOMPARE(assigned.strictlyEquals(value), !copy.isNumber() || !qIsNaN(copy.toNumber()));
       
   105     QCOMPARE(assigned.engine(), assigned.engine());
       
   106 
       
   107     QScriptValue other(!value.toBool());
       
   108     assigned = other;
       
   109     QVERIFY(!assigned.strictlyEquals(copy));
       
   110     QVERIFY(assigned.strictlyEquals(other));
       
   111     QCOMPARE(assigned.engine(), other.engine());
       
   112 }
       
   113 
       
   114 DEFINE_TEST_FUNCTION(assignAndCopyConstruct)
   113 
   115 
   114 void tst_QScriptValue::ctor()
   116 void tst_QScriptValue::ctor()
   115 {
   117 {
   116     QScriptEngine eng;
   118     QScriptEngine eng;
   117     {
   119     {
   328     QVERIFY(QScriptValue(0, 1.0).isNumber());
   330     QVERIFY(QScriptValue(0, 1.0).isNumber());
   329     QVERIFY(QScriptValue(0, "ciao").isString());
   331     QVERIFY(QScriptValue(0, "ciao").isString());
   330     QVERIFY(QScriptValue(0, QString("ciao")).isString());
   332     QVERIFY(QScriptValue(0, QString("ciao")).isString());
   331 }
   333 }
   332 
   334 
   333 void tst_QScriptValue::engine()
       
   334 {
       
   335     QScriptEngine eng;
       
   336     QScriptValue object = eng.newObject();
       
   337     QCOMPARE(object.engine(), &eng);
       
   338 }
       
   339 
       
   340 static QScriptValue myFunction(QScriptContext *, QScriptEngine *eng)
   335 static QScriptValue myFunction(QScriptContext *, QScriptEngine *eng)
   341 {
   336 {
   342     return eng->undefinedValue();
   337     return eng->undefinedValue();
   343 }
   338 }
   344 
   339 
   345 void tst_QScriptValue::toString()
   340 void tst_QScriptValue::toString_old()
   346 {
   341 {
   347     QScriptEngine eng;
   342     QScriptEngine eng;
   348 
   343 
   349     QScriptValue undefined = eng.undefinedValue();
   344     QScriptValue undefined = eng.undefinedValue();
   350     QCOMPARE(undefined.toString(), QString("undefined"));
   345     QCOMPARE(undefined.toString(), QString("undefined"));
   454     QCOMPARE(variant.toString(), QString::fromLatin1("QVariant(QPoint)"));
   449     QCOMPARE(variant.toString(), QString::fromLatin1("QVariant(QPoint)"));
   455     variant = eng.newVariant(QUrl());
   450     variant = eng.newVariant(QUrl());
   456     QVERIFY(variant.toString().isEmpty());
   451     QVERIFY(variant.toString().isEmpty());
   457 }
   452 }
   458 
   453 
   459 void tst_QScriptValue::toNumber()
   454 void tst_QScriptValue::toNumber_old()
   460 {
   455 {
   461     QScriptEngine eng;
   456     QScriptEngine eng;
   462 
   457 
   463     QScriptValue undefined = eng.undefinedValue();
   458     QScriptValue undefined = eng.undefinedValue();
   464     QCOMPARE(qIsNaN(undefined.toNumber()), true);
   459     QCOMPARE(qIsNaN(undefined.toNumber()), true);
   527         QCOMPARE(str2.toNumber(), 123.0);
   522         QCOMPARE(str2.toNumber(), 123.0);
   528         QCOMPARE(qscriptvalue_cast<qsreal>(str2), 123.0);
   523         QCOMPARE(qscriptvalue_cast<qsreal>(str2), 123.0);
   529     }
   524     }
   530 }
   525 }
   531 
   526 
   532 void tst_QScriptValue::toBoolean() // deprecated
   527 void tst_QScriptValue::toBoolean_old() // deprecated
   533 {
   528 {
   534     QScriptEngine eng;
   529     QScriptEngine eng;
   535 
   530 
   536     QScriptValue undefined = eng.undefinedValue();
   531     QScriptValue undefined = eng.undefinedValue();
   537     QCOMPARE(undefined.toBoolean(), false);
   532     QCOMPARE(undefined.toBoolean(), false);
   624         QCOMPARE(str2.toBoolean(), true);
   619         QCOMPARE(str2.toBoolean(), true);
   625         QCOMPARE(qscriptvalue_cast<bool>(str2), true);
   620         QCOMPARE(qscriptvalue_cast<bool>(str2), true);
   626     }
   621     }
   627 }
   622 }
   628 
   623 
   629 void tst_QScriptValue::toBool()
   624 void tst_QScriptValue::toBool_old()
   630 {
   625 {
   631     QScriptEngine eng;
   626     QScriptEngine eng;
   632 
   627 
   633     QScriptValue undefined = eng.undefinedValue();
   628     QScriptValue undefined = eng.undefinedValue();
   634     QCOMPARE(undefined.toBool(), false);
   629     QCOMPARE(undefined.toBool(), false);
   721         QCOMPARE(str2.toBool(), true);
   716         QCOMPARE(str2.toBool(), true);
   722         QCOMPARE(qscriptvalue_cast<bool>(str2), true);
   717         QCOMPARE(qscriptvalue_cast<bool>(str2), true);
   723     }
   718     }
   724 }
   719 }
   725 
   720 
   726 void tst_QScriptValue::toInteger()
   721 void tst_QScriptValue::toInteger_old()
   727 {
   722 {
   728     QScriptEngine eng;
   723     QScriptEngine eng;
   729 
   724 
   730     {
   725     {
   731         QScriptValue number = QScriptValue(&eng, 123.0);
   726         QScriptValue number = QScriptValue(&eng, 123.0);
   808 
   803 
   809     QScriptValue inv;
   804     QScriptValue inv;
   810     QCOMPARE(inv.toInteger(), 0.0);
   805     QCOMPARE(inv.toInteger(), 0.0);
   811 }
   806 }
   812 
   807 
   813 void tst_QScriptValue::toInt32()
   808 void tst_QScriptValue::toInt32_old()
   814 {
   809 {
   815     QScriptEngine eng;
   810     QScriptEngine eng;
   816 
   811 
   817     {
   812     {
   818         QScriptValue zer0 = QScriptValue(&eng, 0.0);
   813         QScriptValue zer0 = QScriptValue(&eng, 0.0);
   944     QScriptValue inv;
   939     QScriptValue inv;
   945     QCOMPARE(inv.toInt32(), 0);
   940     QCOMPARE(inv.toInt32(), 0);
   946     QCOMPARE(qscriptvalue_cast<qint32>(inv), 0);
   941     QCOMPARE(qscriptvalue_cast<qint32>(inv), 0);
   947 }
   942 }
   948 
   943 
   949 void tst_QScriptValue::toUInt32()
   944 void tst_QScriptValue::toUInt32_old()
   950 {
   945 {
   951     QScriptEngine eng;
   946     QScriptEngine eng;
   952 
   947 
   953     {
   948     {
   954         QScriptValue zer0 = QScriptValue(&eng, 0.0);
   949         QScriptValue zer0 = QScriptValue(&eng, 0.0);
  1076     QScriptValue inv;
  1071     QScriptValue inv;
  1077     QCOMPARE(inv.toUInt32(), quint32(0));
  1072     QCOMPARE(inv.toUInt32(), quint32(0));
  1078     QCOMPARE(qscriptvalue_cast<quint32>(inv), quint32(0));
  1073     QCOMPARE(qscriptvalue_cast<quint32>(inv), quint32(0));
  1079 }
  1074 }
  1080 
  1075 
  1081 void tst_QScriptValue::toUInt16()
  1076 void tst_QScriptValue::toUInt16_old()
  1082 {
  1077 {
  1083     QScriptEngine eng;
  1078     QScriptEngine eng;
  1084 
  1079 
  1085     {
  1080     {
  1086         QScriptValue zer0 = QScriptValue(&eng, 0.0);
  1081         QScriptValue zer0 = QScriptValue(&eng, 0.0);
  1237 
  1232 
  1238 #if defined Q_CC_MSVC && _MSC_VER < 1300
  1233 #if defined Q_CC_MSVC && _MSC_VER < 1300
  1239 Q_DECLARE_METATYPE(QVariant)
  1234 Q_DECLARE_METATYPE(QVariant)
  1240 #endif
  1235 #endif
  1241 
  1236 
  1242 void tst_QScriptValue::toVariant()
  1237 void tst_QScriptValue::toVariant_old()
  1243 {
  1238 {
  1244     QScriptEngine eng;
  1239     QScriptEngine eng;
  1245 
  1240 
  1246     QScriptValue undefined = eng.undefinedValue();
  1241     QScriptValue undefined = eng.undefinedValue();
  1247     QCOMPARE(undefined.toVariant(), QVariant());
  1242     QCOMPARE(undefined.toVariant(), QVariant());
  1344 }
  1339 }
  1345 
  1340 
  1346 // unfortunately, this is necessary in order to do qscriptvalue_cast<QPushButton*>(...)
  1341 // unfortunately, this is necessary in order to do qscriptvalue_cast<QPushButton*>(...)
  1347 Q_DECLARE_METATYPE(QPushButton*)
  1342 Q_DECLARE_METATYPE(QPushButton*)
  1348 
  1343 
  1349 void tst_QScriptValue::toQObject()
  1344 void tst_QScriptValue::toQObject_old()
  1350 {
  1345 {
  1351     QScriptEngine eng;
  1346     QScriptEngine eng;
  1352 
  1347 
  1353     QScriptValue undefined = eng.undefinedValue();
  1348     QScriptValue undefined = eng.undefinedValue();
  1354     QCOMPARE(undefined.toQObject(), (QObject *)0);
  1349     QCOMPARE(undefined.toQObject(), (QObject *)0);
  1539             QCOMPARE(tmp.toString(), QString::fromLatin1("ciao"));
  1534             QCOMPARE(tmp.toString(), QString::fromLatin1("ciao"));
  1540         }
  1535         }
  1541     }
  1536     }
  1542 }
  1537 }
  1543 
  1538 
  1544 void tst_QScriptValue::toDateTime()
  1539 void tst_QScriptValue::toDateTime_old()
  1545 {
  1540 {
  1546     QScriptEngine eng;
  1541     QScriptEngine eng;
  1547     QDateTime dt = eng.evaluate("new Date(0)").toDateTime();
  1542     QDateTime dt = eng.evaluate("new Date(0)").toDateTime();
  1548     QVERIFY(dt.isValid());
  1543     QVERIFY(dt.isValid());
  1549     QCOMPARE(dt.timeSpec(), Qt::LocalTime);
  1544     QCOMPARE(dt.timeSpec(), Qt::LocalTime);
  1557     QVERIFY(!QScriptValue(false).toDateTime().isValid());
  1552     QVERIFY(!QScriptValue(false).toDateTime().isValid());
  1558     QVERIFY(!eng.nullValue().toDateTime().isValid());
  1553     QVERIFY(!eng.nullValue().toDateTime().isValid());
  1559     QVERIFY(!eng.undefinedValue().toDateTime().isValid());
  1554     QVERIFY(!eng.undefinedValue().toDateTime().isValid());
  1560 }
  1555 }
  1561 
  1556 
  1562 void tst_QScriptValue::toRegExp()
  1557 void tst_QScriptValue::toRegExp_old()
  1563 {
  1558 {
  1564     QScriptEngine eng;
  1559     QScriptEngine eng;
  1565     {
  1560     {
  1566         QRegExp rx = eng.evaluate("/foo/").toRegExp();
  1561         QRegExp rx = eng.evaluate("/foo/").toRegExp();
  1567         QVERIFY(rx.isValid());
  1562         QVERIFY(rx.isValid());
  1587     QVERIFY(QScriptValue(false).toRegExp().isEmpty());
  1582     QVERIFY(QScriptValue(false).toRegExp().isEmpty());
  1588     QVERIFY(eng.nullValue().toRegExp().isEmpty());
  1583     QVERIFY(eng.nullValue().toRegExp().isEmpty());
  1589     QVERIFY(eng.undefinedValue().toRegExp().isEmpty());
  1584     QVERIFY(eng.undefinedValue().toRegExp().isEmpty());
  1590 }
  1585 }
  1591 
  1586 
  1592 void tst_QScriptValue::instanceOf()
  1587 void tst_QScriptValue::instanceOf_old()
  1593 {
  1588 {
  1594     QScriptEngine eng;
  1589     QScriptEngine eng;
  1595     QScriptValue obj = eng.newObject();
  1590     QScriptValue obj = eng.newObject();
  1596     QCOMPARE(obj.instanceOf(eng.evaluate("Object.prototype")), false);
  1591     QCOMPARE(obj.instanceOf(eng.evaluate("Object.prototype")), false);
  1597     QCOMPARE(obj.instanceOf(eng.evaluate("Array.prototype")), false);
  1592     QCOMPARE(obj.instanceOf(eng.evaluate("Array.prototype")), false);
  1623     QScriptEngine otherEngine;
  1618     QScriptEngine otherEngine;
  1624     QTest::ignoreMessage(QtWarningMsg, "QScriptValue::instanceof: cannot perform operation on a value created in a different engine");
  1619     QTest::ignoreMessage(QtWarningMsg, "QScriptValue::instanceof: cannot perform operation on a value created in a different engine");
  1625     QCOMPARE(obj.instanceOf(otherEngine.globalObject().property("Object")), false);
  1620     QCOMPARE(obj.instanceOf(otherEngine.globalObject().property("Object")), false);
  1626 }
  1621 }
  1627 
  1622 
  1628 void tst_QScriptValue::isArray()
  1623 void tst_QScriptValue::isArray_old()
  1629 {
  1624 {
  1630     QScriptEngine eng;
  1625     QScriptEngine eng;
  1631     QVERIFY(eng.evaluate("[]").isArray());
  1626     QVERIFY(eng.evaluate("[]").isArray());
  1632     QVERIFY(!eng.evaluate("{}").isArray());
  1627     QVERIFY(!eng.evaluate("{}").isArray());
  1633     QVERIFY(!eng.globalObject().isArray());
  1628     QVERIFY(!eng.globalObject().isArray());
  1636     QVERIFY(!QScriptValue(false).isArray());
  1631     QVERIFY(!QScriptValue(false).isArray());
  1637     QVERIFY(!eng.nullValue().isArray());
  1632     QVERIFY(!eng.nullValue().isArray());
  1638     QVERIFY(!eng.undefinedValue().isArray());
  1633     QVERIFY(!eng.undefinedValue().isArray());
  1639 }
  1634 }
  1640 
  1635 
  1641 void tst_QScriptValue::isDate()
  1636 void tst_QScriptValue::isDate_old()
  1642 {
  1637 {
  1643     QScriptEngine eng;
  1638     QScriptEngine eng;
  1644     QVERIFY(eng.evaluate("new Date()").isDate());
  1639     QVERIFY(eng.evaluate("new Date()").isDate());
  1645     QVERIFY(!eng.evaluate("[]").isDate());
  1640     QVERIFY(!eng.evaluate("[]").isDate());
  1646     QVERIFY(!eng.evaluate("{}").isDate());
  1641     QVERIFY(!eng.evaluate("{}").isDate());
  1650     QVERIFY(!QScriptValue(false).isDate());
  1645     QVERIFY(!QScriptValue(false).isDate());
  1651     QVERIFY(!eng.nullValue().isDate());
  1646     QVERIFY(!eng.nullValue().isDate());
  1652     QVERIFY(!eng.undefinedValue().isDate());
  1647     QVERIFY(!eng.undefinedValue().isDate());
  1653 }
  1648 }
  1654 
  1649 
  1655 void tst_QScriptValue::isError()
  1650 void tst_QScriptValue::isError_old()
  1656 {
  1651 {
  1657     QStringList errors;
  1652     QStringList errors;
  1658     errors << "Error"
  1653     errors << "Error"
  1659            << "EvalError"
  1654            << "EvalError"
  1660            << "RangeError"
  1655            << "RangeError"
  1675     QVERIFY(!eng.nullValue().isError());
  1670     QVERIFY(!eng.nullValue().isError());
  1676     QVERIFY(!eng.undefinedValue().isError());
  1671     QVERIFY(!eng.undefinedValue().isError());
  1677     QVERIFY(!eng.evaluate("new Object()").isError());
  1672     QVERIFY(!eng.evaluate("new Object()").isError());
  1678 }
  1673 }
  1679 
  1674 
  1680 void tst_QScriptValue::isRegExp()
  1675 void tst_QScriptValue::isRegExp_old()
  1681 {
  1676 {
  1682     QScriptEngine eng;
  1677     QScriptEngine eng;
  1683     QVERIFY(eng.evaluate("/foo/").isRegExp());
  1678     QVERIFY(eng.evaluate("/foo/").isRegExp());
  1684     QVERIFY(!eng.evaluate("[]").isRegExp());
  1679     QVERIFY(!eng.evaluate("[]").isRegExp());
  1685     QVERIFY(!eng.evaluate("{}").isRegExp());
  1680     QVERIFY(!eng.evaluate("{}").isRegExp());
  2574         QCOMPARE(ret4.property("length").isNumber(), true);
  2569         QCOMPARE(ret4.property("length").isNumber(), true);
  2575         QCOMPARE(ret4.property("length").toNumber(), 0.0);
  2570         QCOMPARE(ret4.property("length").toNumber(), 0.0);
  2576         // call with something else as arguments
  2571         // call with something else as arguments
  2577         QScriptValue ret5 = fun.call(QScriptValue(), QScriptValue(&eng, 123.0));
  2572         QScriptValue ret5 = fun.call(QScriptValue(), QScriptValue(&eng, 123.0));
  2578         QCOMPARE(ret5.isError(), true);
  2573         QCOMPARE(ret5.isError(), true);
       
  2574         // call with a non-array object as arguments
       
  2575         QScriptValue ret6 = fun.call(QScriptValue(), eng.globalObject());
       
  2576         QVERIFY(ret6.isError());
       
  2577         QCOMPARE(ret6.toString(), QString::fromLatin1("TypeError: Arguments must be an array"));
  2579     }
  2578     }
  2580 
  2579 
  2581     // calling things that are not functions
  2580     // calling things that are not functions
  2582     QVERIFY(!QScriptValue(false).call().isValid());
  2581     QVERIFY(!QScriptValue(false).call().isValid());
  2583     QVERIFY(!QScriptValue(123).call().isValid());
  2582     QVERIFY(!QScriptValue(123).call().isValid());
  2706         QCOMPARE(ret4.property("length").isNumber(), true);
  2705         QCOMPARE(ret4.property("length").isNumber(), true);
  2707         QCOMPARE(ret4.property("length").toNumber(), 0.0);
  2706         QCOMPARE(ret4.property("length").toNumber(), 0.0);
  2708         // construct with something else as arguments
  2707         // construct with something else as arguments
  2709         QScriptValue ret5 = fun.construct(QScriptValue(&eng, 123.0));
  2708         QScriptValue ret5 = fun.construct(QScriptValue(&eng, 123.0));
  2710         QCOMPARE(ret5.isError(), true);
  2709         QCOMPARE(ret5.isError(), true);
       
  2710         // construct with a non-array object as arguments
       
  2711         QScriptValue ret6 = fun.construct(eng.globalObject());
       
  2712         QVERIFY(ret6.isError());
       
  2713         QCOMPARE(ret6.toString(), QString::fromLatin1("TypeError: Arguments must be an array"));
  2711     }
  2714     }
  2712 
  2715 
  2713     // construct on things that are not functions
  2716     // construct on things that are not functions
  2714     QVERIFY(!QScriptValue(false).construct().isValid());
  2717     QVERIFY(!QScriptValue(false).construct().isValid());
  2715     QVERIFY(!QScriptValue(123).construct().isValid());
  2718     QVERIFY(!QScriptValue(123).construct().isValid());
  2716     QVERIFY(!QScriptValue(QString::fromLatin1("ciao")).construct().isValid());
  2719     QVERIFY(!QScriptValue(QString::fromLatin1("ciao")).construct().isValid());
  2717     QVERIFY(!QScriptValue(QScriptValue::UndefinedValue).construct().isValid());
  2720     QVERIFY(!QScriptValue(QScriptValue::UndefinedValue).construct().isValid());
  2718     QVERIFY(!QScriptValue(QScriptValue::NullValue).construct().isValid());
  2721     QVERIFY(!QScriptValue(QScriptValue::NullValue).construct().isValid());
  2719 }
  2722 }
  2720 
  2723 
  2721 void tst_QScriptValue::lessThan()
  2724 void tst_QScriptValue::lessThan_old()
  2722 {
  2725 {
  2723     QScriptEngine eng;
  2726     QScriptEngine eng;
  2724 
  2727 
  2725     QVERIFY(!QScriptValue().lessThan(QScriptValue()));
  2728     QVERIFY(!QScriptValue().lessThan(QScriptValue()));
  2726 
  2729 
  2810                          "cannot compare to a value created in "
  2813                          "cannot compare to a value created in "
  2811                          "a different engine");
  2814                          "a different engine");
  2812     QCOMPARE(date1.lessThan(QScriptValue(&otherEngine, 123)), false);
  2815     QCOMPARE(date1.lessThan(QScriptValue(&otherEngine, 123)), false);
  2813 }
  2816 }
  2814 
  2817 
  2815 void tst_QScriptValue::equals()
  2818 void tst_QScriptValue::equals_old()
  2816 {
  2819 {
  2817     QScriptEngine eng;
  2820     QScriptEngine eng;
  2818 
  2821 
  2819     QVERIFY(QScriptValue().equals(QScriptValue()));
  2822     QVERIFY(QScriptValue().equals(QScriptValue()));
  2820 
  2823 
  2905     QCOMPARE(obj2.equals(obj2), true);
  2908     QCOMPARE(obj2.equals(obj2), true);
  2906 
  2909 
  2907     QScriptValue qobj1 = eng.newQObject(this);
  2910     QScriptValue qobj1 = eng.newQObject(this);
  2908     QScriptValue qobj2 = eng.newQObject(this);
  2911     QScriptValue qobj2 = eng.newQObject(this);
  2909     QScriptValue qobj3 = eng.newQObject(0);
  2912     QScriptValue qobj3 = eng.newQObject(0);
  2910     QScriptValue qobj4 = eng.newQObject(new QObject());
  2913     QScriptValue qobj4 = eng.newQObject(new QObject(), QScriptEngine::ScriptOwnership);
  2911     QVERIFY(qobj1.equals(qobj2)); // compares the QObject pointers
  2914     QVERIFY(qobj1.equals(qobj2)); // compares the QObject pointers
  2912     QVERIFY(!qobj2.equals(qobj4)); // compares the QObject pointers
  2915     QVERIFY(!qobj2.equals(qobj4)); // compares the QObject pointers
  2913     QVERIFY(!qobj2.equals(obj2)); // compares the QObject pointers
  2916     QVERIFY(!qobj2.equals(obj2)); // compares the QObject pointers
  2914 
  2917 
  2915     QScriptValue compareFun = eng.evaluate("(function(a, b) { return a == b; })");
  2918     QScriptValue compareFun = eng.evaluate("(function(a, b) { return a == b; })");
  3003                          "cannot compare to a value created in "
  3006                          "cannot compare to a value created in "
  3004                          "a different engine");
  3007                          "a different engine");
  3005     QCOMPARE(date1.equals(QScriptValue(&otherEngine, 123)), false);
  3008     QCOMPARE(date1.equals(QScriptValue(&otherEngine, 123)), false);
  3006 }
  3009 }
  3007 
  3010 
  3008 void tst_QScriptValue::strictlyEquals()
  3011 void tst_QScriptValue::strictlyEquals_old()
  3009 {
  3012 {
  3010     QScriptEngine eng;
  3013     QScriptEngine eng;
  3011 
  3014 
  3012     QVERIFY(QScriptValue().strictlyEquals(QScriptValue()));
  3015     QVERIFY(QScriptValue().strictlyEquals(QScriptValue()));
  3013 
  3016 
  3088     QVERIFY(!falskt.toObject().strictlyEquals(falskt));
  3091     QVERIFY(!falskt.toObject().strictlyEquals(falskt));
  3089     QVERIFY(!falskt.strictlyEquals(sant));
  3092     QVERIFY(!falskt.strictlyEquals(sant));
  3090     QVERIFY(!falskt.strictlyEquals(undefined));
  3093     QVERIFY(!falskt.strictlyEquals(undefined));
  3091     QVERIFY(!falskt.strictlyEquals(null));
  3094     QVERIFY(!falskt.strictlyEquals(null));
  3092     QVERIFY(!falskt.strictlyEquals(QScriptValue()));
  3095     QVERIFY(!falskt.strictlyEquals(QScriptValue()));
       
  3096 
       
  3097     QVERIFY(!QScriptValue(false).strictlyEquals(123));
       
  3098     QVERIFY(!QScriptValue(QScriptValue::UndefinedValue).strictlyEquals(123));
       
  3099     QVERIFY(!QScriptValue(QScriptValue::NullValue).strictlyEquals(123));
       
  3100     QVERIFY(!QScriptValue(false).strictlyEquals("ciao"));
       
  3101     QVERIFY(!QScriptValue(QScriptValue::UndefinedValue).strictlyEquals("ciao"));
       
  3102     QVERIFY(!QScriptValue(QScriptValue::NullValue).strictlyEquals("ciao"));
       
  3103     QVERIFY(QScriptValue(&eng, "ciao").strictlyEquals("ciao"));
       
  3104     QVERIFY(QScriptValue("ciao").strictlyEquals(QScriptValue(&eng, "ciao")));
       
  3105     QVERIFY(!QScriptValue("ciao").strictlyEquals(123));
       
  3106     QVERIFY(!QScriptValue("ciao").strictlyEquals(QScriptValue(&eng, 123)));
       
  3107     QVERIFY(!QScriptValue(123).strictlyEquals("ciao"));
       
  3108     QVERIFY(!QScriptValue(123).strictlyEquals(QScriptValue(&eng, "ciao")));
       
  3109     QVERIFY(!QScriptValue(&eng, 123).strictlyEquals("ciao"));
  3093 
  3110 
  3094     QScriptValue obj1 = eng.newObject();
  3111     QScriptValue obj1 = eng.newObject();
  3095     QScriptValue obj2 = eng.newObject();
  3112     QScriptValue obj2 = eng.newObject();
  3096     QCOMPARE(obj1.strictlyEquals(obj2), false);
  3113     QCOMPARE(obj1.strictlyEquals(obj2), false);
  3097     QCOMPARE(obj2.strictlyEquals(obj1), false);
  3114     QCOMPARE(obj2.strictlyEquals(obj1), false);
  3440     QVERIFY(obj.isObject());
  3457     QVERIFY(obj.isObject());
  3441     QVERIFY(obj.strictlyEquals(eng.globalObject()));
  3458     QVERIFY(obj.strictlyEquals(eng.globalObject()));
  3442 }
  3459 }
  3443 
  3460 
  3444 QTEST_MAIN(tst_QScriptValue)
  3461 QTEST_MAIN(tst_QScriptValue)
  3445 #include "tst_qscriptvalue.moc"