tests/auto/qscriptextqobject/tst_qscriptextqobject.cpp
changeset 22 79de32ba3296
parent 18 2f34d5167611
child 30 5dc02b23752f
--- a/tests/auto/qscriptextqobject/tst_qscriptextqobject.cpp	Mon May 03 13:17:34 2010 +0300
+++ b/tests/auto/qscriptextqobject/tst_qscriptextqobject.cpp	Fri May 14 16:40:13 2010 +0300
@@ -533,6 +533,7 @@
     void objectDeleted();
     void connectToDestroyedSignal();
     void emitAfterReceiverDeleted();
+    void enumerateMetaObject();
 
 private:
     QScriptEngine *m_engine;
@@ -3043,5 +3044,38 @@
     }
 }
 
+void tst_QScriptExtQObject::enumerateMetaObject()
+{
+    QScriptValue myClass = m_engine->newQMetaObject(m_myObject->metaObject(), m_engine->undefinedValue());
+
+    QStringList expectedNames;
+    expectedNames << "FooPolicy" << "BarPolicy" << "BazPolicy"
+                  << "FooStrategy" << "BarStrategy" << "BazStrategy"
+                  << "NoAbility" << "FooAbility" << "BarAbility" << "BazAbility" << "AllAbility";
+
+    for (int x = 0; x < 2; ++x) {
+        QSet<QString> actualNames;
+        if (x == 0) {
+            // From C++
+            QScriptValueIterator it(myClass);
+            while (it.hasNext()) {
+                it.next();
+                actualNames.insert(it.name());
+            }
+        } else {
+            // From JS
+            m_engine->globalObject().setProperty("MyClass", myClass);
+            QScriptValue ret = m_engine->evaluate("a=[]; for (var p in MyClass) if (MyClass.hasOwnProperty(p)) a.push(p); a");
+            QVERIFY(ret.isArray());
+            QStringList strings = qscriptvalue_cast<QStringList>(ret);
+            for (int i = 0; i < strings.size(); ++i)
+                actualNames.insert(strings.at(i));
+        }
+        QCOMPARE(actualNames.size(), expectedNames.size());
+        for (int i = 0; i < expectedNames.size(); ++i)
+            QVERIFY(actualNames.contains(expectedNames.at(i)));
+    }
+}
+
 QTEST_MAIN(tst_QScriptExtQObject)
 #include "tst_qscriptextqobject.moc"