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 ****************************************************************************/
43 #include <QDeclarativeEngine>
44 #include <QDeclarativeComponent>
50 // In Symbian OS test data is located in applications private dir
54 class tst_parserstress : public QObject
61 void ecmascript_data();
65 static QStringList findJSFiles(const QDir &);
66 QDeclarativeEngine engine;
69 QStringList tst_parserstress::findJSFiles(const QDir &d)
73 QStringList files = d.entryList(QStringList() << QLatin1String("*.js"),
75 foreach (const QString &file, files) {
76 if (file == "browser.js")
78 rv << d.absoluteFilePath(file);
81 QStringList dirs = d.entryList(QDir::Dirs | QDir::NoDotAndDotDot |
83 foreach (const QString &dir, dirs) {
86 rv << findJSFiles(sub);
92 void tst_parserstress::ecmascript_data()
100 dir.cd("qscriptjstestsuite");
103 QStringList files = findJSFiles(dir);
105 QTest::addColumn<QString>("file");
106 foreach (const QString &file, files) {
107 QTest::newRow(qPrintable(file)) << file;
111 void tst_parserstress::ecmascript()
113 QFETCH(QString, file);
116 QVERIFY(f.open(QIODevice::ReadOnly));
118 QByteArray data = f.readAll();
120 QVERIFY(!data.isEmpty());
122 QString dataStr = QString::fromUtf8(data);
124 QString qml = "import QtQuick 1.0\n";
126 qml+= "QtObject {\n";
127 qml+= " property int test\n";
129 qml+= dataStr + "\n";
130 qml+= " return 1;\n";
132 qml+= " function stress() {\n";
137 QByteArray qmlData = qml.toUtf8();
139 QDeclarativeComponent component(&engine);
141 component.setData(qmlData, QUrl::fromLocalFile(SRCDIR + QString("/dummy.qml")));
143 QFileInfo info(file);
145 if (info.fileName() == QLatin1String("regress-352044-02-n.js")) {
146 QVERIFY(component.isError());
148 QCOMPARE(component.errors().length(), 2);
150 QCOMPARE(component.errors().at(0).description(), QString("Expected token `;'"));
151 QCOMPARE(component.errors().at(0).line(), 66);
153 QCOMPARE(component.errors().at(1).description(), QString("Expected token `;'"));
154 QCOMPARE(component.errors().at(1).line(), 142);
158 QVERIFY(!component.isError());
163 QTEST_MAIN(tst_parserstress)
165 #include "tst_parserstress.moc"