diff --git a/cli/src/test/java/com/devonfw/tools/ide/commandlet/BuildCommandletTest.java b/cli/src/test/java/com/devonfw/tools/ide/commandlet/BuildCommandletTest.java index 0d0eaa9a0..9acdb2aca 100644 --- a/cli/src/test/java/com/devonfw/tools/ide/commandlet/BuildCommandletTest.java +++ b/cli/src/test/java/com/devonfw/tools/ide/commandlet/BuildCommandletTest.java @@ -4,7 +4,7 @@ import com.devonfw.tools.ide.context.AbstractIdeContextTest; import com.devonfw.tools.ide.context.IdeTestContext; -import com.devonfw.tools.ide.log.IdeLogLevel; +import com.devonfw.tools.ide.log.IdeLogEntry; import com.devonfw.tools.ide.os.SystemInfo; import com.devonfw.tools.ide.os.SystemInfoMock; @@ -25,9 +25,9 @@ public void testMvnBuildWithoutProvidedArgumentsUsesDefaultOptions() { BuildCommandlet buildCommandlet = context.getCommandletManager().getCommandlet(BuildCommandlet.class); context.setCwd(context.getWorkspacePath().resolve("mvn"), context.getWorkspacePath().toString(), context.getIdeHome()); buildCommandlet.run(); - assertLogMessage(context, IdeLogLevel.SUCCESS, "Successfully installed java in version 17.0.10_7"); - assertLogMessage(context, IdeLogLevel.SUCCESS, "Successfully installed mvn in version 3.9.6"); - assertLogMessage(context, IdeLogLevel.INFO, "mvn clean compile"); + assertThat(context).log().hasEntries(IdeLogEntry.ofSuccess("Successfully installed java in version 17.0.10_7"), + IdeLogEntry.ofSuccess("Successfully installed mvn in version 3.9.6"), + IdeLogEntry.ofInfo("mvn clean compile")); } /** @@ -42,9 +42,9 @@ public void testMvnBuildWithProvidedArguments() { buildCommandlet.arguments.addValue("clean"); buildCommandlet.arguments.addValue("install"); buildCommandlet.run(); - assertLogMessage(context, IdeLogLevel.SUCCESS, "Successfully installed java in version 17.0.10_7"); - assertLogMessage(context, IdeLogLevel.SUCCESS, "Successfully installed mvn in version 3.9.6"); - assertLogMessage(context, IdeLogLevel.INFO, "mvn clean install"); + assertThat(context).log().hasEntries(IdeLogEntry.ofSuccess("Successfully installed java in version 17.0.10_7"), + IdeLogEntry.ofSuccess("Successfully installed mvn in version 3.9.6"), + IdeLogEntry.ofInfo("mvn clean install")); } /** @@ -59,9 +59,9 @@ public void testGradleBuildWithProvidedArguments() { buildCommandlet.arguments.addValue("task1"); buildCommandlet.arguments.addValue("task2"); buildCommandlet.run(); - assertLogMessage(context, IdeLogLevel.SUCCESS, "Successfully installed java in version 17.0.10_7"); - assertLogMessage(context, IdeLogLevel.SUCCESS, "Successfully installed gradle in version 8.7"); - assertLogMessage(context, IdeLogLevel.INFO, "gradle task1 task2"); + assertThat(context).log().hasEntries(IdeLogEntry.ofSuccess("Successfully installed java in version 17.0.10_7"), + IdeLogEntry.ofSuccess("Successfully installed gradle in version 8.7"), + IdeLogEntry.ofInfo("gradle task1 task2")); } /** @@ -78,8 +78,8 @@ public void testNpmBuildWithProvidedArguments() { buildCommandlet.arguments.addValue("start"); buildCommandlet.arguments.addValue("test"); buildCommandlet.run(); - assertLogMessage(context, IdeLogLevel.SUCCESS, "Successfully installed node in version v18.19.1"); - assertLogMessage(context, IdeLogLevel.SUCCESS, "Successfully installed npm in version 9.9.2"); - assertLogMessage(context, IdeLogLevel.INFO, "npm start test"); + assertThat(context).log().hasEntries(IdeLogEntry.ofSuccess("Successfully installed node in version v18.19.1"), + IdeLogEntry.ofSuccess("Successfully installed npm in version 9.9.2"), + IdeLogEntry.ofInfo("npm start test")); } } diff --git a/cli/src/test/java/com/devonfw/tools/ide/commandlet/EditionGetCommandletTest.java b/cli/src/test/java/com/devonfw/tools/ide/commandlet/EditionGetCommandletTest.java index ac4a86fae..4f5f3157b 100644 --- a/cli/src/test/java/com/devonfw/tools/ide/commandlet/EditionGetCommandletTest.java +++ b/cli/src/test/java/com/devonfw/tools/ide/commandlet/EditionGetCommandletTest.java @@ -1,14 +1,13 @@ package com.devonfw.tools.ide.commandlet; import java.nio.file.Path; -import java.util.List; import org.junit.jupiter.api.Test; import com.devonfw.tools.ide.context.AbstractIdeContextTest; import com.devonfw.tools.ide.context.IdeContext; import com.devonfw.tools.ide.context.IdeTestContext; -import com.devonfw.tools.ide.log.IdeLogLevel; +import com.devonfw.tools.ide.log.IdeLogEntry; /** Integration test of {@link EditionGetCommandlet}. */ @@ -29,8 +28,7 @@ public void testEditionGetCommandletRun() { editionGet.run(); // assert - List logs = context.level(IdeLogLevel.INFO).getMessages(); - assertThat(logs).contains("az"); + assertThat(context).log().hasMessage("az"); } /** @@ -59,7 +57,7 @@ public void testVersionGetCommandletRunPrintConfiguredEdition() { // act editionGet.run(); // assert - assertLogMessage(context, IdeLogLevel.INFO, "java"); + assertThat(context).logAtInfo().hasMessage("java"); } /** Test of {@link VersionGetCommandlet} run, with --installed flag, when Installed Version is null. */ @@ -74,9 +72,8 @@ public void testVersionGetCommandletRunPrintInstalledEdition() { // act editionGet.run(); // assert - assertLogMessage(context, IdeLogLevel.INFO, "No installation of tool java was found."); - assertLogMessage(context, IdeLogLevel.INFO, "The configured edition for tool java is java"); - assertLogMessage(context, IdeLogLevel.INFO, "To install that edition call the following command:"); - assertLogMessage(context, IdeLogLevel.INFO, "ide install java"); + assertThat(context).log().hasEntries(IdeLogEntry.ofInfo("No installation of tool java was found."), + IdeLogEntry.ofInfo("The configured edition for tool java is java"), IdeLogEntry.ofInfo( + "To install that edition call the following command:"), IdeLogEntry.ofInfo("ide install java")); } } diff --git a/cli/src/test/java/com/devonfw/tools/ide/commandlet/EditionListCommandletTest.java b/cli/src/test/java/com/devonfw/tools/ide/commandlet/EditionListCommandletTest.java index a6e3e390e..ccbb62098 100644 --- a/cli/src/test/java/com/devonfw/tools/ide/commandlet/EditionListCommandletTest.java +++ b/cli/src/test/java/com/devonfw/tools/ide/commandlet/EditionListCommandletTest.java @@ -4,7 +4,6 @@ import com.devonfw.tools.ide.context.AbstractIdeContextTest; import com.devonfw.tools.ide.context.IdeTestContext; -import com.devonfw.tools.ide.log.IdeLogLevel; /** Integration test of {@link EditionListCommandlet}. */ public class EditionListCommandletTest extends AbstractIdeContextTest { @@ -22,7 +21,6 @@ public void testEditionListCommandletRun() { editionList.run(); // assert - assertLogMessage(context, IdeLogLevel.INFO, "mvn"); - assertLogMessage(context, IdeLogLevel.INFO, "secondMvnEdition"); + assertThat(context).logAtInfo().hasEntries("mvn", "secondMvnEdition"); } -} \ No newline at end of file +} diff --git a/cli/src/test/java/com/devonfw/tools/ide/commandlet/EditionSetCommandletTest.java b/cli/src/test/java/com/devonfw/tools/ide/commandlet/EditionSetCommandletTest.java index 07ee98b96..f24a52d64 100644 --- a/cli/src/test/java/com/devonfw/tools/ide/commandlet/EditionSetCommandletTest.java +++ b/cli/src/test/java/com/devonfw/tools/ide/commandlet/EditionSetCommandletTest.java @@ -1,14 +1,11 @@ package com.devonfw.tools.ide.commandlet; import java.nio.file.Path; -import java.util.List; import org.junit.jupiter.api.Test; import com.devonfw.tools.ide.context.AbstractIdeContextTest; -import com.devonfw.tools.ide.context.IdeContext; import com.devonfw.tools.ide.context.IdeTestContext; -import com.devonfw.tools.ide.log.IdeLogLevel; /** Integration test of {@link EditionSetCommandlet}. */ public class EditionSetCommandletTest extends AbstractIdeContextTest { @@ -18,7 +15,7 @@ public class EditionSetCommandletTest extends AbstractIdeContextTest { public void testEditionSetCommandletRun() { // arrange - IdeContext context = newContext(PROJECT_BASIC); + IdeTestContext context = newContext(PROJECT_BASIC); EditionSetCommandlet editionSet = context.getCommandletManager().getCommandlet(EditionSetCommandlet.class); editionSet.tool.setValueAsString("mvn", context); editionSet.edition.setValueAsString("setEdition", context); @@ -27,8 +24,7 @@ public void testEditionSetCommandletRun() { editionSet.run(); // assert - List logs = ((IdeTestContext) context).level(IdeLogLevel.WARNING).getMessages(); - assertThat(logs).containsExactly("Edition setEdition seems to be invalid"); + assertThat(context).logAtWarning().hasMessage("Edition setEdition seems to be invalid"); Path settingsIdeProperties = context.getSettingsPath().resolve("ide.properties"); assertThat(settingsIdeProperties).hasContent(""" #******************************************************************************** diff --git a/cli/src/test/java/com/devonfw/tools/ide/commandlet/EnvironmentCommandletTest.java b/cli/src/test/java/com/devonfw/tools/ide/commandlet/EnvironmentCommandletTest.java index 6b5f1e0e1..59706d139 100644 --- a/cli/src/test/java/com/devonfw/tools/ide/commandlet/EnvironmentCommandletTest.java +++ b/cli/src/test/java/com/devonfw/tools/ide/commandlet/EnvironmentCommandletTest.java @@ -7,7 +7,7 @@ import com.devonfw.tools.ide.context.AbstractIdeContextTest; import com.devonfw.tools.ide.context.IdeTestContext; import com.devonfw.tools.ide.context.IdeTestContextMock; -import com.devonfw.tools.ide.log.IdeLogLevel; +import com.devonfw.tools.ide.log.IdeLogEntry; /** * Test of {@link EnvironmentCommandlet}. @@ -29,20 +29,13 @@ public void testRun() { // act env.run(); // assert - assertLogMessage(context, IdeLogLevel.INFO, "MVN_VERSION=\"3.9.1\""); //overwritten by conf - assertLogMessage(context, IdeLogLevel.INFO, "SOME=\"some-${UNDEFINED}\""); - assertLogMessage(context, IdeLogLevel.INFO, "BAR=\"bar-some-${UNDEFINED}\""); - assertLogMessage(context, IdeLogLevel.INFO, "IDE_TOOLS=\"mvn,eclipse\""); - assertLogMessage(context, IdeLogLevel.INFO, "ECLIPSE_VERSION=\"2023-03\""); - assertLogMessage(context, IdeLogLevel.INFO, "FOO=\"foo-bar-some-${UNDEFINED}\""); - assertLogMessage(context, IdeLogLevel.INFO, "JAVA_VERSION=\"17*\""); - assertLogMessage(context, IdeLogLevel.INFO, "INTELLIJ_EDITION=\"ultimate\""); - assertLogMessage(context, IdeLogLevel.INFO, "DOCKER_EDITION=\"docker\""); - //assert messages of debug level grouping of environment variable are present - assertLogMessage(context, IdeLogLevel.DEBUG, "from defaults:"); - assertLogMessage(context, IdeLogLevel.DEBUG, "from " + settingsIdeProperties + ":"); - assertLogMessage(context, IdeLogLevel.DEBUG, "from " + confIdeProperties + ":"); - + assertThat(context).log().hasEntriesWithNothingElseInBetween( // + IdeLogEntry.ofDebug("from defaults:"), IdeLogEntry.ofInfo("DOCKER_EDITION=\"docker\""), IdeLogEntry.ofInfo("INTELLIJ_EDITION=\"ultimate\""), // + IdeLogEntry.ofDebug("from " + settingsIdeProperties + ":"), IdeLogEntry.ofInfo("JAVA_VERSION=\"17*\""), + IdeLogEntry.ofInfo("SOME=\"some-${UNDEFINED}\""), IdeLogEntry.ofInfo("BAR=\"bar-some-${UNDEFINED}\""), + IdeLogEntry.ofInfo("IDE_TOOLS=\"mvn,eclipse\""), + IdeLogEntry.ofDebug("from " + confIdeProperties + ":"), IdeLogEntry.ofInfo("MVN_VERSION=\"3.9.1\"") //overwritten by conf + ); } /** diff --git a/cli/src/test/java/com/devonfw/tools/ide/commandlet/HelpCommandletTest.java b/cli/src/test/java/com/devonfw/tools/ide/commandlet/HelpCommandletTest.java index 990ee547c..110f321c0 100644 --- a/cli/src/test/java/com/devonfw/tools/ide/commandlet/HelpCommandletTest.java +++ b/cli/src/test/java/com/devonfw/tools/ide/commandlet/HelpCommandletTest.java @@ -16,7 +16,6 @@ import com.devonfw.tools.ide.context.IdeContext; import com.devonfw.tools.ide.context.IdeTestContext; import com.devonfw.tools.ide.context.IdeTestContextMock; -import com.devonfw.tools.ide.log.IdeLogLevel; import com.devonfw.tools.ide.nls.NlsBundle; import com.devonfw.tools.ide.property.KeywordProperty; import com.devonfw.tools.ide.property.Property; @@ -53,7 +52,7 @@ public void testRun() { help.run(); // assert assertLogoMessage(context); - assertLogMessage(context, IdeLogLevel.INFO, "Usage: ide [option]* [[commandlet] [arg]*]"); + assertThat(context).logAtInfo().hasMessage("Usage: ide [option]* [[commandlet] [arg]*]"); assertOptionLogMessages(context); } @@ -71,9 +70,8 @@ public void testRunWithCommandlet() { help.run(); // assert assertLogoMessage(context); - assertLogMessage(context, IdeLogLevel.INFO, "Usage: ide [option]* mvn [*]"); - assertLogMessage(context, IdeLogLevel.INFO, "Tool commandlet for Maven (Build-Tool)."); - assertLogMessage(context, IdeLogLevel.INFO, "usage: mvn [options] [] []"); + assertThat(context).logAtInfo() + .hasEntries("Usage: ide [option]* mvn [*]", "Tool commandlet for Maven (Build-Tool).", "usage: mvn [options] [] []"); assertOptionLogMessages(context); } @@ -139,13 +137,14 @@ public void testEnsureAllNlsPropertiesPresent(String locale) throws IOException */ private void assertOptionLogMessages(IdeTestContext context) { - assertLogMessage(context, IdeLogLevel.INFO, "--locale the locale (e.g. '--locale=de' for German language)."); - assertLogMessage(context, IdeLogLevel.INFO, "-b | --batch enable batch mode (non-interactive)."); - assertLogMessage(context, IdeLogLevel.INFO, "-d | --debug enable debug logging."); - assertLogMessage(context, IdeLogLevel.INFO, "-f | --force enable force mode."); - assertLogMessage(context, IdeLogLevel.INFO, "-o | --offline enable offline mode (skip updates or git pull, fail downloads or git clone)."); - assertLogMessage(context, IdeLogLevel.INFO, "-q | --quiet disable info logging (only log success, warning or error)."); - assertLogMessage(context, IdeLogLevel.INFO, "-t | --trace enable trace logging."); + assertThat(context).logAtInfo().hasEntries( + "--locale the locale (e.g. '--locale=de' for German language).", + "-b | --batch enable batch mode (non-interactive).", + "-d | --debug enable debug logging.", + "-f | --force enable force mode.", + "-o | --offline enable offline mode (skip updates or git pull, fail downloads or git clone).", + "-q | --quiet disable info logging (only log success, warning or error).", + "-t | --trace enable trace logging."); } /** @@ -153,6 +152,6 @@ private void assertOptionLogMessages(IdeTestContext context) { */ private void assertLogoMessage(IdeTestContext context) { - assertLogMessage(context, IdeLogLevel.INFO, HelpCommandlet.LOGO); + assertThat(context).logAtInfo().hasMessage(HelpCommandlet.LOGO); } } diff --git a/cli/src/test/java/com/devonfw/tools/ide/commandlet/RepositoryCommandletTest.java b/cli/src/test/java/com/devonfw/tools/ide/commandlet/RepositoryCommandletTest.java index 79df246e7..e217f271b 100644 --- a/cli/src/test/java/com/devonfw/tools/ide/commandlet/RepositoryCommandletTest.java +++ b/cli/src/test/java/com/devonfw/tools/ide/commandlet/RepositoryCommandletTest.java @@ -10,7 +10,6 @@ import com.devonfw.tools.ide.context.AbstractIdeContextTest; import com.devonfw.tools.ide.context.IdeContext; import com.devonfw.tools.ide.context.IdeTestContext; -import com.devonfw.tools.ide.log.IdeLogLevel; public class RepositoryCommandletTest extends AbstractIdeContextTest { @@ -33,7 +32,7 @@ public void testRunWithSpecificRepository() { // act rc.run(); // assert - assertLogMessage(this.context, IdeLogLevel.INFO, "Importing repository from " + PROPERTIES_FILE + " ..."); + assertThat(this.context).logAtInfo().hasMessage("Importing repository from " + PROPERTIES_FILE + " ..."); } @Test @@ -45,8 +44,8 @@ public void testRunWithNoSpecificRepositoryAndInactive() { // act rc.run(); // assert - assertLogMessage(this.context, IdeLogLevel.INFO, "Importing repository from " + PROPERTIES_FILE + " ..."); - assertLogMessage(this.context, IdeLogLevel.INFO, "Skipping repository - use force (-f) to setup all repositories ..."); + assertThat(this.context).logAtInfo().hasEntries("Importing repository from " + PROPERTIES_FILE + " ...", + "Skipping repository - use force (-f) to setup all repositories ..."); } @Test @@ -62,8 +61,8 @@ public void testRunInvalidConfiguration() { // act rc.run(); // assert - assertLogMessage(this.context, IdeLogLevel.WARNING, - "Invalid repository configuration " + PROPERTIES_FILE + " - both 'path' and 'git-url' have to be defined."); + assertThat(this.context).logAtWarning() + .hasMessage("Invalid repository configuration " + PROPERTIES_FILE + " - both 'path' and 'git-url' have to be defined."); } @Test @@ -76,7 +75,7 @@ public void testRunNoRepositoriesOrProjectsFolderFound() { // act rc.run(); // assert - assertLogMessage(this.context, IdeLogLevel.WARNING, "Cannot find repositories folder nor projects folder."); + assertThat(this.context).logAtWarning().hasMessage("Cannot find repositories folder nor projects folder."); } private void createPropertiesFile() { @@ -113,4 +112,4 @@ private void saveProperties(Properties properties) { } } -} \ No newline at end of file +} diff --git a/cli/src/test/java/com/devonfw/tools/ide/commandlet/UninstallCommandletTest.java b/cli/src/test/java/com/devonfw/tools/ide/commandlet/UninstallCommandletTest.java index 44e09160b..32cc3c091 100644 --- a/cli/src/test/java/com/devonfw/tools/ide/commandlet/UninstallCommandletTest.java +++ b/cli/src/test/java/com/devonfw/tools/ide/commandlet/UninstallCommandletTest.java @@ -14,7 +14,7 @@ import com.devonfw.tools.ide.context.AbstractIdeContextTest; import com.devonfw.tools.ide.context.IdeTestContext; import com.devonfw.tools.ide.io.FileAccessImpl; -import com.devonfw.tools.ide.log.IdeLogLevel; +import com.devonfw.tools.ide.log.IdeLogEntry; import com.devonfw.tools.ide.property.ToolProperty; import com.devonfw.tools.ide.tool.dotnet.DotNet; import com.devonfw.tools.ide.tool.eclipse.Eclipse; @@ -47,9 +47,9 @@ public void testUninstallCommandletRun_WithExistingCommandlet() { // act uninstallCommandlet.run(); // assert - assertLogMessage(context, IdeLogLevel.SUCCESS, "Successfully uninstalled " + npm); - assertLogMessage(context, IdeLogLevel.WARNING, "An installed version of " + dotnet + " does not exist"); - assertThat(Files.notExists(context.getSoftwarePath().resolve(npm))); + assertThat(context).log().hasEntries(IdeLogEntry.ofSuccess("Successfully uninstalled " + npm), + IdeLogEntry.ofWarning("An installed version of " + dotnet + " does not exist")); + assertThat(context.getSoftwarePath().resolve(npm)).doesNotExist(); } @Test @@ -65,7 +65,7 @@ public void testUninstallCommandletRun_WithNonExistingCommandlet() { // act uninstallCommandlet.run(); // assert - assertLogMessage(context, IdeLogLevel.WARNING, "An installed version of " + eclipse + " does not exist"); + assertThat(context).logAtWarning().hasMessage("An installed version of " + eclipse + " does not exist"); assertThat(Files.notExists(context.getSoftwarePath().resolve(eclipse))); } diff --git a/cli/src/test/java/com/devonfw/tools/ide/commandlet/UpdateCommandletTest.java b/cli/src/test/java/com/devonfw/tools/ide/commandlet/UpdateCommandletTest.java index 7c069a196..f9407a633 100644 --- a/cli/src/test/java/com/devonfw/tools/ide/commandlet/UpdateCommandletTest.java +++ b/cli/src/test/java/com/devonfw/tools/ide/commandlet/UpdateCommandletTest.java @@ -9,7 +9,6 @@ import com.devonfw.tools.ide.context.AbstractIdeContextTest; import com.devonfw.tools.ide.context.IdeContext; import com.devonfw.tools.ide.context.IdeTestContext; -import com.devonfw.tools.ide.log.IdeLogLevel; /** * Test of {@link UpdateCommandlet}. @@ -28,7 +27,7 @@ public void testRunPullSettingsAndUpdateSoftware() { uc.run(); // assert - assertLogMessage(context, IdeLogLevel.SUCCESS, "Successfully updated settings repository."); + assertThat(context).logAtSuccess().hasMessage("Successfully updated settings repository."); assertThat(context.getConfPath()).exists(); assertThat(context.getSoftwarePath().resolve("java")).exists(); assertThat(context.getSoftwarePath().resolve("mvn")).exists(); @@ -46,7 +45,7 @@ public void testRunTemplatesNotFound() throws IOException { uc.run(); // assert - assertLogMessage(context, IdeLogLevel.WARNING, "Templates folder is missing in settings repository."); + assertThat(context).logAtWarning().hasEntries("Templates folder is missing in settings repository."); } private void deleteTemplatesFolder(IdeContext context) throws IOException { diff --git a/cli/src/test/java/com/devonfw/tools/ide/commandlet/VersionGetCommandletTest.java b/cli/src/test/java/com/devonfw/tools/ide/commandlet/VersionGetCommandletTest.java index 1d3002a45..863fd0e79 100644 --- a/cli/src/test/java/com/devonfw/tools/ide/commandlet/VersionGetCommandletTest.java +++ b/cli/src/test/java/com/devonfw/tools/ide/commandlet/VersionGetCommandletTest.java @@ -4,7 +4,6 @@ import com.devonfw.tools.ide.context.AbstractIdeContextTest; import com.devonfw.tools.ide.context.IdeTestContext; -import com.devonfw.tools.ide.log.IdeLogLevel; /** * Integration test of {@link VersionGetCommandlet}. @@ -24,10 +23,8 @@ public void testVersionGetCommandletRunThrowsCliException() { // act versionGet.run(); // assert - assertLogMessage(context, IdeLogLevel.INFO, "No installation of tool java was found."); - assertLogMessage(context, IdeLogLevel.INFO, "The configured version for tool java is 17*"); - assertLogMessage(context, IdeLogLevel.INFO, "To install that version call the following command:"); - assertLogMessage(context, IdeLogLevel.INFO, "ide install java"); + assertThat(context).logAtInfo().hasEntries("No installation of tool java was found.", "The configured version for tool java is 17*", + "To install that version call the following command:", "ide install java"); } /** @@ -44,7 +41,7 @@ public void testVersionGetCommandletInstalledRun() { versionGet.installed.setValue(true); versionGet.run(); // assert - assertLogMessage(context, IdeLogLevel.INFO, "3.9.4"); + assertThat(context).logAtInfo().hasMessage("3.9.4"); } /** @@ -61,6 +58,6 @@ public void testVersionGetCommandletConfiguredRun() { versionGet.configured.setValue(true); versionGet.run(); // assert - assertLogMessage(context, IdeLogLevel.INFO, "3.9.1"); + assertThat(context).logAtInfo().hasMessage("3.9.1"); } } diff --git a/cli/src/test/java/com/devonfw/tools/ide/commandlet/VersionListCommandletTest.java b/cli/src/test/java/com/devonfw/tools/ide/commandlet/VersionListCommandletTest.java index a9c55056b..3305582bd 100644 --- a/cli/src/test/java/com/devonfw/tools/ide/commandlet/VersionListCommandletTest.java +++ b/cli/src/test/java/com/devonfw/tools/ide/commandlet/VersionListCommandletTest.java @@ -4,7 +4,6 @@ import com.devonfw.tools.ide.context.AbstractIdeContextTest; import com.devonfw.tools.ide.context.IdeTestContext; -import com.devonfw.tools.ide.log.IdeLogLevel; /** * Integration test of {@link VersionListCommandlet}. @@ -24,8 +23,6 @@ public void testVersionListCommandletRun() { // act versionList.run(); // assert - assertLogMessage(context, IdeLogLevel.INFO, "3.0.5"); - assertLogMessage(context, IdeLogLevel.INFO, "3.1.0"); - assertLogMessage(context, IdeLogLevel.INFO, "3.2.1"); + assertThat(context).logAtInfo().hasEntries("3.0.5", "3.1.0", "3.2.1"); } -} \ No newline at end of file +} diff --git a/cli/src/test/java/com/devonfw/tools/ide/context/AbstractIdeContextTest.java b/cli/src/test/java/com/devonfw/tools/ide/context/AbstractIdeContextTest.java index 0ec3debdb..b8ae3da37 100644 --- a/cli/src/test/java/com/devonfw/tools/ide/context/AbstractIdeContextTest.java +++ b/cli/src/test/java/com/devonfw/tools/ide/context/AbstractIdeContextTest.java @@ -5,15 +5,12 @@ import java.util.List; import org.assertj.core.api.Assertions; -import org.assertj.core.api.Condition; -import org.assertj.core.api.ListAssert; import com.devonfw.tools.ide.io.FileAccess; import com.devonfw.tools.ide.io.FileAccessImpl; import com.devonfw.tools.ide.io.FileCopyMode; import com.devonfw.tools.ide.io.IdeProgressBarTestImpl; -import com.devonfw.tools.ide.log.IdeLogLevel; -import com.devonfw.tools.ide.log.IdeTestLogger; +import com.devonfw.tools.ide.log.IdeTestContextAssertion; import com.devonfw.tools.ide.repo.ToolRepositoryMock; /** @@ -119,72 +116,9 @@ protected static GitContextTestContext newGitContext(Path projectPath, List assertion = assertThat(logger.getMessages()).as(level.name() + "-Log messages"); - if (contains) { - Condition condition = new Condition<>() { - public boolean matches(String e) { - - return e.contains(message); - } - }; - assertion.filteredOn(condition).isNotEmpty(); - } else { - assertion.contains(message); - } - } + protected static IdeTestContextAssertion assertThat(IdeTestContext context) { - /** - * @param context the {@link IdeContext} that was created via the {@link #newContext(String) newContext} method. - * @param level the expected {@link IdeLogLevel}. - * @param message the {@link com.devonfw.tools.ide.log.IdeSubLogger#log(String) log message} that should not have been logged. - */ - protected static void assertNoLogMessage(IdeTestContext context, IdeLogLevel level, String message) { - - assertNoLogMessage(context, level, message, false); - } - - /** - * @param context the {@link IdeContext} that was created via the {@link #newContext(String) newContext} method. - * @param level the expected {@link IdeLogLevel}. - * @param message the {@link com.devonfw.tools.ide.log.IdeSubLogger#log(String) log message} that should not have been logged. - * @param contains - {@code true} if the given {@code message} may only be a sub-string of the log-message to assert, {@code false} otherwise (the entire log - * message including potential parameters being filled in is asserted). - */ - protected static void assertNoLogMessage(IdeTestContext context, IdeLogLevel level, String message, boolean contains) { - - IdeTestLogger logger = context.level(level); - ListAssert assertion = assertThat(logger.getMessages()).as(level.name() + "-Log messages"); - if (contains) { - Condition condition = new Condition<>() { - public boolean matches(String e) { - - return e.contains(message); - } - }; - assertion.filteredOn(condition).isEmpty(); - } else { - assertion.doesNotContain(message); - } + return new IdeTestContextAssertion(context); } /** diff --git a/cli/src/test/java/com/devonfw/tools/ide/context/GitContextTestContext.java b/cli/src/test/java/com/devonfw/tools/ide/context/GitContextTestContext.java index 89f7a5cb6..578f39e46 100644 --- a/cli/src/test/java/com/devonfw/tools/ide/context/GitContextTestContext.java +++ b/cli/src/test/java/com/devonfw/tools/ide/context/GitContextTestContext.java @@ -7,6 +7,7 @@ import com.devonfw.tools.ide.log.IdeLogLevel; import com.devonfw.tools.ide.log.IdeTestLogger; +import com.devonfw.tools.ide.log.IdeTestLoggerFactory; import com.devonfw.tools.ide.process.ProcessContext; /** @@ -31,7 +32,7 @@ public class GitContextTestContext extends AbstractIdeTestContext { */ public GitContextTestContext(boolean isOnline, Path userDir, String... answers) { - super(level -> new IdeTestLogger(level), userDir, null, answers); + super(new IdeTestLoggerFactory(), userDir, null, answers); testOnlineMode = isOnline; this.errors = new ArrayList<>(); this.outs = new ArrayList<>(); diff --git a/cli/src/test/java/com/devonfw/tools/ide/context/IdeContextTest.java b/cli/src/test/java/com/devonfw/tools/ide/context/IdeContextTest.java index ab71b8575..01d4820c8 100644 --- a/cli/src/test/java/com/devonfw/tools/ide/context/IdeContextTest.java +++ b/cli/src/test/java/com/devonfw/tools/ide/context/IdeContextTest.java @@ -7,7 +7,6 @@ import com.devonfw.tools.ide.common.SystemPath; import com.devonfw.tools.ide.environment.EnvironmentVariables; import com.devonfw.tools.ide.environment.EnvironmentVariablesType; -import com.devonfw.tools.ide.log.IdeLogLevel; import com.devonfw.tools.ide.variable.IdeVariables; /** @@ -30,7 +29,7 @@ public void testBasicProjectEnvironment() { assertThat(IdeVariables.DOCKER_EDITION.get(context)).isEqualTo("docker"); EnvironmentVariables variables = context.getVariables(); assertThat(variables.get("FOO")).isEqualTo("foo-bar-some-${UNDEFINED}"); - assertLogMessage(context, IdeLogLevel.WARNING, "Undefined variable ${UNDEFINED} in 'FOO' at 'SOME=some-${UNDEFINED}'"); + assertThat(context).logAtWarning().hasMessage("Undefined variable ${UNDEFINED} in 'FOO' at 'SOME=some-${UNDEFINED}'"); assertThat(context.getIdeHome().resolve("readme")).hasContent("this is the IDE_HOME directory"); assertThat(context.getIdeRoot().resolve("readme")).hasContent("this is the IDE_ROOT directory"); assertThat(context.getUserHome().resolve("readme")).hasContent("this is the users HOME directory"); diff --git a/cli/src/test/java/com/devonfw/tools/ide/context/IdeTestContext.java b/cli/src/test/java/com/devonfw/tools/ide/context/IdeTestContext.java index f68343588..c53e93723 100644 --- a/cli/src/test/java/com/devonfw/tools/ide/context/IdeTestContext.java +++ b/cli/src/test/java/com/devonfw/tools/ide/context/IdeTestContext.java @@ -6,6 +6,7 @@ import com.devonfw.tools.ide.log.IdeLogLevel; import com.devonfw.tools.ide.log.IdeTestLogger; +import com.devonfw.tools.ide.log.IdeTestLoggerFactory; import com.devonfw.tools.ide.process.ProcessContext; import com.devonfw.tools.ide.repo.ToolRepository; @@ -24,7 +25,7 @@ public class IdeTestContext extends AbstractIdeTestContext { */ public IdeTestContext(Path userDir, String... answers) { - super(level -> new IdeTestLogger(level), userDir, null, answers); + this(userDir, null, answers); } /** @@ -37,7 +38,7 @@ public IdeTestContext(Path userDir, String... answers) { */ public IdeTestContext(Path userDir, ToolRepository toolRepository, String... answers) { - super(level -> new IdeTestLogger(level), userDir, toolRepository, answers); + super(new IdeTestLoggerFactory(), userDir, toolRepository, answers); } @Override diff --git a/cli/src/test/java/com/devonfw/tools/ide/log/IdeLogEntry.java b/cli/src/test/java/com/devonfw/tools/ide/log/IdeLogEntry.java new file mode 100644 index 000000000..4f1d11ed7 --- /dev/null +++ b/cli/src/test/java/com/devonfw/tools/ide/log/IdeLogEntry.java @@ -0,0 +1,45 @@ +package com.devonfw.tools.ide.log; + +/** + * Single entry that was logged by {@link IdeTestLogger}. + * + * @param level the {@link IdeLogLevel}. + * @param message the message that has been logged. + */ +public record IdeLogEntry(IdeLogLevel level, String message) { + + public static IdeLogEntry ofError(String message) { + + return new IdeLogEntry(IdeLogLevel.ERROR, message); + } + + public static IdeLogEntry ofWarning(String message) { + + return new IdeLogEntry(IdeLogLevel.WARNING, message); + } + + public static IdeLogEntry ofInfo(String message) { + + return new IdeLogEntry(IdeLogLevel.INFO, message); + } + + public static IdeLogEntry ofStep(String message) { + + return new IdeLogEntry(IdeLogLevel.STEP, message); + } + + public static IdeLogEntry ofSuccess(String message) { + + return new IdeLogEntry(IdeLogLevel.SUCCESS, message); + } + + public static IdeLogEntry ofDebug(String message) { + + return new IdeLogEntry(IdeLogLevel.DEBUG, message); + } + + public static IdeLogEntry ofTrace(String message) { + + return new IdeLogEntry(IdeLogLevel.TRACE, message); + } +} diff --git a/cli/src/test/java/com/devonfw/tools/ide/log/IdeTestContextAssertion.java b/cli/src/test/java/com/devonfw/tools/ide/log/IdeTestContextAssertion.java new file mode 100644 index 000000000..9e40135de --- /dev/null +++ b/cli/src/test/java/com/devonfw/tools/ide/log/IdeTestContextAssertion.java @@ -0,0 +1,73 @@ +package com.devonfw.tools.ide.log; + +import com.devonfw.tools.ide.context.IdeTestContext; + +/** + * Assertion for {@link IdeTestContext}. + */ +public class IdeTestContextAssertion { + + private final IdeTestContext context; + + /** + * The constructor. + * + * @param context the {@link IdeTestContext}. + */ + public IdeTestContextAssertion(IdeTestContext context) { + super(); + this.context = context; + } + + /** + * @param level the {@link IdeLogLevel} to filter. + * @return the {@link IdeTestLoggerAssertion}. + */ + public IdeTestLoggerAssertion log(IdeLogLevel level) { + + return new IdeTestLoggerAssertion(context.level(IdeLogLevel.INFO).getEntries(), level); // random level - all loggers share the same list of log entries + } + + /** + * @return the {@link IdeTestLoggerAssertion}. + */ + public IdeTestLoggerAssertion log() { + return log(null); + } + + /** + * @return the {@link IdeTestLoggerAssertion} for assertion on {@link IdeLogLevel#DEBUG}. + */ + public IdeTestLoggerAssertion logAtDebug() { + return log(IdeLogLevel.DEBUG); + } + + /** + * @return the {@link IdeTestLoggerAssertion} for assertion on {@link IdeLogLevel#INFO}. + */ + public IdeTestLoggerAssertion logAtInfo() { + return log(IdeLogLevel.INFO); + } + + /** + * @return the {@link IdeTestLoggerAssertion} for assertion on {@link IdeLogLevel#SUCCESS}. + */ + public IdeTestLoggerAssertion logAtSuccess() { + return log(IdeLogLevel.SUCCESS); + } + + /** + * @return the {@link IdeTestLoggerAssertion} for assertion on {@link IdeLogLevel#WARNING}. + */ + public IdeTestLoggerAssertion logAtWarning() { + return log(IdeLogLevel.WARNING); + } + + /** + * @return the {@link IdeTestLoggerAssertion} for assertion on {@link IdeLogLevel#ERROR}. + */ + public IdeTestLoggerAssertion logAtError() { + return log(IdeLogLevel.ERROR); + } + +} diff --git a/cli/src/test/java/com/devonfw/tools/ide/log/IdeTestLogger.java b/cli/src/test/java/com/devonfw/tools/ide/log/IdeTestLogger.java index f797682fe..581df8d34 100644 --- a/cli/src/test/java/com/devonfw/tools/ide/log/IdeTestLogger.java +++ b/cli/src/test/java/com/devonfw/tools/ide/log/IdeTestLogger.java @@ -1,6 +1,5 @@ package com.devonfw.tools.ide.log; -import java.util.LinkedList; import java.util.List; /** @@ -8,33 +7,33 @@ */ public class IdeTestLogger extends IdeSlf4jLogger { - private final List messages; + private final List entries; /** * The constructor. * * @param level the {@link #getLevel() log-level}. */ - public IdeTestLogger(IdeLogLevel level) { + public IdeTestLogger(IdeLogLevel level, List entries) { super(level); - this.messages = new LinkedList<>(); + this.entries = entries; } @Override public String log(Throwable error, String message, Object... args) { String result = super.log(error, message, args); - this.messages.add(result); + this.entries.add(new IdeLogEntry(level, result)); return result; } /** - * @return the {@link List} of messages that have been logged for test assertions. + * @return the {@link List} of {@link IdeLogEntry} that have been logged for test assertions. */ - public List getMessages() { + public List getEntries() { - return this.messages; + return this.entries; } @Override diff --git a/cli/src/test/java/com/devonfw/tools/ide/log/IdeTestLoggerAssertion.java b/cli/src/test/java/com/devonfw/tools/ide/log/IdeTestLoggerAssertion.java new file mode 100644 index 000000000..8632c18f4 --- /dev/null +++ b/cli/src/test/java/com/devonfw/tools/ide/log/IdeTestLoggerAssertion.java @@ -0,0 +1,144 @@ +package com.devonfw.tools.ide.log; + +import java.util.List; +import java.util.function.Predicate; + +import org.assertj.core.api.Assertions; + +/** + * Assertion for {@link IdeLogEntry log entries}. + */ +public class IdeTestLoggerAssertion { + + private final List entries; + + private final IdeLogLevel level; + + public IdeTestLoggerAssertion(List entries, IdeLogLevel level) { + super(); + this.entries = entries; + this.level = level; + } + + /** + * @param message the expected {@link com.devonfw.tools.ide.log.IdeSubLogger#log(String) log message}. + */ + public void hasMessage(String message) { + + fulfillsPredicate(e -> e.message().equals(message), PredicateMode.MATCH_ONE, "Could not find log message equal to '" + message + "'"); + } + + /** + * @param message the {@link String} expected to be {@link String#contains(CharSequence) contained} in a + * {@link com.devonfw.tools.ide.log.IdeSubLogger#log(String) log message}. + */ + public void hasMessageContaining(String message) { + + fulfillsPredicate(e -> e.message().contains(message), PredicateMode.MATCH_ONE, "Could not find log message containing '" + message + "'"); + } + + /** + * @param message the {@link com.devonfw.tools.ide.log.IdeSubLogger#log(String) log message} that is not expected and should not have been logged. + */ + public void hasNoMessage(String message) { + + fulfillsPredicate(e -> !e.message().equals(message), PredicateMode.MATCH_ALL, "No log message should be equal to '" + message + "'"); + } + + /** + * @param message the {@link String} expected not be {@link String#contains(CharSequence) contained} in any + * {@link com.devonfw.tools.ide.log.IdeSubLogger#log(String) log message}. + */ + public void hasNoMessageContaining(String message) { + + fulfillsPredicate(e -> !e.message().contains(message), PredicateMode.MATCH_ALL, "No log message should contain '" + message + "'"); + } + + /** + * @param messages the expected {@link com.devonfw.tools.ide.log.IdeSubLogger#log(String) log message}s in order. + */ + public void hasEntries(String... messages) { + + assert (this.level != null); + IdeLogEntry[] entries = new IdeLogEntry[messages.length]; + int i = 0; + for (String message : messages) { + entries[i++] = new IdeLogEntry(this.level, message); + } + hasEntries(false, entries); + } + + /** + * @param exprectedEntries the expected {@link com.devonfw.tools.ide.log.IdeLogEntry log entries} in order. + */ + public void hasEntries(IdeLogEntry... exprectedEntries) { + + hasEntries(false, exprectedEntries); + } + + /** + * @param exprectedEntries the expected {@link com.devonfw.tools.ide.log.IdeLogEntry log entries} to be logged in order without any other log statement in + * between them. + */ + public void hasEntriesWithNothingElseInBetween(IdeLogEntry... exprectedEntries) { + + hasEntries(true, exprectedEntries); + } + + private void hasEntries(boolean nothingElseInBetween, IdeLogEntry... exprectedEntries) { + + assert (exprectedEntries.length > 0); + int i = 0; + for (IdeLogEntry entry : exprectedEntries) { + if (entry.equals(exprectedEntries[i])) { + i++; + } else { + if (nothingElseInBetween) { + i = 0; + } else if (entry.equals(exprectedEntries[i])) { + i = 1; + } + } + if (i == exprectedEntries.length) { + return; + } + } + StringBuilder error = new StringBuilder(4096); + error.append("Could not find expected log entries:\n"); + for (IdeLogEntry entry : exprectedEntries) { + error.append(entry.level()); + error.append(":"); + error.append(entry.message()); + error.append('\n'); + } + error.append("\nIn the logs of this test:\n"); + for (IdeLogEntry entry : this.entries) { + error.append(entry.level()); + error.append(":"); + error.append(entry.message()); + error.append('\n'); + } + Assertions.fail(error.toString()); + } + + private void fulfillsPredicate(Predicate predicate, PredicateMode mode, String errorMessage) { + + if (this.level != null) { + errorMessage = errorMessage + " on level " + this.level; + } + for (IdeLogEntry entry : entries) { + if ((this.level == null) || (this.level == entry.level())) { + if (predicate.test(entry)) { + if (mode == PredicateMode.MATCH_ONE) { + return; + } + } else if (mode == PredicateMode.MATCH_ALL) { + Assertions.fail(errorMessage + "\nFound unexpected log entry: " + entry); + return; + } + } + } + Assertions.fail(errorMessage); // no log entry matched by predicate + } + +} diff --git a/cli/src/test/java/com/devonfw/tools/ide/log/IdeTestLoggerFactory.java b/cli/src/test/java/com/devonfw/tools/ide/log/IdeTestLoggerFactory.java new file mode 100644 index 000000000..f8cba715a --- /dev/null +++ b/cli/src/test/java/com/devonfw/tools/ide/log/IdeTestLoggerFactory.java @@ -0,0 +1,36 @@ +package com.devonfw.tools.ide.log; + +import java.util.ArrayList; +import java.util.List; +import java.util.function.Function; + +/** + * Factory for {@link IdeTestLogger}. + */ +public class IdeTestLoggerFactory implements Function { + + private final List entries; + + /** + * The constructor. + */ + public IdeTestLoggerFactory() { + super(); + this.entries = new ArrayList<>(512); + } + + @Override + public IdeSubLogger apply(IdeLogLevel ideLogLevel) { + + return new IdeTestLogger(ideLogLevel, this.entries); + } + + /** + * @return the {@link List} of {@link IdeLogEntry} that have been logged for test assertions. + */ + public List getEntries() { + + return this.entries; + } + +} diff --git a/cli/src/test/java/com/devonfw/tools/ide/log/PredicateMode.java b/cli/src/test/java/com/devonfw/tools/ide/log/PredicateMode.java new file mode 100644 index 000000000..f4396040c --- /dev/null +++ b/cli/src/test/java/com/devonfw/tools/ide/log/PredicateMode.java @@ -0,0 +1,17 @@ +package com.devonfw.tools.ide.log; + +/** + * {@link Enum} with available modes for asserting a {@link java.util.function.Predicate} on a {@link java.util.Collection}. + */ +public enum PredicateMode { + + /** All {@link java.util.Collection#add(Object) entries} must {@link java.util.function.Predicate#test(Object) evalute} as {@code true}. */ + MATCH_ALL, + + /** + * At least one {@link java.util.Collection#add(Object) entries} must {@link java.util.function.Predicate#test(Object) evalute} as {@code true}. No further + * evaluation after first success. + */ + MATCH_ONE; + +} diff --git a/cli/src/test/java/com/devonfw/tools/ide/network/ProxyContextTest.java b/cli/src/test/java/com/devonfw/tools/ide/network/ProxyContextTest.java index c02131143..2ee602fbc 100644 --- a/cli/src/test/java/com/devonfw/tools/ide/network/ProxyContextTest.java +++ b/cli/src/test/java/com/devonfw/tools/ide/network/ProxyContextTest.java @@ -7,7 +7,6 @@ import com.devonfw.tools.ide.context.AbstractIdeContextTest; import com.devonfw.tools.ide.context.IdeTestContext; -import com.devonfw.tools.ide.log.IdeLogLevel; import uk.org.webcompere.systemstubs.environment.EnvironmentVariables; import uk.org.webcompere.systemstubs.jupiter.SystemStub; @@ -128,7 +127,7 @@ public void testWithMockedHttpVarWrongFormat() { // assert assertThat(proxy).isEqualTo(Proxy.NO_PROXY); - assertLogMessage(context, IdeLogLevel.WARNING, PROXY_FORMAT_WARNING_MESSAGE); + assertThat(context).logAtWarning().hasMessage(PROXY_FORMAT_WARNING_MESSAGE); } /** @@ -147,7 +146,7 @@ public void testWithMockedHttpVarWrongHost() { // assert assertThat(proxy).isEqualTo(Proxy.NO_PROXY); - assertLogMessage(context, IdeLogLevel.WARNING, PROXY_FORMAT_WARNING_MESSAGE); + assertThat(context).logAtWarning().hasMessage(PROXY_FORMAT_WARNING_MESSAGE); } /** @@ -166,7 +165,7 @@ public void testWithMockedHttpVarWrongProtocol() { // assert assertThat(proxy).isEqualTo(Proxy.NO_PROXY); - assertLogMessage(context, IdeLogLevel.WARNING, PROXY_FORMAT_WARNING_MESSAGE); + assertThat(context).logAtWarning().hasMessage(PROXY_FORMAT_WARNING_MESSAGE); } } diff --git a/cli/src/test/java/com/devonfw/tools/ide/process/ProcessContextImplTest.java b/cli/src/test/java/com/devonfw/tools/ide/process/ProcessContextImplTest.java index 395245a84..5664f531e 100644 --- a/cli/src/test/java/com/devonfw/tools/ide/process/ProcessContextImplTest.java +++ b/cli/src/test/java/com/devonfw/tools/ide/process/ProcessContextImplTest.java @@ -18,7 +18,6 @@ import org.junit.platform.commons.util.ReflectionUtils; import com.devonfw.tools.ide.context.AbstractIdeContextTest; -import com.devonfw.tools.ide.context.IdeContext; import com.devonfw.tools.ide.context.IdeTestContext; import com.devonfw.tools.ide.log.IdeLogLevel; @@ -33,7 +32,7 @@ public class ProcessContextImplTest extends AbstractIdeContextTest { private ProcessBuilder mockProcessBuilder; - private IdeContext context; + private IdeTestContext context; @BeforeEach public void setUp() throws Exception { @@ -191,7 +190,7 @@ public void unsuccessfulProcessShouldThrowIllegalState() throws Exception { @ParameterizedTest @EnumSource(value = ProcessErrorHandling.class, names = { "WARNING", "ERROR" }) - public void ProcessWarningAndErrorShouldBeLogged(ProcessErrorHandling processErrorHandling) throws Exception { + public void processWarningAndErrorShouldBeLogged(ProcessErrorHandling processErrorHandling) throws Exception { // arrange when(this.processMock.waitFor()).thenReturn(ProcessResult.TOOL_NOT_INSTALLED); @@ -202,7 +201,7 @@ public void ProcessWarningAndErrorShouldBeLogged(ProcessErrorHandling processErr // assert IdeLogLevel level = convertToIdeLogLevel(processErrorHandling); - assertLogMessage((IdeTestContext) this.context, level, expectedMessage, true); + assertThat(this.context).log(level).hasMessageContaining(expectedMessage); } private IdeLogLevel convertToIdeLogLevel(ProcessErrorHandling processErrorHandling) { diff --git a/cli/src/test/java/com/devonfw/tools/ide/step/StepTest.java b/cli/src/test/java/com/devonfw/tools/ide/step/StepTest.java index 04bda39dd..a2601c50e 100644 --- a/cli/src/test/java/com/devonfw/tools/ide/step/StepTest.java +++ b/cli/src/test/java/com/devonfw/tools/ide/step/StepTest.java @@ -4,7 +4,7 @@ import com.devonfw.tools.ide.context.AbstractIdeContextTest; import com.devonfw.tools.ide.context.IdeTestContext; -import com.devonfw.tools.ide.log.IdeLogLevel; +import com.devonfw.tools.ide.log.IdeLogEntry; /** * Test of {@link Step}. @@ -26,10 +26,10 @@ public void testValidUsageSuccess() { // assert assertThat(step.getSuccess()).isTrue(); assertThat(step.getDuration()).isPositive(); - assertLogMessage(context, IdeLogLevel.TRACE, "Starting step Test-Step..."); - assertLogMessage(context, IdeLogLevel.STEP, "Start: Test-Step"); - assertLogMessage(context, IdeLogLevel.SUCCESS, "The Test-Step succeeded as expected"); - assertLogMessage(context, IdeLogLevel.DEBUG, "Step 'Test-Step' ended successfully."); + assertThat(context).log().hasEntries(IdeLogEntry.ofTrace("Starting step Test-Step..."), + IdeLogEntry.ofStep("Start: Test-Step"), + IdeLogEntry.ofSuccess("The Test-Step succeeded as expected"), + IdeLogEntry.ofDebug("Step 'Test-Step' ended successfully.")); } @Test @@ -51,10 +51,10 @@ public void testValidUsageSuccessSilent() { assertThat(step.getParameter(0)).isEqualTo("arg1"); assertThat(step.getParameter(1)).isEqualTo("arg2"); assertThat(step.getParameter(2)).isNull(); - assertLogMessage(context, IdeLogLevel.TRACE, "Starting step Test-Step with params [arg1, arg2]..."); - assertNoLogMessage(context, IdeLogLevel.STEP, "Start: Test-Step"); - assertNoLogMessage(context, IdeLogLevel.SUCCESS, "Test-Step", true); - assertLogMessage(context, IdeLogLevel.DEBUG, "Step 'Test-Step' ended successfully."); + assertThat(context).log().hasEntries(IdeLogEntry.ofTrace("Starting step Test-Step with params [arg1, arg2]..."), + IdeLogEntry.ofStep("Start: Test-Step"), + IdeLogEntry.ofSuccess("Test-Step"), + IdeLogEntry.ofDebug("Step 'Test-Step' ended successfully.")); } @Test @@ -72,10 +72,10 @@ public void testValidUsageError() { assertThat(step.getSuccess()).isFalse(); assertThat(step.getDuration()).isPositive(); // assert - assertLogMessage(context, IdeLogLevel.TRACE, "Starting step Test-Step..."); - assertLogMessage(context, IdeLogLevel.STEP, "Start: Test-Step"); - assertLogMessage(context, IdeLogLevel.ERROR, "The Test-Step failed as expected"); - assertLogMessage(context, IdeLogLevel.DEBUG, "Step 'Test-Step' ended with failure."); + assertThat(context).log().hasEntries(IdeLogEntry.ofTrace("Starting step Test-Step..."), + IdeLogEntry.ofStep("Start: Test-Step"), + IdeLogEntry.ofError("The Test-Step failed as expected"), + IdeLogEntry.ofDebug("Step 'Test-Step' ended with failure.")); } @Test @@ -96,12 +96,11 @@ public void testInvalidUsageSuccessError() { assertThat(step.getSuccess()).isFalse(); assertThat(step.getDuration()).isPositive(); // assert - assertLogMessage(context, IdeLogLevel.TRACE, "Starting step Test-Step..."); - assertLogMessage(context, IdeLogLevel.STEP, "Start: Test-Step"); - assertLogMessage(context, IdeLogLevel.WARNING, - "Step 'Test-Step' already ended with true and now ended again with false."); - assertLogMessage(context, IdeLogLevel.ERROR, "unexpected situation!"); - assertLogMessage(context, IdeLogLevel.DEBUG, "Step 'Test-Step' ended with failure."); + assertThat(context).log().hasEntries(IdeLogEntry.ofTrace("Starting step Test-Step..."), + IdeLogEntry.ofStep("Start: Test-Step"), + IdeLogEntry.ofWarning("Step 'Test-Step' already ended with true and now ended again with false."), + IdeLogEntry.ofError("unexpected situation!"), + IdeLogEntry.ofDebug("Step 'Test-Step' ended with failure.")); } @Test @@ -121,14 +120,13 @@ public void testInvalidUsageErrorSuccess() { assertThat(step.getSuccess()).isFalse(); assertThat(step.getDuration()).isPositive(); // assert - assertLogMessage(context, IdeLogLevel.TRACE, "Starting step Test-Step..."); - assertLogMessage(context, IdeLogLevel.STEP, "Start: Test-Step"); - assertLogMessage(context, IdeLogLevel.ERROR, "The Test-Step failed as expected"); - assertLogMessage(context, IdeLogLevel.DEBUG, "Step 'Test-Step' ended with failure."); - assertLogMessage(context, IdeLogLevel.WARNING, - "Step 'Test-Step' already ended with false and now ended again with true."); - assertLogMessage(context, IdeLogLevel.SUCCESS, "The Test-Step succeeded as expected"); - assertLogMessage(context, IdeLogLevel.DEBUG, "Step 'Test-Step' ended successfully."); + assertThat(context).log().hasEntries(IdeLogEntry.ofTrace("Starting step Test-Step..."), + IdeLogEntry.ofStep("Start: Test-Step"), + IdeLogEntry.ofError("The Test-Step failed as expected"), + IdeLogEntry.ofDebug("Step 'Test-Step' ended with failure."), + IdeLogEntry.ofWarning("Step 'Test-Step' already ended with false and now ended again with true."), + IdeLogEntry.ofSuccess("The Test-Step succeeded as expected"), + IdeLogEntry.ofDebug("Step 'Test-Step' ended successfully.")); } } diff --git a/cli/src/test/java/com/devonfw/tools/ide/tool/androidstudio/AndroidStudioTest.java b/cli/src/test/java/com/devonfw/tools/ide/tool/androidstudio/AndroidStudioTest.java index 177635390..d1ce081a7 100644 --- a/cli/src/test/java/com/devonfw/tools/ide/tool/androidstudio/AndroidStudioTest.java +++ b/cli/src/test/java/com/devonfw/tools/ide/tool/androidstudio/AndroidStudioTest.java @@ -5,7 +5,6 @@ import com.devonfw.tools.ide.context.AbstractIdeContextTest; import com.devonfw.tools.ide.context.IdeTestContext; -import com.devonfw.tools.ide.log.IdeLogLevel; import com.devonfw.tools.ide.os.SystemInfo; import com.devonfw.tools.ide.os.SystemInfoMock; @@ -55,13 +54,7 @@ public void testAndroidStudioRun(String os) { commandlet.run(); // assert - if (this.context.getSystemInfo().isMac()) { - assertLogMessage(this.context, IdeLogLevel.INFO, ANDROID_STUDIO + " mac " + this.context.getWorkspacePath()); - } else if (this.context.getSystemInfo().isLinux()) { - assertLogMessage(this.context, IdeLogLevel.INFO, ANDROID_STUDIO + " linux " + this.context.getWorkspacePath()); - } else if (this.context.getSystemInfo().isWindows()) { - assertLogMessage(this.context, IdeLogLevel.INFO, ANDROID_STUDIO + " windows " + this.context.getWorkspacePath()); - } + assertThat(this.context).logAtInfo().hasMessage(ANDROID_STUDIO + " " + this.context.getSystemInfo().getOs() + " " + this.context.getWorkspacePath()); checkInstallation(this.context); } @@ -70,7 +63,7 @@ private void checkInstallation(IdeTestContext context) { // commandlet - android-studio assertThat(context.getSoftwarePath().resolve("android-studio/.ide.software.version")).exists().hasContent("2024.1.1.1"); assertThat(context.getVariables().get("STUDIO_PROPERTIES")).isEqualTo(context.getWorkspacePath().resolve("studio.properties").toString()); - assertLogMessage(context, IdeLogLevel.SUCCESS, "Successfully installed android-studio in version 2024.1.1.1"); + assertThat(context).logAtSuccess().hasMessage("Successfully installed android-studio in version 2024.1.1.1"); } } diff --git a/cli/src/test/java/com/devonfw/tools/ide/tool/cobigen/CobigenTest.java b/cli/src/test/java/com/devonfw/tools/ide/tool/cobigen/CobigenTest.java index 30a8e680d..fd5a6df71 100644 --- a/cli/src/test/java/com/devonfw/tools/ide/tool/cobigen/CobigenTest.java +++ b/cli/src/test/java/com/devonfw/tools/ide/tool/cobigen/CobigenTest.java @@ -4,7 +4,6 @@ import com.devonfw.tools.ide.context.AbstractIdeContextTest; import com.devonfw.tools.ide.context.IdeTestContext; -import com.devonfw.tools.ide.log.IdeLogLevel; /** * Integration test of {@link Cobigen}. @@ -46,7 +45,7 @@ public void testCobigenRun() { commandlet.run(); // assert - assertLogMessage(this.context, IdeLogLevel.INFO, COBIGEN + " "); + assertThat(this.context).logAtInfo().hasMessage(COBIGEN + " "); checkInstallation(this.context); } @@ -60,6 +59,6 @@ private void checkInstallation(IdeTestContext context) { // commandlet - cobigen assertThat(context.getSoftwarePath().resolve("cobigen/.ide.software.version")).exists().hasContent("2021.12.006"); - assertLogMessage(context, IdeLogLevel.SUCCESS, "Successfully installed cobigen in version 2021.12.006"); + assertThat(context).logAtSuccess().hasMessage("Successfully installed cobigen in version 2021.12.006"); } } diff --git a/cli/src/test/java/com/devonfw/tools/ide/tool/dotnet/DotNetTest.java b/cli/src/test/java/com/devonfw/tools/ide/tool/dotnet/DotNetTest.java index db681cf56..9e3128297 100644 --- a/cli/src/test/java/com/devonfw/tools/ide/tool/dotnet/DotNetTest.java +++ b/cli/src/test/java/com/devonfw/tools/ide/tool/dotnet/DotNetTest.java @@ -8,7 +8,6 @@ import com.devonfw.tools.ide.context.AbstractIdeContextTest; import com.devonfw.tools.ide.context.IdeTestContext; -import com.devonfw.tools.ide.log.IdeLogLevel; import com.devonfw.tools.ide.os.SystemInfo; import com.devonfw.tools.ide.os.SystemInfoImpl; import com.devonfw.tools.ide.os.SystemInfoMock; @@ -49,7 +48,7 @@ public void dotnetShouldInstallSuccessful(String os) { assertThat(this.context.getSoftwarePath().resolve("dotnet/.ide.software.version")).exists(); assertThat(this.context.getSoftwarePath().resolve("dotnet/.ide.software.version")).hasContent("6.0.419"); - assertLogMessage(this.context, IdeLogLevel.SUCCESS, "Successfully installed dotnet in version 6.0.419", false); + assertThat(this.context).logAtSuccess().hasMessage("Successfully installed dotnet in version 6.0.419"); } @Test @@ -79,7 +78,7 @@ public void dotnetShouldRunExecutableSuccessful(String os) { private void checkExpectedOutput(String expectedOutput) { - assertLogMessage(this.context, IdeLogLevel.INFO, expectedOutput); + assertThat(this.context).logAtInfo().hasMessage(expectedOutput); } private void runExecutable(String operatingSystem) { diff --git a/cli/src/test/java/com/devonfw/tools/ide/tool/intellij/IntellijTest.java b/cli/src/test/java/com/devonfw/tools/ide/tool/intellij/IntellijTest.java index 0bddf754d..6c11b1e06 100644 --- a/cli/src/test/java/com/devonfw/tools/ide/tool/intellij/IntellijTest.java +++ b/cli/src/test/java/com/devonfw/tools/ide/tool/intellij/IntellijTest.java @@ -15,7 +15,6 @@ import com.devonfw.tools.ide.context.AbstractIdeContextTest; import com.devonfw.tools.ide.context.IdeTestContext; -import com.devonfw.tools.ide.log.IdeLogLevel; import com.devonfw.tools.ide.os.SystemInfo; import com.devonfw.tools.ide.os.SystemInfoMock; import com.github.tomakehurst.wiremock.junit5.WireMockRuntimeInfo; @@ -55,7 +54,7 @@ public void testIntellijInstall(String os, WireMockRuntimeInfo wmRuntimeInfo) th //if tool already installed commandlet.install(); - assertLogMessage(this.context, IdeLogLevel.DEBUG, "Version 2023.3.3 of tool intellij is already installed"); + assertThat(this.context).logAtDebug().hasMessage("Version 2023.3.3 of tool intellij is already installed"); } /** @@ -81,13 +80,7 @@ public void testIntellijRun(String os, WireMockRuntimeInfo wmRuntimeInfo) throws SystemInfo currentSystemInfo = this.context.getSystemInfo(); Path workspacePath = this.context.getWorkspacePath(); - if (currentSystemInfo.isMac()) { - assertLogMessage(this.context, IdeLogLevel.INFO, "intellij mac " + workspacePath); - } else if (currentSystemInfo.isLinux()) { - assertLogMessage(this.context, IdeLogLevel.INFO, "intellij linux " + workspacePath); - } else if (currentSystemInfo.isWindows()) { - assertLogMessage(this.context, IdeLogLevel.INFO, "intellij windows " + workspacePath); - } + assertThat(this.context).logAtInfo().hasMessage("intellij " + currentSystemInfo.getOs() + " " + workspacePath); checkInstallation(this.context); } @@ -95,9 +88,9 @@ private void checkInstallation(IdeTestContext context) { assertThat(context.getSoftwarePath().resolve("intellij/.ide.software.version")).exists().hasContent("2023.3.3"); assertThat(context.getVariables().get("IDEA_PROPERTIES")).isEqualTo(context.getWorkspacePath().resolve("idea.properties").toString()); - assertLogMessage(context, IdeLogLevel.SUCCESS, "Successfully installed java in version 17.0.10_7"); - assertLogMessage(context, IdeLogLevel.SUCCESS, "Successfully installed intellij in version 2023.3.3"); - assertLogMessage(context, IdeLogLevel.SUCCESS, "Install plugin: mockedPlugin"); + assertThat(context).logAtSuccess().hasEntries("Successfully installed java in version 17.0.10_7", + "Successfully installed intellij in version 2023.3.3", + "Install plugin: mockedPlugin"); assertThat(context.getPluginsPath().resolve("intellij").resolve("mockedPlugin").resolve("MockedClass.class")).exists(); } diff --git a/cli/src/test/java/com/devonfw/tools/ide/tool/jasypt/JasyptTest.java b/cli/src/test/java/com/devonfw/tools/ide/tool/jasypt/JasyptTest.java index 313bc4c11..cfe6980b3 100644 --- a/cli/src/test/java/com/devonfw/tools/ide/tool/jasypt/JasyptTest.java +++ b/cli/src/test/java/com/devonfw/tools/ide/tool/jasypt/JasyptTest.java @@ -6,7 +6,6 @@ import com.devonfw.tools.ide.commandlet.InstallCommandlet; import com.devonfw.tools.ide.context.AbstractIdeContextTest; import com.devonfw.tools.ide.context.IdeTestContext; -import com.devonfw.tools.ide.log.IdeLogLevel; import uk.org.webcompere.systemstubs.environment.EnvironmentVariables; import uk.org.webcompere.systemstubs.jupiter.SystemStub; @@ -75,7 +74,7 @@ public void testJasyptRun() { commandlet.run(); // assert - assertLogMessage(context, IdeLogLevel.INFO, context.getVariables().get("JASYPT_OPTS")); + assertThat(context).logAtInfo().hasMessage(context.getVariables().get("JASYPT_OPTS")); checkInstallation(context); } @@ -102,7 +101,7 @@ public void testJasyptRunWithCustomVariable() { commandlet.run(); // assert - assertLogMessage(context, IdeLogLevel.INFO, context.getVariables().get("JASYPT_OPTS")); + assertThat(context).logAtInfo().hasMessage(context.getVariables().get("JASYPT_OPTS")); checkInstallation(context); } @@ -115,6 +114,6 @@ private void checkInstallation(IdeTestContext context) { // commandlet - jasypt assertThat(context.getSoftwarePath().resolve("jasypt/jasypt-1.9.3.jar")).hasContent("This is a jar file."); assertThat(context.getSoftwarePath().resolve("jasypt/.ide.software.version")).exists().hasContent("1.9.3"); - assertLogMessage(context, IdeLogLevel.SUCCESS, "Successfully installed jasypt in version 1.9.3"); + assertThat(context).logAtSuccess().hasMessage("Successfully installed jasypt in version 1.9.3"); } } diff --git a/cli/src/test/java/com/devonfw/tools/ide/tool/jmc/JmcTest.java b/cli/src/test/java/com/devonfw/tools/ide/tool/jmc/JmcTest.java index 543b17207..8c3ab762e 100644 --- a/cli/src/test/java/com/devonfw/tools/ide/tool/jmc/JmcTest.java +++ b/cli/src/test/java/com/devonfw/tools/ide/tool/jmc/JmcTest.java @@ -9,7 +9,6 @@ import com.devonfw.tools.ide.commandlet.InstallCommandlet; import com.devonfw.tools.ide.context.AbstractIdeContextTest; import com.devonfw.tools.ide.context.IdeTestContext; -import com.devonfw.tools.ide.log.IdeLogLevel; import com.devonfw.tools.ide.os.SystemInfo; import com.devonfw.tools.ide.os.SystemInfoMock; @@ -65,8 +64,7 @@ public void testJmcRun(String os) { commandlet.run(); // assert - assertLogMessage(context, IdeLogLevel.INFO, "java jmc"); - assertLogMessage(context, IdeLogLevel.INFO, "jmc " + os + " foo bar"); + assertThat(context).logAtInfo().hasEntries("java jmc", "jmc " + os + " foo bar"); checkInstallation(context); } @@ -81,6 +79,6 @@ private void checkInstallation(IdeTestContext context) { assertThat(context.getSoftwarePath().resolve("jmc/jmc")).exists(); } assertThat(context.getSoftwarePath().resolve("jmc/.ide.software.version")).exists().hasContent("8.3.0"); - assertLogMessage(context, IdeLogLevel.SUCCESS, "Successfully installed jmc in version 8.3.0"); + assertThat(context).logAtSuccess().hasMessage("Successfully installed jmc in version 8.3.0"); } } diff --git a/cli/src/test/java/com/devonfw/tools/ide/tool/mvn/MvnTest.java b/cli/src/test/java/com/devonfw/tools/ide/tool/mvn/MvnTest.java index 3aeab0193..0837cec15 100644 --- a/cli/src/test/java/com/devonfw/tools/ide/tool/mvn/MvnTest.java +++ b/cli/src/test/java/com/devonfw/tools/ide/tool/mvn/MvnTest.java @@ -13,7 +13,6 @@ import com.devonfw.tools.ide.commandlet.InstallCommandlet; import com.devonfw.tools.ide.context.AbstractIdeContextTest; import com.devonfw.tools.ide.context.IdeTestContext; -import com.devonfw.tools.ide.log.IdeLogLevel; /** * Integration test of {@link Mvn}. @@ -66,7 +65,7 @@ public void testMvnRun() throws IOException { commandlet.run(); // assert - assertLogMessage(context, IdeLogLevel.INFO, "mvn " + "foo bar"); + assertThat(context).logAtInfo().hasMessage("mvn " + "foo bar"); checkInstallation(context); } @@ -75,7 +74,7 @@ private void checkInstallation(IdeTestContext context) throws IOException { assertThat(context.getSoftwarePath().resolve("java/bin/java")).exists(); assertThat(context.getSoftwarePath().resolve("mvn/.ide.software.version")).exists().hasContent("3.9.7"); - assertLogMessage(context, IdeLogLevel.SUCCESS, "Successfully installed mvn in version 3.9.7"); + assertThat(context).logAtSuccess().hasMessage("Successfully installed mvn in version 3.9.7"); Path settingsFile = context.getConfPath().resolve(Mvn.MVN_CONFIG_FOLDER).resolve(Mvn.SETTINGS_FILE); assertThat(settingsFile).exists(); diff --git a/cli/src/test/java/com/devonfw/tools/ide/tool/npm/NpmTest.java b/cli/src/test/java/com/devonfw/tools/ide/tool/npm/NpmTest.java index 0d15bcce2..a4fd3bdc3 100644 --- a/cli/src/test/java/com/devonfw/tools/ide/tool/npm/NpmTest.java +++ b/cli/src/test/java/com/devonfw/tools/ide/tool/npm/NpmTest.java @@ -5,7 +5,6 @@ import com.devonfw.tools.ide.context.AbstractIdeContextTest; import com.devonfw.tools.ide.context.IdeTestContext; -import com.devonfw.tools.ide.log.IdeLogLevel; import com.devonfw.tools.ide.os.SystemInfo; import com.devonfw.tools.ide.os.SystemInfoMock; @@ -48,6 +47,6 @@ private void checkInstallation(IdeTestContext context) { } assertThat(context.getSoftwarePath().resolve("npm/.ide.software.version")).exists().hasContent("9.9.2"); - assertLogMessage(context, IdeLogLevel.SUCCESS, "Successfully installed npm in version 9.9.2"); + assertThat(context).logAtSuccess().hasMessage("Successfully installed npm in version 9.9.2"); } -} \ No newline at end of file +} diff --git a/cli/src/test/java/com/devonfw/tools/ide/tool/tomcat/TomcatTest.java b/cli/src/test/java/com/devonfw/tools/ide/tool/tomcat/TomcatTest.java index e4c42d8ac..7bb057a19 100644 --- a/cli/src/test/java/com/devonfw/tools/ide/tool/tomcat/TomcatTest.java +++ b/cli/src/test/java/com/devonfw/tools/ide/tool/tomcat/TomcatTest.java @@ -4,7 +4,6 @@ import com.devonfw.tools.ide.context.AbstractIdeContextTest; import com.devonfw.tools.ide.context.IdeTestContext; -import com.devonfw.tools.ide.log.IdeLogLevel; public class TomcatTest extends AbstractIdeContextTest { @@ -32,15 +31,15 @@ public void testTomcat() { private void checkDependencyInstallation(IdeTestContext context) { - assertLogMessage(context, IdeLogLevel.INFO, "The version 17.0.10_7 of the dependency java is being installed"); - assertLogMessage(context, IdeLogLevel.INFO, "The version 17.0.10_7 of the dependency java was successfully installed"); + assertThat(context).logAtInfo().hasEntries("The version 17.0.10_7 of the dependency java is being installed", + "The version 17.0.10_7 of the dependency java was successfully installed"); } private void checkRunningTomcat(IdeTestContext context) { - assertLogMessage(context, IdeLogLevel.INFO, "Tomcat is running at localhost on the following port (default 8080):"); - assertLogMessage(context, IdeLogLevel.INFO, "8080"); + assertThat(context).logAtInfo().hasEntries("Tomcat is running at localhost on the following port (default 8080):", + "8080"); } private void checkInstallation(IdeTestContext context) { @@ -49,7 +48,7 @@ private void checkInstallation(IdeTestContext context) { assertThat(context.getSoftwarePath().resolve("tomcat/bin/startup.sh")).exists().hasContent("#!/bin/bash\n" + "echo \"Test for linux and Mac\""); assertThat(context.getSoftwarePath().resolve("tomcat/.ide.software.version")).exists().hasContent("10.1.14"); - assertLogMessage(context, IdeLogLevel.SUCCESS, "Successfully installed tomcat in version 10.1.14"); + assertThat(context).logAtSuccess().hasMessage("Successfully installed tomcat in version 10.1.14"); } }