diff --git a/testing-modules/testing-libraries-3/pom.xml b/testing-modules/testing-libraries-3/pom.xml
index b3d3a9b1eead..d41dc368c2f3 100644
--- a/testing-modules/testing-libraries-3/pom.xml
+++ b/testing-modules/testing-libraries-3/pom.xml
@@ -60,6 +60,24 @@
${system-lambda.version}
test
+
+ uk.org.webcompere
+ test-gadgets-jupiter
+ 1.0.2
+ test
+
+
+ uk.org.webcompere
+ test-gadgets-junit4
+ 1.0.2
+ test
+
+
+ uk.org.webcompere
+ test-gadgets-core
+ 1.0.2
+ test
+
@@ -94,6 +112,7 @@
4.8.0
1.0.0
1.19.0
+ 11
\ No newline at end of file
diff --git a/testing-modules/testing-libraries-3/src/main/java/com/baeldung/testdatafactory/Converter.java b/testing-modules/testing-libraries-3/src/main/java/com/baeldung/testdatafactory/Converter.java
new file mode 100644
index 000000000000..77787fd4e752
--- /dev/null
+++ b/testing-modules/testing-libraries-3/src/main/java/com/baeldung/testdatafactory/Converter.java
@@ -0,0 +1,105 @@
+package com.baeldung.testdatafactory;
+
+import java.util.Arrays;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+import java.util.stream.Collectors;
+
+import static java.util.stream.Collectors.toList;
+
+public class Converter {
+ private static final Pattern TITLE_STRIP = Pattern.compile("#\\s*(.*)");
+
+ /**
+ * Convert the lines to paragraphs. Break sentences by full stops. Ignore formatting.
+ * @param text input text
+ * @return {@link Document} object
+ */
+ public static Document fromText(String text) {
+ Document document = new Document();
+ document.setParagraphs(Arrays.stream(text.split("\n")).map(Converter::toParagraph).collect(toList()));
+ return document;
+ }
+
+ /**
+ * Remove the # prefix from a title line
+ * @param line the line
+ * @return the non title part
+ */
+ private static String stripTitle(String line) {
+ Matcher m = TITLE_STRIP.matcher(line);
+ m.matches();
+ return m.group(1);
+ }
+
+
+ /**
+ * Convert a document into a plaintext
+ * @param doc the document
+ * @return plaintext form
+ */
+ public static String fromDocument(Document doc) {
+ return doc.getParagraphs()
+ .stream()
+ .map(Converter::toParagraphPlaintext)
+ .collect(Collectors.joining("\n"));
+ }
+
+ private static String toParagraphPlaintext(Paragraph paragraph) {
+ return paragraph.getSentences().stream()
+ .map(sentence -> String.join(" ", sentence.getTokens()))
+ .collect(Collectors.joining(" "));
+ }
+
+ private static String toParagraphMarkdown(Paragraph paragraph) {
+ return (paragraph.getStyle().equals(Paragraph.Style.HEADING) ? "# " : "") + toParagraphPlaintext(paragraph);
+ }
+
+ /**
+ * Convert a document into markdown
+ * @param doc the document
+ * @return similar to plaintext, but with headings prefixed by #
+ */
+ public static String toMarkdown(Document doc) {
+ return doc.getParagraphs()
+ .stream()
+ .map(Converter::toParagraphMarkdown)
+ .collect(Collectors.joining("\n"));
+ }
+
+ /**
+ * Parse the markdown and return a document
+ * @param markdown the markdown file
+ * @return the document
+ */
+ public static Document fromMarkdown(String markdown) {
+ Document document = new Document();
+ document.setParagraphs(Arrays.stream(markdown.split("\n")).map(Converter::toParagraphFromMarkdown).collect(toList()));
+ return document;
+ }
+
+ private static Paragraph toParagraphFromMarkdown(String line) {
+ if (line.startsWith("#")) {
+ return toParagraph(stripTitle(line), Paragraph.Style.HEADING);
+ }
+ return toParagraph(line, Paragraph.Style.NORMAL);
+ }
+
+ private static Paragraph toParagraph(String line) {
+ return toParagraph(line, Paragraph.Style.NORMAL);
+ }
+
+ private static Paragraph toParagraph(String line, Paragraph.Style style) {
+ Paragraph paragraph = new Paragraph();
+ paragraph.setStyle(style);
+ paragraph.setSentences(Arrays.stream(line.split("(?<=\\.)")).map(Converter::toSentence).collect(toList()));
+ return paragraph;
+ }
+
+ private static Sentence toSentence(String sentenceText) {
+ Sentence sentence = new Sentence();
+ sentence.setTokens(Arrays.asList(sentenceText.split(" ")));
+ return sentence;
+ }
+
+}
diff --git a/testing-modules/testing-libraries-3/src/main/java/com/baeldung/testdatafactory/Document.java b/testing-modules/testing-libraries-3/src/main/java/com/baeldung/testdatafactory/Document.java
new file mode 100644
index 000000000000..0f5192976542
--- /dev/null
+++ b/testing-modules/testing-libraries-3/src/main/java/com/baeldung/testdatafactory/Document.java
@@ -0,0 +1,10 @@
+package com.baeldung.testdatafactory;
+
+import lombok.Data;
+
+import java.util.List;
+
+@Data
+public class Document {
+ private List paragraphs;
+}
diff --git a/testing-modules/testing-libraries-3/src/main/java/com/baeldung/testdatafactory/Paragraph.java b/testing-modules/testing-libraries-3/src/main/java/com/baeldung/testdatafactory/Paragraph.java
new file mode 100644
index 000000000000..87fcb89970f5
--- /dev/null
+++ b/testing-modules/testing-libraries-3/src/main/java/com/baeldung/testdatafactory/Paragraph.java
@@ -0,0 +1,13 @@
+package com.baeldung.testdatafactory;
+
+import lombok.Data;
+
+import java.util.List;
+
+@Data
+public class Paragraph {
+ public enum Style { NORMAL, HEADING };
+
+ private List sentences;
+ private Style style = Style.NORMAL;
+}
diff --git a/testing-modules/testing-libraries-3/src/main/java/com/baeldung/testdatafactory/Sentence.java b/testing-modules/testing-libraries-3/src/main/java/com/baeldung/testdatafactory/Sentence.java
new file mode 100644
index 000000000000..770ec52cd4bd
--- /dev/null
+++ b/testing-modules/testing-libraries-3/src/main/java/com/baeldung/testdatafactory/Sentence.java
@@ -0,0 +1,10 @@
+package com.baeldung.testdatafactory;
+
+import lombok.Data;
+
+import java.util.List;
+
+@Data
+public class Sentence {
+ private List tokens;
+}
diff --git a/testing-modules/testing-libraries-3/src/test/java/com/baeldung/testdatafactory/AllVersions.java b/testing-modules/testing-libraries-3/src/test/java/com/baeldung/testdatafactory/AllVersions.java
new file mode 100644
index 000000000000..67ed5542c613
--- /dev/null
+++ b/testing-modules/testing-libraries-3/src/test/java/com/baeldung/testdatafactory/AllVersions.java
@@ -0,0 +1,16 @@
+package com.baeldung.testdatafactory;
+
+import uk.org.webcompere.testgadgets.testdatafactory.TestData;
+import uk.org.webcompere.testgadgets.testdatafactory.TestDataCollection;
+
+@TestDataCollection
+public interface AllVersions {
+ @TestData("text.json")
+ Document document();
+
+ @TestData("text.md")
+ String markdown();
+
+ @TestData("text.txt")
+ String text();
+}
diff --git a/testing-modules/testing-libraries-3/src/test/java/com/baeldung/testdatafactory/ConverterAllVersionsCollectionJUnit4UnitTest.java b/testing-modules/testing-libraries-3/src/test/java/com/baeldung/testdatafactory/ConverterAllVersionsCollectionJUnit4UnitTest.java
new file mode 100644
index 000000000000..2d34a8975f10
--- /dev/null
+++ b/testing-modules/testing-libraries-3/src/test/java/com/baeldung/testdatafactory/ConverterAllVersionsCollectionJUnit4UnitTest.java
@@ -0,0 +1,59 @@
+package com.baeldung.testdatafactory;
+
+import org.junit.Rule;
+import org.junit.Test;
+import uk.org.webcompere.testgadgets.testdatafactory.TestData;
+import uk.org.webcompere.testgadgets.testdatafactory.TestDataFieldsRule;
+import uk.org.webcompere.testgadgets.testdatafactory.TestDataLoader;
+import uk.org.webcompere.testgadgets.testdatafactory.TextLoader;
+
+import static org.assertj.core.api.Assertions.assertThat;
+
+public class ConverterAllVersionsCollectionJUnit4UnitTest {
+ @Rule
+ public TestDataFieldsRule rule = new TestDataFieldsRule(
+ new TestDataLoader()
+ .addLoader(".md", new TextLoader())
+ .addPath("testdata"));
+
+ @TestData("dickens")
+ private AllVersions dickens;
+
+ @TestData("shakespeare")
+ private AllVersions shakespeare;
+
+ @Test
+ public void markdownToDocumentDickens() {
+ assertThat(Converter.fromMarkdown(dickens.markdown())).isEqualTo(dickens.document());
+ }
+
+ @Test
+ public void textToDocumentDickens() {
+ Document document = dickens.document();
+ document.getParagraphs().get(0).setStyle(Paragraph.Style.NORMAL);
+ assertThat(Converter.fromText(dickens.text())).isEqualTo(document);
+ }
+
+ @Test
+ public void documentToMarkdownDickens() {
+ assertThat(Converter.toMarkdown(dickens.document())).isEqualTo(dickens.markdown());
+ }
+
+ @Test
+ public void markdownToDocumentShakespeare() {
+ assertThat(Converter.fromMarkdown(shakespeare.markdown())).isEqualTo(shakespeare.document());
+ }
+
+ @Test
+ public void textToDocumentShakespeare() {
+ Document document = shakespeare.document();
+ document.getParagraphs().get(0).setStyle(Paragraph.Style.NORMAL);
+ document.getParagraphs().get(1).setStyle(Paragraph.Style.NORMAL);
+ assertThat(Converter.fromText(shakespeare.text())).isEqualTo(document);
+ }
+
+ @Test
+ public void documentToMarkdownShakespeare() {
+ assertThat(Converter.toMarkdown(shakespeare.document())).isEqualTo(shakespeare.markdown());
+ }
+}
diff --git a/testing-modules/testing-libraries-3/src/test/java/com/baeldung/testdatafactory/ConverterAllVersionsCollectionJUnit5UnitTest.java b/testing-modules/testing-libraries-3/src/test/java/com/baeldung/testdatafactory/ConverterAllVersionsCollectionJUnit5UnitTest.java
new file mode 100644
index 000000000000..b41d9355bcee
--- /dev/null
+++ b/testing-modules/testing-libraries-3/src/test/java/com/baeldung/testdatafactory/ConverterAllVersionsCollectionJUnit5UnitTest.java
@@ -0,0 +1,60 @@
+package com.baeldung.testdatafactory;
+
+import org.junit.jupiter.api.Test;
+import uk.org.webcompere.testgadgets.testdatafactory.FileTypeLoader;
+import uk.org.webcompere.testgadgets.testdatafactory.Loader;
+import uk.org.webcompere.testgadgets.testdatafactory.TestData;
+import uk.org.webcompere.testgadgets.testdatafactory.TestDataFactory;
+import uk.org.webcompere.testgadgets.testdatafactory.TestDataLoader;
+import uk.org.webcompere.testgadgets.testdatafactory.TextLoader;
+
+import static org.assertj.core.api.Assertions.assertThat;
+
+@TestDataFactory(
+ loaders = { @FileTypeLoader(extension = ".md", loadedBy = TextLoader.class) },
+ path = "testdata")
+class ConverterAllVersionsCollectionJUnit5UnitTest {
+ @TestData("dickens")
+ private AllVersions dickens;
+
+ @TestData("shakespeare")
+ private AllVersions shakespeare;
+
+ @Loader
+ private TestDataLoader loader;
+
+ @Test
+ void markdownToDocumentDickens() {
+ assertThat(Converter.fromMarkdown(dickens.markdown())).isEqualTo(dickens.document());
+ }
+
+ @Test
+ void textToDocumentDickens() {
+ Document document = dickens.document();
+ document.getParagraphs().get(0).setStyle(Paragraph.Style.NORMAL);
+ assertThat(Converter.fromText(dickens.text())).isEqualTo(document);
+ }
+
+ @Test
+ void documentToMarkdownDickens() {
+ assertThat(Converter.toMarkdown(dickens.document())).isEqualTo(dickens.markdown());
+ }
+
+ @Test
+ void markdownToDocumentShakespeare() {
+ assertThat(Converter.fromMarkdown(shakespeare.markdown())).isEqualTo(shakespeare.document());
+ }
+
+ @Test
+ void textToDocumentShakespeare() {
+ Document document = shakespeare.document();
+ document.getParagraphs().get(0).setStyle(Paragraph.Style.NORMAL);
+ document.getParagraphs().get(1).setStyle(Paragraph.Style.NORMAL);
+ assertThat(Converter.fromText(shakespeare.text())).isEqualTo(document);
+ }
+
+ @Test
+ void documentToMarkdownShakespeare() {
+ assertThat(Converter.toMarkdown(shakespeare.document())).isEqualTo(shakespeare.markdown());
+ }
+}
diff --git a/testing-modules/testing-libraries-3/src/test/java/com/baeldung/testdatafactory/ConverterAllVersionsCollectionStaticLoaderJUnit5UnitTest.java b/testing-modules/testing-libraries-3/src/test/java/com/baeldung/testdatafactory/ConverterAllVersionsCollectionStaticLoaderJUnit5UnitTest.java
new file mode 100644
index 000000000000..d6de94034bd2
--- /dev/null
+++ b/testing-modules/testing-libraries-3/src/test/java/com/baeldung/testdatafactory/ConverterAllVersionsCollectionStaticLoaderJUnit5UnitTest.java
@@ -0,0 +1,30 @@
+package com.baeldung.testdatafactory;
+
+import org.junit.jupiter.api.Test;
+import uk.org.webcompere.testgadgets.testdatafactory.FileTypeLoader;
+import uk.org.webcompere.testgadgets.testdatafactory.Loader;
+import uk.org.webcompere.testgadgets.testdatafactory.TestData;
+import uk.org.webcompere.testgadgets.testdatafactory.TestDataFactory;
+import uk.org.webcompere.testgadgets.testdatafactory.TestDataLoader;
+import uk.org.webcompere.testgadgets.testdatafactory.TextLoader;
+
+import static org.assertj.core.api.Assertions.assertThat;
+
+@TestDataFactory
+class ConverterAllVersionsCollectionStaticLoaderJUnit5UnitTest {
+ @Loader
+ private static TestDataLoader customLoader = new TestDataLoader()
+ .addLoader(".md", new TextLoader())
+ .addPath("testdata");
+
+ @TestData("dickens")
+ private AllVersions dickens;
+
+ @TestData("shakespeare")
+ private AllVersions shakespeare;
+
+ @Test
+ void givenMarkdown_thenConvertToDocument() {
+ assertThat(Converter.fromMarkdown(dickens.markdown())).isEqualTo(dickens.document());
+ }
+}
diff --git a/testing-modules/testing-libraries-3/src/test/java/com/baeldung/testdatafactory/ConverterJavaFactoryUnitTest.java b/testing-modules/testing-libraries-3/src/test/java/com/baeldung/testdatafactory/ConverterJavaFactoryUnitTest.java
new file mode 100644
index 000000000000..6b951c326ed9
--- /dev/null
+++ b/testing-modules/testing-libraries-3/src/test/java/com/baeldung/testdatafactory/ConverterJavaFactoryUnitTest.java
@@ -0,0 +1,28 @@
+package com.baeldung.testdatafactory;
+
+import org.junit.jupiter.api.Test;
+
+import java.io.IOException;
+
+import static org.assertj.core.api.AssertionsForClassTypes.assertThat;
+
+class ConverterJavaFactoryUnitTest {
+
+ @Test
+ void givenDocument_whenConvertToText_thenMatches() {
+ Document source = TestDataFactory.twoParagraphsAsDocument();
+
+ String asPlaintext = TestDataFactory.twoParagraphs();
+
+ assertThat(Converter.fromDocument(source)).isEqualTo(asPlaintext);
+ }
+
+ @Test
+ void givenDocumentAndPlaintextInFiles_whenConvertToText_thenMatches() throws IOException {
+ Document source = TestDataFilesFactory.twoParagraphsAsDocument();
+
+ String asPlaintext = TestDataFilesFactory.twoParagraphs();
+
+ assertThat(Converter.fromDocument(source)).isEqualTo(asPlaintext);
+ }
+}
diff --git a/testing-modules/testing-libraries-3/src/test/java/com/baeldung/testdatafactory/ConverterLazyLoadingFieldsJUnit4UnitTest.java b/testing-modules/testing-libraries-3/src/test/java/com/baeldung/testdatafactory/ConverterLazyLoadingFieldsJUnit4UnitTest.java
new file mode 100644
index 000000000000..02fa0645e5c2
--- /dev/null
+++ b/testing-modules/testing-libraries-3/src/test/java/com/baeldung/testdatafactory/ConverterLazyLoadingFieldsJUnit4UnitTest.java
@@ -0,0 +1,29 @@
+package com.baeldung.testdatafactory;
+
+import org.junit.Rule;
+import org.junit.Test;
+import uk.org.webcompere.testgadgets.testdatafactory.TestData;
+import uk.org.webcompere.testgadgets.testdatafactory.TestDataFieldsRule;
+import uk.org.webcompere.testgadgets.testdatafactory.TestDataLoader;
+
+import java.util.function.Supplier;
+
+import static org.assertj.core.api.AssertionsForClassTypes.assertThat;
+
+public class ConverterLazyLoadingFieldsJUnit4UnitTest {
+ @Rule
+ public TestDataFieldsRule rule = new TestDataFieldsRule(
+ new TestDataLoader().addPath("testdata"));
+
+ @TestData
+ private Supplier twoParagraphs;
+
+ @TestData("twoParagraphs.txt")
+ private Supplier twoParagraphsText;
+
+ @Test
+ public void givenDocumentAndPlaintextInFiles_whenConvertToText_thenMatches() {
+ assertThat(Converter.fromDocument(twoParagraphs.get()))
+ .isEqualTo(twoParagraphsText.get());
+ }
+}
diff --git a/testing-modules/testing-libraries-3/src/test/java/com/baeldung/testdatafactory/ConverterLazyLoadingFieldsJUnit5UnitTest.java b/testing-modules/testing-libraries-3/src/test/java/com/baeldung/testdatafactory/ConverterLazyLoadingFieldsJUnit5UnitTest.java
new file mode 100644
index 000000000000..5451e55e4d31
--- /dev/null
+++ b/testing-modules/testing-libraries-3/src/test/java/com/baeldung/testdatafactory/ConverterLazyLoadingFieldsJUnit5UnitTest.java
@@ -0,0 +1,24 @@
+package com.baeldung.testdatafactory;
+
+import org.junit.jupiter.api.Test;
+import uk.org.webcompere.testgadgets.testdatafactory.TestData;
+import uk.org.webcompere.testgadgets.testdatafactory.TestDataFactory;
+
+import java.util.function.Supplier;
+
+import static org.assertj.core.api.AssertionsForClassTypes.assertThat;
+
+@TestDataFactory(path = "testdata")
+class ConverterLazyLoadingFieldsJUnit5UnitTest {
+
+ @TestData
+ private Supplier twoParagraphs;
+
+ @TestData("twoParagraphs.txt")
+ private Supplier twoParagraphsText;
+
+ @Test
+ void givenDocumentAndPlaintextInFiles_whenConvertToText_thenMatches() {
+ assertThat(Converter.fromDocument(twoParagraphs.get())).isEqualTo(twoParagraphsText.get());
+ }
+}
diff --git a/testing-modules/testing-libraries-3/src/test/java/com/baeldung/testdatafactory/ConverterStaticLoaderJUnit4UnitTest.java b/testing-modules/testing-libraries-3/src/test/java/com/baeldung/testdatafactory/ConverterStaticLoaderJUnit4UnitTest.java
new file mode 100644
index 000000000000..759e78a8f2f2
--- /dev/null
+++ b/testing-modules/testing-libraries-3/src/test/java/com/baeldung/testdatafactory/ConverterStaticLoaderJUnit4UnitTest.java
@@ -0,0 +1,57 @@
+package com.baeldung.testdatafactory;
+
+import org.junit.ClassRule;
+import org.junit.Rule;
+import org.junit.Test;
+import uk.org.webcompere.testgadgets.testdatafactory.Immutable;
+import uk.org.webcompere.testgadgets.testdatafactory.TestData;
+import uk.org.webcompere.testgadgets.testdatafactory.TestDataClassRule;
+import uk.org.webcompere.testgadgets.testdatafactory.TestDataFieldsRule;
+import uk.org.webcompere.testgadgets.testdatafactory.TestDataLoader;
+import uk.org.webcompere.testgadgets.testdatafactory.TextLoader;
+
+import static org.assertj.core.api.Assertions.assertThat;
+
+public class ConverterStaticLoaderJUnit4UnitTest {
+ @ClassRule
+ public static TestDataClassRule classRule = new TestDataClassRule(
+ new TestDataLoader()
+ .addLoader(".md", new TextLoader())
+ .addPath("testdata"));
+
+ @Rule
+ public TestDataFieldsRule rule = new TestDataFieldsRule(classRule.getLoader());
+
+ @TestData("twoParagraphs.txt")
+ private static String twoParagraphsTextStatic;
+
+ @TestData("twoParagraphs.txt")
+ private String twoParagraphsTextField;
+
+ @TestData("twoParagraphs.json")
+ private static Document twoParagraphsStatic;
+
+ @TestData
+ private Document twoParagraphs;
+
+ @TestData(value = "twoParagraphs.json", immutable = Immutable.IMMUTABLE)
+ private static Document twoParagraphsStaticImmutable;
+
+ @TestData(value = "twoParagraphs.json", immutable = Immutable.IMMUTABLE)
+ private Document twoParagraphsImmutable;
+
+ @Test
+ public void givenInjectedFieldInSharedLoader_alwaysGetsSameAnswer() {
+ assertThat(twoParagraphsTextStatic).isSameAs(twoParagraphsTextField);
+ }
+
+ @Test
+ public void givenInjectedFieldInSharedLoaderDefaultMutability_alwaysGetsDifferentAnswer() {
+ assertThat(twoParagraphsStatic).isNotSameAs(twoParagraphs);
+ }
+
+ @Test
+ public void givenInjectedFieldInSharedLoaderImmutable_alwaysGetsSameAnswer() {
+ assertThat(twoParagraphsStaticImmutable).isSameAs(twoParagraphsImmutable);
+ }
+}
diff --git a/testing-modules/testing-libraries-3/src/test/java/com/baeldung/testdatafactory/ConverterTestDataCollectionJUnit4UnitTest.java b/testing-modules/testing-libraries-3/src/test/java/com/baeldung/testdatafactory/ConverterTestDataCollectionJUnit4UnitTest.java
new file mode 100644
index 000000000000..2a8e961c60de
--- /dev/null
+++ b/testing-modules/testing-libraries-3/src/test/java/com/baeldung/testdatafactory/ConverterTestDataCollectionJUnit4UnitTest.java
@@ -0,0 +1,27 @@
+package com.baeldung.testdatafactory;
+
+import org.junit.Rule;
+import org.junit.Test;
+import uk.org.webcompere.testgadgets.testdatafactory.TestData;
+import uk.org.webcompere.testgadgets.testdatafactory.TestDataCollection;
+import uk.org.webcompere.testgadgets.testdatafactory.TestDataFieldsRule;
+import uk.org.webcompere.testgadgets.testdatafactory.TestDataLoader;
+
+import java.util.function.Supplier;
+
+import static org.assertj.core.api.AssertionsForClassTypes.assertThat;
+
+public class ConverterTestDataCollectionJUnit4UnitTest {
+ @Rule
+ public TestDataFieldsRule rule = new TestDataFieldsRule(
+ new TestDataLoader().addPath("testdata"));
+
+ @TestData
+ private TwoParagraphsCollection collection;
+
+ @Test
+ public void givenDocumentAndPlaintextInFiles_whenConvertToText_thenMatches() {
+ assertThat(Converter.fromDocument(collection.twoParagraphs()))
+ .isEqualTo(collection.twoParagraphsText());
+ }
+}
diff --git a/testing-modules/testing-libraries-3/src/test/java/com/baeldung/testdatafactory/ConverterTestDataCollectionJUnit5UnitTest.java b/testing-modules/testing-libraries-3/src/test/java/com/baeldung/testdatafactory/ConverterTestDataCollectionJUnit5UnitTest.java
new file mode 100644
index 000000000000..1d35205fcb63
--- /dev/null
+++ b/testing-modules/testing-libraries-3/src/test/java/com/baeldung/testdatafactory/ConverterTestDataCollectionJUnit5UnitTest.java
@@ -0,0 +1,26 @@
+package com.baeldung.testdatafactory;
+
+import org.junit.jupiter.api.Test;
+import uk.org.webcompere.testgadgets.testdatafactory.TestData;
+import uk.org.webcompere.testgadgets.testdatafactory.TestDataFactory;
+
+import static org.assertj.core.api.AssertionsForClassTypes.assertThat;
+
+@TestDataFactory(path = "testdata")
+class ConverterTestDataCollectionJUnit5UnitTest {
+
+ @TestData
+ private TwoParagraphsCollection collection;
+
+ @Test
+ void givenDocumentAndPlaintextInFiles_whenConvertToText_thenMatches() {
+ assertThat(Converter.fromDocument(collection.twoParagraphs()))
+ .isEqualTo(collection.twoParagraphsText());
+ }
+
+ @Test
+ void givenInjectedCollection_whenConvertToText_thenMatches(@TestData TwoParagraphsCollection collection) {
+ assertThat(Converter.fromDocument(collection.twoParagraphs()))
+ .isEqualTo(collection.twoParagraphsText());
+ }
+}
diff --git a/testing-modules/testing-libraries-3/src/test/java/com/baeldung/testdatafactory/ConverterTestFactoryFieldsJUnit4UnitTest.java b/testing-modules/testing-libraries-3/src/test/java/com/baeldung/testdatafactory/ConverterTestFactoryFieldsJUnit4UnitTest.java
new file mode 100644
index 000000000000..5f0717d5ad32
--- /dev/null
+++ b/testing-modules/testing-libraries-3/src/test/java/com/baeldung/testdatafactory/ConverterTestFactoryFieldsJUnit4UnitTest.java
@@ -0,0 +1,26 @@
+package com.baeldung.testdatafactory;
+
+import org.junit.Rule;
+import org.junit.Test;
+import uk.org.webcompere.testgadgets.testdatafactory.TestData;
+import uk.org.webcompere.testgadgets.testdatafactory.TestDataFieldsRule;
+import uk.org.webcompere.testgadgets.testdatafactory.TestDataLoader;
+
+import static org.assertj.core.api.AssertionsForClassTypes.assertThat;
+
+public class ConverterTestFactoryFieldsJUnit4UnitTest {
+ @Rule
+ public TestDataFieldsRule rule = new TestDataFieldsRule(
+ new TestDataLoader().addPath("testdata"));
+
+ @TestData
+ private Document twoParagraphs;
+
+ @TestData("twoParagraphs.txt")
+ private String twoParagraphsText;
+
+ @Test
+ public void givenDocumentAndPlaintextInFiles_whenConvertToText_thenMatches() {
+ assertThat(Converter.fromDocument(twoParagraphs)).isEqualTo(twoParagraphsText);
+ }
+}
diff --git a/testing-modules/testing-libraries-3/src/test/java/com/baeldung/testdatafactory/ConverterTestFactoryFieldsJUnit5UnitTest.java b/testing-modules/testing-libraries-3/src/test/java/com/baeldung/testdatafactory/ConverterTestFactoryFieldsJUnit5UnitTest.java
new file mode 100644
index 000000000000..d749ee4aafae
--- /dev/null
+++ b/testing-modules/testing-libraries-3/src/test/java/com/baeldung/testdatafactory/ConverterTestFactoryFieldsJUnit5UnitTest.java
@@ -0,0 +1,29 @@
+package com.baeldung.testdatafactory;
+
+import org.junit.jupiter.api.Test;
+import uk.org.webcompere.testgadgets.testdatafactory.TestData;
+import uk.org.webcompere.testgadgets.testdatafactory.TestDataFactory;
+
+import static org.assertj.core.api.AssertionsForClassTypes.assertThat;
+
+@TestDataFactory(path = "testdata")
+class ConverterTestFactoryFieldsJUnit5UnitTest {
+
+ @TestData
+ private Document twoParagraphs;
+
+ @TestData("twoParagraphs.txt")
+ private String twoParagraphsText;
+
+ @Test
+ void givenDocumentAndPlaintextInFiles_whenConvertToText_thenMatches() {
+ assertThat(Converter.fromDocument(twoParagraphs)).isEqualTo(twoParagraphsText);
+ }
+
+ @Test
+ void givenInjectedFiles_whenConvertToText_thenMatches(
+ @TestData("twoParagraphs.json") Document twoParagraphs,
+ @TestData("twoParagraphs.txt") String twoParagraphsText) {
+ assertThat(Converter.fromDocument(twoParagraphs)).isEqualTo(twoParagraphsText);
+ }
+}
diff --git a/testing-modules/testing-libraries-3/src/test/java/com/baeldung/testdatafactory/TestDataFactory.java b/testing-modules/testing-libraries-3/src/test/java/com/baeldung/testdatafactory/TestDataFactory.java
new file mode 100644
index 000000000000..f580300fe0cb
--- /dev/null
+++ b/testing-modules/testing-libraries-3/src/test/java/com/baeldung/testdatafactory/TestDataFactory.java
@@ -0,0 +1,32 @@
+package com.baeldung.testdatafactory;
+
+import static java.util.Arrays.asList;
+
+public class TestDataFactory {
+
+ public static String twoParagraphs() {
+ return "Paragraph one starts here.\n" +
+ "Then paragraph two follows. It has two sentences.";
+ }
+
+ public static Document twoParagraphsAsDocument() {
+ Paragraph paragraph1 = new Paragraph();
+ paragraph1.setStyle(Paragraph.Style.NORMAL);
+
+ Sentence sentence1 = new Sentence();
+ sentence1.setTokens(asList("Paragraph", "one", "starts", "here."));
+ paragraph1.setSentences(asList(sentence1));
+
+ Paragraph paragraph2 = new Paragraph();
+ paragraph2.setStyle(Paragraph.Style.NORMAL);
+ Sentence sentence2 = new Sentence();
+ sentence2.setTokens(asList("Then", "paragraph", "two", "follows."));
+ Sentence sentence3 = new Sentence();
+ sentence3.setTokens(asList("It", "has", "two", "sentences."));
+ paragraph2.setSentences(asList(sentence2, sentence3));
+
+ Document document = new Document();
+ document.setParagraphs(asList(paragraph1, paragraph2));
+ return document;
+ }
+}
diff --git a/testing-modules/testing-libraries-3/src/test/java/com/baeldung/testdatafactory/TestDataFilesFactory.java b/testing-modules/testing-libraries-3/src/test/java/com/baeldung/testdatafactory/TestDataFilesFactory.java
new file mode 100644
index 000000000000..b6bf52eaeffb
--- /dev/null
+++ b/testing-modules/testing-libraries-3/src/test/java/com/baeldung/testdatafactory/TestDataFilesFactory.java
@@ -0,0 +1,27 @@
+package com.baeldung.testdatafactory;
+
+import com.fasterxml.jackson.databind.ObjectMapper;
+
+import java.io.IOException;
+import java.nio.file.Files;
+import java.nio.file.Path;
+import java.nio.file.Paths;
+import java.util.stream.Collectors;
+import java.util.stream.Stream;
+
+public class TestDataFilesFactory {
+ public static String twoParagraphs() throws IOException {
+ Path path = Paths.get("src", "test", "resources",
+ "testdata", "twoParagraphs.txt");
+ try (Stream file = Files.lines(path)) {
+ return file.collect(Collectors.joining("\n"));
+ }
+ }
+
+ public static Document twoParagraphsAsDocument() throws IOException {
+ ObjectMapper objectMapper = new ObjectMapper();
+ return objectMapper.readValue(
+ Paths.get("src", "test", "resources",
+ "testdata", "twoParagraphs.json").toFile(), Document.class);
+ }
+}
diff --git a/testing-modules/testing-libraries-3/src/test/java/com/baeldung/testdatafactory/TwoParagraphsCollection.java b/testing-modules/testing-libraries-3/src/test/java/com/baeldung/testdatafactory/TwoParagraphsCollection.java
new file mode 100644
index 000000000000..3dd001c5e1cb
--- /dev/null
+++ b/testing-modules/testing-libraries-3/src/test/java/com/baeldung/testdatafactory/TwoParagraphsCollection.java
@@ -0,0 +1,13 @@
+package com.baeldung.testdatafactory;
+
+import uk.org.webcompere.testgadgets.testdatafactory.TestData;
+import uk.org.webcompere.testgadgets.testdatafactory.TestDataCollection;
+
+@TestDataCollection
+public interface TwoParagraphsCollection {
+ @TestData
+ Document twoParagraphs();
+
+ @TestData("twoParagraphs.txt")
+ String twoParagraphsText();
+}
diff --git a/testing-modules/testing-libraries-3/src/test/resources/testdata/dickens/text.json b/testing-modules/testing-libraries-3/src/test/resources/testdata/dickens/text.json
new file mode 100644
index 000000000000..9ff3768df450
--- /dev/null
+++ b/testing-modules/testing-libraries-3/src/test/resources/testdata/dickens/text.json
@@ -0,0 +1,39 @@
+{
+ "paragraphs": [
+ {
+ "style": "HEADING",
+ "sentences": [
+ {
+ "tokens": [
+ "A",
+ "Tale",
+ "of",
+ "Two",
+ "Cities"
+ ]
+ }
+ ]
+ },
+ {
+ "style": "NORMAL",
+ "sentences": [
+ {
+ "tokens": [
+ "It",
+ "was",
+ "the",
+ "best",
+ "of",
+ "times,",
+ "it",
+ "was",
+ "the",
+ "worst",
+ "of",
+ "times."
+ ]
+ }
+ ]
+ }
+ ]
+}
\ No newline at end of file
diff --git a/testing-modules/testing-libraries-3/src/test/resources/testdata/dickens/text.md b/testing-modules/testing-libraries-3/src/test/resources/testdata/dickens/text.md
new file mode 100644
index 000000000000..72ad1c8eef02
--- /dev/null
+++ b/testing-modules/testing-libraries-3/src/test/resources/testdata/dickens/text.md
@@ -0,0 +1,2 @@
+# A Tale of Two Cities
+It was the best of times, it was the worst of times.
\ No newline at end of file
diff --git a/testing-modules/testing-libraries-3/src/test/resources/testdata/dickens/text.txt b/testing-modules/testing-libraries-3/src/test/resources/testdata/dickens/text.txt
new file mode 100644
index 000000000000..927ca01668d1
--- /dev/null
+++ b/testing-modules/testing-libraries-3/src/test/resources/testdata/dickens/text.txt
@@ -0,0 +1,2 @@
+A Tale of Two Cities
+It was the best of times, it was the worst of times.
\ No newline at end of file
diff --git a/testing-modules/testing-libraries-3/src/test/resources/testdata/shakespeare/text.json b/testing-modules/testing-libraries-3/src/test/resources/testdata/shakespeare/text.json
new file mode 100644
index 000000000000..5508eae010e4
--- /dev/null
+++ b/testing-modules/testing-libraries-3/src/test/resources/testdata/shakespeare/text.json
@@ -0,0 +1,40 @@
+{
+ "paragraphs": [
+ {
+ "style": "HEADING",
+ "sentences": [
+ {
+ "tokens": [
+ "ACT",
+ "I"
+ ]
+ }
+ ]
+ },
+ {
+ "style": "HEADING",
+ "sentences": [
+ {
+ "tokens": [
+ "PROLOGUE"
+ ]
+ }
+ ]
+ },
+ {
+ "style": "NORMAL",
+ "sentences": [
+ {
+ "tokens": [
+ "Two",
+ "households,",
+ "both",
+ "alike",
+ "in",
+ "dignity,"
+ ]
+ }
+ ]
+ }
+ ]
+}
\ No newline at end of file
diff --git a/testing-modules/testing-libraries-3/src/test/resources/testdata/shakespeare/text.md b/testing-modules/testing-libraries-3/src/test/resources/testdata/shakespeare/text.md
new file mode 100644
index 000000000000..c8ae53619bf0
--- /dev/null
+++ b/testing-modules/testing-libraries-3/src/test/resources/testdata/shakespeare/text.md
@@ -0,0 +1,3 @@
+# ACT I
+# PROLOGUE
+Two households, both alike in dignity,
\ No newline at end of file
diff --git a/testing-modules/testing-libraries-3/src/test/resources/testdata/shakespeare/text.txt b/testing-modules/testing-libraries-3/src/test/resources/testdata/shakespeare/text.txt
new file mode 100644
index 000000000000..15ee3a5d0e1b
--- /dev/null
+++ b/testing-modules/testing-libraries-3/src/test/resources/testdata/shakespeare/text.txt
@@ -0,0 +1,3 @@
+ACT I
+PROLOGUE
+Two households, both alike in dignity,
\ No newline at end of file
diff --git a/testing-modules/testing-libraries-3/src/test/resources/testdata/twoParagraphs.json b/testing-modules/testing-libraries-3/src/test/resources/testdata/twoParagraphs.json
new file mode 100644
index 000000000000..a4fcadd0fe07
--- /dev/null
+++ b/testing-modules/testing-libraries-3/src/test/resources/testdata/twoParagraphs.json
@@ -0,0 +1,38 @@
+{
+ "paragraphs": [
+ {
+ "style": "NORMAL",
+ "sentences": [
+ {
+ "tokens": [
+ "Paragraph",
+ "one",
+ "starts",
+ "here."
+ ]
+ }
+ ]
+ },
+ {
+ "style": "NORMAL",
+ "sentences": [
+ {
+ "tokens": [
+ "Then",
+ "paragraph",
+ "two",
+ "follows."
+ ]
+ },
+ {
+ "tokens": [
+ "It",
+ "has",
+ "two",
+ "sentences."
+ ]
+ }
+ ]
+ }
+ ]
+}
\ No newline at end of file
diff --git a/testing-modules/testing-libraries-3/src/test/resources/testdata/twoParagraphs.txt b/testing-modules/testing-libraries-3/src/test/resources/testdata/twoParagraphs.txt
new file mode 100644
index 000000000000..51ece7d74bc9
--- /dev/null
+++ b/testing-modules/testing-libraries-3/src/test/resources/testdata/twoParagraphs.txt
@@ -0,0 +1,2 @@
+Paragraph one starts here.
+Then paragraph two follows. It has two sentences.
\ No newline at end of file