aboutsummaryrefslogtreecommitdiffstats
path: root/tests/auto/qml/qmlbasicapp/tst_qmlbasicapp.cpp
blob: fd72a0910fde60dd2b063629ac01e6957a245021 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
// Copyright (C) 2021 The Qt Company Ltd.
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0

#include <QQmlEngine>
#include <QQmlComponent>
#include <QObject>
#include <qtest.h>

class tst_basicapp : public QObject
{
    Q_OBJECT
private slots:
    void loadComponent();
    void resourceFiles();
    void fileSystemFiles();
    void qmldirContents();
};

void tst_basicapp::loadComponent()
{
    QQmlEngine engine;
#ifdef Q_OS_ANDROID
    engine.addImportPath(":/");
#endif
    QQmlComponent c(&engine, QStringLiteral("qrc:/BasicApp/main.qml"));
    QVERIFY2(c.isReady(), qPrintable(c.errorString()));
    QScopedPointer o(c.create());
    QVERIFY(!o.isNull());

    const QTime time = QTime::currentTime();
    const int hour = o->property("hours").toInt();
    QVERIFY(hour >= time.hour() - 1);
    QVERIFY(hour <= time.hour() + 1);

    const int minute = o->property("minutes").toInt();
    QVERIFY(minute >= time.minute() - 1);
    QVERIFY(minute <= time.minute() + 1);

    QObject *more = qvariant_cast<QObject*>(o->property("more"));
    QVERIFY(more);
    QCOMPARE(more->objectName(), QStringLiteral("ui.qml"));

    QCOMPARE(o->property("fromESModule").toString(), QStringLiteral("eee"));
    QCOMPARE(o->property("fromJSFile").toString(), QStringLiteral("bar"));
}

void tst_basicapp::resourceFiles()
{
    QVERIFY(QFile::exists(QStringLiteral(":/BasicApp/main.qml")));
    QVERIFY(QFile::exists(QStringLiteral(":/BasicApp/qmldir")));
    QVERIFY(QFile::exists(QStringLiteral(":/TimeExample2/Clock.qml")));
    QVERIFY(QFile::exists(QStringLiteral(":/TimeExample2/center.png")));
    QVERIFY(QFile::exists(QStringLiteral(":/TimeExample2/clock.png")));
    QVERIFY(QFile::exists(QStringLiteral(":/TimeExample2/hour.png")));
    QVERIFY(QFile::exists(QStringLiteral(":/TimeExample2/minute.png")));
    QVERIFY(QFile::exists(QStringLiteral(":/TimeExample2/qmldir")));

    QVERIFY(!QFile::exists(QStringLiteral(":/BasicApp/tst_qmlbasicapp.qmltypes")));
    QVERIFY(!QFile::exists(QStringLiteral(":/TimeExample2/qmlqtimeexample2.qmltypes")));
}

void tst_basicapp::fileSystemFiles()
{
#ifdef Q_OS_ANDROID
    QSKIP("This test is not valid for Android, because the files can exist only as resources.");
#endif
    const QString basedir = QCoreApplication::applicationDirPath();
    QVERIFY(QFile::exists(basedir + QStringLiteral("/BasicApp/main.qml")));
    QVERIFY(QFile::exists(basedir + QStringLiteral("/BasicApp/qmldir")));
    QVERIFY(QFile::exists(basedir + QStringLiteral("/BasicApp/tst_qmlbasicapp.qmltypes")));
    QVERIFY(QFile::exists(basedir + QStringLiteral("/TimeExample2/Clock.qml")));

    QVERIFY(QFile::exists(basedir + QStringLiteral("/TimeExample2/center.png")));
    QVERIFY(QFile::exists(basedir + QStringLiteral("/TimeExample2/clock.png")));
    QVERIFY(QFile::exists(basedir + QStringLiteral("/TimeExample2/hour.png")));
    QVERIFY(QFile::exists(basedir + QStringLiteral("/TimeExample2/minute.png")));
    QVERIFY(QFile::exists(basedir + QStringLiteral("/TimeExample2/qmldir")));
    QVERIFY(QFile::exists(basedir + QStringLiteral("/TimeExample2/qmlqtimeexample2.qmltypes")));
}

void tst_basicapp::qmldirContents()
{
#ifdef Q_OS_ANDROID
    const QString basedir = QStringLiteral(":"); // Use qrc resource path on Android
#else
    const QString basedir = QCoreApplication::applicationDirPath();
#endif
    {
        QFile qmldir(basedir + "/BasicApp/qmldir");
        QVERIFY(qmldir.open(QIODevice::ReadOnly));
        const QByteArray contents = qmldir.readAll();
        QVERIFY(contents.contains("module BasicApp"));
        QVERIFY(contents.contains("typeinfo"));
        QVERIFY(contents.contains("prefer :/BasicApp/"));
        QVERIFY(!contents.contains("classname"));
        QVERIFY(!contents.contains("plugin"));

        QFile qmldirInResources(":/BasicApp/qmldir");
        QVERIFY(qmldirInResources.open(QIODevice::ReadOnly));
        QCOMPARE(qmldirInResources.readAll(), contents);
    }

    {
        QFile qmldir(basedir + "/TimeExample2/qmldir");
        QVERIFY(qmldir.open(QIODevice::ReadOnly));
        const QByteArray contents = qmldir.readAll();
        QVERIFY(contents.contains("module TimeExample2"));
        QVERIFY(contents.contains("optional plugin"));
        QVERIFY(contents.contains("classname"));
        QVERIFY(contents.contains("typeinfo"));
        QVERIFY(contents.contains("depends QtQml"));
        QVERIFY(contents.contains("prefer :/TimeExample2/"));
        QVERIFY(contents.contains("Clock 254.0 Clock.qml"));

        QFile qmldirInResources(":/TimeExample2/qmldir");
        QVERIFY(qmldirInResources.open(QIODevice::ReadOnly));
        QCOMPARE(qmldirInResources.readAll(), contents);
    }

    {
        QFile qmldir(basedir + "/BasicExtension/qmldir");
        QVERIFY(qmldir.open(QIODevice::ReadOnly));
        const QByteArray contents = qmldir.readAll();
        QVERIFY(contents.contains("More 254.0 More.ui.qml"));
        QVERIFY(contents.contains("Less.js"));
        QVERIFY(contents.contains("ESModule.mjs"));
        QVERIFY(!contents.contains("lowerCase.js"));
        QVERIFY(!contents.contains("lowerCaseModule.mjs"));
    }
}

QTEST_MAIN(tst_basicapp)
#include "tst_qmlbasicapp.moc"