File indexing completed on 2024-05-12 05:52:03

0001 /*
0002     SPDX-FileCopyrightText: 2019 Christoph Cullmann <cullmann@kde.org>
0003 
0004     SPDX-License-Identifier: LGPL-2.0-or-later
0005 */
0006 
0007 #include "sessions_action_test.h"
0008 #include "kateapp.h"
0009 #include "katesessionmanager.h"
0010 #include "katesessionsaction.h"
0011 
0012 #include <QActionGroup>
0013 #include <QCommandLineParser>
0014 #include <QSignalSpy>
0015 #include <QTemporaryDir>
0016 #include <QtTestWidgets>
0017 
0018 #include <KLocalizedString>
0019 
0020 QTEST_MAIN(KateSessionsActionTest)
0021 
0022 KateSessionsActionTest::KateSessionsActionTest()
0023 {
0024     // ensure ui file can be found and the translation domain is set to avoid warnings
0025     qApp->setApplicationName(QStringLiteral("kate"));
0026     KLocalizedString::setApplicationDomain(QByteArrayLiteral("kate"));
0027 
0028     m_tempdir = new QTemporaryDir;
0029     QVERIFY(m_tempdir->isValid());
0030 
0031     // ensure we use some dummy config
0032     KConfig::setMainConfigName(m_tempdir->path() + QStringLiteral("/testconfigfilerc"));
0033 
0034     // create KWrite variant to avoid plugin loading!
0035     static QCommandLineParser parser;
0036     m_app = new KateApp(parser, KateApp::ApplicationKWrite, m_tempdir->path());
0037     m_app->sessionManager()->activateAnonymousSession();
0038     m_manager = m_app->sessionManager();
0039     m_ac = new KateSessionsAction(QStringLiteral("menu"), this, m_manager, false);
0040 }
0041 
0042 KateSessionsActionTest::~KateSessionsActionTest()
0043 {
0044     delete m_ac;
0045     delete m_app;
0046     delete m_tempdir;
0047 }
0048 
0049 void KateSessionsActionTest::basic()
0050 {
0051     m_ac->slotAboutToShow();
0052     QCOMPARE(m_ac->isEnabled(), false);
0053 
0054     QList<QAction *> actions = m_ac->sessionsGroup->actions();
0055     QCOMPARE(actions.size(), 0);
0056 }
0057 
0058 void KateSessionsActionTest::deleteActiveSession()
0059 {
0060     m_manager->activateSession(QStringLiteral("foo"));
0061     KateSession::Ptr s = m_manager->activeSession();
0062 
0063     QCOMPARE(m_manager->sessionList().size(), 1);
0064     m_manager->deleteSession(s);
0065     QCOMPARE(m_manager->sessionList().size(), 1);
0066 
0067     // cleanup again for next test
0068     QVERIFY(m_manager->activateAnonymousSession());
0069     QVERIFY(m_manager->deleteSession(s));
0070     QCOMPARE(m_manager->sessionList().size(), 0);
0071 }
0072 
0073 void KateSessionsActionTest::deleteSession()
0074 {
0075     m_manager->activateSession(QStringLiteral("foo"));
0076     KateSession::Ptr s = m_manager->activeSession();
0077 
0078     m_manager->activateSession(QStringLiteral("bar"));
0079     KateSession::Ptr s2 = m_manager->activeSession();
0080 
0081     QCOMPARE(m_manager->sessionList().size(), 2);
0082 
0083     m_manager->deleteSession(s);
0084     QCOMPARE(m_manager->sessionList().size(), 1);
0085 
0086     // cleanup again for next test
0087     QVERIFY(m_manager->activateAnonymousSession());
0088     QVERIFY(m_manager->deleteSession(s2));
0089     QCOMPARE(m_manager->sessionList().size(), 0);
0090 }
0091 
0092 void KateSessionsActionTest::saveActiveSessionWithAnynomous()
0093 {
0094     QVERIFY(m_manager->activateAnonymousSession());
0095     QVERIFY(m_manager->activeSession()->isAnonymous());
0096     QVERIFY(m_manager->sessionList().empty());
0097 
0098     QCOMPARE(m_manager->saveActiveSession(), true);
0099     QCOMPARE(m_manager->activeSession()->isAnonymous(), true);
0100     QCOMPARE(m_manager->activeSession()->name(), QString());
0101     QCOMPARE(m_manager->sessionList().size(), 0);
0102 }
0103 
0104 void KateSessionsActionTest::deletingSessionFilesUnderRunningApp()
0105 {
0106     m_manager->activateSession(QStringLiteral("foo"));
0107     m_manager->activateSession(QStringLiteral("bar"));
0108 
0109     QVERIFY(m_manager->sessionList().size() == 2);
0110     QVERIFY(m_manager->activeSession()->name() == QLatin1String("bar"));
0111 
0112     const QString file = m_tempdir->path() + QLatin1String("/foo.katesession");
0113     QVERIFY(QFile::remove(file));
0114 
0115     // wait for notification about external session list change
0116     QSignalSpy spy(m_manager, &KateSessionManager::sessionListChanged);
0117     QVERIFY(spy.wait());
0118 
0119     QCOMPARE(m_manager->activeSession()->name(), QLatin1String("bar"));
0120 }
0121 
0122 void KateSessionsActionTest::startNonEmpty()
0123 {
0124     m_manager->activateSession(QStringLiteral("foo"));
0125     m_manager->activateSession(QStringLiteral("bar"));
0126 
0127     KateSessionManager m(this, m_tempdir->path());
0128     QCOMPARE(m.sessionList().size(), 2);
0129 }
0130 
0131 void KateSessionsActionTest::limit()
0132 {
0133     for (int i = 0; i < 14; i++) {
0134         m_manager->copySession(m_manager->activeSession(), QStringLiteral("session %1").arg(i));
0135     }
0136 
0137     QVERIFY(m_manager->sessionList().size() > 10);
0138     QCOMPARE(m_ac->isEnabled(), true);
0139 
0140     m_ac->slotAboutToShow();
0141 
0142     QList<QAction *> actions = m_ac->sessionsGroup->actions();
0143     QCOMPARE(actions.size(), 10);
0144 }
0145 
0146 #include "moc_sessions_action_test.cpp"