1 /*  SPDX-License-Identifier: LGPL-2.0-or-later
2 
3     SPDX-FileCopyrightText: 2019 Christoph Cullmann <cullmann@kde.org>
4 
5     SPDX-License-Identifier: LGPL-2.0-or-later
6 */
7 
8 #include "session_manager_test.h"
9 #include "kateapp.h"
10 #include "katesessionmanager.h"
11 
12 #include <KConfig>
13 #include <KConfigGroup>
14 
15 #include <QCommandLineParser>
16 #include <QTemporaryDir>
17 #include <QtTestWidgets>
18 
QTEST_MAIN(KateSessionManagerTest)19 QTEST_MAIN(KateSessionManagerTest)
20 
21 void KateSessionManagerTest::initTestCase()
22 {
23     /**
24      * init resources from our static lib
25      */
26     Q_INIT_RESOURCE(kate);
27 
28     // we need an application object, as session loading will trigger modifications to that
29     m_app = new KateApp(QCommandLineParser());
30     m_app->sessionManager()->activateAnonymousSession();
31 }
32 
cleanupTestCase()33 void KateSessionManagerTest::cleanupTestCase()
34 {
35     delete m_app;
36 }
37 
init()38 void KateSessionManagerTest::init()
39 {
40     m_tempdir = new QTemporaryDir;
41     QVERIFY(m_tempdir->isValid());
42 
43     m_manager = new KateSessionManager(this, m_tempdir->path());
44 }
45 
cleanup()46 void KateSessionManagerTest::cleanup()
47 {
48     delete m_manager;
49     delete m_tempdir;
50 }
51 
basic()52 void KateSessionManagerTest::basic()
53 {
54     QCOMPARE(m_manager->sessionsDir(), m_tempdir->path());
55     QCOMPARE(m_manager->sessionList().size(), 0);
56     QVERIFY(m_manager->activateAnonymousSession());
57     QVERIFY(m_manager->activeSession());
58 }
59 
activateNewNamedSession()60 void KateSessionManagerTest::activateNewNamedSession()
61 {
62     const QString sessionName = QStringLiteral("hello_world");
63 
64     QVERIFY(m_manager->activateSession(sessionName, false, false));
65     QCOMPARE(m_manager->sessionList().size(), 1);
66 
67     KateSession::Ptr s = m_manager->activeSession();
68     QCOMPARE(s->name(), sessionName);
69     QCOMPARE(s->isAnonymous(), false);
70 
71     const QString sessionFile = m_tempdir->path() + QLatin1Char('/') + sessionName + QLatin1String(".katesession");
72     QCOMPARE(s->config()->name(), sessionFile);
73 }
74 
anonymousSessionFile()75 void KateSessionManagerTest::anonymousSessionFile()
76 {
77     const QString anonfile = QDir().cleanPath(m_tempdir->path() + QLatin1String("/../anonymous.katesession"));
78     QVERIFY(m_manager->activateAnonymousSession());
79     QVERIFY(m_manager->activeSession()->isAnonymous());
80     QCOMPARE(m_manager->activeSession()->config()->name(), anonfile);
81 }
82 
urlizeSessionFile()83 void KateSessionManagerTest::urlizeSessionFile()
84 {
85     const QString sessionName = QStringLiteral("hello world/#");
86 
87     m_manager->activateSession(sessionName, false, false);
88     KateSession::Ptr s = m_manager->activeSession();
89 
90     const QString sessionFile = m_tempdir->path() + QLatin1String("/hello%20world%2F%23.katesession");
91     QCOMPARE(s->config()->name(), sessionFile);
92 }
93 
deleteSession()94 void KateSessionManagerTest::deleteSession()
95 {
96     m_manager->activateSession(QStringLiteral("foo"));
97     KateSession::Ptr s = m_manager->activeSession();
98 
99     m_manager->activateSession(QStringLiteral("bar"));
100 
101     QCOMPARE(m_manager->sessionList().size(), 2);
102 
103     m_manager->deleteSession(s);
104     QCOMPARE(m_manager->sessionList().size(), 1);
105 }
106 
deleteActiveSession()107 void KateSessionManagerTest::deleteActiveSession()
108 {
109     m_manager->activateSession(QStringLiteral("foo"));
110     KateSession::Ptr s = m_manager->activeSession();
111 
112     QCOMPARE(m_manager->sessionList().size(), 1);
113     m_manager->deleteSession(s);
114     QCOMPARE(m_manager->sessionList().size(), 1);
115 }
116 
renameSession()117 void KateSessionManagerTest::renameSession()
118 {
119     m_manager->activateSession(QStringLiteral("foo"));
120     KateSession::Ptr s = m_manager->activeSession();
121 
122     QCOMPARE(m_manager->sessionList().size(), 1);
123 
124     const QString newName = QStringLiteral("bar");
125     m_manager->renameSession(s, newName); // non-collision path
126     QCOMPARE(s->name(), newName);
127     QCOMPARE(m_manager->sessionList().size(), 1);
128     QCOMPARE(m_manager->sessionList().first(), s);
129 }
130 
saveActiveSessionWithAnynomous()131 void KateSessionManagerTest::saveActiveSessionWithAnynomous()
132 {
133     QVERIFY(m_manager->activateAnonymousSession());
134     QVERIFY(m_manager->activeSession()->isAnonymous());
135     QVERIFY(m_manager->sessionList().empty());
136 
137     QCOMPARE(m_manager->saveActiveSession(), true);
138     QCOMPARE(m_manager->activeSession()->isAnonymous(), true);
139     QCOMPARE(m_manager->activeSession()->name(), QString());
140     QCOMPARE(m_manager->sessionList().size(), 0);
141 }
142 
deletingSessionFilesUnderRunningApp()143 void KateSessionManagerTest::deletingSessionFilesUnderRunningApp()
144 {
145     m_manager->activateSession(QStringLiteral("foo"));
146     m_manager->activateSession(QStringLiteral("bar"));
147 
148     QVERIFY(m_manager->sessionList().size() == 2);
149     QVERIFY(m_manager->activeSession()->name() == QLatin1String("bar"));
150 
151     const QString file = m_tempdir->path() + QLatin1String("/foo.katesession");
152     QVERIFY(QFile(file).remove());
153 
154     QTRY_COMPARE_WITH_TIMEOUT(m_manager->sessionList().size(), 1, 1000); // that should be enough for KDirWatch to kick in
155     QCOMPARE(m_manager->activeSession()->name(), QLatin1String("bar"));
156 }
157 
startNonEmpty()158 void KateSessionManagerTest::startNonEmpty()
159 {
160     m_manager->activateSession(QStringLiteral("foo"));
161     m_manager->activateSession(QStringLiteral("bar"));
162 
163     KateSessionManager m(this, m_tempdir->path());
164     QCOMPARE(m.sessionList().size(), 2);
165 }
166