Skip to content

Commit

Permalink
Remove QJSEngine::newVariant() function
Browse files Browse the repository at this point in the history
Rationale: This is a remnant from QtScript. There is no reason one
should be able to explicitly wrap an arbitrary C++ type in a
QVariant. toScriptValue() will automatically wrap the type in a
QVariant if it's a type that's not specifically handled by the
meta-type system, or if it can't usefully/losslessly be converted to
a native JavaScript type.

Task-number: QTBUG-23604
Change-Id: I5790cd92b9ffd5fcfbee1cd73a8eaa16fc74846f
Reviewed-by: Jędrzej Nowacki <jedrzej.nowacki@nokia.com>
  • Loading branch information
Kent Hansen authored and Qt by Nokia committed Feb 1, 2012
1 parent be784e3 commit e77ea6f
Show file tree
Hide file tree
Showing 6 changed files with 26 additions and 192 deletions.
24 changes: 0 additions & 24 deletions src/declarative/qml/v8/qjsengine.cpp
Expand Up @@ -401,30 +401,6 @@ QJSValue QJSEngine::newQObject(QObject *object)
return d->scriptValueFromInternal(d->newQObject(object, QV8Engine::JavaScriptOwnership));
}

#ifdef QT_DEPRECATED

/*!
\obsolete
Creates a JavaScript object holding the given variant \a value.
If a default prototype has been registered with the meta type id of
\a value, then the prototype of the created object will be that
prototype; otherwise, the prototype will be the Object prototype
object.
\sa setDefaultPrototype(), QJSValue::toVariant(), reportAdditionalMemoryCost()
*/
QJSValue QJSEngine::newVariant(const QVariant &value)
{
Q_D(QJSEngine);
QScriptIsolate api(d, QScriptIsolate::NotNullEngine);
v8::HandleScope handleScope;
return d->scriptValueFromInternal(d->newVariant(value));
}

#endif // QT_DEPRECATED

