1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91
|
#include <QtTest/QtTest>
#include <QGSettings>
class TestGSettingQt: public QObject
{
Q_OBJECT
private slots:
void initTestCase();
void test_deferredDelete();
void test_get_set_reset();
void test_keys();
void test_changed();
private:
QGSettings * settings;
QPointer<QObject> dummy;
};
void TestGSettingQt::initTestCase()
{
settings = new QGSettings("com.ubports.gsettings.Test", QByteArray(), this);
dummy = new QObject;
connect(settings, &QGSettings::changed, dummy.data(), &QObject::deleteLater); // delete the dummy object upon any gsettings change
}
void TestGSettingQt::test_deferredDelete()
{
QSignalSpy spy(dummy.data(), &QObject::destroyed); // watch the dummy object get destroyed
settings->set(QStringLiteral("testString"), "bar");
QVERIFY(spy.wait(500)); // extend time from 1ms to 500ms for slower machines
QVERIFY(dummy.isNull()); // verify dummy got destroyed for real
QCOMPARE(settings->get("testString").toString(), QStringLiteral("bar")); // also verify the setting got written by reading it back
// reset to default
settings->reset(QStringLiteral("testString"));
}
void TestGSettingQt::test_get_set_reset()
{
// Test default value
QCOMPARE(settings->get("testInteger").toInt(), 42);
// Set value
settings->set(QStringLiteral("testInteger"), 1);
QCOMPARE(settings->get("testInteger").toInt(), 1);
// Reset the value
settings->reset(QStringLiteral("testInteger"));
QCOMPARE(settings->get("testInteger").toInt(), 42);
}
void TestGSettingQt::test_keys()
{
auto keys = settings->keys();
QStringList expectedKeys = {"testString", "testDouble", "testEnum",
"testBoolean", "testInteger",
"testMap", "testStringList"};
keys.sort();
expectedKeys.sort();
QCOMPARE(keys, expectedKeys);
}
void TestGSettingQt::test_changed()
{
QSignalSpy spy(settings, &QGSettings::changed);
// Flush pending changed signals
QVERIFY(spy.wait(1));
spy.clear();
settings->set(QStringLiteral("testBoolean"), true);
// Verify change
QVERIFY(spy.wait(1));
QCOMPARE(spy.count(), 1);
QCOMPARE(spy.takeFirst().at(0).toString(), QStringLiteral("testBoolean"));
spy.clear();
// Test signal on reset event
settings->reset(QStringLiteral("testBoolean"));
QVERIFY(spy.wait(1));
QCOMPARE(spy.count(), 1);
QCOMPARE(spy.takeFirst().at(0).toString(), QStringLiteral("testBoolean"));
}
QTEST_MAIN(TestGSettingQt)
#include "cpptest.moc"
|