File indexing completed on 2024-05-12 04:39:30
0001 /* 0002 SPDX-FileCopyrightText: 2017 Aleix Pol Gonzalez <aleixpol@kde.org> 0003 0004 SPDX-License-Identifier: GPL-2.0-or-later 0005 */ 0006 0007 #include <cmakeserver.h> 0008 #include <tests/autotestshell.h> 0009 #include <tests/testproject.h> 0010 #include <tests/testcore.h> 0011 #include "testhelpers.h" 0012 #include <cmakeutils.h> 0013 0014 #include <QTest> 0015 #include <QJsonObject> 0016 #include <QLoggingCategory> 0017 #include <QVersionNumber> 0018 0019 using namespace KDevelop; 0020 0021 class CMakeServerTest : public QObject 0022 { 0023 Q_OBJECT 0024 public: 0025 CMakeServerTest() 0026 { 0027 QLoggingCategory::setFilterRules(QStringLiteral("default.debug=true\nkdevelop.projectmanagers.cmake.debug=true\n")); 0028 0029 AutoTestShell::init({ "KDevCMakeManager", "KDevCMakeBuilder", "KDevMakeBuilder", "KDevStandardOutputView" }); 0030 TestCore::initialize(); 0031 } 0032 0033 private Q_SLOTS: 0034 void initTestCase() 0035 { 0036 const auto exe = CMake::findExecutable(); 0037 QVERIFY(!exe.isEmpty()); 0038 const auto versionStr = CMake::cmakeExecutableVersion(exe); 0039 QVERIFY(!versionStr.isEmpty()); 0040 const auto version = QVersionNumber::fromString(versionStr); 0041 QVERIFY(!version.isNull()); 0042 const bool versionWithServer = (version >= QVersionNumber(3, 8) && version < QVersionNumber(3, 20)); 0043 if (!versionWithServer) 0044 QSKIP("cmake server not supported"); 0045 } 0046 0047 void testRun() 0048 { 0049 CMakeServer server(nullptr); 0050 QSignalSpy spyConnected(&server, &CMakeServer::connected); 0051 QVERIFY(server.isServerAvailable() || spyConnected.wait()); 0052 0053 QSignalSpy spy(&server, &CMakeServer::response); 0054 QJsonObject codeModel; 0055 int errors = 0; 0056 connect(&server, &CMakeServer::response, this, [&errors, &codeModel, &server](const QJsonObject &response) { 0057 if (response.value(QStringLiteral("type")) == QLatin1String("reply")) { 0058 if (response.value(QStringLiteral("inReplyTo")) == QLatin1String("configure")) 0059 server.compute(); 0060 else if (response.value(QStringLiteral("inReplyTo")) == QLatin1String("compute")) 0061 server.codemodel(); 0062 else if(response.value(QStringLiteral("inReplyTo")) == QLatin1String("codemodel")) 0063 codeModel = response; 0064 } else if(response.value(QStringLiteral("type")) == QLatin1String("error")) { 0065 ++errors; 0066 } 0067 }); 0068 0069 const QString name = QStringLiteral("single_subdirectory"); 0070 const auto paths = projectPaths(name); 0071 const QString builddir = QStringLiteral(CMAKE_TESTS_BINARY_DIR "/cmake-server-test-builddir/") + name; 0072 QVERIFY(QDir(builddir).removeRecursively()); 0073 QVERIFY(QDir(builddir).mkpath(builddir)); 0074 0075 QVERIFY(spy.wait()); 0076 server.handshake(paths.sourceDir, Path(builddir)); 0077 QVERIFY(spy.wait()); 0078 server.configure({}); 0079 while(codeModel.isEmpty()) 0080 QVERIFY(spy.wait()); 0081 QCOMPARE(errors, 0); 0082 QVERIFY(!codeModel.isEmpty()); 0083 qDebug() << "codemodel" << codeModel; 0084 } 0085 }; 0086 0087 QTEST_MAIN( CMakeServerTest ) 0088 0089 #include "test_cmakeserver.moc"