/*!
Returns this engine's Global Object.
Expand Down
2 changes: 0 additions & 2 deletions src/declarative/qml/v8/qjsengine.h
Expand Up @@ -90,8 +90,6 @@ class Q_DECLARATIVE_EXPORT QJSEngine

QT_DEPRECATED QJSValue nullValue();
QT_DEPRECATED QJSValue undefinedValue();

QT_DEPRECATED QJSValue newVariant(const QVariant &value);
#endif

Q_SIGNALS:
Expand Down
2 changes: 1 addition & 1 deletion src/declarative/qml/v8/qjsvalue.cpp
Expand Up @@ -502,7 +502,7 @@ bool QJSValue::isFunction() const
Returns true if this QJSValue is a variant value;
otherwise returns false.
\sa toVariant(), QJSEngine::newVariant()
\sa toVariant()
*/
bool QJSValue::isVariant() const
{
Expand Down
1 change: 0 additions & 1 deletion src/declarative/qml/v8/qv8engine_p.h
Expand Up @@ -401,7 +401,6 @@ class Q_DECLARATIVE_EXPORT QV8Engine

QScriptPassPointer<QJSValuePrivate> newArray(uint length);
v8::Local<v8::Object> newVariant(const QVariant &variant);
QScriptPassPointer<QJSValuePrivate> newVariant(QJSValuePrivate* value, const QVariant &variant);

v8::Local<v8::Array> variantListToJS(const QVariantList &lst);
QVariantList variantListFromJS(v8::Handle<v8::Array> jsArray);
Expand Down
30 changes: 3 additions & 27 deletions tests/auto/declarative/qjsengine/tst_qjsengine.cpp
Expand Up @@ -654,15 +654,15 @@ void tst_QJSEngine::newVariant()
{
QJSEngine eng;
{
QJSValue opaque = eng.newVariant(QVariant());
QJSValue opaque = eng.toScriptValue(QVariant(QPoint(1, 2)));
QCOMPARE(opaque.isValid(), true);
QCOMPARE(opaque.isVariant(), true);
QVERIFY(!opaque.isCallable());
QCOMPARE(opaque.isObject(), true);
QCOMPARE(opaque.prototype().isValid(), true);
QEXPECT_FAIL("", "FIXME: newly created QObject's prototype is an JS Object", Continue);
QCOMPARE(opaque.prototype().isVariant(), true);
QVERIFY(opaque.property("valueOf").callWithInstance(opaque).isUndefined());
QVERIFY(opaque.property("valueOf").callWithInstance(opaque).equals(opaque));
}
}

Expand Down Expand Up @@ -732,31 +732,7 @@ void tst_QJSEngine::newVariant_valueOfToString()
// valueOf() and toString()
QJSEngine eng;
{
QJSValue object = eng.newVariant(QVariant(123));
QJSValue value = object.property("valueOf").callWithInstance(object);
QVERIFY(value.isNumber());
QCOMPARE(value.toInt(), 123);
QCOMPARE(object.toString(), QString::fromLatin1("123"));
QCOMPARE(object.toVariant().toString(), object.toString());
}
{
QJSValue object = eng.newVariant(QVariant(QString::fromLatin1("hello")));
QJSValue value = object.property("valueOf").callWithInstance(object);
QVERIFY(value.isString());
QCOMPARE(value.toString(), QString::fromLatin1("hello"));
QCOMPARE(object.toString(), QString::fromLatin1("hello"));
QCOMPARE(object.toVariant().toString(), object.toString());
}
{
QJSValue object = eng.newVariant(QVariant(false));
QJSValue value = object.property("valueOf").callWithInstance(object);
QVERIFY(value.isBool());
QCOMPARE(value.toBool(), false);
QCOMPARE(object.toString(), QString::fromLatin1("false"));
QCOMPARE(object.toVariant().toString(), object.toString());
}
{
QJSValue object = eng.newVariant(QVariant(QPoint(10, 20)));
QJSValue object = eng.toScriptValue(QVariant(QPoint(10, 20)));
QJSValue value = object.property("valueOf").callWithInstance(object);
QVERIFY(value.isObject());
QVERIFY(value.strictlyEquals(object));
Expand Down
159 changes: 22 additions & 137 deletions tests/auto/declarative/qjsvalue/tst_qjsvalue.cpp
Expand Up @@ -442,16 +442,11 @@ void tst_QJSValue::toString()

// variant should use internal valueOf(), then fall back to QVariant::toString(),
// then fall back to "QVariant(typename)"
QJSValue variant = eng.newVariant(123);
QVERIFY(variant.isVariant());
QCOMPARE(variant.toString(), QString::fromLatin1("123"));
variant = eng.newVariant(QByteArray("hello"));
QVERIFY(variant.isVariant());
QCOMPARE(variant.toString(), QString::fromLatin1("hello"));
variant = eng.newVariant(QVariant(QPoint(10, 20)));
QJSValue variant = eng.toScriptValue(QPoint(10, 20));
QVERIFY(variant.isVariant());
QCOMPARE(variant.toString(), QString::fromLatin1("QVariant(QPoint)"));
variant = eng.newVariant(QUrl());
variant = eng.toScriptValue(QUrl());
QVERIFY(variant.isVariant());
QVERIFY(variant.toString().isEmpty());
}

Expand Down Expand Up @@ -1037,11 +1032,6 @@ void tst_QJSValue::toVariant()
QCOMPARE(qjsvalue_cast<QVariant>(str), QVariant(QString("ciao")));
}

QVariant var(QChar(0x007A));
QJSValue opaque = eng.newVariant(var);
QVERIFY(opaque.isVariant());
QCOMPARE(opaque.toVariant(), var);

QJSValue object = eng.newObject();
QCOMPARE(object.toVariant(), QVariant(QVariantMap()));

Expand Down Expand Up @@ -1136,8 +1126,8 @@ void tst_QJSValue::toQObject_nonQObject_data()
QTest::newRow("object") << engine->newObject();
QTest::newRow("array") << engine->newArray();
QTest::newRow("date") << engine->evaluate("new Date(124)");
QTest::newRow("variant(12345)") << engine->newVariant(12345);
QTest::newRow("variant((QObject*)0)") << engine->newVariant(qVariantFromValue((QObject*)0));
QTest::newRow("variant(12345)") << engine->toScriptValue(QVariant(12345));
QTest::newRow("variant((QObject*)0)") << engine->toScriptValue(qVariantFromValue((QObject*)0));
QTest::newRow("newQObject(0)") << engine->newQObject(0);
}

Expand Down Expand Up @@ -1173,25 +1163,6 @@ void tst_QJSValue::toQObject()
QCOMPARE(qjsvalue_cast<QObject*>(qbutton), (QObject *)&button);
QCOMPARE(qjsvalue_cast<QWidget*>(qbutton), (QWidget *)&button);
QCOMPARE(qjsvalue_cast<QPushButton*>(qbutton), &button);

// wrapping a QObject* as variant
QJSValue variant = eng.newVariant(qVariantFromValue((QObject*)&button));
QCOMPARE(variant.toQObject(), (QObject*)&button);
QCOMPARE(qjsvalue_cast<QObject*>(variant), (QObject*)&button);
QCOMPARE(qjsvalue_cast<QWidget*>(variant), (QWidget*)&button);
QCOMPARE(qjsvalue_cast<QPushButton*>(variant), &button);

