diff options
author | Ulf Hermann <ulf.hermann@qt.io> | 2022-12-06 19:38:39 +0100 |
---|---|---|
committer | Ulf Hermann <ulf.hermann@qt.io> | 2022-12-15 17:48:10 +0100 |
commit | 054f430232bcc34511941ed596404c0207a70868 (patch) | |
tree | 229511cf4f9dd2c4dbeeee24c6ee8ba10f2f3658 /tests/auto/qml/qjsprimitivevalue | |
parent | 6aed5f4fb55508f7e5e6fc6fabdb430f45b4deea (diff) |
QJSEngine: Add QJSPrimitiveValue conversions
We need those in order to get correct results when using the more
generic conversions with QJSPrimitiveValue as source or target. Without
those extra methods, we frequently get garbage where it would be
possible to construct a QJSPrimitiveValue.
Pick-to: 6.5
Task-number: QTBUG-109111
Change-Id: I6ceb2a4ed73dae228dd2e5690cd608c58537b95f
Reviewed-by: Fabian Kosmale <fabian.kosmale@qt.io>
Diffstat (limited to 'tests/auto/qml/qjsprimitivevalue')
-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" |