Skip to content

Commit 9cae724

Browse files
committed
More tests
1 parent 8854a46 commit 9cae724

5 files changed

Lines changed: 883 additions & 27 deletions

File tree

tests/yup_core.cpp

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -54,6 +54,7 @@
5454
#include "yup_core/yup_LinkedListPointer.cpp"
5555
#include "yup_core/yup_ListenerList.cpp"
5656
#include "yup_core/yup_LocalisedStrings.cpp"
57+
#include "yup_core/yup_Logger.cpp"
5758
#include "yup_core/yup_MACAddress.cpp"
5859
#include "yup_core/yup_MathFunctions.cpp"
5960
#include "yup_core/yup_MemoryInputStream.cpp"

tests/yup_core/yup_Logger.cpp

Lines changed: 265 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,265 @@
1+
/*
2+
==============================================================================
3+
4+
This file is part of the YUP library.
5+
Copyright (c) 2026 - kunitoki@gmail.com
6+
7+
YUP is an open source library subject to open-source licensing.
8+
9+
The code included in this file is provided under the terms of the ISC license
10+
http://www.isc.org/downloads/software-support-policy/isc-license. Permission
11+
to use, copy, modify, and/or distribute this software for any purpose with or
12+
without fee is hereby granted provided that the above copyright notice and
13+
this permission notice appear in all copies.
14+
15+
YUP IS PROVIDED "AS IS" WITHOUT ANY WARRANTY, AND ALL WARRANTIES, WHETHER
16+
EXPRESSED OR IMPLIED, INCLUDING MERCHANTABILITY AND FITNESS FOR PURPOSE, ARE
17+
DISCLAIMED.
18+
19+
==============================================================================
20+
*/
21+
22+
#include <gtest/gtest.h>
23+
24+
#include <yup_core/yup_core.h>
25+
26+
using namespace yup;
27+
28+
namespace
29+
{
30+
31+
class RecordingLogger : public Logger
32+
{
33+
public:
34+
void logMessage (const String& message) override
35+
{
36+
const ScopedLock sl (lock);
37+
messages.add (message);
38+
}
39+
40+
StringArray getMessages()
41+
{
42+
const ScopedLock sl (lock);
43+
return messages;
44+
}
45+
46+
private:
47+
CriticalSection lock;
48+
StringArray messages;
49+
};
50+
51+
} // namespace
52+
53+
class LoggerTests : public ::testing::Test
54+
{
55+
protected:
56+
void SetUp() override
57+
{
58+
Logger::setCurrentLogger (nullptr);
59+
}
60+
61+
void TearDown() override
62+
{
63+
Logger::setCurrentLogger (nullptr);
64+
}
65+
};
66+
67+
TEST_F (LoggerTests, DefaultStateHasNoLogger)
68+
{
69+
EXPECT_EQ (Logger::getCurrentLogger(), nullptr);
70+
}
71+
72+
TEST_F (LoggerTests, SetAndGetCurrentLogger)
73+
{
74+
RecordingLogger logger;
75+
Logger::setCurrentLogger (&logger);
76+
EXPECT_EQ (Logger::getCurrentLogger(), &logger);
77+
Logger::setCurrentLogger (nullptr);
78+
}
79+
80+
TEST_F (LoggerTests, WriteToLogDispatchesToCurrentLogger)
81+
{
82+
RecordingLogger logger;
83+
Logger::setCurrentLogger (&logger);
84+
85+
Logger::writeToLog ("hello");
86+
Logger::writeToLog ("world");
87+
88+
auto messages = logger.getMessages();
89+
EXPECT_EQ (messages.size(), 2);
90+
EXPECT_EQ (messages[0], "hello");
91+
EXPECT_EQ (messages[1], "world");
92+
Logger::setCurrentLogger (nullptr);
93+
}
94+
95+
TEST_F (LoggerTests, WriteToLogWithNoLoggerDoesNotCrash)
96+
{
97+
EXPECT_EQ (Logger::getCurrentLogger(), nullptr);
98+
Logger::writeToLog ("no logger set");
99+
}
100+
101+
TEST_F (LoggerTests, SetCurrentLoggerToNullRemovesLogger)
102+
{
103+
RecordingLogger logger;
104+
Logger::setCurrentLogger (&logger);
105+
EXPECT_NE (Logger::getCurrentLogger(), nullptr);
106+
107+
Logger::setCurrentLogger (nullptr);
108+
EXPECT_EQ (Logger::getCurrentLogger(), nullptr);
109+
}
110+
111+
TEST_F (LoggerTests, WriteAfterRemovingLoggerDoesNotDispatch)
112+
{
113+
RecordingLogger logger;
114+
Logger::setCurrentLogger (&logger);
115+
Logger::writeToLog ("first");
116+
117+
Logger::setCurrentLogger (nullptr);
118+
Logger::writeToLog ("second");
119+
120+
EXPECT_EQ (logger.getMessages().size(), 1);
121+
EXPECT_EQ (logger.getMessages()[0], "first");
122+
}
123+
124+
TEST_F (LoggerTests, OutputDebugStringDoesNotCrash)
125+
{
126+
Logger::outputDebugString ("debug output");
127+
}
128+
129+
// =============================================================================
130+
131+
class FileLoggerTests : public ::testing::Test
132+
{
133+
protected:
134+
void SetUp() override
135+
{
136+
Logger::setCurrentLogger (nullptr);
137+
tempFile = File::getSpecialLocation (File::tempDirectory)
138+
.getChildFile ("YUP_FileLoggerTests_" + String::toHexString (Random::getSystemRandom().nextInt()) + ".log");
139+
tempFile.deleteFile();
140+
}
141+
142+
void TearDown() override
143+
{
144+
Logger::setCurrentLogger (nullptr);
145+
tempFile.deleteFile();
146+
}
147+
148+
File tempFile;
149+
};
150+
151+
TEST_F (FileLoggerTests, ConstructionCreatesFile)
152+
{
153+
FileLogger logger (tempFile, "welcome", -1);
154+
EXPECT_TRUE (tempFile.exists());
155+
EXPECT_EQ (logger.getLogFile(), tempFile);
156+
}
157+
158+
TEST_F (FileLoggerTests, GetLogFileReturnsCorrectFile)
159+
{
160+
FileLogger logger (tempFile, "test", -1);
161+
EXPECT_EQ (logger.getLogFile().getFullPathName(), tempFile.getFullPathName());
162+
}
163+
164+
TEST_F (FileLoggerTests, WelcomeMessageIsWritten)
165+
{
166+
{
167+
FileLogger logger (tempFile, "my welcome message", -1);
168+
}
169+
170+
auto content = tempFile.loadFileAsString();
171+
EXPECT_TRUE (content.contains ("my welcome message"));
172+
}
173+
174+
TEST_F (FileLoggerTests, LogMessageWritesToFile)
175+
{
176+
{
177+
FileLogger logger (tempFile, "start", -1);
178+
Logger::setCurrentLogger (&logger);
179+
Logger::writeToLog ("test message");
180+
Logger::setCurrentLogger (nullptr);
181+
}
182+
183+
EXPECT_TRUE (tempFile.loadFileAsString().contains ("test message"));
184+
}
185+
186+
TEST_F (FileLoggerTests, MultipleMessagesAllWritten)
187+
{
188+
{
189+
FileLogger logger (tempFile, "start", -1);
190+
logger.logMessage ("line one");
191+
logger.logMessage ("line two");
192+
logger.logMessage ("line three");
193+
}
194+
195+
auto content = tempFile.loadFileAsString();
196+
EXPECT_TRUE (content.contains ("line one"));
197+
EXPECT_TRUE (content.contains ("line two"));
198+
EXPECT_TRUE (content.contains ("line three"));
199+
}
200+
201+
TEST_F (FileLoggerTests, TrimFileSizeTruncatesLargeFile)
202+
{
203+
{
204+
FileLogger logger (tempFile, "start", -1);
205+
for (int i = 0; i < 200; ++i)
206+
logger.logMessage ("line " + String (i) + " some extra padding content to make lines longer");
207+
}
208+
209+
auto originalSize = tempFile.getSize();
210+
ASSERT_GT (originalSize, 0);
211+
212+
auto trimTarget = originalSize / 2;
213+
FileLogger::trimFileSize (tempFile, trimTarget);
214+
215+
EXPECT_LE (tempFile.getSize(), trimTarget + 512);
216+
EXPECT_GT (tempFile.getSize(), 0);
217+
}
218+
219+
TEST_F (FileLoggerTests, TrimFileSizeWithZeroDeletesFile)
220+
{
221+
{
222+
FileLogger logger (tempFile, "start", -1);
223+
logger.logMessage ("some content");
224+
}
225+
226+
ASSERT_TRUE (tempFile.exists());
227+
FileLogger::trimFileSize (tempFile, 0);
228+
EXPECT_FALSE (tempFile.exists());
229+
}
230+
231+
TEST_F (FileLoggerTests, TrimFileSizeDoesNothingWhenFileIsSmallerThanLimit)
232+
{
233+
{
234+
FileLogger logger (tempFile, "start", -1);
235+
logger.logMessage ("short");
236+
}
237+
238+
auto originalSize = tempFile.getSize();
239+
FileLogger::trimFileSize (tempFile, originalSize * 2);
240+
EXPECT_EQ (tempFile.getSize(), originalSize);
241+
}
242+
243+
TEST_F (FileLoggerTests, GetSystemLogFileFolderReturnsNonEmptyPath)
244+
{
245+
auto folder = FileLogger::getSystemLogFileFolder();
246+
EXPECT_FALSE (folder.getFullPathName().isEmpty());
247+
}
248+
249+
TEST_F (FileLoggerTests, MaxInitialFileSizeTruncatesExistingLargeFile)
250+
{
251+
{
252+
FileLogger firstLogger (tempFile, "first session", -1);
253+
for (int i = 0; i < 200; ++i)
254+
firstLogger.logMessage ("padding line " + String (i) + " with some extra content to grow the file");
255+
}
256+
257+
auto sizeBeforeSecondOpen = tempFile.getSize();
258+
ASSERT_GT (sizeBeforeSecondOpen, 1024);
259+
260+
{
261+
FileLogger secondLogger (tempFile, "second session", 512);
262+
}
263+
264+
EXPECT_LE (tempFile.getSize(), sizeBeforeSecondOpen);
265+
}

0 commit comments

Comments
 (0)