/* * Deskflow -- mouse and keyboard sharing utility * SPDX-FileCopyrightText: (C) 2025 Chris Rizzitello * SPDX-FileCopyrightText: (C) 2024 Symless Ltd. * SPDX-License-Identifier: GPL-2.0-only WITH LicenseRef-OpenSSL-Exception */ #include "LogTests.h" #include #include #define LEVEL_PRINT "%z\057" #define LEVEL_ERR "%z\061" #define LEVEL_INFO "%z\064" QString sanitizeBuffer(const std::stringstream &in) { static QRegularExpression timestampRegex("\\[\\S+\\] "); QString rtn = QString::fromStdString(in.str()).simplified(); rtn.remove(timestampRegex); return rtn; } void LogTests::initTestCase() { m_arch.init(); m_log.setFilter(LogLevel::Debug2); } void LogTests::printWithErrorValidOutput() { std::stringstream buffer; std::streambuf *old = std::cerr.rdbuf(buffer.rdbuf()); m_log.print(nullptr, 0, LEVEL_ERR "test message"); auto string = sanitizeBuffer(buffer); std::cerr.rdbuf(old); QCOMPARE(string, "ERROR: test message"); } void LogTests::printTestPrintLevel() { std::stringstream buffer; std::streambuf *old = std::cout.rdbuf(buffer.rdbuf()); m_log.print(nullptr, 0, LEVEL_PRINT "test message"); auto string = sanitizeBuffer(buffer); std::cout.rdbuf(old); QCOMPARE(string, "test message"); } void LogTests::printTestWithArgs() { std::stringstream buffer; std::streambuf *old = std::cout.rdbuf(buffer.rdbuf()); m_log.print(nullptr, 0, LEVEL_INFO "test %s", "IamARG"); auto string = sanitizeBuffer(buffer); std::cout.rdbuf(old); QCOMPARE(string, "INFO: test IamARG"); } void LogTests::printTestLogString() { std::stringstream buffer; std::streambuf *old = std::cout.rdbuf(buffer.rdbuf()); auto longString = QString(10000, 'a'); m_log.print(nullptr, 0, LEVEL_INFO "%s", qPrintable(longString)); auto string = sanitizeBuffer(buffer); std::cout.rdbuf(old); QCOMPARE(string, QString("INFO: %1").arg(longString)); } void LogTests::printLevelToHigh() { std::stringstream buffer; std::streambuf *old = std::cout.rdbuf(buffer.rdbuf()); m_log.print(CLOG_DEBUG5 "test message"); auto string = sanitizeBuffer(buffer); std::cout.rdbuf(old); QCOMPARE(string, QString{}); } void LogTests::printInfoWithFileAndLine() { std::stringstream buffer; std::streambuf *old = std::cout.rdbuf(buffer.rdbuf()); m_log.print("test file", 123, LEVEL_INFO "test message"); auto string = sanitizeBuffer(buffer); std::cout.rdbuf(old); QCOMPARE(string, "INFO: test message test file:123"); } void LogTests::printErrWithFileAndLine() { std::stringstream buffer; std::streambuf *old = std::cerr.rdbuf(buffer.rdbuf()); m_log.print("test file", 123, LEVEL_ERR "test message"); auto string = sanitizeBuffer(buffer); std::cerr.rdbuf(old); QCOMPARE(string, "ERROR: test message test file:123"); } QTEST_MAIN(LogTests)