diff -r 000000000000 -r 1918ee327afb tests/auto/qfontdatabase/tst_qfontdatabase.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/tests/auto/qfontdatabase/tst_qfontdatabase.cpp Mon Jan 11 14:00:40 2010 +0000 @@ -0,0 +1,250 @@ +/**************************************************************************** +** +** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the test suite of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the Technology Preview License Agreement accompanying +** this package. +** +** GNU Lesser General Public License Usage +** Alternatively, 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. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** If you have questions regarding the use of this file, please contact +** Nokia at qt-info@nokia.com. +** +** +** +** +** +** +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + + +#include + + +#include + +#ifdef Q_OS_SYMBIAN +#define SRCDIR "." +#endif + +//TESTED_CLASS= +//TESTED_FILES= + +class tst_QFontDatabase : public QObject +{ +Q_OBJECT + +public: + tst_QFontDatabase(); + virtual ~tst_QFontDatabase(); + +public slots: + void init(); + void cleanup(); +private slots: + void styles_data(); + void styles(); + + void fixedPitch_data(); + void fixedPitch(); + + void widthTwoTimes_data(); + void widthTwoTimes(); + + void addAppFont_data(); + void addAppFont(); +}; + +tst_QFontDatabase::tst_QFontDatabase() +{ +#ifndef Q_OS_IRIX + QDir::setCurrent(SRCDIR); +#endif +} + +tst_QFontDatabase::~tst_QFontDatabase() +{ + +} + +void tst_QFontDatabase::init() +{ +// TODO: Add initialization code here. +// This will be executed immediately before each test is run. +} + +void tst_QFontDatabase::cleanup() +{ +// TODO: Add cleanup code here. +// This will be executed immediately after each test is run. +} + +void tst_QFontDatabase::styles_data() +{ + QTest::addColumn("font"); + + QTest::newRow( "data0" ) << QString( "Times New Roman" ); +} + +void tst_QFontDatabase::styles() +{ + QFETCH( QString, font ); + + QFontDatabase fdb; + QStringList styles = fdb.styles( font ); + QStringList::Iterator it = styles.begin(); + while ( it != styles.end() ) { + QString style = *it; + QString trimmed = style.trimmed(); + ++it; + + QCOMPARE( style, trimmed ); + } +} + +void tst_QFontDatabase::fixedPitch_data() +{ + QTest::addColumn("font"); + QTest::addColumn("fixedPitch"); + + QTest::newRow( "Times New Roman" ) << QString( "Times New Roman" ) << false; + QTest::newRow( "Arial" ) << QString( "Arial" ) << false; + QTest::newRow( "Script" ) << QString( "Script" ) << false; + QTest::newRow( "Courier" ) << QString( "Courier" ) << true; + QTest::newRow( "Courier New" ) << QString( "Courier New" ) << true; + QTest::newRow( "Lucida Console" ) << QString( "Lucida Console" ) << true; +} + +void tst_QFontDatabase::fixedPitch() +{ +#ifdef Q_WS_QWS + QSKIP("fixedPitch not implemented for Qtopia Core", SkipAll); +#endif + QFETCH(QString, font); + QFETCH(bool, fixedPitch); + + QFontDatabase fdb; + if (!fdb.families().contains(font)) + QSKIP( "Font not installed", SkipSingle); + + QCOMPARE(fdb.isFixedPitch(font), fixedPitch); + + QFont qfont(font); + QFontInfo fi(qfont); + QCOMPARE(fi.fixedPitch(), fixedPitch); +} + +void tst_QFontDatabase::widthTwoTimes_data() +{ + QTest::addColumn("font"); + QTest::addColumn("pixelSize"); + QTest::addColumn("text"); + + QTest::newRow("Arial") << QString("Arial") << 1000 << QString("Some text"); +} + +void tst_QFontDatabase::widthTwoTimes() +{ + QFETCH(QString, font); + QFETCH(int, pixelSize); + QFETCH(QString, text); + + QFont f; + f.setFamily(font); + f.setPixelSize(pixelSize); + + QFontMetrics fm(f); + int w1 = fm.charWidth(text, 0); + int w2 = fm.charWidth(text, 0); + + QCOMPARE(w1, w2); +} + +void tst_QFontDatabase::addAppFont_data() +{ + QTest::addColumn("useMemoryFont"); + QTest::newRow("font file") << false; + QTest::newRow("memory font") << true; +} + +void tst_QFontDatabase::addAppFont() +{ +#ifdef Q_OS_SYMBIAN + QSKIP( "Symbian: Application fonts are not yet supported", SkipAll ); +#else + QFETCH(bool, useMemoryFont); + QSignalSpy fontDbChangedSpy(QApplication::instance(), SIGNAL(fontDatabaseChanged())); + + QFontDatabase db; + + const QStringList oldFamilies = db.families(); + QVERIFY(!oldFamilies.isEmpty()); + + fontDbChangedSpy.clear(); + + int id; + if (useMemoryFont) { + QFile fontfile("FreeMono.ttf"); + fontfile.open(QIODevice::ReadOnly); + QByteArray fontdata = fontfile.readAll(); + QVERIFY(!fontdata.isEmpty()); + id = QFontDatabase::addApplicationFontFromData(fontdata); + } else { + id = QFontDatabase::addApplicationFont("FreeMono.ttf"); + } +#if defined(Q_OS_HPUX) && defined(QT_NO_FONTCONFIG) + // Documentation says that X11 systems that don't have fontconfig + // don't support application fonts. + QCOMPARE(id, -1); + return; +#endif + QCOMPARE(fontDbChangedSpy.count(), 1); +// addApplicationFont is supported on Mac, don't skip the test if it breaks. +#ifndef Q_WS_MAC + if (id == -1) { + QSKIP("Skip the test since app fonts are not supported on this system", SkipSingle); + return; + } +#endif + + const QStringList addedFamilies = QFontDatabase::applicationFontFamilies(id); + QVERIFY(!addedFamilies.isEmpty()); + + const QStringList newFamilies = db.families(); + QVERIFY(!newFamilies.isEmpty()); + QVERIFY(newFamilies.count() >= oldFamilies.count()); + + for (int i = 0; i < addedFamilies.count(); ++i) + QVERIFY(newFamilies.contains(addedFamilies.at(i))); + + QVERIFY(QFontDatabase::removeApplicationFont(id)); + QCOMPARE(fontDbChangedSpy.count(), 2); + + QVERIFY(db.families() == oldFamilies); +#endif +} + +QTEST_MAIN(tst_QFontDatabase) +#include "tst_qfontdatabase.moc"