From 6d7d47551de18509a382185e1216632f3d862f01 Mon Sep 17 00:00:00 2001 From: Robin Burchell Date: Wed, 5 Dec 2012 02:12:30 +0100 Subject: Process imports in the order they appear in the code. By placing imports into a hash keyed by the qualifier, imports were not processed in the order they appeared in the source. This is perhaps not a major problem, but it is nice to have predictability. This becomes more important in Qt 5, when QHash is randomly seeded at application startup, as alterations to order could have strange side effects on code. Reported-by: Maciej Blomberg Change-Id: Ibd34fab1eed4bc727b498ba4684c62d801ae713b Reviewed-by: Matthew Vogt Reviewed-by: Lars Knoll --- .../declarative/qdeclarativeimportorder/data/a.js | 1 + .../declarative/qdeclarativeimportorder/data/b.js | 1 + .../declarative/qdeclarativeimportorder/data/c.js | 1 + .../declarative/qdeclarativeimportorder/data/d.js | 1 + .../declarative/qdeclarativeimportorder/data/e.js | 1 + .../declarative/qdeclarativeimportorder/data/f.js | 1 + .../declarative/qdeclarativeimportorder/data/g.js | 1 + .../declarative/qdeclarativeimportorder/data/h.js | 1 + .../declarative/qdeclarativeimportorder/data/i.js | 1 + .../qdeclarativeimportorder/data/importOrderJs.qml | 30 +++++++ .../declarative/qdeclarativeimportorder/data/j.js | 1 + .../declarative/qdeclarativeimportorder/data/k.js | 1 + .../declarative/qdeclarativeimportorder/data/l.js | 1 + .../declarative/qdeclarativeimportorder/data/m.js | 1 + .../declarative/qdeclarativeimportorder/data/n.js | 1 + .../declarative/qdeclarativeimportorder/data/o.js | 1 + .../declarative/qdeclarativeimportorder/data/p.js | 1 + .../declarative/qdeclarativeimportorder/data/q.js | 1 + .../declarative/qdeclarativeimportorder/data/r.js | 1 + .../declarative/qdeclarativeimportorder/data/s.js | 1 + .../declarative/qdeclarativeimportorder/data/t.js | 1 + .../declarative/qdeclarativeimportorder/data/u.js | 1 + .../declarative/qdeclarativeimportorder/data/v.js | 1 + .../declarative/qdeclarativeimportorder/data/w.js | 1 + .../declarative/qdeclarativeimportorder/data/x.js | 1 + .../declarative/qdeclarativeimportorder/data/y.js | 1 + .../declarative/qdeclarativeimportorder/data/z.js | 1 + .../qdeclarativeimportorder.pro | 14 +++ .../tst_qdeclarativeimportorder.cpp | 99 ++++++++++++++++++++++ 29 files changed, 169 insertions(+) create mode 100644 tests/auto/declarative/qdeclarativeimportorder/data/a.js create mode 100644 tests/auto/declarative/qdeclarativeimportorder/data/b.js create mode 100644 tests/auto/declarative/qdeclarativeimportorder/data/c.js create mode 100644 tests/auto/declarative/qdeclarativeimportorder/data/d.js create mode 100644 tests/auto/declarative/qdeclarativeimportorder/data/e.js create mode 100644 tests/auto/declarative/qdeclarativeimportorder/data/f.js create mode 100644 tests/auto/declarative/qdeclarativeimportorder/data/g.js create mode 100644 tests/auto/declarative/qdeclarativeimportorder/data/h.js create mode 100644 tests/auto/declarative/qdeclarativeimportorder/data/i.js create mode 100644 tests/auto/declarative/qdeclarativeimportorder/data/importOrderJs.qml create mode 100644 tests/auto/declarative/qdeclarativeimportorder/data/j.js create mode 100644 tests/auto/declarative/qdeclarativeimportorder/data/k.js create mode 100644 tests/auto/declarative/qdeclarativeimportorder/data/l.js create mode 100644 tests/auto/declarative/qdeclarativeimportorder/data/m.js create mode 100644 tests/auto/declarative/qdeclarativeimportorder/data/n.js create mode 100644 tests/auto/declarative/qdeclarativeimportorder/data/o.js create mode 100644 tests/auto/declarative/qdeclarativeimportorder/data/p.js create mode 100644 tests/auto/declarative/qdeclarativeimportorder/data/q.js create mode 100644 tests/auto/declarative/qdeclarativeimportorder/data/r.js create mode 100644 tests/auto/declarative/qdeclarativeimportorder/data/s.js create mode 100644 tests/auto/declarative/qdeclarativeimportorder/data/t.js create mode 100644 tests/auto/declarative/qdeclarativeimportorder/data/u.js create mode 100644 tests/auto/declarative/qdeclarativeimportorder/data/v.js create mode 100644 tests/auto/declarative/qdeclarativeimportorder/data/w.js create mode 100644 tests/auto/declarative/qdeclarativeimportorder/data/x.js create mode 100644 tests/auto/declarative/qdeclarativeimportorder/data/y.js create mode 100644 tests/auto/declarative/qdeclarativeimportorder/data/z.js create mode 100644 tests/auto/declarative/qdeclarativeimportorder/qdeclarativeimportorder.pro create mode 100644 tests/auto/declarative/qdeclarativeimportorder/tst_qdeclarativeimportorder.cpp (limited to 'tests/auto/declarative/qdeclarativeimportorder') diff --git a/tests/auto/declarative/qdeclarativeimportorder/data/a.js b/tests/auto/declarative/qdeclarativeimportorder/data/a.js new file mode 100644 index 00000000..49c40f77 --- /dev/null +++ b/tests/auto/declarative/qdeclarativeimportorder/data/a.js @@ -0,0 +1 @@ +console.log("a.js") diff --git a/tests/auto/declarative/qdeclarativeimportorder/data/b.js b/tests/auto/declarative/qdeclarativeimportorder/data/b.js new file mode 100644 index 00000000..786ef862 --- /dev/null +++ b/tests/auto/declarative/qdeclarativeimportorder/data/b.js @@ -0,0 +1 @@ +console.log("b.js") diff --git a/tests/auto/declarative/qdeclarativeimportorder/data/c.js b/tests/auto/declarative/qdeclarativeimportorder/data/c.js new file mode 100644 index 00000000..3e1d32f0 --- /dev/null +++ b/tests/auto/declarative/qdeclarativeimportorder/data/c.js @@ -0,0 +1 @@ +console.log("c.js") diff --git a/tests/auto/declarative/qdeclarativeimportorder/data/d.js b/tests/auto/declarative/qdeclarativeimportorder/data/d.js new file mode 100644 index 00000000..4c339077 --- /dev/null +++ b/tests/auto/declarative/qdeclarativeimportorder/data/d.js @@ -0,0 +1 @@ +console.log("d.js") diff --git a/tests/auto/declarative/qdeclarativeimportorder/data/e.js b/tests/auto/declarative/qdeclarativeimportorder/data/e.js new file mode 100644 index 00000000..ac758f93 --- /dev/null +++ b/tests/auto/declarative/qdeclarativeimportorder/data/e.js @@ -0,0 +1 @@ +console.log("e.js") diff --git a/tests/auto/declarative/qdeclarativeimportorder/data/f.js b/tests/auto/declarative/qdeclarativeimportorder/data/f.js new file mode 100644 index 00000000..04b0cf3a --- /dev/null +++ b/tests/auto/declarative/qdeclarativeimportorder/data/f.js @@ -0,0 +1 @@ +console.log("f.js") diff --git a/tests/auto/declarative/qdeclarativeimportorder/data/g.js b/tests/auto/declarative/qdeclarativeimportorder/data/g.js new file mode 100644 index 00000000..e6747104 --- /dev/null +++ b/tests/auto/declarative/qdeclarativeimportorder/data/g.js @@ -0,0 +1 @@ +console.log("g.js") diff --git a/tests/auto/declarative/qdeclarativeimportorder/data/h.js b/tests/auto/declarative/qdeclarativeimportorder/data/h.js new file mode 100644 index 00000000..8f81e240 --- /dev/null +++ b/tests/auto/declarative/qdeclarativeimportorder/data/h.js @@ -0,0 +1 @@ +console.log("h.js") diff --git a/tests/auto/declarative/qdeclarativeimportorder/data/i.js b/tests/auto/declarative/qdeclarativeimportorder/data/i.js new file mode 100644 index 00000000..a074b78c --- /dev/null +++ b/tests/auto/declarative/qdeclarativeimportorder/data/i.js @@ -0,0 +1 @@ +console.log("i.js") diff --git a/tests/auto/declarative/qdeclarativeimportorder/data/importOrderJs.qml b/tests/auto/declarative/qdeclarativeimportorder/data/importOrderJs.qml new file mode 100644 index 00000000..6cad175e --- /dev/null +++ b/tests/auto/declarative/qdeclarativeimportorder/data/importOrderJs.qml @@ -0,0 +1,30 @@ +import QtQuick 1.1 +import "a.js" as A +import "b.js" as B +import "c.js" as C +import "d.js" as D +import "e.js" as E +import "f.js" as F +import "g.js" as G +import "h.js" as H +import "i.js" as I +import "j.js" as J +import "k.js" as K +import "l.js" as L +import "m.js" as M +import "n.js" as N +import "o.js" as O +import "p.js" as P +import "q.js" as Q +import "r.js" as R +import "s.js" as S +import "t.js" as T +import "u.js" as U +import "v.js" as V +import "w.js" as W +import "x.js" as X +import "y.js" as Y +import "z.js" as Z + +Item { +} diff --git a/tests/auto/declarative/qdeclarativeimportorder/data/j.js b/tests/auto/declarative/qdeclarativeimportorder/data/j.js new file mode 100644 index 00000000..1b336d06 --- /dev/null +++ b/tests/auto/declarative/qdeclarativeimportorder/data/j.js @@ -0,0 +1 @@ +console.log("j.js") diff --git a/tests/auto/declarative/qdeclarativeimportorder/data/k.js b/tests/auto/declarative/qdeclarativeimportorder/data/k.js new file mode 100644 index 00000000..b205c1c4 --- /dev/null +++ b/tests/auto/declarative/qdeclarativeimportorder/data/k.js @@ -0,0 +1 @@ +console.log("k.js") diff --git a/tests/auto/declarative/qdeclarativeimportorder/data/l.js b/tests/auto/declarative/qdeclarativeimportorder/data/l.js new file mode 100644 index 00000000..36331a88 --- /dev/null +++ b/tests/auto/declarative/qdeclarativeimportorder/data/l.js @@ -0,0 +1 @@ +console.log("l.js") diff --git a/tests/auto/declarative/qdeclarativeimportorder/data/m.js b/tests/auto/declarative/qdeclarativeimportorder/data/m.js new file mode 100644 index 00000000..f8ec9a06 --- /dev/null +++ b/tests/auto/declarative/qdeclarativeimportorder/data/m.js @@ -0,0 +1 @@ +console.log("m.js") diff --git a/tests/auto/declarative/qdeclarativeimportorder/data/n.js b/tests/auto/declarative/qdeclarativeimportorder/data/n.js new file mode 100644 index 00000000..59ea354c --- /dev/null +++ b/tests/auto/declarative/qdeclarativeimportorder/data/n.js @@ -0,0 +1 @@ +console.log("n.js") diff --git a/tests/auto/declarative/qdeclarativeimportorder/data/o.js b/tests/auto/declarative/qdeclarativeimportorder/data/o.js new file mode 100644 index 00000000..1bdad649 --- /dev/null +++ b/tests/auto/declarative/qdeclarativeimportorder/data/o.js @@ -0,0 +1 @@ +console.log("o.js") diff --git a/tests/auto/declarative/qdeclarativeimportorder/data/p.js b/tests/auto/declarative/qdeclarativeimportorder/data/p.js new file mode 100644 index 00000000..ba37e9cc --- /dev/null +++ b/tests/auto/declarative/qdeclarativeimportorder/data/p.js @@ -0,0 +1 @@ +console.log("p.js") diff --git a/tests/auto/declarative/qdeclarativeimportorder/data/q.js b/tests/auto/declarative/qdeclarativeimportorder/data/q.js new file mode 100644 index 00000000..6f226207 --- /dev/null +++ b/tests/auto/declarative/qdeclarativeimportorder/data/q.js @@ -0,0 +1 @@ +console.log("q.js") diff --git a/tests/auto/declarative/qdeclarativeimportorder/data/r.js b/tests/auto/declarative/qdeclarativeimportorder/data/r.js new file mode 100644 index 00000000..9f9b25a0 --- /dev/null +++ b/tests/auto/declarative/qdeclarativeimportorder/data/r.js @@ -0,0 +1 @@ +console.log("r.js") diff --git a/tests/auto/declarative/qdeclarativeimportorder/data/s.js b/tests/auto/declarative/qdeclarativeimportorder/data/s.js new file mode 100644 index 00000000..f81ca099 --- /dev/null +++ b/tests/auto/declarative/qdeclarativeimportorder/data/s.js @@ -0,0 +1 @@ +console.log("s.js") diff --git a/tests/auto/declarative/qdeclarativeimportorder/data/t.js b/tests/auto/declarative/qdeclarativeimportorder/data/t.js new file mode 100644 index 00000000..3f150a77 --- /dev/null +++ b/tests/auto/declarative/qdeclarativeimportorder/data/t.js @@ -0,0 +1 @@ +console.log("t.js") diff --git a/tests/auto/declarative/qdeclarativeimportorder/data/u.js b/tests/auto/declarative/qdeclarativeimportorder/data/u.js new file mode 100644 index 00000000..426bdd09 --- /dev/null +++ b/tests/auto/declarative/qdeclarativeimportorder/data/u.js @@ -0,0 +1 @@ +console.log("u.js") diff --git a/tests/auto/declarative/qdeclarativeimportorder/data/v.js b/tests/auto/declarative/qdeclarativeimportorder/data/v.js new file mode 100644 index 00000000..66d23f52 --- /dev/null +++ b/tests/auto/declarative/qdeclarativeimportorder/data/v.js @@ -0,0 +1 @@ +console.log("v.js") diff --git a/tests/auto/declarative/qdeclarativeimportorder/data/w.js b/tests/auto/declarative/qdeclarativeimportorder/data/w.js new file mode 100644 index 00000000..ecefb1d0 --- /dev/null +++ b/tests/auto/declarative/qdeclarativeimportorder/data/w.js @@ -0,0 +1 @@ +console.log("w.js") diff --git a/tests/auto/declarative/qdeclarativeimportorder/data/x.js b/tests/auto/declarative/qdeclarativeimportorder/data/x.js new file mode 100644 index 00000000..64112bb4 --- /dev/null +++ b/tests/auto/declarative/qdeclarativeimportorder/data/x.js @@ -0,0 +1 @@ +console.log("x.js") diff --git a/tests/auto/declarative/qdeclarativeimportorder/data/y.js b/tests/auto/declarative/qdeclarativeimportorder/data/y.js new file mode 100644 index 00000000..9ed70f26 --- /dev/null +++ b/tests/auto/declarative/qdeclarativeimportorder/data/y.js @@ -0,0 +1 @@ +console.log("y.js") diff --git a/tests/auto/declarative/qdeclarativeimportorder/data/z.js b/tests/auto/declarative/qdeclarativeimportorder/data/z.js new file mode 100644 index 00000000..0e6fc83e --- /dev/null +++ b/tests/auto/declarative/qdeclarativeimportorder/data/z.js @@ -0,0 +1 @@ +console.log("z.js") diff --git a/tests/auto/declarative/qdeclarativeimportorder/qdeclarativeimportorder.pro b/tests/auto/declarative/qdeclarativeimportorder/qdeclarativeimportorder.pro new file mode 100644 index 00000000..725b6d6a --- /dev/null +++ b/tests/auto/declarative/qdeclarativeimportorder/qdeclarativeimportorder.pro @@ -0,0 +1,14 @@ +CONFIG += testcase +TARGET = tst_qdeclarativeimportorder + +QT += testlib +contains(QT_CONFIG,declarative): QT += declarative widgets +macx:CONFIG -= app_bundle + +SOURCES += tst_qdeclarativeimportorder.cpp + +include(../shared/qdeclarativedatatest.pri) + +CONFIG += parallel_test + +DEFINES += QT_DISABLE_DEPRECATED_BEFORE=0 diff --git a/tests/auto/declarative/qdeclarativeimportorder/tst_qdeclarativeimportorder.cpp b/tests/auto/declarative/qdeclarativeimportorder/tst_qdeclarativeimportorder.cpp new file mode 100644 index 00000000..ecf35100 --- /dev/null +++ b/tests/auto/declarative/qdeclarativeimportorder/tst_qdeclarativeimportorder.cpp @@ -0,0 +1,99 @@ +/**************************************************************************** +** +** Copyright (C) 2012 Jolla Mobile +** Contact: http://www.qt-project.org/legal +** +** This file is part of the test suite of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and Digia. For licensing terms and +** conditions see http://qt.digia.com/licensing. For further information +** use the contact form at http://qt.digia.com/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Digia gives you certain additional +** rights. These rights are described in the Digia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3.0 as published by the Free Software +** Foundation and appearing in the file LICENSE.GPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU General Public License version 3.0 requirements will be +** met: http://www.gnu.org/copyleft/gpl.html. +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include +#include +#include +#include +#include + +#include + + +class tst_qdeclarativeimportorder : public QDeclarativeDataTest +{ + Q_OBJECT +public: + tst_qdeclarativeimportorder() + { + } + +private slots: + void qmlObject(); + +private: + QDeclarativeEngine engine; +}; + +Q_GLOBAL_STATIC(QStringList, importMessages); + +static void orderedImportMsgHandler(QtMsgType type, const QMessageLogContext &, const QString &message) +{ + if (type == QtDebugMsg) + importMessages()->append(message); + else + fprintf(stderr, "possibly unexpected message of type %d: %s", type, qPrintable(message)); +} + +void tst_qdeclarativeimportorder::qmlObject() +{ + QDeclarativeComponent component(&engine, testFileUrl("importOrderJs.qml")); + + QtMessageHandler old = qInstallMessageHandler(orderedImportMsgHandler); + QObject *object = component.create(); + qInstallMessageHandler(old); // do this before the QVERIFY so output goes out ok if it errors + QVERIFY(object != 0); + QCOMPARE(*importMessages(), QStringList() << "a.js" << "b.js" << "c.js" + << "d.js" << "e.js" << "f.js" + << "g.js" << "h.js" << "i.js" + << "j.js" << "k.js" << "l.js" + << "m.js" << "n.js" << "o.js" + << "p.js" << "q.js" << "r.js" + << "s.js" << "t.js" << "u.js" + << "v.js" << "w.js" << "x.js" + << "y.js" << "z.js"); + // now I know my ABCs, + // next time won't you sing with me? +} + +QTEST_MAIN(tst_qdeclarativeimportorder) + +#include "tst_qdeclarativeimportorder.moc" -- cgit v1.2.3