File indexing completed on 2024-04-14 15:37:31

0001 /*
0002  *  SPDX-FileCopyrightText: 2016 Sebastian Kügler <sebas@kde.org>
0003  *
0004  *  SPDX-License-Identifier: LGPL-2.1-or-later
0005  */
0006 
0007 #include <QLoggingCategory>
0008 #include <QObject>
0009 #include <QtTest>
0010 
0011 #include "../src/log.h"
0012 
0013 Q_DECLARE_LOGGING_CATEGORY(KSCREEN_TESTLOG)
0014 
0015 Q_LOGGING_CATEGORY(KSCREEN_TESTLOG, "kscreen.testlog")
0016 
0017 using namespace KScreen;
0018 
0019 auto KSCREEN_LOGGING = "KSCREEN_LOGGING";
0020 
0021 class TestLog : public QObject
0022 {
0023     Q_OBJECT
0024 
0025 private Q_SLOTS:
0026     void init();
0027     void initTestCase();
0028     void cleanupTestCase();
0029     void testContext();
0030     void testEnabled();
0031     void testLog();
0032 
0033 private:
0034     QString m_defaultLogFile;
0035 };
0036 
0037 void TestLog::init()
0038 {
0039     QStandardPaths::setTestModeEnabled(true);
0040     m_defaultLogFile = QStandardPaths::writableLocation(QStandardPaths::GenericDataLocation) + QLatin1String("/kscreen/kscreen.log");
0041 }
0042 
0043 void TestLog::initTestCase()
0044 {
0045     qputenv(KSCREEN_LOGGING, QByteArray("true"));
0046 }
0047 
0048 void TestLog::cleanupTestCase()
0049 {
0050     qunsetenv(KSCREEN_LOGGING);
0051 }
0052 
0053 void TestLog::testContext()
0054 {
0055     auto log = Log::instance();
0056     QString ctx = QStringLiteral("context text");
0057     QVERIFY(log != nullptr);
0058     log->setContext(ctx);
0059     QCOMPARE(log->context(), ctx);
0060 
0061     delete log;
0062 }
0063 
0064 void TestLog::testEnabled()
0065 {
0066     qputenv(KSCREEN_LOGGING, QByteArray("faLSe"));
0067 
0068     auto log = Log::instance();
0069     QCOMPARE(log->enabled(), false);
0070     QCOMPARE(log->logFile(), QString());
0071 
0072     delete log;
0073     qunsetenv(KSCREEN_LOGGING);
0074 
0075     log = Log::instance();
0076     QCOMPARE(log->enabled(), false);
0077     QCOMPARE(log->logFile(), QString());
0078 
0079     delete log;
0080     qputenv(KSCREEN_LOGGING, QByteArray("truE"));
0081 
0082     log = Log::instance();
0083     QCOMPARE(log->enabled(), true);
0084     QCOMPARE(log->logFile(), m_defaultLogFile);
0085 
0086     delete log;
0087 }
0088 
0089 void TestLog::testLog()
0090 {
0091     auto log = Log::instance();
0092     Q_UNUSED(log);
0093 
0094     QFile lf(m_defaultLogFile);
0095     lf.remove();
0096     QVERIFY(!lf.exists());
0097 
0098     QString logmsg = QStringLiteral("This is a log message. ♥");
0099     Log::log(logmsg);
0100 
0101     QVERIFY(lf.exists());
0102     QVERIFY(lf.remove());
0103 
0104     qCDebug(KSCREEN_TESTLOG) << "qCDebug message from testlog";
0105     QVERIFY(lf.exists());
0106     QVERIFY(lf.remove());
0107 
0108     delete Log::instance();
0109 
0110     // Make sure on log file gets written when disabled
0111     qputenv(KSCREEN_LOGGING, "false");
0112 
0113     qCDebug(KSCREEN_TESTLOG) << logmsg;
0114     QCOMPARE(Log::instance()->enabled(), false);
0115     QVERIFY(!lf.exists());
0116 
0117     Log::log(logmsg);
0118     QVERIFY(!lf.exists());
0119 
0120     // Make sure we don't crash on cleanup
0121     delete Log::instance();
0122     delete Log::instance();
0123 }
0124 
0125 QTEST_MAIN(TestLog)
0126 
0127 #include "testlog.moc"