diff options
Diffstat (limited to 'tests/auto/gui/text/qfont/tst_qfont.cpp')
-rw-r--r-- | tests/auto/gui/text/qfont/tst_qfont.cpp | 90 |
1 files changed, 88 insertions, 2 deletions
diff --git a/tests/auto/gui/text/qfont/tst_qfont.cpp b/tests/auto/gui/text/qfont/tst_qfont.cpp index 76d844b007..5426d7b117 100644 --- a/tests/auto/gui/text/qfont/tst_qfont.cpp +++ b/tests/auto/gui/text/qfont/tst_qfont.cpp @@ -1,5 +1,7 @@ // Copyright (C) 2016 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0 +// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only + +#undef QT_NO_FOREACH // this file contains unported legacy Q_FOREACH uses #include <QTest> #include <QBuffer> @@ -19,6 +21,9 @@ #endif #include <qlist.h> #include <QtTest/private/qemulationdetector_p.h> +#include <private/qcomparisontesthelper_p.h> + +using namespace Qt::StringLiterals; class tst_QFont : public QObject { @@ -54,6 +59,9 @@ private slots: void setFamilies(); void setFamiliesAndFamily_data(); void setFamiliesAndFamily(); + void featureAccessors(); + void tagCompares_data(); + void tagCompares(); }; // Testing get/set functions @@ -150,7 +158,7 @@ void tst_QFont::italicOblique() continue; } QFont f = QFontDatabase::font(family, style, 12); - QVERIFY(f.italic()); + QVERIFY2(f.italic(), qPrintable(QString::asprintf("Failed for font \"%ls\"", qUtf16Printable(f.family())))); } } } @@ -841,5 +849,83 @@ void tst_QFont::setFamiliesAndFamily() QFontDatabase::removeApplicationFont(weirdFontId); } +void tst_QFont::featureAccessors() +{ + const QFont::Tag abcdTag("abcd"); + QCOMPARE(abcdTag.toString(), "abcd"); + QVERIFY(abcdTag.isValid()); + + QFont font; + QVERIFY(font.featureTags().isEmpty()); + font.setFeature("abcd", 0xc0ffee); + + QVERIFY(font.isFeatureSet(abcdTag)); + QVERIFY(!font.isFeatureSet("bcde")); + QCOMPARE(font.featureTags().size(), 1); + QCOMPARE(font.featureTags().first(), abcdTag); + QCOMPARE(font.featureTags().first(), "abcd"); + QCOMPARE(font.featureValue(abcdTag), 0xc0ffeeU); + QCOMPARE(font.featureValue("bcde"), 0U); + font.setFeature(abcdTag, 0xf00d); + QCOMPARE(font.featureTags().size(), 1); + QCOMPARE(font.featureValue(abcdTag), 0xf00dU); + + QFont::Tag invalidTag; + QVERIFY(!invalidTag.isValid()); + font.setFeature(invalidTag, 0xcaca0); + QVERIFY(!font.isFeatureSet(invalidTag)); + QCOMPARE(font.featureTags().size(), 1); + QFont font2 = font; + + font.unsetFeature("abcd"); + QVERIFY(!font.isFeatureSet("abcd")); + QVERIFY(font.featureTags().isEmpty()); + + QVERIFY(font2.isFeatureSet("abcd")); + font2.clearFeatures(); + QVERIFY(font.featureTags().isEmpty()); + + // various constructor compile tests + QFont::Tag tag; + tag = QFont::Tag("1234"); + QVERIFY(QFont::Tag::fromString(QByteArray("abcd"))); + QVERIFY(QFont::Tag::fromString(u"frac"_s)); + + // named constructors with invalid input + QTest::ignoreMessage(QtWarningMsg, "The tag name must be exactly 4 characters long!"); + QVERIFY(!QFont::Tag::fromString(u"fraction"_s)); + QVERIFY(!QFont::Tag::fromValue(0)); + QVERIFY(QFont::Tag::fromValue(abcdTag.value())); + + enum Features { + Frac = QFont::Tag("frac").value() + }; +} + +void tst_QFont::tagCompares_data() +{ + QTestPrivate::testAllComparisonOperatorsCompile<QFont::Tag>(); + + QTest::addColumn<QFont::Tag>("lhs"); + QTest::addColumn<QFont::Tag>("rhs"); + QTest::addColumn<Qt::strong_ordering>("expectedOrder"); + + auto row = [](QFont::Tag left, QFont::Tag right) { + QTest::addRow("%s<=>%s", left.toString().constData(), right.toString().constData()) + << left << right << Qt::compareThreeWay(left.value(), right.value()); + }; + row("frac", "wght"); +} + +void tst_QFont::tagCompares() +{ + QFETCH(QFont::Tag, lhs); + QFETCH(QFont::Tag, rhs); + QFETCH(Qt::strong_ordering, expectedOrder); + + QVERIFY(comparesEqual(lhs, lhs)); + QCOMPARE(compareThreeWay(lhs, rhs), expectedOrder); +} + QTEST_MAIN(tst_QFont) #include "tst_qfont.moc" |