Remove "All rights reserved" line from license headers.
[profile/ivi/qtdeclarative.git] / tests / auto / qtquick1 / qdeclarativefontloader / tst_qdeclarativefontloader.cpp
1 /****************************************************************************
2 **
3 ** Copyright (C) 2012 Nokia Corporation and/or its subsidiary(-ies).
4 ** Contact: http://www.qt-project.org/
5 **
6 ** This file is part of the test suite of the Qt Toolkit.
7 **
8 ** $QT_BEGIN_LICENSE:LGPL$
9 ** GNU Lesser General Public License Usage
10 ** This file may be used under the terms of the GNU Lesser General Public
11 ** License version 2.1 as published by the Free Software Foundation and
12 ** appearing in the file LICENSE.LGPL included in the packaging of this
13 ** file. Please review the following information to ensure the GNU Lesser
14 ** General Public License version 2.1 requirements will be met:
15 ** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
16 **
17 ** In addition, as a special exception, Nokia gives you certain additional
18 ** rights. These rights are described in the Nokia Qt LGPL Exception
19 ** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
20 **
21 ** GNU General Public License Usage
22 ** Alternatively, this file may be used under the terms of the GNU General
23 ** Public License version 3.0 as published by the Free Software Foundation
24 ** and appearing in the file LICENSE.GPL included in the packaging of this
25 ** file. Please review the following information to ensure the GNU General
26 ** Public License version 3.0 requirements will be met:
27 ** http://www.gnu.org/copyleft/gpl.html.
28 **
29 ** Other Usage
30 ** Alternatively, this file may be used in accordance with the terms and
31 ** conditions contained in a signed written agreement between you and Nokia.
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 <QtQuick1/private/qdeclarativefontloader_p.h>
47 #include "../../shared/testhttpserver.h"
48
49 #define SERVER_PORT 14448
50
51 class tst_qdeclarativefontloader : public QObject
52 {
53     Q_OBJECT
54 public:
55     tst_qdeclarativefontloader();
56
57 private slots:
58     void init();
59     void noFont();
60     void namedFont();
61     void localFont();
62     void failLocalFont();
63     void webFont();
64     void redirWebFont();
65     void failWebFont();
66     void changeFont();
67
68 private:
69     QDeclarativeEngine engine;
70     TestHTTPServer server;
71 };
72
73 tst_qdeclarativefontloader::tst_qdeclarativefontloader() :
74     server(SERVER_PORT)
75 {
76     server.serveDirectory(SRCDIR "/data");
77 }
78
79 void tst_qdeclarativefontloader::init()
80 {
81     QVERIFY(server.isValid());
82 }
83
84 void tst_qdeclarativefontloader::noFont()
85 {
86     QString componentStr = "import QtQuick 1.0\nFontLoader { }";
87     QDeclarativeComponent component(&engine);
88     component.setData(componentStr.toLatin1(), QUrl::fromLocalFile(""));
89     QDeclarative1FontLoader *fontObject = qobject_cast<QDeclarative1FontLoader*>(component.create());
90
91     QVERIFY(fontObject != 0);
92     QCOMPARE(fontObject->name(), QString(""));
93     QCOMPARE(fontObject->source(), QUrl(""));
94     QTRY_VERIFY(fontObject->status() == QDeclarative1FontLoader::Null);
95
96     delete fontObject;
97 }
98
99 void tst_qdeclarativefontloader::namedFont()
100 {
101     QString componentStr = "import QtQuick 1.0\nFontLoader { name: \"Helvetica\" }";
102     QDeclarativeComponent component(&engine);
103     component.setData(componentStr.toLatin1(), QUrl::fromLocalFile(""));
104     QDeclarative1FontLoader *fontObject = qobject_cast<QDeclarative1FontLoader*>(component.create());
105
106     QVERIFY(fontObject != 0);
107     QCOMPARE(fontObject->source(), QUrl(""));
108     QCOMPARE(fontObject->name(), QString("Helvetica"));
109     QTRY_VERIFY(fontObject->status() == QDeclarative1FontLoader::Ready);
110 }
111
112 void tst_qdeclarativefontloader::localFont()
113 {
114     QString componentStr = "import QtQuick 1.0\nFontLoader { source: \"" SRCDIR  "/data/tarzeau_ocr_a.ttf\" }";
115     QDeclarativeComponent component(&engine);
116     component.setData(componentStr.toLatin1(), QUrl::fromLocalFile(""));
117     QDeclarative1FontLoader *fontObject = qobject_cast<QDeclarative1FontLoader*>(component.create());
118
119     QVERIFY(fontObject != 0);
120     QVERIFY(fontObject->source() != QUrl(""));
121     QTRY_COMPARE(fontObject->name(), QString("OCRA"));
122     QTRY_VERIFY(fontObject->status() == QDeclarative1FontLoader::Ready);
123 }
124
125 void tst_qdeclarativefontloader::failLocalFont()
126 {
127     QString componentStr = "import QtQuick 1.0\nFontLoader { source: \"" + QUrl::fromLocalFile(SRCDIR "/data/dummy.ttf").toString() + "\" }";
128     QTest::ignoreMessage(QtWarningMsg, QString("file::2:1: QML FontLoader: Cannot load font: \"" + QUrl::fromLocalFile(SRCDIR "/data/dummy.ttf").toString() + "\"").toUtf8().constData());
129     QDeclarativeComponent component(&engine);
130     component.setData(componentStr.toLatin1(), QUrl::fromLocalFile(""));
131     QDeclarative1FontLoader *fontObject = qobject_cast<QDeclarative1FontLoader*>(component.create());
132
133     QVERIFY(fontObject != 0);
134     QVERIFY(fontObject->source() != QUrl(""));
135     QTRY_COMPARE(fontObject->name(), QString(""));
136     QTRY_VERIFY(fontObject->status() == QDeclarative1FontLoader::Error);
137 }
138
139 void tst_qdeclarativefontloader::webFont()
140 {
141     QString componentStr = "import QtQuick 1.0\nFontLoader { source: \"http://localhost:14448/tarzeau_ocr_a.ttf\" }";
142     QDeclarativeComponent component(&engine);
143
144     component.setData(componentStr.toLatin1(), QUrl::fromLocalFile(""));
145     QDeclarative1FontLoader *fontObject = qobject_cast<QDeclarative1FontLoader*>(component.create());
146
147     QVERIFY(fontObject != 0);
148     QVERIFY(fontObject->source() != QUrl(""));
149     QTRY_COMPARE(fontObject->name(), QString("OCRA"));
150     QTRY_VERIFY(fontObject->status() == QDeclarative1FontLoader::Ready);
151 }
152
153 void tst_qdeclarativefontloader::redirWebFont()
154 {
155     server.addRedirect("olddir/oldname.ttf","../tarzeau_ocr_a.ttf");
156
157     QString componentStr = "import QtQuick 1.0\nFontLoader { source: \"http://localhost:14448/olddir/oldname.ttf\" }";
158     QDeclarativeComponent component(&engine);
159
160     component.setData(componentStr.toLatin1(), QUrl::fromLocalFile(""));
161     QDeclarative1FontLoader *fontObject = qobject_cast<QDeclarative1FontLoader*>(component.create());
162
163     QVERIFY(fontObject != 0);
164     QVERIFY(fontObject->source() != QUrl(""));
165     QTRY_COMPARE(fontObject->name(), QString("OCRA"));
166     QTRY_VERIFY(fontObject->status() == QDeclarative1FontLoader::Ready);
167 }
168
169 void tst_qdeclarativefontloader::failWebFont()
170 {
171     QString componentStr = "import QtQuick 1.0\nFontLoader { source: \"http://localhost:14448/nonexist.ttf\" }";
172     QTest::ignoreMessage(QtWarningMsg, "file::2:1: QML FontLoader: Cannot load font: \"http://localhost:14448/nonexist.ttf\"");
173     QDeclarativeComponent component(&engine);
174     component.setData(componentStr.toLatin1(), QUrl::fromLocalFile(""));
175     QDeclarative1FontLoader *fontObject = qobject_cast<QDeclarative1FontLoader*>(component.create());
176
177     QVERIFY(fontObject != 0);
178     QVERIFY(fontObject->source() != QUrl(""));
179     QTRY_COMPARE(fontObject->name(), QString(""));
180     QTRY_VERIFY(fontObject->status() == QDeclarative1FontLoader::Error);
181 }
182
183 void tst_qdeclarativefontloader::changeFont()
184 {
185     QString componentStr = "import QtQuick 1.0\nFontLoader { source: font }";
186     QDeclarativeContext *ctxt = engine.rootContext();
187     ctxt->setContextProperty("font", QUrl::fromLocalFile(SRCDIR "/data/tarzeau_ocr_a.ttf"));
188     QDeclarativeComponent component(&engine);
189     component.setData(componentStr.toLatin1(), QUrl::fromLocalFile(""));
190     QDeclarative1FontLoader *fontObject = qobject_cast<QDeclarative1FontLoader*>(component.create());
191
192     QVERIFY(fontObject != 0);
193
194     QSignalSpy nameSpy(fontObject, SIGNAL(nameChanged()));
195     QSignalSpy statusSpy(fontObject, SIGNAL(statusChanged()));
196
197     QTRY_VERIFY(fontObject->status() == QDeclarative1FontLoader::Ready);
198     QCOMPARE(nameSpy.count(), 0);
199     QCOMPARE(statusSpy.count(), 0);
200     QTRY_COMPARE(fontObject->name(), QString("OCRA"));
201
202     ctxt->setContextProperty("font", "http://localhost:14448/daniel.ttf");
203     QTRY_VERIFY(fontObject->status() == QDeclarative1FontLoader::Loading);
204     QTRY_VERIFY(fontObject->status() == QDeclarative1FontLoader::Ready);
205     QCOMPARE(nameSpy.count(), 1);
206     QCOMPARE(statusSpy.count(), 2);
207     QTRY_COMPARE(fontObject->name(), QString("Daniel"));
208
209     ctxt->setContextProperty("font", QUrl::fromLocalFile(SRCDIR "/data/tarzeau_ocr_a.ttf"));
210     QTRY_VERIFY(fontObject->status() == QDeclarative1FontLoader::Ready);
211     QCOMPARE(nameSpy.count(), 2);
212     QCOMPARE(statusSpy.count(), 2);
213     QTRY_COMPARE(fontObject->name(), QString("OCRA"));
214
215     ctxt->setContextProperty("font", "http://localhost:14448/daniel.ttf");
216     QTRY_VERIFY(fontObject->status() == QDeclarative1FontLoader::Ready);
217     QCOMPARE(nameSpy.count(), 3);
218     QCOMPARE(statusSpy.count(), 2);
219     QTRY_COMPARE(fontObject->name(), QString("Daniel"));
220 }
221
222 QTEST_MAIN(tst_qdeclarativefontloader)
223
224 #include "tst_qdeclarativefontloader.moc"