From 253dff1e5149abfaf3903cb20f45d34f7b749942 Mon Sep 17 00:00:00 2001 From: "google-labs-jules[bot]" <161369871+google-labs-jules[bot]@users.noreply.github.com> Date: Tue, 19 May 2026 20:58:02 +0000 Subject: [PATCH 1/3] 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> --- .../moreunit/core/log/DefaultLoggerTest.java | 140 ++++++++++++++++++ .../test/org/moreunit/core/log/LevelTest.java | 32 ++++ 2 files changed, 172 insertions(+) create mode 100644 org.moreunit.core.test/test/org/moreunit/core/log/DefaultLoggerTest.java create mode 100644 org.moreunit.core.test/test/org/moreunit/core/log/LevelTest.java diff --git a/org.moreunit.core.test/test/org/moreunit/core/log/DefaultLoggerTest.java b/org.moreunit.core.test/test/org/moreunit/core/log/DefaultLoggerTest.java new file mode 100644 index 00000000..ec0ab4a6 --- /dev/null +++ b/org.moreunit.core.test/test/org/moreunit/core/log/DefaultLoggerTest.java @@ -0,0 +1,140 @@ +package org.moreunit.core.log; + +import static org.assertj.core.api.Assertions.assertThat; +import static org.mockito.ArgumentMatchers.any; +import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.never; +import static org.mockito.Mockito.verify; + +import org.eclipse.core.runtime.ILog; +import org.eclipse.core.runtime.IStatus; +import org.junit.jupiter.api.AfterEach; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; +import org.mockito.ArgumentCaptor; + +public class DefaultLoggerTest +{ + private static final String PLUGIN_ID = "org.moreunit.core.test"; + private static final String LOG_LEVEL_PROPERTY = "org.moreunit.log.level"; + + private ILog mockLog; + + @BeforeEach + public void setUp() + { + mockLog = mock(ILog.class); + } + + @AfterEach + public void tearDown() + { + System.clearProperty(LOG_LEVEL_PROPERTY); + } + + @Test + public void default_level_is_info_when_property_not_set() + { + DefaultLogger logger = new DefaultLogger(mockLog, PLUGIN_ID, LOG_LEVEL_PROPERTY); + + assertThat(logger.traceEnabled()).isFalse(); + assertThat(logger.debugEnabled()).isFalse(); + assertThat(logger.infoEnabled()).isTrue(); + assertThat(logger.warnEnabled()).isTrue(); + assertThat(logger.errorEnabled()).isTrue(); + } + + @Test + public void trace_level_enabled() + { + System.setProperty(LOG_LEVEL_PROPERTY, "trace"); + DefaultLogger logger = new DefaultLogger(mockLog, PLUGIN_ID, LOG_LEVEL_PROPERTY); + + assertThat(logger.traceEnabled()).isTrue(); + assertThat(logger.debugEnabled()).isTrue(); + + logger.trace("trace message"); + logger.debug("debug message"); + + ArgumentCaptor statusCaptor = ArgumentCaptor.forClass(IStatus.class); + verify(mockLog, org.mockito.Mockito.times(2)).log(statusCaptor.capture()); + + assertThat(statusCaptor.getAllValues().get(0).getMessage()).isEqualTo("[TRACE] trace message"); + assertThat(statusCaptor.getAllValues().get(0).getSeverity()).isEqualTo(IStatus.INFO); + assertThat(statusCaptor.getAllValues().get(1).getMessage()).isEqualTo("[DEBUG] debug message"); + assertThat(statusCaptor.getAllValues().get(1).getSeverity()).isEqualTo(IStatus.INFO); + } + + @Test + public void warn_level_enabled() + { + System.setProperty(LOG_LEVEL_PROPERTY, "WARNING"); + DefaultLogger logger = new DefaultLogger(mockLog, PLUGIN_ID, LOG_LEVEL_PROPERTY); + + assertThat(logger.infoEnabled()).isFalse(); + assertThat(logger.warnEnabled()).isTrue(); + + logger.info("info message"); + verify(mockLog, never()).log(any(IStatus.class)); + + logger.warn("warn message"); + ArgumentCaptor statusCaptor = ArgumentCaptor.forClass(IStatus.class); + verify(mockLog).log(statusCaptor.capture()); + + assertThat(statusCaptor.getValue().getMessage()).isEqualTo("warn message"); + assertThat(statusCaptor.getValue().getSeverity()).isEqualTo(IStatus.WARNING); + } + + @Test + public void error_level_enabled_with_throwable() + { + System.setProperty(LOG_LEVEL_PROPERTY, "ERROR"); + DefaultLogger logger = new DefaultLogger(mockLog, PLUGIN_ID, LOG_LEVEL_PROPERTY); + + assertThat(logger.warnEnabled()).isFalse(); + assertThat(logger.errorEnabled()).isTrue(); + + Throwable exception = new RuntimeException("Test exception"); + logger.error("error message", exception); + + ArgumentCaptor statusCaptor = ArgumentCaptor.forClass(IStatus.class); + verify(mockLog).log(statusCaptor.capture()); + + assertThat(statusCaptor.getValue().getMessage()).isEqualTo("error message"); + assertThat(statusCaptor.getValue().getSeverity()).isEqualTo(IStatus.ERROR); + assertThat(statusCaptor.getValue().getException()).isEqualTo(exception); + } + + @Test + public void error_level_only_throwable() + { + System.setProperty(LOG_LEVEL_PROPERTY, "ERROR"); + DefaultLogger logger = new DefaultLogger(mockLog, PLUGIN_ID, LOG_LEVEL_PROPERTY); + + Throwable exception = new RuntimeException("Test exception"); + logger.error(exception); + + ArgumentCaptor statusCaptor = ArgumentCaptor.forClass(IStatus.class); + verify(mockLog).log(statusCaptor.capture()); + + assertThat(statusCaptor.getValue().getMessage()).contains("java.lang.RuntimeException: Test exception"); + assertThat(statusCaptor.getValue().getSeverity()).isEqualTo(IStatus.ERROR); + } + + @Test + public void warn_level_with_throwable() + { + System.setProperty(LOG_LEVEL_PROPERTY, "WARNING"); + DefaultLogger logger = new DefaultLogger(mockLog, PLUGIN_ID, LOG_LEVEL_PROPERTY); + + Throwable exception = new RuntimeException("Test exception"); + logger.warn("warn message", exception); + + ArgumentCaptor statusCaptor = ArgumentCaptor.forClass(IStatus.class); + verify(mockLog).log(statusCaptor.capture()); + + assertThat(statusCaptor.getValue().getMessage()).isEqualTo("warn message"); + assertThat(statusCaptor.getValue().getSeverity()).isEqualTo(IStatus.WARNING); + assertThat(statusCaptor.getValue().getException()).isEqualTo(exception); + } +} diff --git a/org.moreunit.core.test/test/org/moreunit/core/log/LevelTest.java b/org.moreunit.core.test/test/org/moreunit/core/log/LevelTest.java new file mode 100644 index 00000000..a411ca29 --- /dev/null +++ b/org.moreunit.core.test/test/org/moreunit/core/log/LevelTest.java @@ -0,0 +1,32 @@ +package org.moreunit.core.log; + +import static org.assertj.core.api.Assertions.assertThat; + +import org.junit.jupiter.api.Test; + +public class LevelTest +{ + @Test + public void isLowerThan_should_return_true_when_other_is_higher() + { + assertThat(Level.TRACE.isLowerThan(Level.DEBUG)).isTrue(); + assertThat(Level.DEBUG.isLowerThan(Level.INFO)).isTrue(); + assertThat(Level.INFO.isLowerThan(Level.WARNING)).isTrue(); + assertThat(Level.WARNING.isLowerThan(Level.ERROR)).isTrue(); + } + + @Test + public void isLowerThan_should_return_false_when_other_is_lower() + { + assertThat(Level.ERROR.isLowerThan(Level.WARNING)).isFalse(); + assertThat(Level.WARNING.isLowerThan(Level.INFO)).isFalse(); + assertThat(Level.INFO.isLowerThan(Level.DEBUG)).isFalse(); + assertThat(Level.DEBUG.isLowerThan(Level.TRACE)).isFalse(); + } + + @Test + public void isLowerThan_should_return_false_when_same() + { + assertThat(Level.INFO.isLowerThan(Level.INFO)).isFalse(); + } +} From 4abb71705c3bc228ca5a0d0e0b61fcdba6ba5c98 Mon Sep 17 00:00:00 2001 From: "google-labs-jules[bot]" <161369871+google-labs-jules[bot]@users.noreply.github.com> Date: Tue, 19 May 2026 21:13:00 +0000 Subject: [PATCH 2/3] test: improve coverage for org.moreunit.core.log Added comprehensive JUnit 4 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. Fixed a compile error by downgrading annotations from Jupiter (which caused classloader conflicts in this OSGi test bundle setup) back to traditional JUnit 4 to match the environment restrictions. Co-authored-by: RoiSoleil <3462260+RoiSoleil@users.noreply.github.com> --- .../test/org/moreunit/core/log/DefaultLoggerTest.java | 10 +++++----- .../test/org/moreunit/core/log/LevelTest.java | 2 +- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/org.moreunit.core.test/test/org/moreunit/core/log/DefaultLoggerTest.java b/org.moreunit.core.test/test/org/moreunit/core/log/DefaultLoggerTest.java index ec0ab4a6..e9ef5ea5 100644 --- a/org.moreunit.core.test/test/org/moreunit/core/log/DefaultLoggerTest.java +++ b/org.moreunit.core.test/test/org/moreunit/core/log/DefaultLoggerTest.java @@ -8,9 +8,9 @@ import org.eclipse.core.runtime.ILog; import org.eclipse.core.runtime.IStatus; -import org.junit.jupiter.api.AfterEach; -import org.junit.jupiter.api.BeforeEach; -import org.junit.jupiter.api.Test; +import org.junit.After; +import org.junit.Before; +import org.junit.Test; import org.mockito.ArgumentCaptor; public class DefaultLoggerTest @@ -20,13 +20,13 @@ public class DefaultLoggerTest private ILog mockLog; - @BeforeEach + @Before public void setUp() { mockLog = mock(ILog.class); } - @AfterEach + @After public void tearDown() { System.clearProperty(LOG_LEVEL_PROPERTY); diff --git a/org.moreunit.core.test/test/org/moreunit/core/log/LevelTest.java b/org.moreunit.core.test/test/org/moreunit/core/log/LevelTest.java index a411ca29..d5fc6727 100644 --- a/org.moreunit.core.test/test/org/moreunit/core/log/LevelTest.java +++ b/org.moreunit.core.test/test/org/moreunit/core/log/LevelTest.java @@ -2,7 +2,7 @@ import static org.assertj.core.api.Assertions.assertThat; -import org.junit.jupiter.api.Test; +import org.junit.Test; public class LevelTest { From 94e2080524015d2aa4683a87f62603c94164a6a2 Mon Sep 17 00:00:00 2001 From: "google-labs-jules[bot]" <161369871+google-labs-jules[bot]@users.noreply.github.com> Date: Tue, 19 May 2026 21:22:18 +0000 Subject: [PATCH 3/3] test: improve coverage for core log module Added comprehensive JUnit 4 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. The tests adhere to the project's OSGi requirements while providing deterministic validations isolated with Mockito. Co-authored-by: RoiSoleil <3462260+RoiSoleil@users.noreply.github.com>