/**************************************************************************** ** ** Copyright (C) 2016 The Qt Company Ltd. ** Contact: https://www.qt.io/licensing/ ** ** This file is part of the QtQml module of the Qt Toolkit. ** ** $QT_BEGIN_LICENSE:GPL-EXCEPT$ ** Commercial License Usage ** Licensees holding valid commercial Qt licenses may use this file in ** accordance with the commercial license agreement provided with the ** Software or, alternatively, in accordance with the terms contained in ** a written agreement between you and The Qt Company. For licensing terms ** and conditions see https://www.qt.io/terms-conditions. For further ** information use the contact form at https://www.qt.io/contact-us. ** ** GNU General Public License Usage ** Alternatively, this file may be used under the terms of the GNU ** General Public License version 3 as published by the Free Software ** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT ** included in the packaging of this file. Please review the following ** information to ensure the GNU General Public License requirements will ** be met: https://www.gnu.org/licenses/gpl-3.0.html. ** ** $QT_END_LICENSE$ ** ****************************************************************************/ #include #include #include #include #include #include #include class tst_QuickFontMetrics : public QObject { Q_OBJECT public: tst_QuickFontMetrics(); private Q_SLOTS: void properties(); void functions_data(); void functions(); }; tst_QuickFontMetrics::tst_QuickFontMetrics() { } void tst_QuickFontMetrics::properties() { QStringList families = QFontDatabase().families().mid(0, 10); QQuickFontMetrics metrics; foreach (const QString &family, families) { QFont font(family); QFontMetricsF expected(font); QSignalSpy spy(&metrics, SIGNAL(fontChanged(QFont))); metrics.setFont(font); QCOMPARE(spy.count(), 1); QCOMPARE(metrics.ascent(), expected.ascent()); QCOMPARE(metrics.descent(), expected.descent()); QCOMPARE(metrics.height(), expected.height()); QCOMPARE(metrics.leading(), expected.leading()); QCOMPARE(metrics.lineSpacing(), expected.lineSpacing()); QCOMPARE(metrics.minimumLeftBearing(), expected.minLeftBearing()); QCOMPARE(metrics.minimumRightBearing(), expected.minRightBearing()); QCOMPARE(metrics.maximumCharacterWidth(), expected.maxWidth()); QCOMPARE(metrics.xHeight(), expected.xHeight()); QCOMPARE(metrics.averageCharacterWidth(), expected.averageCharWidth()); QCOMPARE(metrics.underlinePosition(), expected.underlinePos()); QCOMPARE(metrics.overlinePosition(), expected.overlinePos()); QCOMPARE(metrics.strikeOutPosition(), expected.strikeOutPos()); QCOMPARE(metrics.lineWidth(), expected.lineWidth()); } } Q_DECLARE_METATYPE(Qt::TextElideMode) void tst_QuickFontMetrics::functions_data() { QTest::addColumn("text"); QTest::addColumn("mode"); QTest::addColumn("width"); QTest::addColumn("flags"); QStringList strings; strings << QString() << QString::fromLatin1("") << QString::fromLatin1("0") << QString::fromLatin1("@@@@@@@") << QString::fromLatin1("Hello"); QVector elideModes; elideModes << Qt::ElideLeft << Qt::ElideMiddle << Qt::ElideRight << Qt::ElideNone; for (int stringIndex = 0; stringIndex < strings.size(); ++stringIndex) { const QString string = strings.at(stringIndex); for (int elideModeIndex = 0; elideModeIndex < elideModes.size(); ++elideModeIndex) { Qt::TextElideMode elideMode = static_cast(elideModes.at(elideModeIndex)); for (qreal width = 0; width < 100; width += 20) { const QString tag = QString::fromLatin1("string=%1, mode=%2, width=%3").arg(string).arg(elideMode).arg(width); QTest::newRow(qPrintable(tag)) << QString() << elideMode << width << 0; } } } } void tst_QuickFontMetrics::functions() { QFETCH(QString, text); QFETCH(Qt::TextElideMode, mode); QFETCH(qreal, width); QFETCH(int, flags); QQuickFontMetrics metrics; QFontMetricsF expected = QFontMetricsF(QFont()); QCOMPARE(metrics.elidedText(text, mode, width, flags), expected.elidedText(text, mode, width, flags)); QCOMPARE(metrics.advanceWidth(text), expected.width(text)); QCOMPARE(metrics.boundingRect(text), expected.boundingRect(text)); QCOMPARE(metrics.tightBoundingRect(text), expected.tightBoundingRect(text)); } QTEST_MAIN(tst_QuickFontMetrics) #include "tst_quickfontmetrics.moc"