Don't like ads? PRO users don't see any ads ;-)
Guest

Untitled

By: a guest on May 17th, 2012  |  syntax: None  |  size: 3.52 KB  |  hits: 10  |  expires: Never
download  |  raw  |  embed  |  report abuse  |  print
Text below is selected. Please press Ctrl+C to copy to your clipboard. (⌘+C on Mac)
  1. commit d1b6b2264c2b99d74e3922e918e621259e0b8a76
  2. Author: Jędrzej Nowacki <jedrzej.nowacki@nokia.com>
  3. Date:   Thu Sep 8 14:53:20 2011 +0200
  4.  
  5.     Unwrap QJSValue from QVariant.
  6.    
  7.     Fix a FIXME, add QJSValue to conversion from a QVariant to a v8 type.
  8.    
  9.     Change-Id: I1d5ede40ce2637123b09839fd848b27ad3af3dda
  10.  
  11. diff --git a/src/declarative/qml/v8/qv8engine.cpp b/src/declarative/qml/v8/qv8engine.cpp
  12. index 6f58417..6743189 100644
  13. --- a/src/declarative/qml/v8/qv8engine.cpp
  14. +++ b/src/declarative/qml/v8/qv8engine.cpp
  15. @@ -343,7 +343,12 @@ v8::Handle<v8::Value> QV8Engine::fromVariant(const QVariant &variant)
  16.          }
  17.  
  18.      } else {
  19. -        if (type == qMetaTypeId<QDeclarativeListReference>()) {
  20. +        if (type == qMetaTypeId<QJSValue>()) {
  21. +            const QJSValue *value = reinterpret_cast<const QJSValue *>(ptr);
  22. +            QJSValuePrivate *valuep = QJSValuePrivate::get(value);
  23. +            if (valuep->assignEngine(this))
  24. +                return v8::Local<v8::Value>::New(*valuep);
  25. +        } else if (type == qMetaTypeId<QDeclarativeListReference>()) {
  26.              typedef QDeclarativeListReferencePrivate QDLRP;
  27.              QDLRP *p = QDLRP::get((QDeclarativeListReference*)ptr);
  28.              if (p->object) {
  29. @@ -368,7 +373,6 @@ v8::Handle<v8::Value> QV8Engine::fromVariant(const QVariant &variant)
  30.      }
  31.  
  32.      // XXX TODO: To be compatible, we still need to handle:
  33. -    //    + QJSValue
  34.      //    + QObjectList
  35.      //    + QList<int>
  36.  
  37. diff --git a/tests/auto/declarative/qjsengine/tst_qjsengine.cpp b/tests/auto/declarative/qjsengine/tst_qjsengine.cpp
  38. index a6b4251..295ec8b 100644
  39. --- a/tests/auto/declarative/qjsengine/tst_qjsengine.cpp
  40. +++ b/tests/auto/declarative/qjsengine/tst_qjsengine.cpp
  41. @@ -43,6 +43,7 @@
  42.  #include <QtTest/QtTest>
  43.  
  44.  #include <qjsengine.h>
  45. +#include <qjsvalue.h>
  46.  #include <qjsvalueiterator.h>
  47.  #include <qgraphicsitem.h>
  48.  #include <qstandarditemmodel.h>
  49. @@ -51,6 +52,7 @@
  50.  
  51.  Q_DECLARE_METATYPE(QList<int>)
  52.  Q_DECLARE_METATYPE(QObjectList)
  53. +Q_DECLARE_METATYPE(QJSValue)
  54.  
  55.  //TESTED_CLASS=
  56.  //TESTED_FILES=
  57. @@ -170,6 +172,10 @@ private slots:
  58.      void valueConversion_customType();
  59.      void valueConversion_sequence();
  60.  #endif
  61. +    void valueConversion_QJSValueBasicObject();
  62. +    void valueConversion_QJSValueBasicArray();
  63. +    void valueConversion_QJSValueBasicQObject();
  64. +    void valueConversion_QJSValueTwoEngines();
  65.      void valueConversion_QVariant();
  66.  #if 0 // FIXME: No support for custom types
  67.      void valueConversion_hooliganTask248802();
  68. @@ -2582,6 +2588,35 @@ void tst_QJSEngine::valueConversion_sequence()
  69.  }
  70.  #endif
  71.  
  72. +void tst_QJSEngine::valueConversion_QJSValueBasicObject()
  73. +{
  74. +    QJSEngine engine;
  75. +    QJSValue object = engine.newObject();
  76. +    QVERIFY(object.strictlyEquals(engine.toScriptValue(QVariant::fromValue(object))));
  77. +}
  78. +
  79. +void tst_QJSEngine::valueConversion_QJSValueBasicArray()
  80. +{
  81. +    QJSEngine engine;
  82. +    QJSValue object = engine.newArray();
  83. +    object.setProperty(1, 123);
  84. +    QVERIFY(object.strictlyEquals(engine.toScriptValue(QVariant::fromValue(object))));
  85. +}
  86. +
  87. +void tst_QJSEngine::valueConversion_QJSValueBasicQObject()
  88. +{
  89. +    QJSEngine engine;
  90. +    QJSValue object = engine.newQObject(this);
  91. +    QVERIFY(object.strictlyEquals(engine.toScriptValue(QVariant::fromValue(object))));
  92. +}
  93. +
  94. +void tst_QJSEngine::valueConversion_QJSValueTwoEngines()
  95. +{
  96. +    QJSEngine engine1, engine2;
  97. +    QJSValue object = engine1.newObject();
  98. +    QVERIFY(!object.strictlyEquals(engine2.toScriptValue(QVariant::fromValue(object))));
  99. +}
  100. +
  101.  void tst_QJSEngine::valueConversion_QVariant()
  102.  {
  103.      QJSEngine eng;