File indexing completed on 2024-05-05 16:07:08
0001 /* 0002 This file is part of the test suite of the Qt Toolkit. 0003 SPDX-FileCopyrightText: 2014 Digia Plc and/or its subsidiary(-ies) <http://www.qt-project.org/legal> 0004 0005 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 0006 */ 0007 0008 #include "util.h" 0009 0010 #include <QMutexLocker> 0011 #include <QQmlComponent> 0012 #include <QQmlContext> 0013 #include <QQmlEngine> 0014 #include <QQmlError> 0015 #include <QTest> 0016 #include <QTextStream> 0017 0018 QQmlDataTest *QQmlDataTest::m_instance = nullptr; 0019 0020 QQmlDataTest::QQmlDataTest() 0021 : m_dataDirectory(QFINDTESTDATA("input")) 0022 , m_dataDirectoryUrl(QUrl::fromLocalFile(m_dataDirectory + QLatin1Char('/'))) 0023 { 0024 m_instance = this; 0025 } 0026 0027 QQmlDataTest::~QQmlDataTest() 0028 { 0029 m_instance = nullptr; 0030 } 0031 0032 void QQmlDataTest::initTestCase() 0033 { 0034 QVERIFY2(!m_dataDirectory.isEmpty(), "'input' directory not found"); 0035 m_directory = QFileInfo(m_dataDirectory).absolutePath(); 0036 QVERIFY2(QDir::setCurrent(m_directory), qPrintable(QLatin1String("Could not chdir to ") + m_directory)); 0037 } 0038 0039 QString QQmlDataTest::testFile(const QString &fileName) const 0040 { 0041 if (m_directory.isEmpty()) { 0042 qFatal("QQmlDataTest::initTestCase() not called."); 0043 } 0044 QString result = m_dataDirectory; 0045 result += QLatin1Char('/'); 0046 result += fileName; 0047 return result; 0048 } 0049 0050 QByteArray QQmlDataTest::msgComponentError(const QQmlComponent &c, const QQmlEngine *engine /* = 0 */) 0051 { 0052 QString result; 0053 const QList<QQmlError> errors = c.errors(); 0054 QTextStream str(&result); 0055 str << "Component '" << c.url().toString() << "' has " << errors.size() << " errors: '"; 0056 for (int i = 0; i < errors.size(); ++i) { 0057 if (i) { 0058 str << ", '"; 0059 } 0060 str << errors.at(i).toString() << '\''; 0061 } 0062 if (!engine) { 0063 if (QQmlContext *context = c.creationContext()) { 0064 engine = context->engine(); 0065 } 0066 } 0067 if (engine) { 0068 str << " Import paths: (" << engine->importPathList().join(QLatin1String(", ")) << ") Plugin paths: (" 0069 << engine->pluginPathList().join(QLatin1String(", ")) << ')'; 0070 } 0071 return result.toLocal8Bit(); 0072 } 0073 0074 Q_GLOBAL_STATIC(QMutex, qQmlTestMessageHandlerMutex) 0075 0076 QQmlTestMessageHandler *QQmlTestMessageHandler::m_instance = nullptr; 0077 0078 void QQmlTestMessageHandler::messageHandler(QtMsgType, const QMessageLogContext &, const QString &message) 0079 { 0080 QMutexLocker locker(qQmlTestMessageHandlerMutex()); 0081 if (QQmlTestMessageHandler::m_instance) { 0082 QQmlTestMessageHandler::m_instance->m_messages.push_back(message); 0083 } 0084 } 0085 0086 QQmlTestMessageHandler::QQmlTestMessageHandler() 0087 { 0088 QMutexLocker locker(qQmlTestMessageHandlerMutex()); 0089 Q_ASSERT(!QQmlTestMessageHandler::m_instance); 0090 QQmlTestMessageHandler::m_instance = this; 0091 m_oldHandler = qInstallMessageHandler(messageHandler); 0092 } 0093 0094 QQmlTestMessageHandler::~QQmlTestMessageHandler() 0095 { 0096 QMutexLocker locker(qQmlTestMessageHandlerMutex()); 0097 Q_ASSERT(QQmlTestMessageHandler::m_instance); 0098 qInstallMessageHandler(m_oldHandler); 0099 QQmlTestMessageHandler::m_instance = nullptr; 0100 } 0101 0102 #include "moc_util.cpp"