src/3rdparty/libgq/gconf/test-gconf.cpp
changeset 37 758a864f9613
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/3rdparty/libgq/gconf/test-gconf.cpp	Mon Oct 04 01:19:32 2010 +0300
@@ -0,0 +1,299 @@
+#include "test-gconf.h"
+
+#define MYLOGLEVEL 2
+void myMessageOutput(QtMsgType type, const char *msg)
+{
+    switch (type) {
+    case QtDebugMsg:
+        if (MYLOGLEVEL <= 0)
+            fprintf(stderr, "Debug: %s\n", msg);
+        break;
+    case QtWarningMsg:
+        if (MYLOGLEVEL <= 1)
+            fprintf(stderr, "Warning: %s\n", msg);
+        break;
+    case QtCriticalMsg:
+        if (MYLOGLEVEL <= 2)
+            fprintf(stderr, "Critical: %s\n", msg);
+        break;
+    case QtFatalMsg:
+        if (MYLOGLEVEL <= 3)
+            fprintf(stderr, "Fatal: %s\n", msg);
+        abort();
+    }
+}
+
+//
+// Definition of testcases: Normal tests
+//
+
+void GConfItemTests::timeout()
+{
+    timed_out = true;
+    timer.stop();
+}
+
+// Before all tests
+void GConfItemTests::initTestCase()
+{
+    connect(&timer, SIGNAL(timeout()),
+            this, SLOT(timeout()));
+}
+
+// After all tests
+void GConfItemTests::cleanupTestCase()
+{
+}
+
+// Before each test
+void GConfItemTests::init()
+{
+    boolItem = new GConfItem("/Test/Bool");
+    intItem = new GConfItem("/Test/Int");
+    stringItem = new GConfItem("/Test/String");
+    doubleItem = new GConfItem("/Test/Double");
+    stringListItem = new GConfItem("/Test/StringList");
+    intListItem = new GConfItem("/Test/IntList");
+    doubleListItem = new GConfItem("/Test/DoubleList");
+    boolListItem = new GConfItem("/Test/BoolList");
+    unsetBeforeItem = new GConfItem("/Test/UnsetBefore");
+    unsetAfterItem = new GConfItem("/Test/UnsetAfter");
+    signalSpy = new SignalListener();
+    QObject::connect(boolItem, SIGNAL(valueChanged()), signalSpy, SLOT(valueChanged()));
+    QObject::connect(intItem, SIGNAL(valueChanged()), signalSpy, SLOT(valueChanged()));
+    QObject::connect(stringItem, SIGNAL(valueChanged()), signalSpy, SLOT(valueChanged()));
+    QObject::connect(doubleItem, SIGNAL(valueChanged()), signalSpy, SLOT(valueChanged()));
+    QObject::connect(stringListItem, SIGNAL(valueChanged()), signalSpy, SLOT(valueChanged()));
+    QObject::connect(intListItem, SIGNAL(valueChanged()), signalSpy, SLOT(valueChanged()));
+    QObject::connect(doubleListItem, SIGNAL(valueChanged()), signalSpy, SLOT(valueChanged()));
+    QObject::connect(boolListItem, SIGNAL(valueChanged()), signalSpy, SLOT(valueChanged()));
+}
+
+// After each test
+void GConfItemTests::cleanup()
+{
+    QObject::disconnect(boolItem, SIGNAL(valueChanged()), signalSpy, SLOT(valueChanged()));
+    QObject::disconnect(intItem, SIGNAL(valueChanged()), signalSpy, SLOT(valueChanged()));
+    QObject::disconnect(stringItem, SIGNAL(valueChanged()), signalSpy, SLOT(valueChanged()));
+    QObject::disconnect(doubleItem, SIGNAL(valueChanged()), signalSpy, SLOT(valueChanged()));
+    QObject::disconnect(stringListItem, SIGNAL(valueChanged()), signalSpy, SLOT(valueChanged()));
+    QObject::disconnect(intListItem, SIGNAL(valueChanged()), signalSpy, SLOT(valueChanged()));
+    QObject::disconnect(doubleListItem, SIGNAL(valueChanged()), signalSpy, SLOT(valueChanged()));
+    QObject::disconnect(boolListItem, SIGNAL(valueChanged()), signalSpy, SLOT(valueChanged()));
+    delete signalSpy;
+    delete boolItem;
+    delete intItem;
+    delete stringItem;
+    delete doubleItem;
+    delete stringListItem;
+    delete intListItem;
+    delete doubleListItem;
+    delete boolListItem;
+    delete unsetBeforeItem;
+    delete unsetAfterItem;
+
+    timer.stop();
+}
+
+void GConfItemTests::path()
+{
+    QCOMPARE(boolItem->key(), QString("/Test/Bool"));
+    QCOMPARE(intItem->key(), QString("/Test/Int"));
+    QCOMPARE(stringItem->key(), QString("/Test/String"));
+    QCOMPARE(doubleItem->key(), QString("/Test/Double"));
+    QCOMPARE(stringListItem->key(), QString("/Test/StringList"));
+    QCOMPARE(intListItem->key(), QString("/Test/IntList"));
+    QCOMPARE(doubleListItem->key(), QString("/Test/DoubleList"));
+    QCOMPARE(boolListItem->key(), QString("/Test/BoolList"));
+    QCOMPARE(unsetBeforeItem->key(), QString("/Test/UnsetBefore"));
+    QCOMPARE(unsetAfterItem->key(), QString("/Test/UnsetAfter"));
+}
+
+void GConfItemTests::external_values()
+{
+    // These values are set before this program starts.
+    QCOMPARE(boolItem->value().toBool(), true);
+    QCOMPARE(intItem->value().toInt(), 123);
+    QCOMPARE(stringItem->value().toString(), QString("Hello GConf"));
+    QCOMPARE(doubleItem->value().toDouble(), 3.5);
+    QCOMPARE(stringListItem->value().toStringList(), QStringList() << "Hello" << "GConf" << QString::fromUtf8("ÄÖÜ"));
+    QCOMPARE(intListItem->value().toList(), QList<QVariant>() << 1 << 2 << 3 << 4);
+    QCOMPARE(doubleListItem->value().toList(), QList<QVariant>() << 3.5 << 3.5 << 3.5);
+    QCOMPARE(boolListItem->value().toList(), QList<QVariant>() << false << true << true << false);
+    QCOMPARE(unsetBeforeItem->value().isValid(), false);
+    QCOMPARE(unsetAfterItem->value().isValid(), true);
+}
+
+void GConfItemTests::set_bool()
+{
+    signalSpy->numberOfCalls = 0;
+
+    boolItem->set(false);
+    QCOMPARE(boolItem->value().toBool(), false);
+    boolItem->set(true);
+    QCOMPARE(boolItem->value().toBool(), true);
+
+    QCOMPARE(signalSpy->numberOfCalls, 2);
+}
+
+void GConfItemTests::set_int()
+{
+    signalSpy->numberOfCalls = 0;
+
+    intItem->set(12);
+    QCOMPARE(intItem->value().toInt(), 12);
+    intItem->set(-5);
+    QCOMPARE(intItem->value().toInt(), -5);
+
+    QCOMPARE(signalSpy->numberOfCalls, 2);
+}
+
+void GConfItemTests::set_string()
+{
+    signalSpy->numberOfCalls = 0;
+
+    stringItem->set("Hi");
+    QCOMPARE(stringItem->value().toString(), QString("Hi"));
+
+    QCOMPARE(signalSpy->numberOfCalls, 1);
+}
+
+void GConfItemTests::set_unicode_string()
+{
+    signalSpy->numberOfCalls = 0;
+
+    stringItem->set(QString::fromUtf8("Höäü"));
+    QCOMPARE(stringItem->value().toString(), QString::fromUtf8("Höäü"));
+
+    QCOMPARE(signalSpy->numberOfCalls, 1);
+}
+
+void GConfItemTests::set_double()
+{
+    signalSpy->numberOfCalls = 0;
+
+    doubleItem->set(1.2345);
+    QCOMPARE(doubleItem->value().toDouble(), 1.2345);
+
+    QCOMPARE(signalSpy->numberOfCalls, 1);
+}
+
+void GConfItemTests::set_string_list()
+{
+    signalSpy->numberOfCalls = 0;
+
+    stringListItem->set(QStringList() << "one" << "two" << "three");
+    QCOMPARE(stringListItem->value().toStringList(), QStringList() << "one" << "two" << "three");
+
+    QCOMPARE(signalSpy->numberOfCalls, 1);
+}
+
+void GConfItemTests::set_int_list()
+{
+    signalSpy->numberOfCalls = 0;
+
+    intListItem->set(QList<QVariant>() << 10 << 11 << 12);
+    QCOMPARE(intListItem->value().toList(), QList<QVariant>() << 10 << 11 << 12);
+
+    QCOMPARE(signalSpy->numberOfCalls, 1);
+}
+
+void GConfItemTests::set_double_list()
+{
+    signalSpy->numberOfCalls = 0;
+
+    doubleListItem->set(QList<QVariant>() << 1.1 << 2.2 << 3.3);
+    QCOMPARE(doubleListItem->value().toList(), QList<QVariant>() << 1.1 << 2.2 << 3.3);
+
+    QCOMPARE(signalSpy->numberOfCalls, 1);
+}
+
+void GConfItemTests::set_bool_list()
+{
+    signalSpy->numberOfCalls = 0;
+
+    boolListItem->set(QList<QVariant>() << true << true << false);
+    QCOMPARE(boolListItem->value().toList(), QList<QVariant>() << true << true << false);
+
+    QCOMPARE(signalSpy->numberOfCalls, 1);
+}
+
+void GConfItemTests::unset ()
+{
+    signalSpy->numberOfCalls = 0;
+
+    boolItem->unset();
+    QCOMPARE(boolItem->value().isValid(), false);
+
+    QCOMPARE(signalSpy->numberOfCalls, 1);
+}
+
+void GConfItemTests::list_dirs ()
+{
+    GConfItem test("/Test");
+    QStringList dirs = test.listDirs();
+
+    QVERIFY (!dirs.contains("/Test/Bool"));
+    QVERIFY (!dirs.contains("/Test/Int"));
+    QVERIFY (!dirs.contains("/Test/String"));
+    QVERIFY (!dirs.contains("/Test/Double"));
+    QVERIFY (!dirs.contains("/Test/StringList"));
+    QVERIFY (!dirs.contains("/Test/IntList"));
+    QVERIFY (!dirs.contains("/Test/DoubleList"));
+    QVERIFY (!dirs.contains("/Test/BoolList"));
+    QVERIFY (!dirs.contains("/Test/UnsetBefore"));
+    QVERIFY (!dirs.contains("/Test/UnsetAfter"));
+    QVERIFY (dirs.contains("/Test/Dir"));
+}
+
+void GConfItemTests::list_entries ()
+{
+    GConfItem test("/Test");
+    QStringList entries = test.listEntries();
+
+    QVERIFY (!entries.contains("/Test/Bool"));  // has been unset above
+    QVERIFY (entries.contains("/Test/Int"));
+    QVERIFY (entries.contains("/Test/String"));
+    QVERIFY (entries.contains("/Test/Double"));
+    QVERIFY (entries.contains("/Test/StringList"));
+    QVERIFY (entries.contains("/Test/IntList"));
+    QVERIFY (entries.contains("/Test/DoubleList"));
+    QVERIFY (entries.contains("/Test/BoolList"));
+    QVERIFY (!entries.contains("/Test/UnsetBefore"));
+    QVERIFY (entries.contains("/Test/UnsetAfter"));
+    QVERIFY (!entries.contains("/Test/Dir"));
+}
+
+void GConfItemTests::get_default ()
+{
+    intItem->unset();
+    QCOMPARE(intItem->value(123).toInt(), 123);
+    intItem->set(234);
+    QCOMPARE(intItem->value(123).toInt(), 234);
+}
+
+void GConfItemTests::propagate ()
+{
+    GConfItem secondIntItem("/Test/Int");
+    secondIntItem.set(3000);
+    QVERIFY_TIMEOUT(2000, intItem->value() == secondIntItem.value());
+    QCOMPARE(signalSpy->numberOfCalls, 2);
+}
+
+void GConfItemTests::set_external()
+{
+    // This must be the last test case.  The values that are set here
+    // are checked after this program exits.
+
+    boolItem->set(false);
+    intItem->set(54321);
+    stringItem->set("Good bye GConf");
+    doubleItem->set(-2.5);
+    stringListItem->set(QStringList() << "Good" << "bye" << "GConf" << QString::fromUtf8("äöü"));
+    intListItem->set(QList<QVariant>() << 5 << 4 << 3 << 2 << 1);
+    doubleListItem->set(QList<QVariant>() << -2.5 << -2.5);
+    boolListItem->set(QList<QVariant>() << false << false << true << true);
+    unsetAfterItem->set(QVariant());
+}
+
+QTEST_MAIN(GConfItemTests);