diff --git a/.run/tests.run.xml b/.run/tests.run.xml new file mode 100644 index 0000000..77ffdae --- /dev/null +++ b/.run/tests.run.xml @@ -0,0 +1,22 @@ + + + + + + + + + + + + \ No newline at end of file diff --git a/CHANGELOG.txt b/CHANGELOG.txt index f50a2c8..cfb924a 100644 --- a/CHANGELOG.txt +++ b/CHANGELOG.txt @@ -2,6 +2,7 @@ === 1.9.0 (released 07.07.2024) * Add soft assertions for AssertJ +* Rewrite tests from JUnit4 to JUnit5 === 1.8.1 (released 17.02.2023) * Add matcher `matchesText(regex)` diff --git a/gradle/dependencies.gradle b/gradle/dependencies.gradle index a592ccc..1151034 100644 --- a/gradle/dependencies.gradle +++ b/gradle/dependencies.gradle @@ -3,7 +3,7 @@ dependencies { implementation group: 'org.hamcrest', name: 'hamcrest', version: '2.2', transitive: false implementation group: 'org.assertj', name: 'assertj-core', version: '3.26.0' testImplementation 'org.junit.jupiter:junit-jupiter-api:5.10.3' - testImplementation 'org.junit.vintage:junit-vintage-engine:5.10.3' + testImplementation 'org.junit.jupiter:junit-jupiter-engine:5.10.3' } repositories { diff --git a/gradle/tests.gradle b/gradle/tests.gradle index f92af6d..6749c68 100644 --- a/gradle/tests.gradle +++ b/gradle/tests.gradle @@ -1,4 +1,5 @@ test { + useJUnitPlatform() include 'com/codeborne/pdftest/**/*' systemProperties['file.encoding'] = 'UTF-8' testLogging.showStandardStreams = true diff --git a/src/test/java/com/codeborne/pdftest/CreatePdfTest.java b/src/test/java/com/codeborne/pdftest/CreatePdfTest.java index 48b2763..6fcf26a 100644 --- a/src/test/java/com/codeborne/pdftest/CreatePdfTest.java +++ b/src/test/java/com/codeborne/pdftest/CreatePdfTest.java @@ -1,6 +1,6 @@ package com.codeborne.pdftest; -import org.junit.Test; +import org.junit.jupiter.api.Test; import java.io.File; import java.io.IOException; @@ -12,7 +12,6 @@ import java.nio.file.Paths; import static com.codeborne.pdftest.PDF.containsText; -import static com.codeborne.pdftest.PDF.matchesText; import static org.hamcrest.MatcherAssert.assertThat; public class CreatePdfTest { @@ -21,7 +20,7 @@ public void fromFile() throws IOException { File file = new File("src/test/resources/50quickideas.pdf"); assertThat(new PDF(file), containsText("50 Quick Ideas")); } - + @Test public void fromUrl() throws IOException { URL url = getClass().getClassLoader().getResource("50quickideas.pdf"); diff --git a/src/test/java/com/codeborne/pdftest/InvalidPdfTest.java b/src/test/java/com/codeborne/pdftest/InvalidPdfTest.java index 5ce4206..fb03d59 100644 --- a/src/test/java/com/codeborne/pdftest/InvalidPdfTest.java +++ b/src/test/java/com/codeborne/pdftest/InvalidPdfTest.java @@ -1,20 +1,24 @@ package com.codeborne.pdftest; -import org.junit.Test; +import org.junit.jupiter.api.Test; import java.io.File; import java.io.IOException; import java.nio.file.NoSuchFileException; +import static org.assertj.core.api.Assertions.assertThatThrownBy; +import static org.hamcrest.MatcherAssert.assertThat; import static org.hamcrest.Matchers.is; import static org.hamcrest.Matchers.notNullValue; -import static org.hamcrest.MatcherAssert.assertThat; -import static org.junit.Assert.fail; +import static org.junit.jupiter.api.Assertions.fail; public class InvalidPdfTest { - @Test(expected = NoSuchFileException.class) - public void throws_IOException_ifFailedToReadPdfFile() throws IOException { - new PDF(new File("src/test/resources/invalid-file.pdf")); + @Test + public void throws_IOException_ifFailedToReadPdfFile() { + File missingFile = new File("src/test/resources/invalid-file.pdf"); + assertThatThrownBy(() -> new PDF(missingFile)) + .isInstanceOf(NoSuchFileException.class) + .hasMessage(missingFile.getAbsolutePath()); } @Test diff --git a/src/test/java/com/codeborne/pdftest/MatchRegexTest.java b/src/test/java/com/codeborne/pdftest/MatchRegexTest.java index f9b5039..0507789 100644 --- a/src/test/java/com/codeborne/pdftest/MatchRegexTest.java +++ b/src/test/java/com/codeborne/pdftest/MatchRegexTest.java @@ -1,6 +1,6 @@ package com.codeborne.pdftest; -import org.junit.Test; +import org.junit.jupiter.api.Test; import java.io.IOException; import java.net.URL; diff --git a/src/test/java/com/codeborne/pdftest/PDFInformationTest.java b/src/test/java/com/codeborne/pdftest/PDFInformationTest.java index 060dba1..0cd01f2 100644 --- a/src/test/java/com/codeborne/pdftest/PDFInformationTest.java +++ b/src/test/java/com/codeborne/pdftest/PDFInformationTest.java @@ -1,6 +1,6 @@ package com.codeborne.pdftest; -import org.junit.Test; +import org.junit.jupiter.api.Test; import java.io.IOException; import java.text.ParseException; @@ -10,15 +10,15 @@ import static org.hamcrest.CoreMatchers.equalTo; import static org.hamcrest.core.Is.is; import static org.hamcrest.core.IsNull.nullValue; -import static org.junit.Assert.assertFalse; -import static org.junit.Assert.assertNull; import static org.hamcrest.MatcherAssert.assertThat; +import static org.junit.jupiter.api.Assertions.assertFalse; +import static org.junit.jupiter.api.Assertions.assertNull; public class PDFInformationTest { @Test public void canGetInformationFromPdf() throws IOException, ParseException { TimeZone.setDefault(TimeZone.getTimeZone("Europe/Tallinn")); - + PDF pdf = new PDF(getClass().getClassLoader().getResource("50quickideas.pdf")); assertThat(pdf.author, equalTo("Gojko Adzic")); assertThat(pdf.creationDate.getTime(), diff --git a/src/test/java/com/codeborne/pdftest/RealWorldExamplesTest.java b/src/test/java/com/codeborne/pdftest/RealWorldExamplesTest.java index bbd92aa..3bb1abc 100644 --- a/src/test/java/com/codeborne/pdftest/RealWorldExamplesTest.java +++ b/src/test/java/com/codeborne/pdftest/RealWorldExamplesTest.java @@ -1,6 +1,6 @@ package com.codeborne.pdftest; -import org.junit.Test; +import org.junit.jupiter.api.Test; import java.io.IOException; diff --git a/src/test/java/com/codeborne/pdftest/SoftAssertionsTest.java b/src/test/java/com/codeborne/pdftest/SoftAssertionsTest.java new file mode 100644 index 0000000..0344ff6 --- /dev/null +++ b/src/test/java/com/codeborne/pdftest/SoftAssertionsTest.java @@ -0,0 +1,37 @@ +package com.codeborne.pdftest; + +import org.assertj.core.api.Assertions; +import org.junit.jupiter.api.Test; +import org.opentest4j.MultipleFailuresError; + +import java.io.IOException; + +import static com.codeborne.pdftest.PDF.containsExactText; +import static org.assertj.core.api.Assertions.assertThatThrownBy; +import static org.hamcrest.MatcherAssert.assertThat; +import static org.junit.jupiter.api.Assertions.assertAll; + +public class SoftAssertionsTest { + @Test + public void canUseSoftAssertions() throws IOException { + PDF pdf = new PDF(getClass().getClassLoader().getResource("minimal.pdf")); + + assertThatThrownBy(() -> { + assertAll("minimal PDF", + () -> assertThat(pdf, containsExactText("one")), + () -> assertThat(pdf, containsExactText("two")), + () -> assertThat(pdf, containsExactText("three")), + () -> assertThat(pdf, containsExactText("four")) + ); + }) + .isInstanceOf(MultipleFailuresError.class) + .hasMessageStartingWith("minimal PDF (4 failures)") + .isInstanceOfSatisfying(MultipleFailuresError.class, (MultipleFailuresError e) -> { + Assertions.assertThat(e.getFailures()).hasSize(4); + Assertions.assertThat(e.getFailures().get(0)).hasMessageContaining("Expected: a PDF containing \"one\""); + Assertions.assertThat(e.getFailures().get(1)).hasMessageContaining("Expected: a PDF containing \"two\""); + Assertions.assertThat(e.getFailures().get(2)).hasMessageContaining("Expected: a PDF containing \"three\""); + Assertions.assertThat(e.getFailures().get(3)).hasMessageContaining("Expected: a PDF containing \"four\""); + }); + } +} diff --git a/src/test/java/com/codeborne/pdftest/assertj/ContainsExactTextTest.java b/src/test/java/com/codeborne/pdftest/assertj/ContainsExactTextTest.java index 3d623bd..079c27d 100644 --- a/src/test/java/com/codeborne/pdftest/assertj/ContainsExactTextTest.java +++ b/src/test/java/com/codeborne/pdftest/assertj/ContainsExactTextTest.java @@ -1,7 +1,7 @@ package com.codeborne.pdftest.assertj; import com.codeborne.pdftest.PDF; -import org.junit.Test; +import org.junit.jupiter.api.Test; import java.io.IOException; diff --git a/src/test/java/com/codeborne/pdftest/assertj/ContainsTextCaseInsensitiveTest.java b/src/test/java/com/codeborne/pdftest/assertj/ContainsTextCaseInsensitiveTest.java index 68840d8..cdb9306 100644 --- a/src/test/java/com/codeborne/pdftest/assertj/ContainsTextCaseInsensitiveTest.java +++ b/src/test/java/com/codeborne/pdftest/assertj/ContainsTextCaseInsensitiveTest.java @@ -1,14 +1,13 @@ package com.codeborne.pdftest.assertj; import com.codeborne.pdftest.PDF; -import org.junit.Test; +import org.junit.jupiter.api.Test; import java.io.IOException; import static com.codeborne.pdftest.assertj.Assertions.assertThat; import static org.assertj.core.api.Assertions.assertThatThrownBy; - public class ContainsTextCaseInsensitiveTest { @Test public void canAssertThatPdfContainsTextIgnoringCase() throws IOException { diff --git a/src/test/java/com/codeborne/pdftest/assertj/ContainsTextTest.java b/src/test/java/com/codeborne/pdftest/assertj/ContainsTextTest.java index ec43e62..1f57968 100644 --- a/src/test/java/com/codeborne/pdftest/assertj/ContainsTextTest.java +++ b/src/test/java/com/codeborne/pdftest/assertj/ContainsTextTest.java @@ -1,8 +1,8 @@ package com.codeborne.pdftest.assertj; import com.codeborne.pdftest.PDF; -import org.junit.Before; -import org.junit.Test; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; import static com.codeborne.pdftest.assertj.Assertions.assertThat; import static java.util.Objects.requireNonNull; @@ -13,7 +13,7 @@ public class ContainsTextTest { private PDF fiftyIdeasPdf; private PDF minimalPdf; - @Before + @BeforeEach public void setUp() throws Exception { fiftyIdeasPdf = new PDF(requireNonNull(getClass().getClassLoader().getResource("50quickideas.pdf"))); minimalPdf = new PDF(requireNonNull(getClass().getClassLoader().getResource("minimal.pdf"))); diff --git a/src/test/java/com/codeborne/pdftest/assertj/MatchRegexTest.java b/src/test/java/com/codeborne/pdftest/assertj/MatchRegexTest.java index ffcdbc0..c8a0f37 100644 --- a/src/test/java/com/codeborne/pdftest/assertj/MatchRegexTest.java +++ b/src/test/java/com/codeborne/pdftest/assertj/MatchRegexTest.java @@ -1,7 +1,7 @@ package com.codeborne.pdftest.assertj; import com.codeborne.pdftest.PDF; -import org.junit.Test; +import org.junit.jupiter.api.Test; import java.io.IOException; diff --git a/src/test/java/com/codeborne/pdftest/assertj/SoftAssertionsTest.java b/src/test/java/com/codeborne/pdftest/assertj/SoftAssertionsTest.java index 8ec878e..548de6a 100644 --- a/src/test/java/com/codeborne/pdftest/assertj/SoftAssertionsTest.java +++ b/src/test/java/com/codeborne/pdftest/assertj/SoftAssertionsTest.java @@ -1,7 +1,7 @@ package com.codeborne.pdftest.assertj; import com.codeborne.pdftest.PDF; -import org.junit.Test; +import org.junit.jupiter.api.Test; import org.opentest4j.MultipleFailuresError; import java.io.IOException; diff --git a/src/test/java/com/codeborne/pdftest/matchers/ContainsExactTextTest.java b/src/test/java/com/codeborne/pdftest/matchers/ContainsExactTextTest.java index 68b9d2e..d814d58 100644 --- a/src/test/java/com/codeborne/pdftest/matchers/ContainsExactTextTest.java +++ b/src/test/java/com/codeborne/pdftest/matchers/ContainsExactTextTest.java @@ -1,7 +1,7 @@ package com.codeborne.pdftest.matchers; import com.codeborne.pdftest.PDF; -import org.junit.Test; +import org.junit.jupiter.api.Test; import java.io.IOException; @@ -9,7 +9,7 @@ import static org.hamcrest.CoreMatchers.not; import static org.hamcrest.Matchers.is; import static org.hamcrest.MatcherAssert.assertThat; -import static org.junit.Assert.fail; +import static org.junit.jupiter.api.Assertions.fail; public class ContainsExactTextTest { @Test @@ -41,7 +41,7 @@ public void errorDescription() throws IOException { fail("expected AssertionError"); } catch (AssertionError expected) { - assertThat(expected.getMessage(), + assertThat(expected.getMessage(), is("\nExpected: a PDF containing \"Goodbye word\"\n but: was \"Hello World\n\"")); } } diff --git a/src/test/java/com/codeborne/pdftest/matchers/ContainsTextCaseInsensitiveTest.java b/src/test/java/com/codeborne/pdftest/matchers/ContainsTextCaseInsensitiveTest.java index 4c38a91..9723c7b 100644 --- a/src/test/java/com/codeborne/pdftest/matchers/ContainsTextCaseInsensitiveTest.java +++ b/src/test/java/com/codeborne/pdftest/matchers/ContainsTextCaseInsensitiveTest.java @@ -1,14 +1,14 @@ package com.codeborne.pdftest.matchers; import com.codeborne.pdftest.PDF; -import org.junit.Test; +import org.junit.jupiter.api.Test; import java.io.IOException; import static com.codeborne.pdftest.PDF.containsTextCaseInsensitive; import static org.hamcrest.Matchers.is; import static org.hamcrest.MatcherAssert.assertThat; -import static org.junit.Assert.fail; +import static org.junit.jupiter.api.Assertions.fail; public class ContainsTextCaseInsensitiveTest { @Test diff --git a/src/test/java/com/codeborne/pdftest/matchers/ContainsTextTest.java b/src/test/java/com/codeborne/pdftest/matchers/ContainsTextTest.java index 176d2a2..3e2bee5 100644 --- a/src/test/java/com/codeborne/pdftest/matchers/ContainsTextTest.java +++ b/src/test/java/com/codeborne/pdftest/matchers/ContainsTextTest.java @@ -2,26 +2,25 @@ import com.codeborne.pdftest.PDF; import com.codeborne.pdftest.assertj.Assertions; -import org.junit.Before; -import org.junit.Test; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; -import java.io.IOException; import java.util.Objects; import static com.codeborne.pdftest.PDF.containsText; import static com.codeborne.pdftest.PDF.doesNotContainText; import static org.assertj.core.api.Assertions.assertThatThrownBy; +import static org.assertj.core.api.Assertions.fail; import static org.hamcrest.CoreMatchers.not; -import static org.hamcrest.Matchers.is; import static org.hamcrest.MatcherAssert.assertThat; -import static org.junit.Assert.fail; +import static org.hamcrest.Matchers.is; public class ContainsTextTest { private PDF fiftyIdeasPdf; private PDF minimalPdf; - @Before + @BeforeEach public void setUp() throws Exception { fiftyIdeasPdf = new PDF( Objects.requireNonNull(getClass().getClassLoader().getResource("50quickideas.pdf")) @@ -78,8 +77,11 @@ public void pdfShouldContainMultipleTexts() { assertThat(fiftyIdeasPdf, containsText("50", "Quick", "Ideas")); } - @Test(expected = AssertionError.class) + @Test public void shouldFailWhenOneTextIsMissing() { - assertThat(fiftyIdeasPdf, containsText("50", "Quick", "Applications")); + assertThatThrownBy(() -> assertThat(fiftyIdeasPdf, containsText("50", "Quick", "Applications"))) + .isInstanceOf(AssertionError.class) + .hasMessageContaining("Expected: a PDF containing \"50\", \"Quick\", \"Applications\"") + .hasMessageContaining("but: was \"50 Quick Ideas"); } } diff --git a/src/test/java/com/codeborne/pdftest/matchers/DoesNotContainExactTextTest.java b/src/test/java/com/codeborne/pdftest/matchers/DoesNotContainExactTextTest.java index a53eb09..aa4245a 100644 --- a/src/test/java/com/codeborne/pdftest/matchers/DoesNotContainExactTextTest.java +++ b/src/test/java/com/codeborne/pdftest/matchers/DoesNotContainExactTextTest.java @@ -1,14 +1,14 @@ package com.codeborne.pdftest.matchers; import com.codeborne.pdftest.PDF; -import org.junit.Test; +import org.junit.jupiter.api.Test; import java.io.IOException; import static com.codeborne.pdftest.PDF.doesNotContainExactText; import static org.hamcrest.MatcherAssert.assertThat; import static org.hamcrest.Matchers.is; -import static org.junit.Assert.fail; +import static org.junit.jupiter.api.Assertions.fail; public class DoesNotContainExactTextTest { @Test @@ -33,7 +33,7 @@ public void errorDescription() throws IOException { fail("expected AssertionError"); } catch (AssertionError expected) { - assertThat(expected.getMessage(), + assertThat(expected.getMessage(), is("\nExpected: a PDF not containing exactly \"Hello World\"\n but: was \"Hello World\n\"")); } } diff --git a/src/test/java/com/codeborne/pdftest/matchers/DoesNotContainTextTest.java b/src/test/java/com/codeborne/pdftest/matchers/DoesNotContainTextTest.java index 0b9788a..ccd7f83 100644 --- a/src/test/java/com/codeborne/pdftest/matchers/DoesNotContainTextTest.java +++ b/src/test/java/com/codeborne/pdftest/matchers/DoesNotContainTextTest.java @@ -1,23 +1,23 @@ package com.codeborne.pdftest.matchers; import com.codeborne.pdftest.PDF; -import org.junit.Before; -import org.junit.Test; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; -import java.io.IOException; import java.util.Objects; import static com.codeborne.pdftest.PDF.doesNotContainText; +import static org.assertj.core.api.Assertions.assertThatThrownBy; import static org.hamcrest.MatcherAssert.assertThat; import static org.hamcrest.Matchers.is; -import static org.junit.Assert.fail; +import static org.junit.jupiter.api.Assertions.fail; public class DoesNotContainTextTest { private PDF fiftyIdeasPdf; private PDF minimalPdf; - @Before + @BeforeEach public void setUp() throws Exception { fiftyIdeasPdf = new PDF( Objects.requireNonNull(getClass().getClassLoader().getResource("50quickideas.pdf")) @@ -65,8 +65,11 @@ public void shouldNotContainMultipleTexts() { assertThat(fiftyIdeasPdf, doesNotContainText("42", "Slow", "Applications")); } - @Test(expected = AssertionError.class) + @Test public void shouldFailWhenNotAllTextsAreMissing() { - assertThat(fiftyIdeasPdf, doesNotContainText("42", "Slow", "Ideas")); + assertThatThrownBy(() -> assertThat(fiftyIdeasPdf, doesNotContainText("42", "Slow", "Ideas"))) + .isInstanceOf(AssertionError.class) + .hasMessageContaining("Expected: a PDF not containing \"42\", \"Slow\", \"Ideas\"") + .hasMessageContaining("but: was \"50 Quick Ideas"); } }