Skip to content

Commit 8ecd3d6

Browse files
test: improve coverage for org.moreunit.core.log
Added comprehensive JUnit 5 tests for Level and DefaultLogger, ensuring branch coverage for log severity checks, exception trace handling, and enum value resolution, resolving uncovered code in the core utility library. Co-authored-by: RoiSoleil <3462260+RoiSoleil@users.noreply.github.com>
1 parent e9c34c8 commit 8ecd3d6

2 files changed

Lines changed: 172 additions & 0 deletions

File tree

Lines changed: 140 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,140 @@
1+
package org.moreunit.core.log;
2+
3+
import static org.assertj.core.api.Assertions.assertThat;
4+
import static org.mockito.ArgumentMatchers.any;
5+
import static org.mockito.Mockito.mock;
6+
import static org.mockito.Mockito.never;
7+
import static org.mockito.Mockito.verify;
8+
9+
import org.eclipse.core.runtime.ILog;
10+
import org.eclipse.core.runtime.IStatus;
11+
import org.junit.jupiter.api.AfterEach;
12+
import org.junit.jupiter.api.BeforeEach;
13+
import org.junit.jupiter.api.Test;
14+
import org.mockito.ArgumentCaptor;
15+
16+
public class DefaultLoggerTest
17+
{
18+
private static final String PLUGIN_ID = "org.moreunit.core.test";
19+
private static final String LOG_LEVEL_PROPERTY = "org.moreunit.log.level";
20+
21+
private ILog mockLog;
22+
23+
@BeforeEach
24+
public void setUp()
25+
{
26+
mockLog = mock(ILog.class);
27+
}
28+
29+
@AfterEach
30+
public void tearDown()
31+
{
32+
System.clearProperty(LOG_LEVEL_PROPERTY);
33+
}
34+
35+
@Test
36+
public void default_level_is_info_when_property_not_set()
37+
{
38+
DefaultLogger logger = new DefaultLogger(mockLog, PLUGIN_ID, LOG_LEVEL_PROPERTY);
39+
40+
assertThat(logger.traceEnabled()).isFalse();
41+
assertThat(logger.debugEnabled()).isFalse();
42+
assertThat(logger.infoEnabled()).isTrue();
43+
assertThat(logger.warnEnabled()).isTrue();
44+
assertThat(logger.errorEnabled()).isTrue();
45+
}
46+
47+
@Test
48+
public void trace_level_enabled()
49+
{
50+
System.setProperty(LOG_LEVEL_PROPERTY, "trace");
51+
DefaultLogger logger = new DefaultLogger(mockLog, PLUGIN_ID, LOG_LEVEL_PROPERTY);
52+
53+
assertThat(logger.traceEnabled()).isTrue();
54+
assertThat(logger.debugEnabled()).isTrue();
55+
56+
logger.trace("trace message");
57+
logger.debug("debug message");
58+
59+
ArgumentCaptor<IStatus> statusCaptor = ArgumentCaptor.forClass(IStatus.class);
60+
verify(mockLog, org.mockito.Mockito.times(2)).log(statusCaptor.capture());
61+
62+
assertThat(statusCaptor.getAllValues().get(0).getMessage()).isEqualTo("[TRACE] trace message");
63+
assertThat(statusCaptor.getAllValues().get(0).getSeverity()).isEqualTo(IStatus.INFO);
64+
assertThat(statusCaptor.getAllValues().get(1).getMessage()).isEqualTo("[DEBUG] debug message");
65+
assertThat(statusCaptor.getAllValues().get(1).getSeverity()).isEqualTo(IStatus.INFO);
66+
}
67+
68+
@Test
69+
public void warn_level_enabled()
70+
{
71+
System.setProperty(LOG_LEVEL_PROPERTY, "WARNING");
72+
DefaultLogger logger = new DefaultLogger(mockLog, PLUGIN_ID, LOG_LEVEL_PROPERTY);
73+
74+
assertThat(logger.infoEnabled()).isFalse();
75+
assertThat(logger.warnEnabled()).isTrue();
76+
77+
logger.info("info message");
78+
verify(mockLog, never()).log(any(IStatus.class));
79+
80+
logger.warn("warn message");
81+
ArgumentCaptor<IStatus> statusCaptor = ArgumentCaptor.forClass(IStatus.class);
82+
verify(mockLog).log(statusCaptor.capture());
83+
84+
assertThat(statusCaptor.getValue().getMessage()).isEqualTo("warn message");
85+
assertThat(statusCaptor.getValue().getSeverity()).isEqualTo(IStatus.WARNING);
86+
}
87+
88+
@Test
89+
public void error_level_enabled_with_throwable()
90+
{
91+
System.setProperty(LOG_LEVEL_PROPERTY, "ERROR");
92+
DefaultLogger logger = new DefaultLogger(mockLog, PLUGIN_ID, LOG_LEVEL_PROPERTY);
93+
94+
assertThat(logger.warnEnabled()).isFalse();
95+
assertThat(logger.errorEnabled()).isTrue();
96+
97+
Throwable exception = new RuntimeException("Test exception");
98+
logger.error("error message", exception);
99+
100+
ArgumentCaptor<IStatus> statusCaptor = ArgumentCaptor.forClass(IStatus.class);
101+
verify(mockLog).log(statusCaptor.capture());
102+
103+
assertThat(statusCaptor.getValue().getMessage()).isEqualTo("error message");
104+
assertThat(statusCaptor.getValue().getSeverity()).isEqualTo(IStatus.ERROR);
105+
assertThat(statusCaptor.getValue().getException()).isEqualTo(exception);
106+
}
107+
108+
@Test
109+
public void error_level_only_throwable()
110+
{
111+
System.setProperty(LOG_LEVEL_PROPERTY, "ERROR");
112+
DefaultLogger logger = new DefaultLogger(mockLog, PLUGIN_ID, LOG_LEVEL_PROPERTY);
113+
114+
Throwable exception = new RuntimeException("Test exception");
115+
logger.error(exception);
116+
117+
ArgumentCaptor<IStatus> statusCaptor = ArgumentCaptor.forClass(IStatus.class);
118+
verify(mockLog).log(statusCaptor.capture());
119+
120+
assertThat(statusCaptor.getValue().getMessage()).contains("java.lang.RuntimeException: Test exception");
121+
assertThat(statusCaptor.getValue().getSeverity()).isEqualTo(IStatus.ERROR);
122+
}
123+
124+
@Test
125+
public void warn_level_with_throwable()
126+
{
127+
System.setProperty(LOG_LEVEL_PROPERTY, "WARNING");
128+
DefaultLogger logger = new DefaultLogger(mockLog, PLUGIN_ID, LOG_LEVEL_PROPERTY);
129+
130+
Throwable exception = new RuntimeException("Test exception");
131+
logger.warn("warn message", exception);
132+
133+
ArgumentCaptor<IStatus> statusCaptor = ArgumentCaptor.forClass(IStatus.class);
134+
verify(mockLog).log(statusCaptor.capture());
135+
136+
assertThat(statusCaptor.getValue().getMessage()).isEqualTo("warn message");
137+
assertThat(statusCaptor.getValue().getSeverity()).isEqualTo(IStatus.WARNING);
138+
assertThat(statusCaptor.getValue().getException()).isEqualTo(exception);
139+
}
140+
}
Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
package org.moreunit.core.log;
2+
3+
import static org.assertj.core.api.Assertions.assertThat;
4+
5+
import org.junit.jupiter.api.Test;
6+
7+
public class LevelTest
8+
{
9+
@Test
10+
public void isLowerThan_should_return_true_when_other_is_higher()
11+
{
12+
assertThat(Level.TRACE.isLowerThan(Level.DEBUG)).isTrue();
13+
assertThat(Level.DEBUG.isLowerThan(Level.INFO)).isTrue();
14+
assertThat(Level.INFO.isLowerThan(Level.WARNING)).isTrue();
15+
assertThat(Level.WARNING.isLowerThan(Level.ERROR)).isTrue();
16+
}
17+
18+
@Test
19+
public void isLowerThan_should_return_false_when_other_is_lower()
20+
{
21+
assertThat(Level.ERROR.isLowerThan(Level.WARNING)).isFalse();
22+
assertThat(Level.WARNING.isLowerThan(Level.INFO)).isFalse();
23+
assertThat(Level.INFO.isLowerThan(Level.DEBUG)).isFalse();
24+
assertThat(Level.DEBUG.isLowerThan(Level.TRACE)).isFalse();
25+
}
26+
27+
@Test
28+
public void isLowerThan_should_return_false_when_same()
29+
{
30+
assertThat(Level.INFO.isLowerThan(Level.INFO)).isFalse();
31+
}
32+
}

0 commit comments

Comments
 (0)