1 /****************************************************************************
3 ** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies).
4 ** All rights reserved.
5 ** Contact: Nokia Corporation (qt-info@nokia.com)
7 ** This file is part of the test suite of the Qt Toolkit.
9 ** $QT_BEGIN_LICENSE:LGPL$
10 ** No Commercial Usage
11 ** This file contains pre-release code and may not be distributed.
12 ** You may use this file in accordance with the terms and conditions
13 ** contained in the Technology Preview License Agreement accompanying
16 ** GNU Lesser General Public License Usage
17 ** Alternatively, this file may be used under the terms of the GNU Lesser
18 ** General Public License version 2.1 as published by the Free Software
19 ** Foundation and appearing in the file LICENSE.LGPL included in the
20 ** packaging of this file. Please review the following information to
21 ** ensure the GNU Lesser General Public License version 2.1 requirements
22 ** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
24 ** In addition, as a special exception, Nokia gives you certain additional
25 ** rights. These rights are described in the Nokia Qt LGPL Exception
26 ** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
28 ** If you have questions regarding the use of this file, please contact
29 ** Nokia at qt-info@nokia.com.
40 ****************************************************************************/
42 #include <QtTest/QSignalSpy>
43 #include <QtDeclarative/qdeclarativeengine.h>
44 #include <QtDeclarative/qdeclarativecomponent.h>
45 #include <QtDeclarative/qdeclarativecontext.h>
46 #include <private/qdeclarativefontloader_p.h>
47 #include "../../../shared/util.h"
48 #include "../shared/testhttpserver.h"
50 #define SERVER_PORT 14448
53 // In Symbian OS test data is located in applications private dir
57 class tst_qdeclarativefontloader : public QObject
62 tst_qdeclarativefontloader();
77 QDeclarativeEngine engine;
78 TestHTTPServer server;
81 tst_qdeclarativefontloader::tst_qdeclarativefontloader() :
84 server.serveDirectory(SRCDIR "/data");
85 Q_ASSERT(server.isValid());
88 void tst_qdeclarativefontloader::noFont()
90 QString componentStr = "import QtQuick 1.0\nFontLoader { }";
91 QDeclarativeComponent component(&engine);
92 component.setData(componentStr.toLatin1(), QUrl::fromLocalFile(""));
93 QDeclarativeFontLoader *fontObject = qobject_cast<QDeclarativeFontLoader*>(component.create());
95 QVERIFY(fontObject != 0);
96 QCOMPARE(fontObject->name(), QString(""));
97 QCOMPARE(fontObject->source(), QUrl(""));
98 QTRY_VERIFY(fontObject->status() == QDeclarativeFontLoader::Null);
103 void tst_qdeclarativefontloader::namedFont()
105 QString componentStr = "import QtQuick 1.0\nFontLoader { name: \"Helvetica\" }";
106 QDeclarativeComponent component(&engine);
107 component.setData(componentStr.toLatin1(), QUrl::fromLocalFile(""));
108 QDeclarativeFontLoader *fontObject = qobject_cast<QDeclarativeFontLoader*>(component.create());
110 QVERIFY(fontObject != 0);
111 QCOMPARE(fontObject->source(), QUrl(""));
112 QCOMPARE(fontObject->name(), QString("Helvetica"));
113 QTRY_VERIFY(fontObject->status() == QDeclarativeFontLoader::Ready);
116 void tst_qdeclarativefontloader::localFont()
118 QString componentStr = "import QtQuick 1.0\nFontLoader { source: \"" SRCDIR "/data/tarzeau_ocr_a.ttf\" }";
119 QDeclarativeComponent component(&engine);
120 component.setData(componentStr.toLatin1(), QUrl::fromLocalFile(""));
121 QDeclarativeFontLoader *fontObject = qobject_cast<QDeclarativeFontLoader*>(component.create());
123 QVERIFY(fontObject != 0);
124 QVERIFY(fontObject->source() != QUrl(""));
125 QTRY_COMPARE(fontObject->name(), QString("OCRA"));
126 QTRY_VERIFY(fontObject->status() == QDeclarativeFontLoader::Ready);
129 void tst_qdeclarativefontloader::failLocalFont()
131 QString componentStr = "import QtQuick 1.0\nFontLoader { source: \"" + QUrl::fromLocalFile(SRCDIR "/data/dummy.ttf").toString() + "\" }";
132 QTest::ignoreMessage(QtWarningMsg, QString("file::2:1: QML FontLoader: Cannot load font: \"" + QUrl::fromLocalFile(SRCDIR "/data/dummy.ttf").toString() + "\"").toUtf8().constData());
133 QDeclarativeComponent component(&engine);
134 component.setData(componentStr.toLatin1(), QUrl::fromLocalFile(""));
135 QDeclarativeFontLoader *fontObject = qobject_cast<QDeclarativeFontLoader*>(component.create());
137 QVERIFY(fontObject != 0);
138 QVERIFY(fontObject->source() != QUrl(""));
139 QTRY_COMPARE(fontObject->name(), QString(""));
140 QTRY_VERIFY(fontObject->status() == QDeclarativeFontLoader::Error);
143 void tst_qdeclarativefontloader::webFont()
145 QString componentStr = "import QtQuick 1.0\nFontLoader { source: \"http://localhost:14448/tarzeau_ocr_a.ttf\" }";
146 QDeclarativeComponent component(&engine);
148 component.setData(componentStr.toLatin1(), QUrl::fromLocalFile(""));
149 QDeclarativeFontLoader *fontObject = qobject_cast<QDeclarativeFontLoader*>(component.create());
151 QVERIFY(fontObject != 0);
152 QVERIFY(fontObject->source() != QUrl(""));
153 QTRY_COMPARE(fontObject->name(), QString("OCRA"));
154 QTRY_VERIFY(fontObject->status() == QDeclarativeFontLoader::Ready);
157 void tst_qdeclarativefontloader::redirWebFont()
159 server.addRedirect("olddir/oldname.ttf","../tarzeau_ocr_a.ttf");
161 QString componentStr = "import QtQuick 1.0\nFontLoader { source: \"http://localhost:14448/olddir/oldname.ttf\" }";
162 QDeclarativeComponent component(&engine);
164 component.setData(componentStr.toLatin1(), QUrl::fromLocalFile(""));
165 QDeclarativeFontLoader *fontObject = qobject_cast<QDeclarativeFontLoader*>(component.create());
167 QVERIFY(fontObject != 0);
168 QVERIFY(fontObject->source() != QUrl(""));
169 QTRY_COMPARE(fontObject->name(), QString("OCRA"));
170 QTRY_VERIFY(fontObject->status() == QDeclarativeFontLoader::Ready);
173 void tst_qdeclarativefontloader::failWebFont()
175 QString componentStr = "import QtQuick 1.0\nFontLoader { source: \"http://localhost:14448/nonexist.ttf\" }";
176 QTest::ignoreMessage(QtWarningMsg, "file::2:1: QML FontLoader: Cannot load font: \"http://localhost:14448/nonexist.ttf\"");
177 QDeclarativeComponent component(&engine);
178 component.setData(componentStr.toLatin1(), QUrl::fromLocalFile(""));
179 QDeclarativeFontLoader *fontObject = qobject_cast<QDeclarativeFontLoader*>(component.create());
181 QVERIFY(fontObject != 0);
182 QVERIFY(fontObject->source() != QUrl(""));
183 QTRY_COMPARE(fontObject->name(), QString(""));
184 QTRY_VERIFY(fontObject->status() == QDeclarativeFontLoader::Error);
187 void tst_qdeclarativefontloader::changeFont()
189 QString componentStr = "import QtQuick 1.0\nFontLoader { source: font }";
190 QDeclarativeContext *ctxt = engine.rootContext();
191 ctxt->setContextProperty("font", QUrl::fromLocalFile(SRCDIR "/data/tarzeau_ocr_a.ttf"));
192 QDeclarativeComponent component(&engine);
193 component.setData(componentStr.toLatin1(), QUrl::fromLocalFile(""));
194 QDeclarativeFontLoader *fontObject = qobject_cast<QDeclarativeFontLoader*>(component.create());
196 QVERIFY(fontObject != 0);
198 QSignalSpy nameSpy(fontObject, SIGNAL(nameChanged()));
199 QSignalSpy statusSpy(fontObject, SIGNAL(statusChanged()));
201 QTRY_VERIFY(fontObject->status() == QDeclarativeFontLoader::Ready);
202 QCOMPARE(nameSpy.count(), 0);
203 QCOMPARE(statusSpy.count(), 0);
204 QTRY_COMPARE(fontObject->name(), QString("OCRA"));
206 ctxt->setContextProperty("font", "http://localhost:14448/daniel.ttf");
207 QTRY_VERIFY(fontObject->status() == QDeclarativeFontLoader::Loading);
208 QTRY_VERIFY(fontObject->status() == QDeclarativeFontLoader::Ready);
209 QCOMPARE(nameSpy.count(), 1);
210 QCOMPARE(statusSpy.count(), 2);
211 QTRY_COMPARE(fontObject->name(), QString("Daniel"));
213 ctxt->setContextProperty("font", QUrl::fromLocalFile(SRCDIR "/data/tarzeau_ocr_a.ttf"));
214 QTRY_VERIFY(fontObject->status() == QDeclarativeFontLoader::Ready);
215 QCOMPARE(nameSpy.count(), 2);
216 QCOMPARE(statusSpy.count(), 2);
217 QTRY_COMPARE(fontObject->name(), QString("OCRA"));
219 ctxt->setContextProperty("font", "http://localhost:14448/daniel.ttf");
220 QTRY_VERIFY(fontObject->status() == QDeclarativeFontLoader::Ready);
221 QCOMPARE(nameSpy.count(), 3);
222 QCOMPARE(statusSpy.count(), 2);
223 QTRY_COMPARE(fontObject->name(), QString("Daniel"));
226 QTEST_MAIN(tst_qdeclarativefontloader)
228 #include "tst_qdeclarativefontloader.moc"