QJSValue variant2 = eng.newVariant(qVariantFromValue((QWidget*)&button));
QCOMPARE(variant2.toQObject(), (QObject*)&button);
QCOMPARE(qjsvalue_cast<QObject*>(variant2), (QObject*)&button);
QCOMPARE(qjsvalue_cast<QWidget*>(variant2), (QWidget*)&button);
QCOMPARE(qjsvalue_cast<QPushButton*>(variant2), &button);

QJSValue variant3 = eng.newVariant(qVariantFromValue(&button));
QCOMPARE(variant3.toQObject(), (QObject*)0);
QCOMPARE(qjsvalue_cast<QObject*>(variant3), (QObject*)0);
QCOMPARE(qjsvalue_cast<QWidget*>(variant3), (QWidget*)0);
QCOMPARE(qjsvalue_cast<QPushButton*>(variant3), &button);
}

void tst_QJSValue::toDateTime()
Expand Down Expand Up @@ -2371,7 +2342,7 @@ void tst_QJSValue::getSetScriptClass_QVariant()
TestScriptClass testClass(&eng);
// object that already has a(n internal) class
{
QJSValue obj = eng.newVariant(QUrl("http://example.com"));
QJSValue obj = eng.toScriptValue(QUrl("http://example.com"));
QVERIFY(obj.isVariant());
QCOMPARE(obj.scriptClass(), (QScriptClass*)0);
obj.setScriptClass(&testClass);
Expand Down Expand Up @@ -3162,79 +3133,16 @@ void tst_QJSValue::equals()
}

{
QJSValue var1 = eng.newVariant(QVariant(false));
QJSValue var2 = eng.newVariant(QVariant(false));
QEXPECT_FAIL("", "FIXME: QVariant comparison does not work with v8", Continue);
QVERIFY(var1.equals(var2));
{
QJSValue ret = compareFun.call(QJSValue(), QJSValueList() << var1 << var2);
QVERIFY(ret.isBool());
}
}
{
QJSValue var1 = eng.newVariant(QVariant(false));
QJSValue var2 = eng.newVariant(QVariant(0));
// QVariant::operator==() performs type conversion
QEXPECT_FAIL("", "FIXME: QVariant comparison does not work with v8", Continue);
QVERIFY(var1.equals(var2));
}
{
QJSValue var1 = eng.newVariant(QVariant(QStringList() << "a"));
QJSValue var2 = eng.newVariant(QVariant(QStringList() << "a"));
QEXPECT_FAIL("", "FIXME: QVariant comparison does not work with v8", Continue);
QVERIFY(var1.equals(var2));
}
{
QJSValue var1 = eng.newVariant(QVariant(QStringList() << "a"));
QJSValue var2 = eng.newVariant(QVariant(QStringList() << "b"));
QVERIFY(!var1.equals(var2));
}
{
QJSValue var1 = eng.newVariant(QVariant(QPoint(1, 2)));
QJSValue var2 = eng.newVariant(QVariant(QPoint(1, 2)));
QJSValue var1 = eng.toScriptValue(QVariant(QPoint(1, 2)));
QJSValue var2 = eng.toScriptValue(QVariant(QPoint(1, 2)));
QEXPECT_FAIL("", "FIXME: QVariant comparison does not work with v8", Continue);
QVERIFY(var1.equals(var2));
}
{
QJSValue var1 = eng.newVariant(QVariant(QPoint(1, 2)));
QJSValue var2 = eng.newVariant(QVariant(QPoint(3, 4)));
QJSValue var1 = eng.toScriptValue(QVariant(QPoint(1, 2)));
QJSValue var2 = eng.toScriptValue(QVariant(QPoint(3, 4)));
QVERIFY(!var1.equals(var2));
}
{
QJSValue var1 = eng.newVariant(QVariant(int(1)));
QJSValue var2 = eng.newVariant(QVariant(double(1)));
// QVariant::operator==() performs type conversion
QEXPECT_FAIL("", "FIXME: QVariant comparison does not work with v8", Continue);
QVERIFY(var1.equals(var2));
}
{
QJSValue var1 = eng.newVariant(QVariant(QString::fromLatin1("123")));
QJSValue var2 = eng.newVariant(QVariant(double(123)));
QJSValue var3(QString::fromLatin1("123"));
QJSValue var4(123);

QVERIFY(var1.equals(var1));
QEXPECT_FAIL("", "FIXME: QVariant comparison does not work with v8", Continue);
QVERIFY(var1.equals(var2));
QVERIFY(var1.equals(var3));
QVERIFY(var1.equals(var4));

QEXPECT_FAIL("", "FIXME: QVariant comparison does not work with v8", Continue);
QVERIFY(var2.equals(var1));
QVERIFY(var2.equals(var2));
QVERIFY(var2.equals(var3));
QVERIFY(var2.equals(var4));

QVERIFY(var3.equals(var1));
QVERIFY(var3.equals(var2));
QVERIFY(var3.equals(var3));
QVERIFY(var3.equals(var4));

QVERIFY(var4.equals(var1));
QVERIFY(var4.equals(var2));
QVERIFY(var4.equals(var3));
QVERIFY(var4.equals(var4));
}

