Clean up tst_QSettings::testVariantTypes()

Give the macro and its parameters clearer names, wrap the macro body
in do {...} while (0), use QCOMPARE() rather than QVERIFY()ing
comparisons, convert the result type to QMetaType::Type rather than
QVariant's deprecated equivalent, save one macro parameter by using
decltype() on another. Simplify one check by pulling out a common
sub-expression as a local variable.

In the process, give the settings keys meaningful names rather than
just "key" with a numeric suffix.

Ideally this test would be reworked to be data-driven, instead of
using macros, but the use of qvariant_cast<> to convert a read-back
value, along with the variable type of the input value compared to the
result of that cast, precludes this (as far as I can see).

Change-Id: I4e083cd0dea14d723910873829352e15740006bd
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
Reviewed-by: Mårten Nordheim <marten.nordheim@qt.io>
bb10
Edward Welbourne 2022-04-20 14:21:07 +02:00
parent af61bb018f
commit 2b16997116
1 changed files with 26 additions and 27 deletions

View File

@ -1300,18 +1300,19 @@ void tst_QSettings::testVariantTypes()
QCOMPARE(settings.value("empty"), QVariant());
}
#define testVal(key, val, tp, rtype) \
#define testValue(key, actual, expected) do { \
{ \
QSettings settings1(format, QSettings::UserScope, "software.org", "KillerAPP"); \
settings1.setValue(key, QVariant::fromValue(val)); \
settings1.setValue(key, QVariant::fromValue(actual)); \
} \
QConfFile::clearCache(); \
{ \
QSettings settings2(format, QSettings::UserScope, "software.org", "KillerAPP"); \
QVariant v = settings2.value(key); \
QVERIFY(qvariant_cast<tp >(v) == val); \
QVERIFY(v.type() == QVariant::rtype); \
}
QCOMPARE(v.metaType().id(), QMetaType::expected); \
QCOMPARE(qvariant_cast<decltype(actual)>(v), actual); \
} \
} while (0)
typedef QMap<QString, QVariant> TestVariantMap;
@ -1319,54 +1320,52 @@ void tst_QSettings::testVariantTypes()
m2.insert("ene", "due");
m2.insert("rike", "fake");
m2.insert("borba", "dorba");
testVal("key2", m2, TestVariantMap, Map);
testValue("customMap", m2, QVariantMap);
QStringList l2;
l2 << "ene" << "due" << "@Point(1 2)" << "@fake";
testVal("key3", l2, QStringList, StringList);
testValue("stringsAt", l2, QStringList);
l2.clear();
l2 << "ene" << "due" << "rike" << "fake";
testVal("key3", l2, QStringList, StringList);
testValue("strings", l2, QStringList);
QList<QVariant> l3;
QDate date = QDate::currentDate();
QTime time = QTime::currentTime();
l3 << QString("ene") << 10 << QVariant::fromValue(QColor(1, 2, 3)) << QVariant(QRect(1, 2, 3, 4))
<< QVariant(QSize(4, 56)) << QVariant(QPoint(4, 2)) << true << false << date << time;
testVal("key3", l3, QVariantList, List);
testValue("mixedList", l3, QVariantList);
testVal("key4", QString("hello"), QString, String);
testVal("key5", QColor(1, 2, 3), QColor, Color);
testVal("key6", QRect(1, 2, 3, 4), QRect, Rect);
testVal("key7", QSize(4, 56), QSize, Size);
testVal("key8", QPoint(4, 2), QPoint, Point);
testVal("key10", date, QDate, Date);
testVal("key11", time, QTime, Time);
testVal("key12", QByteArray("foo bar"), QByteArray, ByteArray);
testValue("string", QString("hello"), QString);
testValue("color", QColor(1, 2, 3), QColor);
testValue("rect", QRect(1, 2, 3, 4), QRect);
testValue("size", QSize(4, 56), QSize);
testValue("point", QPoint(4, 2), QPoint);
testValue("date", date, QDate);
testValue("time", time, QTime);
testValue("byteArray", QByteArray("foo bar"), QByteArray);
QList<QVariant> l4;
l4 << QVariant(m2) << QVariant(l2) << QVariant(l3);
testVal("key13", l4, QVariantList, List);
testValue("collectList", l4, QVariantList);
QDateTime dt = QDateTime::currentDateTime();
dt.setOffsetFromUtc(3600);
testVal("key14", dt, QDateTime, DateTime);
testValue("dateTime", dt, QDateTime);
#if QT_CONFIG(shortcut)
// We store key sequences as strings instead of binary variant blob, for improved
// readability in the resulting format.
if (format >= QSettings::InvalidFormat) {
testVal("keysequence", QKeySequence(Qt::ControlModifier + Qt::Key_F1), QKeySequence, KeySequence);
} else {
testVal("keysequence",
QKeySequence(Qt::ControlModifier + Qt::Key_F1).toString(QKeySequence::NativeText),
QString, String);
}
QKeySequence seq(Qt::ControlModifier | Qt::Key_F1);
if (format >= QSettings::InvalidFormat)
testValue("keySequence", seq, QKeySequence);
else
testValue("keySequence", seq.toString(QKeySequence::NativeText), QString);
#endif // QT_CONFIG(shortcut)
#undef testVal
#undef testValue
}
#endif