tests/auto/qscriptextqobject/tst_qscriptextqobject.cpp
changeset 30 5dc02b23752f
parent 22 79de32ba3296
child 33 3e2da88830cd
--- a/tests/auto/qscriptextqobject/tst_qscriptextqobject.cpp	Wed Jun 23 19:07:03 2010 +0300
+++ b/tests/auto/qscriptextqobject/tst_qscriptextqobject.cpp	Tue Jul 06 15:10:48 2010 +0300
@@ -533,6 +533,7 @@
     void objectDeleted();
     void connectToDestroyedSignal();
     void emitAfterReceiverDeleted();
+    void inheritedSlots();
     void enumerateMetaObject();
 
 private:
@@ -2659,6 +2660,21 @@
             << "mySignal()"
             // slots
             << "mySlot()" << "myOtherSlot()");
+
+    QTest::newRow( "don't enumerate slots" )
+        << int(QScriptEngine::ExcludeSlots)
+        << (QStringList()
+            // meta-object-defined properties:
+            //   inherited
+            << "objectName"
+            //   non-inherited
+            << "p1" << "p2" << "p4" << "p6"
+            // dynamic properties
+            << "dp1" << "dp2" << "dp3"
+            // inherited signals
+            << "destroyed(QObject*)" << "destroyed()"
+            // signals
+            << "mySignal()");
 }
 
 void tst_QScriptExtQObject::enumerate()
@@ -2851,6 +2867,28 @@
         QVERIFY(obj.property("intProperty").isValid());
         QVERIFY(obj.propertyFlags("intProperty") & QScriptValue::QObjectMember);
     }
+    // exclude slots
+    {
+        QScriptValue obj = m_engine->newQObject(m_myObject, QScriptEngine::QtOwnership,
+                                                QScriptEngine::ExcludeSlots);
+        QVERIFY(!obj.property("deleteLater").isValid());
+        QVERIFY(!(obj.propertyFlags("deleteLater") & QScriptValue::QObjectMember));
+        QVERIFY(!obj.property("mySlot").isValid());
+        QVERIFY(!(obj.propertyFlags("mySlot") & QScriptValue::QObjectMember));
+
+        QVERIFY(obj.property("myInvokable").isFunction());
+        QVERIFY(obj.propertyFlags("myInvokable") & QScriptValue::QObjectMember);
+
+        QVERIFY(obj.property("mySignal").isFunction());
+        QVERIFY(obj.propertyFlags("mySignal") & QScriptValue::QObjectMember);
+        QVERIFY(obj.property("destroyed").isFunction());
+        QVERIFY(obj.propertyFlags("destroyed") & QScriptValue::QObjectMember);
+
+        QVERIFY(obj.property("objectName").isValid());
+        QVERIFY(obj.propertyFlags("objectName") & QScriptValue::QObjectMember);
+        QVERIFY(obj.property("intProperty").isValid());
+        QVERIFY(obj.propertyFlags("intProperty") & QScriptValue::QObjectMember);
+    }
     // exclude all that we can
     {
         QScriptValue obj = m_engine->newQObject(m_myObject, QScriptEngine::QtOwnership,
@@ -2872,6 +2910,33 @@
         QCOMPARE(obj.property("child")
                  .strictlyEquals(QScriptValue(m_engine, 123)), true);
     }
+    // exclude absolutely all that we can
+    {
+        QScriptValue obj = m_engine->newQObject(m_myObject, QScriptEngine::QtOwnership,
+                                                QScriptEngine::ExcludeSuperClassMethods
+                                                | QScriptEngine::ExcludeSuperClassProperties
+                                                | QScriptEngine::ExcludeChildObjects
+                                                | QScriptEngine::ExcludeSlots);
+        QVERIFY(!obj.property("deleteLater").isValid());
+        QVERIFY(!(obj.propertyFlags("deleteLater") & QScriptValue::QObjectMember));
+
+        QVERIFY(!obj.property("mySlot").isValid());
+        QVERIFY(!(obj.propertyFlags("mySlot") & QScriptValue::QObjectMember));
+
+        QVERIFY(obj.property("mySignal").isFunction());
+        QVERIFY(obj.propertyFlags("mySignal") & QScriptValue::QObjectMember);
+
+        QVERIFY(obj.property("myInvokable").isFunction());
+        QVERIFY(obj.propertyFlags("myInvokable") & QScriptValue::QObjectMember);
+
+        QVERIFY(!obj.property("objectName").isValid());
+        QVERIFY(!(obj.propertyFlags("objectName") & QScriptValue::QObjectMember));
+
+        QVERIFY(obj.property("intProperty").isValid());
+        QVERIFY(obj.propertyFlags("intProperty") & QScriptValue::QObjectMember);
+
+        QVERIFY(!obj.property("child").isValid());
+    }
 
     delete child;
 }
@@ -3044,6 +3109,28 @@
     }
 }
 
+void tst_QScriptExtQObject::inheritedSlots()
+{
+    QScriptEngine eng;
+
+    QPushButton prototypeButton;
+    QScriptValue scriptPrototypeButton = eng.newQObject(&prototypeButton);
+
+    QPushButton button;
+    QScriptValue scriptButton = eng.newQObject(&button, QScriptEngine::QtOwnership,
+                                               QScriptEngine::ExcludeSlots);
+    scriptButton.setPrototype(scriptPrototypeButton);
+
+    QVERIFY(scriptButton.property("click").isFunction());
+    QVERIFY(scriptButton.property("click").strictlyEquals(scriptPrototypeButton.property("click")));
+
+    QSignalSpy prototypeButtonClickedSpy(&prototypeButton, SIGNAL(clicked()));
+    QSignalSpy buttonClickedSpy(&button, SIGNAL(clicked()));
+    scriptButton.property("click").call(scriptButton);
+    QCOMPARE(buttonClickedSpy.count(), 1);
+    QCOMPARE(prototypeButtonClickedSpy.count(), 0);
+}
+
 void tst_QScriptExtQObject::enumerateMetaObject()
 {
     QScriptValue myClass = m_engine->newQMetaObject(m_myObject->metaObject(), m_engine->undefinedValue());