Guest User

Untitled

a guest
May 17th, 2012
77
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.52 KB | None | 0 0
  1. commit d1b6b2264c2b99d74e3922e918e621259e0b8a76
  2. Author: Jędrzej Nowacki <[email protected]>
  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;
Advertisement
Add Comment
Please, Sign In to add comment