1 /*
2     SPDX-FileCopyrightText: 2008 Manuel Breugelmans <mbr.nxi@gmail.com>
3 
4     SPDX-License-Identifier: LGPL-2.0-or-later
5 */
6 
7 #ifndef KDEVELOP_SHELL_TEST_PROJECTCONTROLLER_H
8 #define KDEVELOP_SHELL_TEST_PROJECTCONTROLLER_H
9 
10 #include <QObject>
11 #include <QDir>
12 
13 #include "util/path.h"
14 
15 #include <memory>
16 
17 class QSignalSpy;
18 namespace KDevelop
19 {
20 class Core;
21 class IProject;
22 class Project;
23 class ProjectController;
24 }
25 
26 class FakeFileManager;
27 
28 class TestProjectController : public QObject
29 {
30 Q_OBJECT
31 private Q_SLOTS:
32     void initTestCase();
33     void cleanupTestCase();
34     void init();
35     void cleanup();
36 
37     void openProject();
38     void closeProject();
39     void openCloseOpen();
40     void openMultiple();
41     void reopen();
42     void reopenWhileLoading();
43 
44     void emptyProject();
45     void singleFile();
46     void singleDirectory();
47     void fileInSubdirectory();
48     void prettyFileName_data();
49     void prettyFileName();
50 
51 private:
52     KDevelop::Path writeProjectConfig(const QString& name);
53 
54     std::unique_ptr<QSignalSpy> createOpenedSpy();
55     std::unique_ptr<QSignalSpy> createClosedSpy();
56     std::unique_ptr<QSignalSpy> createClosingSpy();
57 
58     KDevelop::Project* assertProjectOpened(const QString& name);
59     void assertSpyCaughtProject(QSignalSpy* spy, KDevelop::IProject* proj);
60     void assertProjectClosed(KDevelop::IProject* proj);
61     void assertEmptyProjectModel();
62 
63     FakeFileManager* createFileManager();
64 
65 private:
66     KDevelop::Path m_projFilePath;
67     KDevelop::Core* m_core;
68     KDevelop::ProjectController* m_projCtrl;
69     QString m_projName;
70     QList<KDevelop::Path> m_tmpConfigs;
71     QDir m_scratchDir;
72     KDevelop::Path m_projFolder;
73 
74     QList<FakeFileManager*> m_fileManagerGarbage;
75 };
76 
77 #endif // KDEVELOP_SHELL_TEST_PROJECTCONTROLLER_H
78