diff d2/qt/core/test/Objects.d @ 372:a032df77b6ab

Simple debug helper. Unittests. Meta-object for polymorphic non-QObjects
author Max Samukha <maxter@spambox.com>
date Thu, 08 Jul 2010 17:19:05 +0300
parents
children bd7f485e3573
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/d2/qt/core/test/Objects.d	Thu Jul 08 17:19:05 2010 +0300
@@ -0,0 +1,141 @@
+module qt.core.test.QObject;
+
+// make sure QtdUnittest is defined
+version (QtdUnittest) {} else { static assert(false); }
+
+import
+    core.memory,
+    qtd.Debug,
+    qtd.meta.Runtime,
+    qt.core.QObject,
+    qt.core.QMetaObject;
+    
+import std.stdio;
+
+extern (C) void* qtd_test_QObject_create(void* parent);
+extern (C) void qtd_test_QObject_delete(void* nativeId);
+extern (C) void qtd_test_QObject_event(void* nativeId);
+
+class C1 : QObject
+{
+    mixin Q_CLASSINFO!("author", "Sabrina Schweinsteiger");
+    mixin Q_CLASSINFO!("url", "http://doc.moosesoft.co.uk/1.0/");
+
+    static int slot1Called;
+    static ClassInfo eventReceived;
+
+    this(QObject parent = null)
+    {
+        super(parent);
+    }
+
+    final
+    {
+        void signal_signal1();
+        void signal_signal2(int);
+    }
+
+    override bool event(QEvent event)
+    {
+        eventReceived = event.classinfo;
+        return false;
+    }
+
+    void slot_slot1()
+    {
+        slot1Called++;
+    }
+
+    static void reset()
+    {
+        slot1Called = 0;
+        eventReceived = null;
+    }
+
+    mixin Q_OBJECT;
+}
+
+void test1()
+{
+    auto c1 = new C1;
+}
+
+void test2()
+{
+    scope c1 = new C1;
+}
+
+void test3()
+{
+    auto ptr = qtd_test_QObject_create(null);
+    scope obj = meta!(QObject).getWrapper(ptr);
+    assert (qtdDebug.wrapperCount == 1);
+}
+
+void test4()
+{
+    scope c1 = new C1;
+    qtd_test_QObject_event(c1.qtdNativeId);
+    assert (c1.eventReceived !is null);
+    assert (c1.eventReceived.classinfo == QEvent.classinfo);
+}
+
+void test5()
+{
+    scope c1 = new C1;
+
+    QObject.connect(c1, "signal1", c1, "slot1");
+    c1.signal1();
+    assert(c1.slot1Called == 1);
+
+    QObject.connect(c1, "signal2", c1, "slot1");
+    c1.signal2(42);
+    assert(C1.slot1Called == 2);
+}
+
+unittest
+{
+    static void reset()
+    {
+        qtdDebug.reset();
+        C1.reset();
+    }
+
+    qtdDebug.info("Running unittests (" ~ __FILE__ ~")");
+
+
+    //test1
+    reset();
+    test1();
+    GC.collect();
+    
+    writeln("Collected");
+    assert(qtdDebug.wrapperCount == 1);
+    
+    
+    //test2
+    reset();
+    test2();
+    assert(qtdDebug.wrapperCount == 0);
+    assert(qtdDebug.nativeDeletedCount == 1);
+
+    //test3
+    reset();
+    test3();
+    assert(qtdDebug.wrapperCount == 0);
+    assert(qtdDebug.nativeDeletedCount == 1);
+    
+    //test4
+    reset();
+    test4();
+    GC.collect();
+    assert(qtdDebug.wrapperCount == 0);
+    assert(qtdDebug.nativeDeletedCount == 1);
+
+    //test5
+    qtdDebug.reset();
+    test5();
+    assert(qtdDebug.wrapperCount == 0);
+
+    qtdDebug.info("Unittests completed (" ~ __FILE__ ~")");
+}