- commit d1b6b2264c2b99d74e3922e918e621259e0b8a76
- Author: Jędrzej Nowacki <jedrzej.nowacki@nokia.com>
- Date: Thu Sep 8 14:53:20 2011 +0200
- Unwrap QJSValue from QVariant.
- Fix a FIXME, add QJSValue to conversion from a QVariant to a v8 type.
- Change-Id: I1d5ede40ce2637123b09839fd848b27ad3af3dda
- diff --git a/src/declarative/qml/v8/qv8engine.cpp b/src/declarative/qml/v8/qv8engine.cpp
- index 6f58417..6743189 100644
- --- a/src/declarative/qml/v8/qv8engine.cpp
- +++ b/src/declarative/qml/v8/qv8engine.cpp
- @@ -343,7 +343,12 @@ v8::Handle<v8::Value> QV8Engine::fromVariant(const QVariant &variant)
- }
- } else {
- - if (type == qMetaTypeId<QDeclarativeListReference>()) {
- + if (type == qMetaTypeId<QJSValue>()) {
- + const QJSValue *value = reinterpret_cast<const QJSValue *>(ptr);
- + QJSValuePrivate *valuep = QJSValuePrivate::get(value);
- + if (valuep->assignEngine(this))
- + return v8::Local<v8::Value>::New(*valuep);
- + } else if (type == qMetaTypeId<QDeclarativeListReference>()) {
- typedef QDeclarativeListReferencePrivate QDLRP;
- QDLRP *p = QDLRP::get((QDeclarativeListReference*)ptr);
- if (p->object) {
- @@ -368,7 +373,6 @@ v8::Handle<v8::Value> QV8Engine::fromVariant(const QVariant &variant)
- }
- // XXX TODO: To be compatible, we still need to handle:
- - // + QJSValue
- // + QObjectList
- // + QList<int>
- diff --git a/tests/auto/declarative/qjsengine/tst_qjsengine.cpp b/tests/auto/declarative/qjsengine/tst_qjsengine.cpp
- index a6b4251..295ec8b 100644
- --- a/tests/auto/declarative/qjsengine/tst_qjsengine.cpp
- +++ b/tests/auto/declarative/qjsengine/tst_qjsengine.cpp
- @@ -43,6 +43,7 @@
- #include <QtTest/QtTest>
- #include <qjsengine.h>
- +#include <qjsvalue.h>
- #include <qjsvalueiterator.h>
- #include <qgraphicsitem.h>
- #include <qstandarditemmodel.h>
- @@ -51,6 +52,7 @@
- Q_DECLARE_METATYPE(QList<int>)
- Q_DECLARE_METATYPE(QObjectList)
- +Q_DECLARE_METATYPE(QJSValue)
- //TESTED_CLASS=
- //TESTED_FILES=
- @@ -170,6 +172,10 @@ private slots:
- void valueConversion_customType();
- void valueConversion_sequence();
- #endif
- + void valueConversion_QJSValueBasicObject();
- + void valueConversion_QJSValueBasicArray();
- + void valueConversion_QJSValueBasicQObject();
- + void valueConversion_QJSValueTwoEngines();
- void valueConversion_QVariant();
- #if 0 // FIXME: No support for custom types
- void valueConversion_hooliganTask248802();
- @@ -2582,6 +2588,35 @@ void tst_QJSEngine::valueConversion_sequence()
- }
- #endif
- +void tst_QJSEngine::valueConversion_QJSValueBasicObject()
- +{
- + QJSEngine engine;
- + QJSValue object = engine.newObject();
- + QVERIFY(object.strictlyEquals(engine.toScriptValue(QVariant::fromValue(object))));
- +}
- +
- +void tst_QJSEngine::valueConversion_QJSValueBasicArray()
- +{
- + QJSEngine engine;
- + QJSValue object = engine.newArray();
- + object.setProperty(1, 123);
- + QVERIFY(object.strictlyEquals(engine.toScriptValue(QVariant::fromValue(object))));
- +}
- +
- +void tst_QJSEngine::valueConversion_QJSValueBasicQObject()
- +{
- + QJSEngine engine;
- + QJSValue object = engine.newQObject(this);
- + QVERIFY(object.strictlyEquals(engine.toScriptValue(QVariant::fromValue(object))));
- +}
- +
- +void tst_QJSEngine::valueConversion_QJSValueTwoEngines()
- +{
- + QJSEngine engine1, engine2;
- + QJSValue object = engine1.newObject();
- + QVERIFY(!object.strictlyEquals(engine2.toScriptValue(QVariant::fromValue(object))));
- +}
- +
- void tst_QJSEngine::valueConversion_QVariant()
- {
- QJSEngine eng;