aboutsummaryrefslogtreecommitdiffstats
path: root/tests/auto/qml/qjsprimitivevalue
diff options
context:
space:
mode:
authorUlf Hermann <ulf.hermann@qt.io>2022-12-06 19:38:39 +0100
committerUlf Hermann <ulf.hermann@qt.io>2022-12-15 17:48:10 +0100
commit054f430232bcc34511941ed596404c0207a70868 (patch)
tree229511cf4f9dd2c4dbeeee24c6ee8ba10f2f3658 /tests/auto/qml/qjsprimitivevalue
parent6aed5f4fb55508f7e5e6fc6fabdb430f45b4deea (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.cpp601
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"