/**************************************************************************** ** ** Copyright (C) 2015 The Qt Company Ltd. ** Copyright (C) 2016 Ivailo Monev ** ** This file is part of the test suite of the Katie Toolkit. ** ** $QT_BEGIN_LICENSE:LGPL$ ** ** GNU Lesser General Public License Usage ** This file may be used under the terms of the GNU Lesser ** General Public License version 2.1 as published by the Free Software ** Foundation and appearing in the file LICENSE.LGPL included in the ** packaging of this file. Please review the following information to ** ensure the GNU Lesser General Public License version 2.1 requirements ** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. ** ** $QT_END_LICENSE$ ** ****************************************************************************/ #include #include #include #include #include #include #include #include #include #include //TESTED_CLASS= //TESTED_FILES= class tst_QFont : public QObject { Q_OBJECT public: tst_QFont(); virtual ~tst_QFont(); public slots: void init(); void cleanup(); private slots: void getSetCheck(); void exactMatch(); void compare(); void resolve(); void resetFont(); void isCopyOf(); void italicOblique(); void lastResortFamily(); }; // Testing get/set functions void tst_QFont::getSetCheck() { QFont obj1; // Style QFont::style() // void QFont::setStyle(Style) obj1.setStyle(QFont::Style(QFont::StyleNormal)); QCOMPARE(QFont::Style(QFont::StyleNormal), obj1.style()); obj1.setStyle(QFont::Style(QFont::StyleItalic)); QCOMPARE(QFont::Style(QFont::StyleItalic), obj1.style()); obj1.setStyle(QFont::Style(QFont::StyleOblique)); QCOMPARE(QFont::Style(QFont::StyleOblique), obj1.style()); // HintingPreference QFont::hintingPreference() // void QFont::setHintingPreference(HintingPreference) obj1.setHintingPreference(QFont::HintingPreference(QFont::PreferDefaultHinting)); QCOMPARE(QFont::HintingPreference(QFont::PreferDefaultHinting), obj1.hintingPreference()); obj1.setHintingPreference(QFont::HintingPreference(QFont::PreferNoHinting)); QCOMPARE(QFont::HintingPreference(QFont::PreferNoHinting), obj1.hintingPreference()); } tst_QFont::tst_QFont() { } tst_QFont::~tst_QFont() { } void tst_QFont::init() { // TODO: Add initialization code here. // This will be executed immediately before each test is run. } void tst_QFont::cleanup() { // TODO: Add cleanup code here. // This will be executed immediately after each test is run. } void tst_QFont::exactMatch() { // Check if a non-existing font hasn't an exact match QFont font( "BogusFont", 33 ); QVERIFY(!font.exactMatch() ); QFontDatabase fdb; QVERIFY(!QFont("freesans").exactMatch()); QVERIFY(!QFont("freeserif").exactMatch()); QVERIFY(!QFont("freemono").exactMatch()); } void tst_QFont::italicOblique() { QFontDatabase fdb; QStringList families = fdb.families(); if (families.isEmpty()) return; QStringList::ConstIterator f_it, f_end = families.constEnd(); for (f_it = families.constBegin(); f_it != f_end; ++f_it) { QString family = *f_it; QStringList styles = fdb.styles(family); QVERIFY(!styles.isEmpty()); QStringList::ConstIterator s_it, s_end = styles.constEnd(); for (s_it = styles.constBegin(); s_it != s_end; ++s_it) { QString style = *s_it; if (fdb.isSmoothlyScalable(family, style)) { if (style.contains("Oblique")) { style.replace("Oblique", "Italic"); } else if (style.contains("Italic")) { style.replace("Italic", "Oblique"); } else { continue; } QFont f = fdb.font(family, style, 12); QVERIFY(f.italic()); } } } } void tst_QFont::compare() { QFont font; { QFont font2 = font; font2.setPointSize( 24 ); QVERIFY( font != font2 ); QCOMPARE(font < font2,!(font2 < font)); } { QFont font2 = font; font2.setPixelSize( 24 ); QVERIFY( font != font2 ); QCOMPARE(font < font2,!(font2 < font)); } font.setPointSize(12); font.setItalic(false); font.setWeight(QFont::Normal); font.setUnderline(false); font.setStrikeOut(false); font.setOverline(false); { QFont font2 = font; font2.setPointSize( 24 ); QVERIFY( font != font2 ); QCOMPARE(font < font2,!(font2 < font)); } { QFont font2 = font; font2.setPixelSize( 24 ); QVERIFY( font != font2 ); QCOMPARE(font < font2,!(font2 < font)); } { QFont font2 = font; font2.setItalic(true); QVERIFY( font != font2 ); QCOMPARE(font < font2,!(font2 < font)); font2.setItalic(false); QVERIFY( font == font2 ); QVERIFY(!(font < font2)); font2.setWeight(QFont::Bold); QVERIFY( font != font2 ); QCOMPARE(font < font2,!(font2 < font)); font2.setWeight(QFont::Normal); QVERIFY( font == font2 ); QVERIFY(!(font < font2)); font.setUnderline(true); QVERIFY( font != font2 ); QCOMPARE(font < font2,!(font2 < font)); font.setUnderline(false); QVERIFY( font == font2 ); QVERIFY(!(font < font2)); font.setStrikeOut(true); QVERIFY( font != font2 ); QCOMPARE(font < font2,!(font2 < font)); font.setStrikeOut(false); QVERIFY( font == font2 ); QVERIFY(!(font < font2)); font.setOverline(true); QVERIFY( font != font2 ); QCOMPARE(font < font2,!(font2 < font)); font.setOverline(false); QVERIFY( font == font2 ); QVERIFY(!(font < font2)); } } void tst_QFont::resolve() { QFont font; font.setPointSize(font.pointSize() * 2); font.setItalic(false); font.setWeight(QFont::Normal); font.setUnderline(false); font.setStrikeOut(false); font.setOverline(false); font.setStretch(QFont::Unstretched); QFont font1; font1.setWeight(QFont::Bold); QFont font2 = font1.resolve(font); QVERIFY(font2.weight() == font1.weight()); QVERIFY(font2.pointSize() == font.pointSize()); QVERIFY(font2.italic() == font.italic()); QVERIFY(font2.underline() == font.underline()); QVERIFY(font2.overline() == font.overline()); QVERIFY(font2.strikeOut() == font.strikeOut()); QVERIFY(font2.stretch() == font.stretch()); QFont font3; font3.setStretch(QFont::UltraCondensed); QFont font4 = font3.resolve(font1).resolve(font); QVERIFY(font4.stretch() == font3.stretch()); QVERIFY(font4.weight() == font.weight()); QVERIFY(font4.pointSize() == font.pointSize()); QVERIFY(font4.italic() == font.italic()); QVERIFY(font4.underline() == font.underline()); QVERIFY(font4.overline() == font.overline()); QVERIFY(font4.strikeOut() == font.strikeOut()); QFont f1,f2,f3; f2.setPointSize(45); f3.setPointSize(55); QFont f4 = f1.resolve(f2); QCOMPARE(f4.pointSize(), 45); f4 = f4.resolve(f3); QCOMPARE(f4.pointSize(), 55); } void tst_QFont::resetFont() { QWidget parent; QFont parentFont = parent.font(); parentFont.setPointSize(parentFont.pointSize() + 2); parent.setFont(parentFont); QWidget *child = new QWidget(&parent); QFont childFont = child->font(); childFont.setBold(!childFont.bold()); child->setFont(childFont); QVERIFY(parentFont.resolve() != 0); QVERIFY(childFont.resolve() != 0); QVERIFY(childFont != parentFont); child->setFont(QFont()); // reset font QVERIFY(child->font().resolve() == 0); QVERIFY(child->font().pointSize() == parent.font().pointSize()); QVERIFY(parent.font().resolve() != 0); } void tst_QFont::isCopyOf() { QFont font; QVERIFY(font.isCopyOf(QApplication::font())); QFont font2("bogusfont", 23); QVERIFY(! font2.isCopyOf(QApplication::font())); QFont font3 = font; QVERIFY(font3.isCopyOf(font)); font3.setPointSize(256); QVERIFY(!font3.isCopyOf(font)); font3.setPointSize(font.pointSize()); QVERIFY(!font3.isCopyOf(font)); } void tst_QFont::lastResortFamily() { QVERIFY(!QFont::lastResortFamily().isEmpty()); } QTEST_MAIN(tst_QFont) #include "moc_tst_qfont.cpp"