diff --git a/.github/workflows/bld.yml b/.github/workflows/bld.yml index 240ead7..1e81746 100644 --- a/.github/workflows/bld.yml +++ b/.github/workflows/bld.yml @@ -11,7 +11,7 @@ jobs: strategy: matrix: - java-version: [17, 21, 23] + java-version: [17, 21, 22] steps: - name: Checkout source repository diff --git a/config/pmd.xml b/config/pmd.xml index 2641880..3d3203c 100644 --- a/config/pmd.xml +++ b/config/pmd.xml @@ -7,9 +7,9 @@ + + - - diff --git a/lib/bld/bld-wrapper.properties b/lib/bld/bld-wrapper.properties index a01de88..40f73c7 100644 --- a/lib/bld/bld-wrapper.properties +++ b/lib/bld/bld-wrapper.properties @@ -2,6 +2,6 @@ bld.downloadExtensionJavadoc=false bld.downloadExtensionSources=true bld.downloadLocation= bld.extension-jacoco=com.uwyn.rife2:bld-jacoco-report:0.9.8 -bld.extension-pmd=com.uwyn.rife2:bld-pmd:1.1.7 +bld.extension-pmd=com.uwyn.rife2:bld-pmd:1.1.5 bld.repositories=MAVEN_CENTRAL,RIFE2_RELEASES,MAVEN_LOCAL,RIFE2_SNAPSHOTS bld.version=2.1.0 diff --git a/src/bld/java/net/thauvin/erik/httpstatus/HttpStatusBuild.java b/src/bld/java/net/thauvin/erik/httpstatus/HttpStatusBuild.java index 7d7a33d..ef31c0c 100644 --- a/src/bld/java/net/thauvin/erik/httpstatus/HttpStatusBuild.java +++ b/src/bld/java/net/thauvin/erik/httpstatus/HttpStatusBuild.java @@ -76,8 +76,8 @@ public class HttpStatusBuild extends Project { .include(dependency("jakarta.el", "jakarta.el-api", version(6, 0, 1))); scope(test) .include(dependency("org.assertj", "assertj-core", version(3, 26, 3))) - .include(dependency("org.junit.jupiter", "junit-jupiter", version(5, 11, 3))) - .include(dependency("org.junit.platform", "junit-platform-console-standalone", version(1, 11, 3))); + .include(dependency("org.junit.jupiter", "junit-jupiter", version(5, 11, 0))) + .include(dependency("org.junit.platform", "junit-platform-console-standalone", version(1, 11, 0))); jarOperation().manifestAttribute(Attributes.Name.MAIN_CLASS, pkg + '.' + "Reasons"); diff --git a/src/main/java/net/thauvin/erik/httpstatus/taglibs/CauseTag.java b/src/main/java/net/thauvin/erik/httpstatus/taglibs/CauseTag.java index 4be47a8..c5a4c21 100644 --- a/src/main/java/net/thauvin/erik/httpstatus/taglibs/CauseTag.java +++ b/src/main/java/net/thauvin/erik/httpstatus/taglibs/CauseTag.java @@ -48,9 +48,7 @@ import java.io.IOException; */ public class CauseTag extends XmlSupport { /** - * Prints the cause (if any) for the current HTTP Status Error Code. - * - * @throws IOException If an error occurs while writing the output. + * {@inheritDoc} */ @Override public void doTag() throws IOException { diff --git a/src/main/java/net/thauvin/erik/httpstatus/taglibs/CodeTag.java b/src/main/java/net/thauvin/erik/httpstatus/taglibs/CodeTag.java index cd3d9cb..8de8ee4 100644 --- a/src/main/java/net/thauvin/erik/httpstatus/taglibs/CodeTag.java +++ b/src/main/java/net/thauvin/erik/httpstatus/taglibs/CodeTag.java @@ -47,9 +47,7 @@ import java.io.IOException; */ public class CodeTag extends SimpleTagSupport { /** - * Writes the HTTP Status Error Code to the current JspWriter. - * - * @throws IOException If an I/O error occurs. + * {@inheritDoc} */ @Override public void doTag() throws IOException { diff --git a/src/main/java/net/thauvin/erik/httpstatus/taglibs/MessageTag.java b/src/main/java/net/thauvin/erik/httpstatus/taglibs/MessageTag.java index e17ce05..59f53c8 100644 --- a/src/main/java/net/thauvin/erik/httpstatus/taglibs/MessageTag.java +++ b/src/main/java/net/thauvin/erik/httpstatus/taglibs/MessageTag.java @@ -47,9 +47,7 @@ import java.io.IOException; */ public class MessageTag extends XmlSupport { /** - * Writes the error message associated with the current HTTP Status Error Code. - * - * @throws IOException If an I/O error occurs. + * {@inheritDoc} */ @Override public void doTag() throws IOException { diff --git a/src/main/java/net/thauvin/erik/httpstatus/taglibs/ReasonTag.java b/src/main/java/net/thauvin/erik/httpstatus/taglibs/ReasonTag.java index 3b2dc68..7b712ca 100644 --- a/src/main/java/net/thauvin/erik/httpstatus/taglibs/ReasonTag.java +++ b/src/main/java/net/thauvin/erik/httpstatus/taglibs/ReasonTag.java @@ -51,7 +51,7 @@ public class ReasonTag extends XmlSupport { private int statusCode = -1; /** - * Writes the Reason Phrase for the current (or specified) HTTP Status Error Code. + * {@inheritDoc} */ @Override public void doTag() { diff --git a/src/test/java/net/thauvin/erik/httpstatus/CauseTagTest.java b/src/test/java/net/thauvin/erik/httpstatus/CauseTagTest.java index fa01287..569ccda 100644 --- a/src/test/java/net/thauvin/erik/httpstatus/CauseTagTest.java +++ b/src/test/java/net/thauvin/erik/httpstatus/CauseTagTest.java @@ -33,9 +33,10 @@ package net.thauvin.erik.httpstatus; import net.thauvin.erik.httpstatus.taglibs.CauseTag; -import org.assertj.core.api.AutoCloseableSoftAssertions; import org.junit.jupiter.api.Test; +import static org.assertj.core.api.Assertions.assertThat; + /** * Implements the CauseTagTest class. * @@ -48,11 +49,9 @@ class CauseTagTest { var message = "This is the cause"; var tag = new CauseTag(); - try (var softly = new AutoCloseableSoftAssertions()) { - softly.assertThat(tag.getCause(new Exception(message))).as("has cause").isEqualTo(message); - softly.assertThat(tag.getCause(new Exception())).as("no cause").isNull(); - softly.assertThat(tag.getCause(null)).as("null").isNull(); - softly.assertThat(tag.getCause(new Exception(""))).as("empty").isEmpty(); - } + assertThat(tag.getCause(new Exception(message))).as("has cause").isEqualTo(message); + assertThat(tag.getCause(new Exception())).as("no cause").isNull(); + assertThat(tag.getCause(null)).as("null").isNull(); + assertThat(tag.getCause(new Exception(""))).as("empty").isEmpty(); } } diff --git a/src/test/java/net/thauvin/erik/httpstatus/ReasonsMainTest.java b/src/test/java/net/thauvin/erik/httpstatus/ReasonsMainTest.java index 0489053..d37ec6e 100644 --- a/src/test/java/net/thauvin/erik/httpstatus/ReasonsMainTest.java +++ b/src/test/java/net/thauvin/erik/httpstatus/ReasonsMainTest.java @@ -50,55 +50,55 @@ import static org.assertj.core.api.Assertions.assertThat; * @since 1.0 */ class ReasonsMainTest { - private final static ByteArrayOutputStream OUTPUT_STREAM = new ByteArrayOutputStream(); - private final static PrintStream SYSTEM_OUT = System.out; + private final static PrintStream originalOut = System.out; + private final static ByteArrayOutputStream outContent = new ByteArrayOutputStream(); @AfterAll public static void restoreStreams() { - System.setOut(SYSTEM_OUT); + System.setOut(originalOut); } @BeforeAll public static void setUpStreams() { - System.setOut(new PrintStream(OUTPUT_STREAM)); + System.setOut(new PrintStream(outContent)); } @BeforeEach public void resetStreams() { - OUTPUT_STREAM.reset(); + outContent.reset(); } @Test void testMain() { Reasons.main("401"); - assertThat(OUTPUT_STREAM.toString()).contains(Reasons.getReasonPhrase("401")).as("401"); - assertThat(OUTPUT_STREAM.toString()).doesNotContain("500").as("401 no 500"); + assertThat(outContent.toString()).contains(Reasons.getReasonPhrase("401")).as("401"); + assertThat(outContent.toString()).doesNotContain("500").as("401 no 500"); } @Test void testMainAll() { Reasons.main(); - assertThat(OUTPUT_STREAM.toString()).contains(Reasons.getReasonPhrase(301)).as("301"); - assertThat(OUTPUT_STREAM.toString()).contains(Reasons.getReasonPhrase(404)).as("404"); + assertThat(outContent.toString()).contains(Reasons.getReasonPhrase(301)).as("301"); + assertThat(outContent.toString()).contains(Reasons.getReasonPhrase(404)).as("404"); } @Test void testMainArgs() { Reasons.main("500", "302"); - assertThat(OUTPUT_STREAM.toString()).contains(Reasons.getReasonPhrase("500")).as("500 (302)"); - assertThat(OUTPUT_STREAM.toString()).contains(Reasons.getReasonPhrase("302")).as("(500) 302"); - assertThat(OUTPUT_STREAM.toString()).doesNotContain("404").as("500/302 not 404"); + assertThat(outContent.toString()).contains(Reasons.getReasonPhrase("500")).as("500 (302)"); + assertThat(outContent.toString()).contains(Reasons.getReasonPhrase("302")).as("(500) 302"); + assertThat(outContent.toString()).doesNotContain("404").as("500/302 not 404"); } @Test void testMainArgsClass() { Reasons.main("2xx"); - assertThat(OUTPUT_STREAM.toString()).contains(Reasons.getReasonPhrase("200")).as("2xx"); + assertThat(outContent.toString()).contains(Reasons.getReasonPhrase("200")).as("2xx"); } @Test void testMainInvalid() { Reasons.main("aaa"); - assertThat(OUTPUT_STREAM.toString()).as("invalid argument: aaa").isEmpty(); + assertThat(outContent.toString()).as("invalid argument: aaa").isEmpty(); } } diff --git a/src/test/java/net/thauvin/erik/httpstatus/ReasonsTest.java b/src/test/java/net/thauvin/erik/httpstatus/ReasonsTest.java index d8064f7..94be4d8 100644 --- a/src/test/java/net/thauvin/erik/httpstatus/ReasonsTest.java +++ b/src/test/java/net/thauvin/erik/httpstatus/ReasonsTest.java @@ -50,9 +50,9 @@ class ReasonsTest { void testGetReasonPhrase() { var bundle = ResourceBundle.getBundle(Reasons.BUNDLE_BASENAME); for (var key : bundle.keySet()) { - assertThat(Reasons.getReasonPhrase(key)).as("getReasonPhrase(%s)", key).isEqualTo(bundle.getString(key)); - assertThat(Reasons.getReasonPhrase(Integer.parseInt(key))).as("getReasonPhrase(%s)", key) - .isEqualTo(bundle.getString(key)); + assertThat(Reasons.getReasonPhrase(key)).as("getReasonPhrase(" + key + ')').isEqualTo(bundle.getString(key)); + assertThat(Reasons.getReasonPhrase(Integer.parseInt(key))) + .as("getReasonPhrase(int: " + key + ')').isEqualTo(bundle.getString(key)); } } diff --git a/src/test/java/net/thauvin/erik/httpstatus/StatusCodeTest.java b/src/test/java/net/thauvin/erik/httpstatus/StatusCodeTest.java index 47ae55c..673a92e 100644 --- a/src/test/java/net/thauvin/erik/httpstatus/StatusCodeTest.java +++ b/src/test/java/net/thauvin/erik/httpstatus/StatusCodeTest.java @@ -32,7 +32,6 @@ package net.thauvin.erik.httpstatus; -import org.assertj.core.api.AutoCloseableSoftAssertions; import org.junit.jupiter.api.Test; import java.util.ResourceBundle; @@ -50,47 +49,37 @@ class StatusCodeTest { void testStatusCode() { var bundle = ResourceBundle.getBundle(Reasons.BUNDLE_BASENAME); var statusCode = new StatusCode(); + for (var key : bundle.keySet()) { + int code = Integer.parseInt(key); + statusCode.setCode(code); + assertThat(statusCode.getCode()).as("is not " + code).isEqualTo(code); + assertThat(statusCode.isInfo()).as(code + " is info").isEqualTo(code >= 100 && code < 200); + assertThat(statusCode.isSuccess()).as(code + " is ok").isEqualTo(code >= 200 && code < 300); + assertThat(statusCode.isRedirect()).as(code + " is redirect").isEqualTo(code >= 300 && code < 400); + assertThat(statusCode.isClientError()).as(code + " is client error").isEqualTo(code >= 400 && code < 500); + assertThat(statusCode.isServerError()).as(code + " is server error").isEqualTo(code >= 500 && code < 600); + assertThat(statusCode.isError()).as(code + " is error").isEqualTo(code >= 400 && code < 600); + assertThat(statusCode.isValid()).as(code + " is valid").isTrue(); - try (var softly = new AutoCloseableSoftAssertions()) { - for (var key : bundle.keySet()) { - int code = Integer.parseInt(key); - - statusCode.setCode(code); - softly.assertThat(statusCode.getCode()).as("is not %s", code).isEqualTo(code); - softly.assertThat(statusCode.isInfo()).as("%s is info", code).isEqualTo(code >= 100 && code < 200); - softly.assertThat(statusCode.isSuccess()).as("%s is ok", code).isEqualTo(code >= 200 && code < 300); - softly.assertThat(statusCode.isRedirect()).as("%s is redirect", code) - .isEqualTo(code >= 300 && code < 400); - softly.assertThat(statusCode.isClientError()).as("%s is client error", code) - .isEqualTo(code >= 400 && code < 500); - softly.assertThat(statusCode.isServerError()).as("%s is server error", code) - .isEqualTo(code >= 500 && code < 600); - softly.assertThat(statusCode.isError()).as("%s is error", code).isEqualTo(code >= 400 && code < 600); - softly.assertThat(statusCode.isValid()).as("%s is valid", code).isTrue(); - - softly.assertThat(statusCode.getReason()).as("%s reason phrase is not valid", code) - .isEqualTo(Reasons.getReasonPhrase(code)); - } + assertThat(statusCode.getReason()).as(code + " reason phrase is not valid") + .isEqualTo(Reasons.getReasonPhrase(code)); } - try (var softly = new AutoCloseableSoftAssertions()) { - int[] unknowns = {0, 99, 600}; - - for (var code : unknowns) { - statusCode.setCode(code); - softly.assertThat(statusCode.getCode()).as("is not %s", code).isEqualTo(code); - softly.assertThat(statusCode.isInfo()).as("%s is info", code).isFalse(); - softly.assertThat(statusCode.isSuccess()).as("%s is ok", code).isFalse(); - softly.assertThat(statusCode.isRedirect()).as("%s is redirect", code).isFalse(); - softly.assertThat(statusCode.isClientError()).as("%s is client error", code).isFalse(); - softly.assertThat(statusCode.isServerError()).as("%s is server error", code).isFalse(); - softly.assertThat(statusCode.isError()).as("%s is error", code).isFalse(); - softly.assertThat(statusCode.isValid()).as("%s is invalid", code).isFalse(); - softly.assertThat(statusCode.getReason()).as("%s reason phrase is not null.", code).isNull(); - } + int[] unknowns = {0, 99, 600}; + for (var code : unknowns) { + statusCode.setCode(code); + assertThat(statusCode.getCode()).as("is not " + code).isEqualTo(code); + assertThat(statusCode.isInfo()).as(code + " is info").isFalse(); + assertThat(statusCode.isSuccess()).as(code + " is ok").isFalse(); + assertThat(statusCode.isRedirect()).as(code + " is redirect").isFalse(); + assertThat(statusCode.isClientError()).as(code + " is client error").isFalse(); + assertThat(statusCode.isServerError()).as(code + " is server error").isFalse(); + assertThat(statusCode.isError()).as(code + " is error").isFalse(); + assertThat(statusCode.isValid()).as(code + " is invalid").isFalse(); + assertThat(statusCode.getReason()).as(code + " reason phrase is not null.").isNull(); } statusCode = new StatusCode(900); - assertThat(statusCode.getCode()).as("is not %s", statusCode.getCode()).isEqualTo(900); + assertThat(statusCode.getCode()).as("is not 900").isEqualTo(900); } } diff --git a/src/test/java/net/thauvin/erik/httpstatus/UtilsTest.java b/src/test/java/net/thauvin/erik/httpstatus/UtilsTest.java index 4ce8043..6db9302 100644 --- a/src/test/java/net/thauvin/erik/httpstatus/UtilsTest.java +++ b/src/test/java/net/thauvin/erik/httpstatus/UtilsTest.java @@ -32,7 +32,6 @@ package net.thauvin.erik.httpstatus; -import org.assertj.core.api.AutoCloseableSoftAssertions; import org.junit.jupiter.api.Test; import java.io.IOException; @@ -57,44 +56,44 @@ class UtilsTest { "according the "encoding" parameter & value."); } + @SuppressWarnings("PMD.AvoidDuplicateLiterals") @Test void testOutWrite() throws IOException { - try (var sw = new StringWriter(); var softly = new AutoCloseableSoftAssertions()) { - var defaultValue = "default"; - Utils.outWrite(sw, null, defaultValue, false); - softly.assertThat(sw.toString()).as("outWrite(default)").isEqualTo(defaultValue); + try (var sw = new StringWriter()) { + Utils.outWrite(sw, null, "default", false); + assertThat(sw.toString()).isEqualTo("default").as("outWrite(default)"); sw.getBuffer().setLength(0); - Utils.outWrite(sw, "", defaultValue, false); - softly.assertThat(sw.toString()).as("outWrite(value empty)").isEmpty(); + Utils.outWrite(sw, "", "default", false); + assertThat(sw.toString()).isEqualTo("").as("outWrite(value empty)"); sw.getBuffer().setLength(0); Utils.outWrite(sw, null, null, true); - softly.assertThat(sw.toString()).as("outWrite(null)").isEmpty(); + assertThat(sw.toString()).isEqualTo("").as("outWrite(null)"); sw.getBuffer().setLength(0); - Utils.outWrite(sw, "value", defaultValue, false); - softly.assertThat(sw.toString()).as("outWrite(value)").isEqualTo("value"); + Utils.outWrite(sw, "value", "default", false); + assertThat(sw.toString()).isEqualTo("value").as("outWrite(value)"); sw.getBuffer().setLength(0); - Utils.outWrite(sw, "wan't", defaultValue, true); - softly.assertThat(sw.toString()).as("outWrite(wan't)").isEqualTo("wan't"); + Utils.outWrite(sw, "wan't", "default", true); + assertThat(sw.toString()).isEqualTo("wan't").as("outWrite(wan't)"); sw.getBuffer().setLength(0); Utils.outWrite(sw, null, "1 & 1", true); - softly.assertThat(sw.toString()).as("outWrite(1 & 1)").isEqualTo("1 & 1"); + assertThat(sw.toString()).isEqualTo("1 & 1").as("outWrite(1 & 1)"); sw.getBuffer().setLength(0); - Utils.outWrite(sw, "", defaultValue, true); - softly.assertThat(sw.toString()).as("outWrite(value empty).as(xml)").isEmpty(); + Utils.outWrite(sw, "", "default", true); + assertThat(sw.toString()).isEqualTo("").as("outWrite(value empty).as(xml)"); sw.getBuffer().setLength(0); Utils.outWrite(sw, null, "", true); - softly.assertThat(sw.toString()).as("outWrite(default empty)").isEmpty(); + assertThat(sw.toString()).isEqualTo("").as("outWrite(default empty)"); sw.getBuffer().setLength(0); Utils.outWrite(sw, null, null, true); - softly.assertThat(sw.toString()).as("outWrite(null).as(xml)").isEmpty(); + assertThat(sw.toString()).isEqualTo("").as("outWrite(null).as(xml)"); } } }