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