From 8890c27fa4918c11318e10436c4e1f38b856dfac Mon Sep 17 00:00:00 2001 From: redcatbaer Date: Wed, 1 Jul 2026 19:46:39 +0200 Subject: [PATCH] 536: Parameterized tests in `TestSpecobjectImporter`. --- .../specobject/TestSpecobjectImporter.java | 146 +++++++++--------- 1 file changed, 74 insertions(+), 72 deletions(-) diff --git a/importer/specobject/src/test/java/org/itsallcode/openfasttrace/importer/specobject/TestSpecobjectImporter.java b/importer/specobject/src/test/java/org/itsallcode/openfasttrace/importer/specobject/TestSpecobjectImporter.java index d3b0ad263..5ce21cee0 100644 --- a/importer/specobject/src/test/java/org/itsallcode/openfasttrace/importer/specobject/TestSpecobjectImporter.java +++ b/importer/specobject/src/test/java/org/itsallcode/openfasttrace/importer/specobject/TestSpecobjectImporter.java @@ -4,6 +4,7 @@ import static org.hamcrest.Matchers.containsString; import static org.hamcrest.Matchers.equalTo; import static org.junit.jupiter.api.Assertions.assertTrue; +import static org.junit.jupiter.params.provider.Arguments.argumentSet; import static org.mockito.Mockito.*; import java.io.BufferedReader; @@ -19,25 +20,73 @@ import org.itsallcode.openfasttrace.importer.xmlparser.XmlParserFactory; import org.itsallcode.openfasttrace.testutil.importer.input.StreamInput; import org.junit.jupiter.api.Test; +import org.junit.jupiter.params.ParameterizedTest; +import org.junit.jupiter.params.provider.Arguments; +import org.junit.jupiter.params.provider.FieldSource; class TestSpecobjectImporter { private static final String PSEUDO_FILENAME = "pseudo_filename"; private static final Location STANDARD_LOCATION = Location.create(PSEUDO_FILENAME, 2); - @Test - void testImportOfMinimalSpecObject() + static List idImportChecks = List.of( + argumentSet("minimal import", """ + + + minimal + 1 + + """, + "req~minimal~1"), + + argumentSet("strip superfluous artifact type", """ + + + impl:strip_duplicate_prefix + 0 + + """, + "impl~strip_duplicate_prefix~0"), + + argumentSet("ignore unknown XML elements", """ + + + ignore-selected-xml-elements + 12345 + 1970-01-01 + john doe + + """, + "feat~ignore-selected-xml-elements~12345"), + + argumentSet("fullfilled-by is ignored", """ + + + with-fulfilled-by + 1 + + + impl + ffb-a + 1 + + + utest + ffb-b + 2 + + + + """, "req~with-fulfilled-by~1")); + + @ParameterizedTest + @FieldSource("idImportChecks") + void testImportSeesTheCorrectId(final String input, final String expectedId) { - final ImportEventListener listenerMock = importFromString(""" - - - minimal - 1 - - """); + final ImportEventListener listenerMock = importFromString(input); verify(listenerMock).beginSpecificationItem(); - verify(listenerMock).setLocation(STANDARD_LOCATION); - verify(listenerMock).setId(SpecificationItemId.parseId("req~minimal~1")); + verify(listenerMock).setLocation(TestSpecobjectImporter.STANDARD_LOCATION); + verify(listenerMock).setId(SpecificationItemId.parseId(expectedId)); verify(listenerMock).endSpecificationItem(); verifyNoMoreInteractions(listenerMock); } @@ -103,26 +152,6 @@ void testImportOnlyShortDescription() verifyNoMoreInteractions(listenerMock); } - @Test - void testSelectedElementsAreIgnoredDuringImport() - { - final ImportEventListener listenerMock = importFromString(""" - - - ignore-selected-xml-elements - 12345 - 1970-01-01 - john doe - - """); - verify(listenerMock).beginSpecificationItem(); - verify(listenerMock).setLocation(STANDARD_LOCATION); - verify(listenerMock) - .setId(SpecificationItemId.parseId("feat~ignore-selected-xml-elements~12345")); - verify(listenerMock).endSpecificationItem(); - verifyNoMoreInteractions(listenerMock); - } - @Test void testStripSuperfluousArtifactPrefixFromName() { @@ -146,13 +175,13 @@ void testTakeOverLocationFromImportedFile() final String expectedFileName = "/home/johndoe/openfasttrace/examples/specobject.xml"; final int expectedLine = 42; final ImportEventListener listenerMock = importFromString("\n" // - + " \n" // - + " takeOverLocation\n" // - + " 99999999\n" // - + " " + expectedFileName + "" // - + " " + expectedLine + "" // " - + " \n" // - + ""); + + " \n" // + + " takeOverLocation\n" // + + " 99999999\n" // + + " " + expectedFileName + "" // + + " " + expectedLine + "" // " + + " \n" // + + ""); verify(listenerMock).beginSpecificationItem(); verify(listenerMock).setLocation(Location.create(expectedFileName, expectedLine)); verify(listenerMock).setId(SpecificationItemId.parseId("utest~takeOverLocation~99999999")); @@ -229,35 +258,6 @@ void testImportWithDependencies() verifyNoMoreInteractions(listenerMock); } - @Test - void testImportFulfilledByIsIgnored() - { - final ImportEventListener listenerMock = importFromString(""" - - - with-fulfilled-by - 1 - - - impl - ffb-a - 1 - - - utest - ffb-b - 2 - - - - """); - verify(listenerMock).beginSpecificationItem(); - verify(listenerMock).setLocation(STANDARD_LOCATION); - verify(listenerMock).setId(SpecificationItemId.parseId("req~with-fulfilled-by~1")); - verify(listenerMock).endSpecificationItem(); - verifyNoMoreInteractions(listenerMock); - } - @Test void testImportProvidesCoverage() { @@ -290,7 +290,7 @@ void testImportProvidesCoverage() @Test void testCustomTagsWithoutNamespacesLogsWarning() { - try( final RecordingLogHandler logHandler = new RecordingLogHandler() ) + try (final RecordingLogHandler logHandler = new RecordingLogHandler()) { importFromString(""" \ @@ -314,7 +314,7 @@ void testCustomTagsWithoutNamespacesLogsWarning() @Test void testCustomTagsWithNamespacesLogsNoWarning() { - try( final RecordingLogHandler logHandler = new RecordingLogHandler() ) + try (final RecordingLogHandler logHandler = new RecordingLogHandler()) { importFromString(""" @@ -336,7 +336,7 @@ void testCustomTagsWithNamespacesLogsNoWarning() @Test void testCustomTagsWithNamespacesPlusOftNamespaceLogsNoWarning() { - try( final RecordingLogHandler logHandler = new RecordingLogHandler() ) + try (final RecordingLogHandler logHandler = new RecordingLogHandler()) { importFromString(""" getLogRecords() return logRecords.stream(); } - @Override public void close() + @Override + public void close() { Arrays.stream(rootLogger.getHandlers()) .filter((RecordingLogHandler.class::isInstance))