From c4daf28099d4f91705edbe94efcaeecf229ff274 Mon Sep 17 00:00:00 2001 From: Jan van Mansum Date: Thu, 11 Dec 2025 09:00:07 +0100 Subject: [PATCH 1/3] Added unit tests for multilineWrap --- .../bagit/BagGeneratorMultilineWrapTest.java | 102 ++++++++++++++++++ 1 file changed, 102 insertions(+) create mode 100644 src/test/java/edu/harvard/iq/dataverse/util/bagit/BagGeneratorMultilineWrapTest.java diff --git a/src/test/java/edu/harvard/iq/dataverse/util/bagit/BagGeneratorMultilineWrapTest.java b/src/test/java/edu/harvard/iq/dataverse/util/bagit/BagGeneratorMultilineWrapTest.java new file mode 100644 index 00000000000..39a713c14e4 --- /dev/null +++ b/src/test/java/edu/harvard/iq/dataverse/util/bagit/BagGeneratorMultilineWrapTest.java @@ -0,0 +1,102 @@ +package edu.harvard.iq.dataverse.util.bagit; + +import static org.assertj.core.api.Assertions.assertThat; + +import java.lang.reflect.InvocationTargetException; +import java.lang.reflect.Method; + +import org.junit.jupiter.api.BeforeAll; +import org.junit.jupiter.api.Test; + +/** + * Tests adapted for DD-2093: verify the behavior of BagGenerator.multilineWrap. + */ +public class BagGeneratorMultilineWrapTest { + + private static Method multilineWrap; + + @BeforeAll + static void setUp() throws NoSuchMethodException { + // Access the private static method via reflection + multilineWrap = BagGenerator.class.getDeclaredMethod("multilineWrap", String.class); + multilineWrap.setAccessible(true); + } + + private String callMultilineWrap(String input) { + try { + return (String) multilineWrap.invoke(null, input); + } catch (IllegalAccessException | InvocationTargetException e) { + throw new RuntimeException(e); + } + } + + @Test + void shortLine_noWrap() { + String input = "Hello world"; + String out = callMultilineWrap(input); + assertThat(out).isEqualTo("Hello world"); + } + + @Test + void exactBoundary_78chars_noWrap() { + String input = repeat('a', 78); + String out = callMultilineWrap(input); + assertThat(out).isEqualTo(input); + } + + @Test + void longSingleWord_wrapsAt78WithIndent() { + String input = repeat('a', 100); + String expected = repeat('a', 78) + "\r\n " + repeat('a', 22); + String out = callMultilineWrap(input); + assertThat(out).isEqualTo(expected); + } + + @Test + void multiline_input_indentsSecondAndSubsequentOriginalLines() { + String input = "Line1\nLine2"; + String expected = "Line1\r\n Line2"; + String out = callMultilineWrap(input); + assertThat(out).isEqualTo(expected); + } + + @Test + void multiline_withCRLF_normalizedAndIndented() { + String input = "First line\r\nSecond line"; + String expected = "First line\r\n Second line"; + String out = callMultilineWrap(input); + assertThat(out).isEqualTo(expected); + } + + @Test + void emptyLines_trimmedAndSkipped() { + String input = "Line1\n\nLine3"; + String expected = "Line1\r\n Line3"; + String out = callMultilineWrap(input); + assertThat(out).isEqualTo(expected); + } + + @Test + void whitespaceOnlyLines_ignored() { + String input = "Line1\n \n\t\t\nLine3"; + String expected = "Line1\r\n Line3"; + String out = callMultilineWrap(input); + assertThat(out).isEqualTo(expected); + } + + @Test + void longSecondLine_preservesIndentOnWraps() { + String line1 = "Header"; + String line2 = repeat('b', 90); + String input = line1 + "\n" + line2; + String expected = "Header\r\n " + repeat('b', 78) + "\r\n " + repeat('b', 12); + String out = callMultilineWrap(input); + assertThat(out).isEqualTo(expected); + } + + private static String repeat(char c, int n) { + StringBuilder sb = new StringBuilder(n); + for (int i = 0; i < n; i++) sb.append(c); + return sb.toString(); + } +} From e76bc9135fabbbdd4cb79f8fea7ed98e518f57f8 Mon Sep 17 00:00:00 2001 From: Jan van Mansum Date: Thu, 11 Dec 2025 09:09:00 +0100 Subject: [PATCH 2/3] Removed unnecessary repeat helper method --- .../bagit/BagGeneratorMultilineWrapTest.java | 16 +++++----------- 1 file changed, 5 insertions(+), 11 deletions(-) diff --git a/src/test/java/edu/harvard/iq/dataverse/util/bagit/BagGeneratorMultilineWrapTest.java b/src/test/java/edu/harvard/iq/dataverse/util/bagit/BagGeneratorMultilineWrapTest.java index 39a713c14e4..a212cac6316 100644 --- a/src/test/java/edu/harvard/iq/dataverse/util/bagit/BagGeneratorMultilineWrapTest.java +++ b/src/test/java/edu/harvard/iq/dataverse/util/bagit/BagGeneratorMultilineWrapTest.java @@ -39,15 +39,15 @@ void shortLine_noWrap() { @Test void exactBoundary_78chars_noWrap() { - String input = repeat('a', 78); + String input = "a".repeat(78); String out = callMultilineWrap(input); assertThat(out).isEqualTo(input); } @Test void longSingleWord_wrapsAt78WithIndent() { - String input = repeat('a', 100); - String expected = repeat('a', 78) + "\r\n " + repeat('a', 22); + String input = "a".repeat(100); + String expected = "a".repeat(78) + "\r\n " + "a".repeat(22); String out = callMultilineWrap(input); assertThat(out).isEqualTo(expected); } @@ -87,16 +87,10 @@ void whitespaceOnlyLines_ignored() { @Test void longSecondLine_preservesIndentOnWraps() { String line1 = "Header"; - String line2 = repeat('b', 90); + String line2 = "b".repeat(90); String input = line1 + "\n" + line2; - String expected = "Header\r\n " + repeat('b', 78) + "\r\n " + repeat('b', 12); + String expected = "Header\r\n " + "b".repeat(78) + "\r\n " + "b".repeat(12); String out = callMultilineWrap(input); assertThat(out).isEqualTo(expected); } - - private static String repeat(char c, int n) { - StringBuilder sb = new StringBuilder(n); - for (int i = 0; i < n; i++) sb.append(c); - return sb.toString(); - } } From 108c912ee037d23456650e6d5c49c5a943d5ef42 Mon Sep 17 00:00:00 2001 From: Jan van Mansum Date: Thu, 11 Dec 2025 09:17:42 +0100 Subject: [PATCH 3/3] Alined test names with actual test being done --- .../util/bagit/BagGeneratorMultilineWrapTest.java | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/test/java/edu/harvard/iq/dataverse/util/bagit/BagGeneratorMultilineWrapTest.java b/src/test/java/edu/harvard/iq/dataverse/util/bagit/BagGeneratorMultilineWrapTest.java index a212cac6316..71ceec61adf 100644 --- a/src/test/java/edu/harvard/iq/dataverse/util/bagit/BagGeneratorMultilineWrapTest.java +++ b/src/test/java/edu/harvard/iq/dataverse/util/bagit/BagGeneratorMultilineWrapTest.java @@ -54,15 +54,15 @@ void longSingleWord_wrapsAt78WithIndent() { @Test void multiline_input_indentsSecondAndSubsequentOriginalLines() { - String input = "Line1\nLine2"; - String expected = "Line1\r\n Line2"; + String input = "Line1\nLine2\nLine3"; + String expected = "Line1\r\n Line2\r\n Line3"; String out = callMultilineWrap(input); assertThat(out).isEqualTo(expected); } @Test - void multiline_withCRLF_normalizedAndIndented() { - String input = "First line\r\nSecond line"; + void multiline_withLF_normalizedAndIndented() { + String input = "First line\nSecond line"; String expected = "First line\r\n Second line"; String out = callMultilineWrap(input); assertThat(out).isEqualTo(expected);