// OptionsDialog::diffChanged unit tests. Lane GUI. // // Red when a key that didn't actually change starts getting resent to settings.set (it // would still work, but it defeats the fixture's "changed[] names exactly what took // effect" contract and spams event.settings.changed with noise), or a key present in // `current` but absent from `original` stops being treated as changed. #include #include #include "dialogs/OptionsDialog.hpp" using velox::gui::OptionsDialog; class TstOptionsDialog : public QObject { Q_OBJECT private slots: void identicalValuesProduceNoDiff(); void onlyChangedKeysAreReturned(); void keyAbsentFromOriginalCountsAsChanged(); void allKeysAreNonEmptyAndUnique(); }; void TstOptionsDialog::identicalValuesProduceNoDiff() { const QJsonObject original{{"connection.timeoutSec", 30}, {"proxy.mode", "system"}}; const QJsonObject current = original; QVERIFY(OptionsDialog::diffChanged(original, current).isEmpty()); } void TstOptionsDialog::onlyChangedKeysAreReturned() { const QJsonObject original{{"connection.timeoutSec", 30}, {"proxy.mode", "system"}}; const QJsonObject current{{"connection.timeoutSec", 60}, {"proxy.mode", "system"}}; const QJsonObject changed = OptionsDialog::diffChanged(original, current); QCOMPARE(changed.size(), 1); QCOMPARE(changed.value("connection.timeoutSec").toInt(), 60); } void TstOptionsDialog::keyAbsentFromOriginalCountsAsChanged() { const QJsonObject original{{"proxy.mode", "system"}}; const QJsonObject current{{"proxy.mode", "system"}, {"proxy.port", 1080}}; const QJsonObject changed = OptionsDialog::diffChanged(original, current); QCOMPARE(changed.size(), 1); QVERIFY(changed.contains("proxy.port")); } void TstOptionsDialog::allKeysAreNonEmptyAndUnique() { const QStringList keys = OptionsDialog::allKeys(); QVERIFY(!keys.isEmpty()); QCOMPARE(QSet(keys.begin(), keys.end()).size(), keys.size()); } QTEST_MAIN(TstOptionsDialog) #include "tst_optionsdialog.moc"