File indexing completed on 2024-05-19 04:41:20
0001 /* 0002 SPDX-FileCopyrightText: 2019 Daniel Mensinger <daniel@mensinger-ka.de> 0003 0004 SPDX-License-Identifier: LGPL-2.0-or-later 0005 */ 0006 0007 #pragma once 0008 0009 #include <QHash> 0010 #include <QObject> 0011 #include <QString> 0012 #include <QStringList> 0013 #include <interfaces/itestsuite.h> 0014 #include <language/duchain/indexeddeclaration.h> 0015 #include <memory> 0016 #include <util/path.h> 0017 0018 class QJsonObject; 0019 class QJsonArray; 0020 class MesonTest; 0021 class MesonTestSuite; 0022 class MesonTestSuites; 0023 using MesonTestPtr = std::shared_ptr<MesonTest>; 0024 using MesonTestSuitePtr = std::shared_ptr<MesonTestSuite>; 0025 using MesonTestSuitesPtr = std::shared_ptr<MesonTestSuites>; 0026 0027 class MesonTest 0028 { 0029 public: 0030 explicit MesonTest(const QJsonObject& json, KDevelop::IProject* project); 0031 virtual ~MesonTest(); 0032 0033 QString name() const; 0034 QStringList suites() const; 0035 KDevelop::IProject* project() const; 0036 KJob* job(KDevelop::ITestSuite::TestJobVerbosity verbosity); 0037 0038 void fromJson(const QJsonObject& json); 0039 0040 private: 0041 QString m_name; 0042 QStringList m_command; 0043 QStringList m_suites; // In meson one test can be part of multiple suites 0044 KDevelop::Path m_workDir; 0045 QHash<QString, QString> m_env; 0046 KDevelop::IProject* m_project = nullptr; 0047 }; 0048 0049 class MesonTestSuite : public KDevelop::ITestSuite 0050 { 0051 public: 0052 explicit MesonTestSuite(QString name, KDevelop::IProject* project); 0053 virtual ~MesonTestSuite(); 0054 0055 // Implementing the ITestSuite interface 0056 QString name() const override; 0057 QStringList cases() const override; 0058 KDevelop::IProject* project() const override; 0059 KJob* launchCase(const QString& testCase, KDevelop::ITestSuite::TestJobVerbosity verbosity) override; 0060 KJob* launchCases(const QStringList& testCases, KDevelop::ITestSuite::TestJobVerbosity verbosity) override; 0061 KJob* launchAllCases(KDevelop::ITestSuite::TestJobVerbosity verbosity) override; 0062 0063 // TODO implement these 0064 KDevelop::IndexedDeclaration declaration() const override; 0065 KDevelop::IndexedDeclaration caseDeclaration(const QString& testCase) const override; 0066 0067 // Custom functions 0068 void addTestCase(MesonTestPtr test); 0069 QHash<QString, MesonTestPtr> tests(); 0070 0071 private: 0072 QString m_name; 0073 KDevelop::IProject* m_project = nullptr; 0074 QHash<QString, MesonTestPtr> m_tests; 0075 }; 0076 0077 class MesonTestSuites 0078 { 0079 public: 0080 explicit MesonTestSuites(const QJsonArray& json, KDevelop::IProject* project); 0081 virtual ~MesonTestSuites(); 0082 0083 QHash<QString, MesonTestSuitePtr> testSuites(); 0084 MesonTestSuitePtr testSuite(QString name); 0085 MesonTestSuitePtr operator[](QString name); 0086 0087 void fromJSON(const QJsonArray& json); 0088 0089 private: 0090 KDevelop::IProject* m_project = nullptr; 0091 QHash<QString, MesonTestSuitePtr> m_suites; 0092 };