| /**************************************************************************** |
| ** |
| ** 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 <QFont> |
| #include <QFontDatabase> |
| #include <QString> |
| #include <QtTest> |
| #include <QCoreApplication> |
| |
| #include <QtQuick/private/qquickfontmetrics_p.h> |
| |
| #include <QFontMetricsF> |
| |
| 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<QString>("text"); |
| QTest::addColumn<Qt::TextElideMode>("mode"); |
| QTest::addColumn<qreal>("width"); |
| QTest::addColumn<int>("flags"); |
| |
| QStringList strings; |
| strings << QString() |
| << QString::fromLatin1("") |
| << QString::fromLatin1("0") |
| << QString::fromLatin1("@@@@@@@") |
| << QString::fromLatin1("Hello"); |
| |
| QVector<Qt::TextElideMode> 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<Qt::TextElideMode>(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.horizontalAdvance(text)); |
| QCOMPARE(metrics.boundingRect(text), expected.boundingRect(text)); |
| QCOMPARE(metrics.tightBoundingRect(text), expected.tightBoundingRect(text)); |
| } |
| |
| QTEST_MAIN(tst_QuickFontMetrics) |
| |
| #include "tst_quickfontmetrics.moc" |