diff options
Diffstat (limited to 'tests/auto/qml/qjsprimitivevalue/tst_qjsprimitivevalue.cpp')
-rw-r--r-- | tests/auto/qml/qjsprimitivevalue/tst_qjsprimitivevalue.cpp | 601 |
1 files changed, 601 insertions, 0 deletions
diff --git a/tests/auto/qml/qjsprimitivevalue/tst_qjsprimitivevalue.cpp b/tests/auto/qml/qjsprimitivevalue/tst_qjsprimitivevalue.cpp index 0c46fc9f6b..2677dae17e 100644 --- a/tests/auto/qml/qjsprimitivevalue/tst_qjsprimitivevalue.cpp +++ b/tests/auto/qml/qjsprimitivevalue/tst_qjsprimitivevalue.cpp @@ -20,6 +20,20 @@ private slots: void toFromVariant(); + void ctor_invalid(); + void ctor_undefinedWithEngine(); + void ctor_boolWithEngine(); + void ctor_intWithEngine(); + void ctor_stringWithEngine(); + void ctor_copyAndAssignWithEngine(); + void toString(); + void toNumber(); + void toBoolean(); + void toVariant(); + void equals(); + void strictlyEquals(); + void stringAndUrl(); + private: QJSEngine engine; @@ -328,6 +342,593 @@ void tst_QJSPrimitiveValue::toFromVariant() } } +void tst_QJSPrimitiveValue::ctor_invalid() +{ + QJSPrimitiveValue v; + QCOMPARE(v.type(), QJSPrimitiveValue::Undefined); +} + +void tst_QJSPrimitiveValue::ctor_undefinedWithEngine() +{ + QJSEngine eng; + QJSPrimitiveValue v(eng.toPrimitiveValue(QVariant())); + QCOMPARE(v.type(), QJSPrimitiveValue::Undefined); +} + +void tst_QJSPrimitiveValue::ctor_boolWithEngine() +{ + QJSEngine eng; + QJSPrimitiveValue v(eng.toPrimitiveValue(false)); + QCOMPARE(v.type(), QJSPrimitiveValue::Boolean); + QCOMPARE(v.toBoolean(), false); +} + +void tst_QJSPrimitiveValue::ctor_intWithEngine() +{ + QJSEngine eng; + QJSPrimitiveValue v(eng.toPrimitiveValue(int(1))); + QCOMPARE(v.type(), QJSPrimitiveValue::Integer); + QCOMPARE(v.toInteger(), 1); +} + +void tst_QJSPrimitiveValue::ctor_stringWithEngine() +{ + QJSEngine eng; + QJSPrimitiveValue v(eng.toPrimitiveValue(QStringLiteral("ciao"))); + QCOMPARE(v.type(), QJSPrimitiveValue::String); + QCOMPARE(v.toString(), QStringLiteral("ciao")); +} + +void tst_QJSPrimitiveValue::ctor_copyAndAssignWithEngine() +{ + QJSEngine eng; + // copy constructor, operator= + + QJSPrimitiveValue v(eng.toPrimitiveValue(1.0)); + QJSPrimitiveValue v2(v); + QCOMPARE(v2.strictlyEquals(v), true); + + QJSPrimitiveValue v3(v); + QCOMPARE(v3.strictlyEquals(v), true); + QCOMPARE(v3.strictlyEquals(v2), true); + + QJSPrimitiveValue v4(eng.toPrimitiveValue(2.0)); + QCOMPARE(v4.strictlyEquals(v), false); + v3 = QJSPrimitiveValue(v4); + QCOMPARE(v3.strictlyEquals(v), false); + QCOMPARE(v3.strictlyEquals(v4), true); + + v2 = QJSPrimitiveValue(); + QCOMPARE(v2.strictlyEquals(v), false); + QCOMPARE(v.toDouble(), 1.0); + + QJSPrimitiveValue v5(v); + QCOMPARE(v5.strictlyEquals(v), true); + v = QJSPrimitiveValue(); + QCOMPARE(v5.strictlyEquals(v), false); + QCOMPARE(v5.toDouble(), 1.0); +} + +void tst_QJSPrimitiveValue::toString() +{ + QJSEngine eng; + + { + QJSPrimitiveValue undefined(eng.toPrimitiveValue(QVariant())); + QCOMPARE(undefined.toString(), QStringLiteral("undefined")); + QCOMPARE(qjsvalue_cast<QString>(undefined), QStringLiteral("undefined")); + } + + { + QJSPrimitiveValue null((QJSPrimitiveNull())); + QCOMPARE(null.toString(), QStringLiteral("null")); + QCOMPARE(qjsvalue_cast<QString>(null), QStringLiteral("null")); + } + + { + QJSPrimitiveValue falskt(eng.toPrimitiveValue(false)); + QCOMPARE(falskt.toString(), QStringLiteral("false")); + QCOMPARE(qjsvalue_cast<QString>(falskt), QStringLiteral("false")); + + QJSPrimitiveValue sant(eng.toPrimitiveValue(true)); + QCOMPARE(sant.toString(), QStringLiteral("true")); + QCOMPARE(qjsvalue_cast<QString>(sant), QStringLiteral("true")); + } + { + QJSPrimitiveValue number(eng.toPrimitiveValue(123)); + QCOMPARE(number.toString(), QStringLiteral("123")); + QCOMPARE(qjsvalue_cast<QString>(number), QStringLiteral("123")); + } + { + QJSPrimitiveValue number(eng.toPrimitiveValue(6.37e-8)); + QCOMPARE(number.toString(), QStringLiteral("6.37e-8")); + } + { + QJSPrimitiveValue number(eng.toPrimitiveValue(-6.37e-8)); + QCOMPARE(number.toString(), QStringLiteral("-6.37e-8")); + + QJSPrimitiveValue str(eng.toPrimitiveValue(QStringLiteral("ciao"))); + QCOMPARE(str.toString(), QStringLiteral("ciao")); + QCOMPARE(qjsvalue_cast<QString>(str), QStringLiteral("ciao")); + } + + QJSPrimitiveValue inv((QJSPrimitiveUndefined())); + QCOMPARE(inv.toString(), QStringLiteral("undefined")); + + // Type cannot be represented in QJSPrimitiveValue, and is converted to string. + QJSPrimitiveValue variant(eng.toPrimitiveValue(QPoint(10, 20))); + QCOMPARE(variant.type(), QJSPrimitiveValue::String); + QCOMPARE(variant.toString(), QStringLiteral("QPoint(10, 20)")); + variant = eng.toPrimitiveValue(QUrl()); + QCOMPARE(variant.type(), QJSPrimitiveValue::String); + QVERIFY(variant.toString().isEmpty()); + + { + QByteArray hello = QByteArrayLiteral("Hello World"); + QJSPrimitiveValue jsValue(eng.toPrimitiveValue(hello)); + QCOMPARE(jsValue.toString(), QString::fromUtf8(hello)); + } +} + +void tst_QJSPrimitiveValue::toNumber() +{ + QJSEngine eng; + + QJSPrimitiveValue undefined(eng.toPrimitiveValue(QVariant())); + QCOMPARE(qIsNaN(undefined.toDouble()), true); + QCOMPARE(qIsNaN(qjsvalue_cast<qreal>(undefined)), true); + + QJSPrimitiveValue null((QJSPrimitiveNull())); + QCOMPARE(null.toDouble(), 0.0); + QCOMPARE(qjsvalue_cast<qreal>(null), 0.0); + + { + QJSPrimitiveValue falskt(eng.toPrimitiveValue(false)); + QCOMPARE(falskt.toDouble(), 0.0); + QCOMPARE(qjsvalue_cast<qreal>(falskt), 0.0); + + QJSPrimitiveValue sant(eng.toPrimitiveValue(true)); + QCOMPARE(sant.toDouble(), 1.0); + QCOMPARE(qjsvalue_cast<qreal>(sant), 1.0); + + QJSPrimitiveValue number(eng.toPrimitiveValue(123.0)); + QCOMPARE(number.toDouble(), 123.0); + QCOMPARE(qjsvalue_cast<qreal>(number), 123.0); + + QJSPrimitiveValue str(eng.toPrimitiveValue(QStringLiteral("ciao"))); + QCOMPARE(qIsNaN(str.toDouble()), true); + QCOMPARE(qIsNaN(qjsvalue_cast<qreal>(str)), true); + + QJSPrimitiveValue str2(eng.toPrimitiveValue(QStringLiteral("123"))); + QCOMPARE(str2.toDouble(), 123.0); + QCOMPARE(qjsvalue_cast<qreal>(str2), 123.0); + } + + QJSPrimitiveValue inv((QJSPrimitiveUndefined())); + QVERIFY(qIsNaN(inv.toDouble())); + QVERIFY(qIsNaN(qjsvalue_cast<qreal>(inv))); + + // V2 constructors + { + QJSPrimitiveValue falskt(false); + QCOMPARE(falskt.toDouble(), 0.0); + QCOMPARE(qjsvalue_cast<qreal>(falskt), 0.0); + + QJSPrimitiveValue sant(true); + QCOMPARE(sant.toDouble(), 1.0); + QCOMPARE(qjsvalue_cast<qreal>(sant), 1.0); + + QJSPrimitiveValue number(123.0); + QCOMPARE(number.toDouble(), 123.0); + QCOMPARE(qjsvalue_cast<qreal>(number), 123.0); + + QJSPrimitiveValue number2(int(0x43211234)); + QCOMPARE(number2.toDouble(), 1126240820.0); + + QJSPrimitiveValue str(QStringLiteral("ciao")); + QCOMPARE(qIsNaN(str.toDouble()), true); + QCOMPARE(qIsNaN(qjsvalue_cast<qreal>(str)), true); + + QJSPrimitiveValue str2(QStringLiteral("123")); + QCOMPARE(str2.toDouble(), 123.0); + QCOMPARE(qjsvalue_cast<qreal>(str2), 123.0); + } +} + +void tst_QJSPrimitiveValue::toBoolean() +{ + QJSEngine eng; + + QJSPrimitiveValue undefined(eng.toPrimitiveValue(QVariant())); + QCOMPARE(undefined.type(), QJSPrimitiveValue::Undefined); + QCOMPARE(undefined.toBoolean(), false); + QCOMPARE(qjsvalue_cast<bool>(undefined), false); + + QJSPrimitiveValue null((QJSPrimitiveNull())); + QCOMPARE(null.type(), QJSPrimitiveValue::Null); + QCOMPARE(null.toBoolean(), false); + QCOMPARE(qjsvalue_cast<bool>(null), false); + + { + QJSPrimitiveValue falskt = eng.toPrimitiveValue(false); + QCOMPARE(falskt.type(), QJSPrimitiveValue::Boolean); + QCOMPARE(falskt.toBoolean(), false); + QCOMPARE(qjsvalue_cast<bool>(falskt), false); + + QJSPrimitiveValue sant(eng.toPrimitiveValue(true)); + QCOMPARE(sant.type(), QJSPrimitiveValue::Boolean); + QCOMPARE(sant.toBoolean(), true); + QCOMPARE(qjsvalue_cast<bool>(sant), true); + + QJSPrimitiveValue number(eng.toPrimitiveValue(0.0)); + QCOMPARE(number.toBoolean(), false); + QCOMPARE(qjsvalue_cast<bool>(number), false); + + QJSPrimitiveValue number2(eng.toPrimitiveValue(qQNaN())); + QCOMPARE(number2.toBoolean(), false); + QCOMPARE(qjsvalue_cast<bool>(number2), false); + + QJSPrimitiveValue number3(eng.toPrimitiveValue(123.0)); + QCOMPARE(number3.toBoolean(), true); + QCOMPARE(qjsvalue_cast<bool>(number3), true); + + QJSPrimitiveValue number4(eng.toPrimitiveValue(-456.0)); + QCOMPARE(number4.toBoolean(), true); + QCOMPARE(qjsvalue_cast<bool>(number4), true); + + QJSPrimitiveValue str(eng.toPrimitiveValue(QStringLiteral(""))); + QCOMPARE(str.toBoolean(), false); + QCOMPARE(qjsvalue_cast<bool>(str), false); + + QJSPrimitiveValue str2(eng.toPrimitiveValue(QStringLiteral("123"))); + QCOMPARE(str2.toBoolean(), true); + QCOMPARE(qjsvalue_cast<bool>(str2), true); + } + + QJSPrimitiveValue inv((QJSPrimitiveUndefined())); + QCOMPARE(inv.toBoolean(), false); + QCOMPARE(qjsvalue_cast<bool>(inv), false); + + // V2 constructors + { + QJSPrimitiveValue falskt(false); + QCOMPARE(falskt.toBoolean(), false); + QCOMPARE(qjsvalue_cast<bool>(falskt), false); + + QJSPrimitiveValue sant(true); + QCOMPARE(sant.toBoolean(), true); + QCOMPARE(qjsvalue_cast<bool>(sant), true); + + QJSPrimitiveValue number(0.0); + QCOMPARE(number.toBoolean(), false); + QCOMPARE(qjsvalue_cast<bool>(number), false); + + QJSPrimitiveValue number2(qQNaN()); + QCOMPARE(number2.toBoolean(), false); + QCOMPARE(qjsvalue_cast<bool>(number2), false); + + QJSPrimitiveValue number3(123.0); + QCOMPARE(number3.toBoolean(), true); + QCOMPARE(qjsvalue_cast<bool>(number3), true); + + QJSPrimitiveValue number4(-456.0); + QCOMPARE(number4.toBoolean(), true); + QCOMPARE(qjsvalue_cast<bool>(number4), true); + + QJSPrimitiveValue number5(0x43211234); + QCOMPARE(number5.toBoolean(), true); + + QJSPrimitiveValue str(QStringLiteral("")); + QCOMPARE(str.toBoolean(), false); + QCOMPARE(qjsvalue_cast<bool>(str), false); + + QJSPrimitiveValue str2(QStringLiteral("123")); + QCOMPARE(str2.toBoolean(), true); + QCOMPARE(qjsvalue_cast<bool>(str2), true); + } +} + +void tst_QJSPrimitiveValue::toVariant() +{ + QJSEngine eng; + + { + QJSPrimitiveValue undefined(eng.toPrimitiveValue(QVariant())); + QCOMPARE(undefined.toVariant(), QVariant()); + QCOMPARE(qjsvalue_cast<QVariant>(undefined), QVariant()); + } + + { + QJSPrimitiveValue null((QJSPrimitiveNull())); + QCOMPARE(null.toVariant(), QVariant::fromValue(nullptr)); + QCOMPARE(qjsvalue_cast<QVariant>(null), QVariant::fromValue(nullptr)); + } + + { + QJSPrimitiveValue number(eng.toPrimitiveValue(123.0)); + QCOMPARE(number.toVariant(), QVariant(123.0)); + QCOMPARE(qjsvalue_cast<QVariant>(number), QVariant(123.0)); + + QJSPrimitiveValue intNumber(eng.toPrimitiveValue(qint32(123))); + QCOMPARE(intNumber.toVariant().typeId(), QVariant((qint32)123).typeId()); + QCOMPARE((qjsvalue_cast<QVariant>(intNumber)).typeId(), + QVariant(qint32(123)).typeId()); + + QJSPrimitiveValue falskt(eng.toPrimitiveValue(false)); + QCOMPARE(falskt.toVariant(), QVariant(false)); + QCOMPARE(qjsvalue_cast<QVariant>(falskt), QVariant(false)); + + QJSPrimitiveValue sant(eng.toPrimitiveValue(true)); + QCOMPARE(sant.toVariant(), QVariant(true)); + QCOMPARE(qjsvalue_cast<QVariant>(sant), QVariant(true)); + + QJSPrimitiveValue str(eng.toPrimitiveValue(QStringLiteral("ciao"))); + QCOMPARE(str.toVariant(), QVariant(QStringLiteral("ciao"))); + QCOMPARE(qjsvalue_cast<QVariant>(str), QVariant(QStringLiteral("ciao"))); + } + + { + QDateTime dateTime = QDate(1980, 10, 4).startOfDay(); + QJSPrimitiveValue dateObject(eng.toPrimitiveValue(dateTime)); + QVariant var = dateObject.toVariant(); + QCOMPARE(var, (eng.coerceValue<QDateTime, QString>(dateTime))); + QCOMPARE(dateObject.toVariant(), var); + } + + { + QRegularExpression rx = QRegularExpression(QStringLiteral("[0-9a-z]+")); + QJSPrimitiveValue rxObject(eng.toPrimitiveValue(rx)); + QCOMPARE(rxObject.type(), QJSPrimitiveValue::String); + QVariant var = rxObject.toVariant(); + QCOMPARE(var, u'/' + rx.pattern() + u'/'); + } + + { + QJSPrimitiveValue inv; + QCOMPARE(inv.toVariant(), QVariant()); + QCOMPARE(inv.toVariant(), QVariant()); + QCOMPARE(qjsvalue_cast<QVariant>(inv), QVariant()); + } + + // V2 constructors + { + QJSPrimitiveValue number(123.0); + QCOMPARE(number.toVariant(), QVariant(123.0)); + QCOMPARE(number.toVariant(), QVariant(123.0)); + QCOMPARE(qjsvalue_cast<QVariant>(number), QVariant(123.0)); + + QJSPrimitiveValue falskt(false); + QCOMPARE(falskt.toVariant(), QVariant(false)); + QCOMPARE(falskt.toVariant(), QVariant(false)); + QCOMPARE(qjsvalue_cast<QVariant>(falskt), QVariant(false)); + + QJSPrimitiveValue sant(true); + QCOMPARE(sant.toVariant(), QVariant(true)); + QCOMPARE(sant.toVariant(), QVariant(true)); + QCOMPARE(qjsvalue_cast<QVariant>(sant), QVariant(true)); + + QJSPrimitiveValue str(QStringLiteral("ciao")); + QCOMPARE(str.toVariant(), QVariant(QStringLiteral("ciao"))); + QCOMPARE(str.toVariant(), QVariant(QStringLiteral("ciao"))); + QCOMPARE(qjsvalue_cast<QVariant>(str), QVariant(QStringLiteral("ciao"))); + + QJSPrimitiveValue undef((QJSPrimitiveUndefined())); + QCOMPARE(undef.toVariant(), QVariant()); + QCOMPARE(undef.toVariant(), QVariant()); + QCOMPARE(qjsvalue_cast<QVariant>(undef), QVariant()); + + QJSPrimitiveValue nil((QJSPrimitiveNull())); + QCOMPARE(nil.toVariant(), QVariant::fromValue(nullptr)); + QCOMPARE(nil.toVariant(), QVariant::fromValue(nullptr)); + QCOMPARE(qjsvalue_cast<QVariant>(nil), QVariant::fromValue(nullptr)); + } +} + +void tst_QJSPrimitiveValue::equals() +{ + QJSEngine eng; + QObject temp; + + QVERIFY(QJSPrimitiveValue().equals(QJSPrimitiveValue())); + + QJSPrimitiveValue num(eng.toPrimitiveValue(123)); + QVERIFY(num.equals(eng.toPrimitiveValue(123))); + QVERIFY(!num.equals(eng.toPrimitiveValue(321))); + QVERIFY(num.equals(eng.toPrimitiveValue(QStringLiteral("123")))); + QVERIFY(!num.equals(eng.toPrimitiveValue(QStringLiteral("321")))); + QVERIFY(!num.equals(QJSPrimitiveValue())); + + QJSPrimitiveValue str(eng.toPrimitiveValue(QStringLiteral("123"))); + QVERIFY(str.equals(eng.toPrimitiveValue(QStringLiteral("123")))); + QVERIFY(!str.equals(eng.toPrimitiveValue(QStringLiteral("321")))); + QVERIFY(str.equals(eng.toPrimitiveValue(123))); + QVERIFY(!str.equals(eng.toPrimitiveValue(321))); + QCOMPARE(str.equals(QJSPrimitiveValue()), false); + + QJSPrimitiveValue num2(123); + QVERIFY(num2.equals(QJSPrimitiveValue(123))); + QVERIFY(!num2.equals(QJSPrimitiveValue(321))); + QVERIFY(num2.equals(QStringLiteral("123"))); + QVERIFY(!num2.equals(QStringLiteral("321"))); + QVERIFY(!num2.equals(QJSPrimitiveValue())); + + QJSPrimitiveValue str2(QStringLiteral("123")); + QVERIFY(str2.equals(QStringLiteral("123"))); + QVERIFY(!str2.equals(QStringLiteral("321"))); + QVERIFY(str2.equals(QJSPrimitiveValue(123))); + QVERIFY(!str2.equals(QJSPrimitiveValue(321))); + QVERIFY(!str2.equals(QJSPrimitiveValue())); + + QJSPrimitiveValue date1(eng.toPrimitiveValue(QDate(2000, 1, 1).startOfDay())); + QJSPrimitiveValue date2(eng.toPrimitiveValue(QDate(1999, 1, 1).startOfDay())); + QCOMPARE(date1.equals(date2), false); + QCOMPARE(date1.equals(date1), true); + QCOMPARE(date2.equals(date2), true); + + QJSPrimitiveValue undefined(eng.toPrimitiveValue(QVariant())); + QJSPrimitiveValue null((QJSPrimitiveNull())); + QCOMPARE(undefined.equals(undefined), true); + QCOMPARE(null.equals(null), true); + QCOMPARE(undefined.equals(null), true); + QCOMPARE(null.equals(undefined), true); + QVERIFY(undefined.equals(QJSPrimitiveValue())); + QVERIFY(null.equals(QJSPrimitiveValue())); + QVERIFY(!null.equals(num)); + QVERIFY(!undefined.equals(num)); + + QJSPrimitiveValue sant(eng.toPrimitiveValue(true)); + QVERIFY(sant.equals(eng.toPrimitiveValue(1))); + QVERIFY(sant.equals(eng.toPrimitiveValue(QStringLiteral("1")))); + QVERIFY(sant.equals(sant)); + QVERIFY(!sant.equals(eng.toPrimitiveValue(0))); + QVERIFY(!sant.equals(undefined)); + QVERIFY(!sant.equals(null)); + + QJSPrimitiveValue falskt(eng.toPrimitiveValue(false)); + QVERIFY(falskt.equals(eng.toPrimitiveValue(0))); + QVERIFY(falskt.equals(eng.toPrimitiveValue(QStringLiteral("0")))); + QVERIFY(falskt.equals(falskt)); + QVERIFY(!falskt.equals(sant)); + QVERIFY(!falskt.equals(undefined)); + QVERIFY(!falskt.equals(null)); + + { + QJSPrimitiveValue var1(eng.toPrimitiveValue(QVariant::fromValue(QPoint(1, 2)))); + QJSPrimitiveValue var2(eng.toPrimitiveValue(QVariant::fromValue(QPoint(1, 2)))); + QVERIFY(var1.equals(var2)); + } + { + QJSPrimitiveValue var1(eng.toPrimitiveValue(QVariant::fromValue(QPoint(1, 2)))); + QJSPrimitiveValue var2(eng.toPrimitiveValue(QVariant::fromValue(QPoint(3, 4)))); + QVERIFY(!var1.equals(var2)); + } +} + +void tst_QJSPrimitiveValue::strictlyEquals() +{ + QJSEngine eng; + QObject temp; + + QVERIFY(QJSPrimitiveValue().strictlyEquals(QJSPrimitiveValue())); + + QJSPrimitiveValue num(eng.toPrimitiveValue(123)); + QVERIFY(num.strictlyEquals(eng.toPrimitiveValue(123))); + QVERIFY(!num.strictlyEquals(eng.toPrimitiveValue(321))); + QVERIFY(!num.strictlyEquals(eng.toPrimitiveValue(QStringLiteral("123")))); + QVERIFY(!num.strictlyEquals(eng.toPrimitiveValue(QStringLiteral("321")))); + QVERIFY(!num.strictlyEquals(QJSPrimitiveValue())); + QVERIFY(!QJSPrimitiveValue().strictlyEquals(num)); + + QJSPrimitiveValue str(eng.toPrimitiveValue(QStringLiteral("123"))); + QVERIFY(str.strictlyEquals(eng.toPrimitiveValue(QStringLiteral("123")))); + QVERIFY(!str.strictlyEquals(eng.toPrimitiveValue(QStringLiteral("321")))); + QVERIFY(!str.strictlyEquals(eng.toPrimitiveValue(123))); + QVERIFY(!str.strictlyEquals(eng.toPrimitiveValue(321))); + QVERIFY(!str.strictlyEquals(QJSPrimitiveValue())); + + QJSPrimitiveValue num2(123); + QVERIFY(num2.strictlyEquals(QJSPrimitiveValue(123))); + QVERIFY(!num2.strictlyEquals(QJSPrimitiveValue(321))); + QVERIFY(!num2.strictlyEquals(QStringLiteral("123"))); + QVERIFY(!num2.strictlyEquals(QStringLiteral("321"))); + QVERIFY(!num2.strictlyEquals(QJSPrimitiveValue())); + + QJSPrimitiveValue str2(QStringLiteral("123")); + QVERIFY(str2.strictlyEquals(QStringLiteral("123"))); + QVERIFY(!str2.strictlyEquals(QStringLiteral("321"))); + QVERIFY(!str2.strictlyEquals(QJSPrimitiveValue(123))); + QVERIFY(!str2.strictlyEquals(QJSPrimitiveValue(321))); + QVERIFY(!str2.strictlyEquals(QJSPrimitiveValue())); + + QJSPrimitiveValue date1(eng.toPrimitiveValue(QDate(2000, 1, 1).startOfDay())); + QJSPrimitiveValue date2(eng.toPrimitiveValue(QDate(1999, 1, 1).startOfDay())); + QCOMPARE(date1.strictlyEquals(date2), false); + QCOMPARE(date1.strictlyEquals(date1), true); + QCOMPARE(date2.strictlyEquals(date2), true); + QVERIFY(!date1.strictlyEquals(QJSPrimitiveValue())); + + QJSPrimitiveValue undefined(eng.toPrimitiveValue(QVariant())); + QJSPrimitiveValue null((QJSPrimitiveNull())); + QCOMPARE(undefined.strictlyEquals(undefined), true); + QCOMPARE(null.strictlyEquals(null), true); + QCOMPARE(undefined.strictlyEquals(null), false); + QCOMPARE(null.strictlyEquals(undefined), false); + QVERIFY(!null.strictlyEquals(QJSPrimitiveValue())); + + QJSPrimitiveValue sant(eng.toPrimitiveValue(true)); + QVERIFY(!sant.strictlyEquals(eng.toPrimitiveValue(1))); + QVERIFY(!sant.strictlyEquals(eng.toPrimitiveValue(QStringLiteral("1")))); + QVERIFY(sant.strictlyEquals(sant)); + QVERIFY(!sant.strictlyEquals(eng.toPrimitiveValue(0))); + QVERIFY(!sant.strictlyEquals(undefined)); + QVERIFY(!sant.strictlyEquals(null)); + QVERIFY(!sant.strictlyEquals(QJSPrimitiveValue())); + + QJSPrimitiveValue falskt(eng.toPrimitiveValue(false)); + QVERIFY(!falskt.strictlyEquals(eng.toPrimitiveValue(0))); + QVERIFY(!falskt.strictlyEquals(eng.toPrimitiveValue(QStringLiteral("0")))); + QVERIFY(falskt.strictlyEquals(falskt)); + QVERIFY(!falskt.strictlyEquals(sant)); + QVERIFY(!falskt.strictlyEquals(undefined)); + QVERIFY(!falskt.strictlyEquals(null)); + QVERIFY(!falskt.strictlyEquals(QJSPrimitiveValue())); + + QVERIFY(!QJSPrimitiveValue(false).strictlyEquals(QJSPrimitiveValue(123))); + QVERIFY(!QJSPrimitiveValue(QJSPrimitiveUndefined()).strictlyEquals(QJSPrimitiveValue(123))); + QVERIFY(!QJSPrimitiveValue(QJSPrimitiveNull()).strictlyEquals(QJSPrimitiveValue(123))); + QVERIFY(!QJSPrimitiveValue(false).strictlyEquals({QStringLiteral("ciao")})); + QVERIFY(!QJSPrimitiveValue(QJSPrimitiveUndefined()).strictlyEquals({QStringLiteral("ciao")})); + QVERIFY(!QJSPrimitiveValue(QJSPrimitiveNull()).strictlyEquals({QStringLiteral("ciao")})); + QVERIFY(eng.toPrimitiveValue(QStringLiteral("ciao")).strictlyEquals(QJSPrimitiveValue(QStringLiteral("ciao")))); + QVERIFY(QJSPrimitiveValue(QStringLiteral("ciao")).strictlyEquals(eng.toPrimitiveValue(QStringLiteral("ciao")))); + QVERIFY(!QJSPrimitiveValue(QStringLiteral("ciao")).strictlyEquals(QJSPrimitiveValue(123))); + QVERIFY(!QJSPrimitiveValue(QStringLiteral("ciao")).strictlyEquals(eng.toPrimitiveValue(123))); + QVERIFY(!QJSPrimitiveValue(123).strictlyEquals({QStringLiteral("ciao")})); + QVERIFY(!QJSPrimitiveValue(123).strictlyEquals(eng.toPrimitiveValue(QStringLiteral("ciao")))); + QVERIFY(!eng.toPrimitiveValue(123).strictlyEquals(QJSPrimitiveValue(QStringLiteral("ciao")))); + + { + QJSPrimitiveValue var1(eng.toPrimitiveValue(QVariant(QStringList() << QStringLiteral("a")))); + QJSPrimitiveValue var2(eng.toPrimitiveValue(QVariant(QStringList() << QStringLiteral("a")))); + QVERIFY(var1.strictlyEquals(var2)); + } + { + QJSPrimitiveValue var1(eng.toPrimitiveValue(QVariant(QStringList() << QStringLiteral("a")))); + QJSPrimitiveValue var2(eng.toPrimitiveValue(QVariant(QStringList() << QStringLiteral("b")))); + QVERIFY(!var1.strictlyEquals(var2)); + } + { + QJSPrimitiveValue var1(eng.toPrimitiveValue(QVariant::fromValue(QPoint(1, 2)))); + QJSPrimitiveValue var2(eng.toPrimitiveValue(QVariant::fromValue(QPoint(1, 2)))); + QVERIFY(var1.strictlyEquals(var2)); + } + { + QJSPrimitiveValue var1(eng.toPrimitiveValue(QVariant::fromValue(QPoint(1, 2)))); + QJSPrimitiveValue var2(eng.toPrimitiveValue(QVariant::fromValue(QPoint(3, 4)))); + QVERIFY(!var1.strictlyEquals(var2)); + } +} + +void tst_QJSPrimitiveValue::stringAndUrl() +{ + QJSEngine engine; + const QString string = QStringLiteral("http://example.com/something.html"); + const QUrl url(string); + + const QJSPrimitiveValue urlValue(engine.toPrimitiveValue(url)); + QCOMPARE(urlValue.type(), QJSPrimitiveValue::String); + QCOMPARE(urlValue.toString(), string); + QCOMPARE(engine.fromPrimitiveValue<QUrl>(urlValue), url); + + const QJSPrimitiveValue stringValue(engine.toPrimitiveValue(string)); + QCOMPARE(stringValue.toString(), string); + QCOMPARE(engine.fromPrimitiveValue<QUrl>(stringValue), url); + + const QJSPrimitiveValue immediateStringValue(string); + QCOMPARE(immediateStringValue.toString(), string); + QCOMPARE(engine.fromPrimitiveValue<QUrl>(immediateStringValue), url); +} + QTEST_MAIN(tst_QJSPrimitiveValue) #include "tst_qjsprimitivevalue.moc" |