From 4d763c3d9f26da034495b98fe829b88fed34a22c Mon Sep 17 00:00:00 2001 From: Michael Brasser Date: Mon, 29 Aug 2011 10:29:01 +1000 Subject: [PATCH] Re-add QDeclarativeFontLoader autotest. Was accidently removed in the qtquick1 work. Change-Id: I511efa65e85858e22909257a95f635d5c06cb0a5 Reviewed-on: http://codereview.qt.nokia.com/3685 Reviewed-by: Martin Jones --- .../qdeclarativefontloader/data/daniel.ttf | Bin 0 -> 51984 bytes .../qdeclarativefontloader/data/tarzeau_ocr_a.ttf | Bin 0 -> 24544 bytes .../qdeclarativefontloader.pro | 18 ++ .../tst_qdeclarativefontloader.cpp | 230 ++++++++++++++++++++ 4 files changed, 248 insertions(+), 0 deletions(-) create mode 100644 tests/auto/declarative/qdeclarativefontloader/data/daniel.ttf create mode 100644 tests/auto/declarative/qdeclarativefontloader/data/dummy.ttf create mode 100644 tests/auto/declarative/qdeclarativefontloader/data/tarzeau_ocr_a.ttf create mode 100644 tests/auto/declarative/qdeclarativefontloader/qdeclarativefontloader.pro create mode 100644 tests/auto/declarative/qdeclarativefontloader/tst_qdeclarativefontloader.cpp diff --git a/tests/auto/declarative/qdeclarativefontloader/data/daniel.ttf b/tests/auto/declarative/qdeclarativefontloader/data/daniel.ttf new file mode 100644 index 0000000000000000000000000000000000000000..aae50d5035b98612c6c9a4e42efb07ec260c4e5d GIT binary patch literal 51984 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 +#include +#include +#include +#include +#include +#include "../../../shared/util.h" +#include "../../declarative/shared/testhttpserver.h" + +#define SERVER_PORT 14448 + +#ifdef Q_OS_SYMBIAN +// In Symbian OS test data is located in applications private dir +#define SRCDIR "." +#endif + +class tst_qdeclarativefontloader : public QObject +{ + Q_OBJECT +public: + tst_qdeclarativefontloader(); + +private slots: + void init(); + void noFont(); + void namedFont(); + void localFont(); + void failLocalFont(); + void webFont(); + void redirWebFont(); + void failWebFont(); + void changeFont(); + +private: + QDeclarativeEngine engine; + TestHTTPServer server; +}; + +tst_qdeclarativefontloader::tst_qdeclarativefontloader() : + server(SERVER_PORT) +{ + server.serveDirectory(SRCDIR "/data"); +} + +void tst_qdeclarativefontloader::init() +{ + QVERIFY(server.isValid()); +} + +void tst_qdeclarativefontloader::noFont() +{ + QString componentStr = "import QtQuick 2.0\nFontLoader { }"; + QDeclarativeComponent component(&engine); + component.setData(componentStr.toLatin1(), QUrl::fromLocalFile("")); + QDeclarativeFontLoader *fontObject = qobject_cast(component.create()); + + QVERIFY(fontObject != 0); + QCOMPARE(fontObject->name(), QString("")); + QCOMPARE(fontObject->source(), QUrl("")); + QTRY_VERIFY(fontObject->status() == QDeclarativeFontLoader::Null); + + delete fontObject; +} + +void tst_qdeclarativefontloader::namedFont() +{ + QString componentStr = "import QtQuick 2.0\nFontLoader { name: \"Helvetica\" }"; + QDeclarativeComponent component(&engine); + component.setData(componentStr.toLatin1(), QUrl::fromLocalFile("")); + QDeclarativeFontLoader *fontObject = qobject_cast(component.create()); + + QVERIFY(fontObject != 0); + QCOMPARE(fontObject->source(), QUrl("")); + QCOMPARE(fontObject->name(), QString("Helvetica")); + QTRY_VERIFY(fontObject->status() == QDeclarativeFontLoader::Ready); +} + +void tst_qdeclarativefontloader::localFont() +{ + QString componentStr = "import QtQuick 2.0\nFontLoader { source: \"" SRCDIR "/data/tarzeau_ocr_a.ttf\" }"; + QDeclarativeComponent component(&engine); + component.setData(componentStr.toLatin1(), QUrl::fromLocalFile("")); + QDeclarativeFontLoader *fontObject = qobject_cast(component.create()); + + QVERIFY(fontObject != 0); + QVERIFY(fontObject->source() != QUrl("")); + QTRY_COMPARE(fontObject->name(), QString("OCRA")); + QTRY_VERIFY(fontObject->status() == QDeclarativeFontLoader::Ready); +} + +void tst_qdeclarativefontloader::failLocalFont() +{ + QString componentStr = "import QtQuick 2.0\nFontLoader { source: \"" + QUrl::fromLocalFile(SRCDIR "/data/dummy.ttf").toString() + "\" }"; + QTest::ignoreMessage(QtWarningMsg, QString("file::2:1: QML FontLoader: Cannot load font: \"" + QUrl::fromLocalFile(SRCDIR "/data/dummy.ttf").toString() + "\"").toUtf8().constData()); + QDeclarativeComponent component(&engine); + component.setData(componentStr.toLatin1(), QUrl::fromLocalFile("")); + QDeclarativeFontLoader *fontObject = qobject_cast(component.create()); + + QVERIFY(fontObject != 0); + QVERIFY(fontObject->source() != QUrl("")); + QTRY_COMPARE(fontObject->name(), QString("")); + QTRY_VERIFY(fontObject->status() == QDeclarativeFontLoader::Error); +} + +void tst_qdeclarativefontloader::webFont() +{ + QString componentStr = "import QtQuick 2.0\nFontLoader { source: \"http://localhost:14448/tarzeau_ocr_a.ttf\" }"; + QDeclarativeComponent component(&engine); + + component.setData(componentStr.toLatin1(), QUrl::fromLocalFile("")); + QDeclarativeFontLoader *fontObject = qobject_cast(component.create()); + + QVERIFY(fontObject != 0); + QVERIFY(fontObject->source() != QUrl("")); + QTRY_COMPARE(fontObject->name(), QString("OCRA")); + QTRY_VERIFY(fontObject->status() == QDeclarativeFontLoader::Ready); +} + +void tst_qdeclarativefontloader::redirWebFont() +{ + server.addRedirect("olddir/oldname.ttf","../tarzeau_ocr_a.ttf"); + + QString componentStr = "import QtQuick 2.0\nFontLoader { source: \"http://localhost:14448/olddir/oldname.ttf\" }"; + QDeclarativeComponent component(&engine); + + component.setData(componentStr.toLatin1(), QUrl::fromLocalFile("")); + QDeclarativeFontLoader *fontObject = qobject_cast(component.create()); + + QVERIFY(fontObject != 0); + QVERIFY(fontObject->source() != QUrl("")); + QTRY_COMPARE(fontObject->name(), QString("OCRA")); + QTRY_VERIFY(fontObject->status() == QDeclarativeFontLoader::Ready); +} + +void tst_qdeclarativefontloader::failWebFont() +{ + QString componentStr = "import QtQuick 2.0\nFontLoader { source: \"http://localhost:14448/nonexist.ttf\" }"; + QTest::ignoreMessage(QtWarningMsg, "file::2:1: QML FontLoader: Cannot load font: \"http://localhost:14448/nonexist.ttf\""); + QDeclarativeComponent component(&engine); + component.setData(componentStr.toLatin1(), QUrl::fromLocalFile("")); + QDeclarativeFontLoader *fontObject = qobject_cast(component.create()); + + QVERIFY(fontObject != 0); + QVERIFY(fontObject->source() != QUrl("")); + QTRY_COMPARE(fontObject->name(), QString("")); + QTRY_VERIFY(fontObject->status() == QDeclarativeFontLoader::Error); +} + +void tst_qdeclarativefontloader::changeFont() +{ + QString componentStr = "import QtQuick 2.0\nFontLoader { source: font }"; + QDeclarativeContext *ctxt = engine.rootContext(); + ctxt->setContextProperty("font", QUrl::fromLocalFile(SRCDIR "/data/tarzeau_ocr_a.ttf")); + QDeclarativeComponent component(&engine); + component.setData(componentStr.toLatin1(), QUrl::fromLocalFile("")); + QDeclarativeFontLoader *fontObject = qobject_cast(component.create()); + + QVERIFY(fontObject != 0); + + QSignalSpy nameSpy(fontObject, SIGNAL(nameChanged())); + QSignalSpy statusSpy(fontObject, SIGNAL(statusChanged())); + + QTRY_VERIFY(fontObject->status() == QDeclarativeFontLoader::Ready); + QCOMPARE(nameSpy.count(), 0); + QCOMPARE(statusSpy.count(), 0); + QTRY_COMPARE(fontObject->name(), QString("OCRA")); + + ctxt->setContextProperty("font", "http://localhost:14448/daniel.ttf"); + QTRY_VERIFY(fontObject->status() == QDeclarativeFontLoader::Loading); + QTRY_VERIFY(fontObject->status() == QDeclarativeFontLoader::Ready); + QCOMPARE(nameSpy.count(), 1); + QCOMPARE(statusSpy.count(), 2); + QTRY_COMPARE(fontObject->name(), QString("Daniel")); + + ctxt->setContextProperty("font", QUrl::fromLocalFile(SRCDIR "/data/tarzeau_ocr_a.ttf")); + QTRY_VERIFY(fontObject->status() == QDeclarativeFontLoader::Ready); + QCOMPARE(nameSpy.count(), 2); + QCOMPARE(statusSpy.count(), 2); + QTRY_COMPARE(fontObject->name(), QString("OCRA")); + + ctxt->setContextProperty("font", "http://localhost:14448/daniel.ttf"); + QTRY_VERIFY(fontObject->status() == QDeclarativeFontLoader::Ready); + QCOMPARE(nameSpy.count(), 3); + QCOMPARE(statusSpy.count(), 2); + QTRY_COMPARE(fontObject->name(), QString("Daniel")); +} + +QTEST_MAIN(tst_qdeclarativefontloader) + +#include "tst_qdeclarativefontloader.moc" -- 1.7.2.5