Initial import from the monolithic Qt.
[profile/ivi/qtdeclarative.git] / tests / auto / declarative / qdeclarativefontloader / tst_qdeclarativefontloader.cpp
1 /****************************************************************************
2 **
3 ** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies).
4 ** All rights reserved.
5 ** Contact: Nokia Corporation (qt-info@nokia.com)
6 **
7 ** This file is part of the test suite of the Qt Toolkit.
8 **
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
14 ** this package.
15 **
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.
23 **
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.
27 **
28 ** If you have questions regarding the use of this file, please contact
29 ** Nokia at qt-info@nokia.com.
30 **
31 **
32 **
33 **
34 **
35 **
36 **
37 **
38 ** $QT_END_LICENSE$
39 **
40 ****************************************************************************/
41 #include <qtest.h>
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"
49
50 #define SERVER_PORT 14448
51
52 #ifdef Q_OS_SYMBIAN
53 // In Symbian OS test data is located in applications private dir
54 #define SRCDIR "."
55 #endif
56
57 class tst_qdeclarativefontloader : public QObject
58
59 {
60     Q_OBJECT
61 public:
62     tst_qdeclarativefontloader();
63
64 private slots:
65     void noFont();
66     void namedFont();
67     void localFont();
68     void failLocalFont();
69     void webFont();
70     void redirWebFont();
71     void failWebFont();
72     void changeFont();
73
74 private slots:
75
76 private:
77     QDeclarativeEngine engine;
78     TestHTTPServer server;
79 };
80
81 tst_qdeclarativefontloader::tst_qdeclarativefontloader() :
82     server(SERVER_PORT)
83 {
84     server.serveDirectory(SRCDIR "/data");
85     Q_ASSERT(server.isValid());
86 }
87
88 void tst_qdeclarativefontloader::noFont()
89 {
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());
94
95     QVERIFY(fontObject != 0);
96     QCOMPARE(fontObject->name(), QString(""));
97     QCOMPARE(fontObject->source(), QUrl(""));
98     QTRY_VERIFY(fontObject->status() == QDeclarativeFontLoader::Null);
99
100     delete fontObject;
101 }
102
103 void tst_qdeclarativefontloader::namedFont()
104 {
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());
109
110     QVERIFY(fontObject != 0);
111     QCOMPARE(fontObject->source(), QUrl(""));
112     QCOMPARE(fontObject->name(), QString("Helvetica"));
113     QTRY_VERIFY(fontObject->status() == QDeclarativeFontLoader::Ready);
114 }
115
116 void tst_qdeclarativefontloader::localFont()
117 {
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());
122
123     QVERIFY(fontObject != 0);
124     QVERIFY(fontObject->source() != QUrl(""));
125     QTRY_COMPARE(fontObject->name(), QString("OCRA"));
126     QTRY_VERIFY(fontObject->status() == QDeclarativeFontLoader::Ready);
127 }
128
129 void tst_qdeclarativefontloader::failLocalFont()
130 {
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());
136
137     QVERIFY(fontObject != 0);
138     QVERIFY(fontObject->source() != QUrl(""));
139     QTRY_COMPARE(fontObject->name(), QString(""));
140     QTRY_VERIFY(fontObject->status() == QDeclarativeFontLoader::Error);
141 }
142
143 void tst_qdeclarativefontloader::webFont()
144 {
145     QString componentStr = "import QtQuick 1.0\nFontLoader { source: \"http://localhost:14448/tarzeau_ocr_a.ttf\" }";
146     QDeclarativeComponent component(&engine);
147
148     component.setData(componentStr.toLatin1(), QUrl::fromLocalFile(""));
149     QDeclarativeFontLoader *fontObject = qobject_cast<QDeclarativeFontLoader*>(component.create());
150
151     QVERIFY(fontObject != 0);
152     QVERIFY(fontObject->source() != QUrl(""));
153     QTRY_COMPARE(fontObject->name(), QString("OCRA"));
154     QTRY_VERIFY(fontObject->status() == QDeclarativeFontLoader::Ready);
155 }
156
157 void tst_qdeclarativefontloader::redirWebFont()
158 {
159     server.addRedirect("olddir/oldname.ttf","../tarzeau_ocr_a.ttf");
160
161     QString componentStr = "import QtQuick 1.0\nFontLoader { source: \"http://localhost:14448/olddir/oldname.ttf\" }";
162     QDeclarativeComponent component(&engine);
163
164     component.setData(componentStr.toLatin1(), QUrl::fromLocalFile(""));
165     QDeclarativeFontLoader *fontObject = qobject_cast<QDeclarativeFontLoader*>(component.create());
166
167     QVERIFY(fontObject != 0);
168     QVERIFY(fontObject->source() != QUrl(""));
169     QTRY_COMPARE(fontObject->name(), QString("OCRA"));
170     QTRY_VERIFY(fontObject->status() == QDeclarativeFontLoader::Ready);
171 }
172
173 void tst_qdeclarativefontloader::failWebFont()
174 {
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());
180
181     QVERIFY(fontObject != 0);
182     QVERIFY(fontObject->source() != QUrl(""));
183     QTRY_COMPARE(fontObject->name(), QString(""));
184     QTRY_VERIFY(fontObject->status() == QDeclarativeFontLoader::Error);
185 }
186
187 void tst_qdeclarativefontloader::changeFont()
188 {
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());
195
196     QVERIFY(fontObject != 0);
197
198     QSignalSpy nameSpy(fontObject, SIGNAL(nameChanged()));
199     QSignalSpy statusSpy(fontObject, SIGNAL(statusChanged()));
200
201     QTRY_VERIFY(fontObject->status() == QDeclarativeFontLoader::Ready);
202     QCOMPARE(nameSpy.count(), 0);
203     QCOMPARE(statusSpy.count(), 0);
204     QTRY_COMPARE(fontObject->name(), QString("OCRA"));
205
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"));
212
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"));
218
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"));
224 }
225
226 QTEST_MAIN(tst_qdeclarativefontloader)
227
228 #include "tst_qdeclarativefontloader.moc"