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
|
/*
This file is part of the test suite of the Qt Toolkit.
SPDX-FileCopyrightText: 2014 Digia Plc and/or its subsidiary(-ies) <http://www.qt-project.org/legal>
SPDX-License-Identifier: LGPL-2.1-only WITH Qt-LGPL-exception-1.1 OR LGPL-3.0-only WITH Qt-LGPL-exception-1.1 OR LicenseRef-Qt-Commercial
*/
#include "util.h"
#include <QMutexLocker>
#include <QQmlComponent>
#include <QQmlContext>
#include <QQmlEngine>
#include <QQmlError>
#include <QTest>
#include <QTextStream>
QQmlDataTest *QQmlDataTest::m_instance = nullptr;
QQmlDataTest::QQmlDataTest()
: m_dataDirectory(QFINDTESTDATA("input"))
, m_dataDirectoryUrl(QUrl::fromLocalFile(m_dataDirectory + QLatin1Char('/')))
{
m_instance = this;
}
QQmlDataTest::~QQmlDataTest()
{
m_instance = nullptr;
}
void QQmlDataTest::initTestCase()
{
QVERIFY2(!m_dataDirectory.isEmpty(), "'input' directory not found");
m_directory = QFileInfo(m_dataDirectory).absolutePath();
QVERIFY2(QDir::setCurrent(m_directory), qPrintable(QLatin1String("Could not chdir to ") + m_directory));
}
QString QQmlDataTest::testFile(const QString &fileName) const
{
if (m_directory.isEmpty()) {
qFatal("QQmlDataTest::initTestCase() not called.");
}
QString result = m_dataDirectory;
result += QLatin1Char('/');
result += fileName;
return result;
}
QByteArray QQmlDataTest::msgComponentError(const QQmlComponent &c, const QQmlEngine *engine /* = 0 */)
{
QString result;
const QList<QQmlError> errors = c.errors();
QTextStream str(&result);
str << "Component '" << c.url().toString() << "' has " << errors.size() << " errors: '";
for (int i = 0; i < errors.size(); ++i) {
if (i) {
str << ", '";
}
str << errors.at(i).toString() << '\'';
}
if (!engine) {
if (QQmlContext *context = c.creationContext()) {
engine = context->engine();
}
}
if (engine) {
str << " Import paths: (" << engine->importPathList().join(QLatin1String(", ")) << ") Plugin paths: ("
<< engine->pluginPathList().join(QLatin1String(", ")) << ')';
}
return result.toLocal8Bit();
}
Q_GLOBAL_STATIC(QMutex, qQmlTestMessageHandlerMutex)
QQmlTestMessageHandler *QQmlTestMessageHandler::m_instance = nullptr;
void QQmlTestMessageHandler::messageHandler(QtMsgType, const QMessageLogContext &, const QString &message)
{
QMutexLocker locker(qQmlTestMessageHandlerMutex());
if (QQmlTestMessageHandler::m_instance) {
QQmlTestMessageHandler::m_instance->m_messages.push_back(message);
}
}
QQmlTestMessageHandler::QQmlTestMessageHandler()
{
QMutexLocker locker(qQmlTestMessageHandlerMutex());
Q_ASSERT(!QQmlTestMessageHandler::m_instance);
QQmlTestMessageHandler::m_instance = this;
m_oldHandler = qInstallMessageHandler(messageHandler);
}
QQmlTestMessageHandler::~QQmlTestMessageHandler()
{
QMutexLocker locker(qQmlTestMessageHandlerMutex());
Q_ASSERT(QQmlTestMessageHandler::m_instance);
qInstallMessageHandler(m_oldHandler);
QQmlTestMessageHandler::m_instance = nullptr;
}
#include "moc_util.cpp"
|