QJSEngine otherEngine;
QTest::ignoreMessage(QtWarningMsg, "QJSValue::equals: "
Expand Down Expand Up @@ -3356,34 +3264,25 @@ void tst_QJSValue::strictlyEquals()
QVERIFY(qobj1.strictlyEquals(qobj2));

{
QJSValue var1 = eng.newVariant(QVariant(false));
QJSValue var2 = eng.newVariant(QVariant(false));
QVERIFY(!var1.strictlyEquals(var2));
QVERIFY(!var1.strictlyEquals(QJSValue()));
}
{
QJSValue var1 = eng.newVariant(QVariant(false));
QJSValue var2 = eng.newVariant(QVariant(0));
QJSValue var1 = eng.toScriptValue(QVariant(QStringList() << "a"));
QJSValue var2 = eng.toScriptValue(QVariant(QStringList() << "a"));
QVERIFY(var1.isArray());
QVERIFY(var2.isArray());
QVERIFY(!var1.strictlyEquals(var2));
}
{
QJSValue var1 = eng.newVariant(QVariant(QStringList() << "a"));
QJSValue var2 = eng.newVariant(QVariant(QStringList() << "a"));
QJSValue var1 = eng.toScriptValue(QVariant(QStringList() << "a"));
QJSValue var2 = eng.toScriptValue(QVariant(QStringList() << "b"));
QVERIFY(!var1.strictlyEquals(var2));
}
{
QJSValue var1 = eng.newVariant(QVariant(QStringList() << "a"));
QJSValue var2 = eng.newVariant(QVariant(QStringList() << "b"));
QJSValue var1 = eng.toScriptValue(QVariant(QPoint(1, 2)));
QJSValue var2 = eng.toScriptValue(QVariant(QPoint(1, 2)));
QVERIFY(!var1.strictlyEquals(var2));
}
{
QJSValue var1 = eng.newVariant(QVariant(QPoint(1, 2)));
QJSValue var2 = eng.newVariant(QVariant(QPoint(1, 2)));
QVERIFY(!var1.strictlyEquals(var2));
}
{
QJSValue var1 = eng.newVariant(QVariant(QPoint(1, 2)));
QJSValue var2 = eng.newVariant(QVariant(QPoint(3, 4)));
QJSValue var1 = eng.toScriptValue(QVariant(QPoint(1, 2)));
QJSValue var2 = eng.toScriptValue(QVariant(QPoint(3, 4)));
QVERIFY(!var1.strictlyEquals(var2));
}

Expand All @@ -3402,31 +3301,17 @@ Q_DECLARE_METATYPE(QBrush*)
void tst_QJSValue::castToPointer()
{
QJSEngine eng;
{
QJSValue v = eng.newVariant(int(123));
int *ip = qjsvalue_cast<int*>(v);
QVERIFY(ip != 0);
QCOMPARE(*ip, 123);
*ip = 456;
QCOMPARE(qjsvalue_cast<int>(v), 456);

double *dp = qjsvalue_cast<double*>(v);
QVERIFY(dp == 0);

QJSValue v2 = eng.newVariant(qVariantFromValue(ip));
QCOMPARE(qjsvalue_cast<int*>(v2), ip);
}
{
QColor c(123, 210, 231);
QJSValue v = eng.newVariant(c);
QJSValue v = eng.toScriptValue(c);
QColor *cp = qjsvalue_cast<QColor*>(v);
QVERIFY(cp != 0);
QCOMPARE(*cp, c);

QBrush *bp = qjsvalue_cast<QBrush*>(v);
QVERIFY(bp == 0);

QJSValue v2 = eng.newVariant(qVariantFromValue(cp));
QJSValue v2 = eng.toScriptValue(qVariantFromValue(cp));
QCOMPARE(qjsvalue_cast<QColor*>(v2), cp);
}
}
Expand Down

0 comments on commit e77ea6f

Please sign in to comment.