diff --git a/testsuite/unit-tests/src/test/java/org/jboss/resteasy/test/resource/OptionalInjectionTest.java b/testsuite/unit-tests/src/test/java/org/jboss/resteasy/test/resource/OptionalInjectionTest.java index 0d3c0cf1d3b..efcfe09b5f7 100644 --- a/testsuite/unit-tests/src/test/java/org/jboss/resteasy/test/resource/OptionalInjectionTest.java +++ b/testsuite/unit-tests/src/test/java/org/jboss/resteasy/test/resource/OptionalInjectionTest.java @@ -11,6 +11,8 @@ import org.junit.Before; import org.junit.Test; +import javax.ws.rs.NotFoundException; + /** * @tpSubChapter Resource tests * @tpChapter Unit tests @@ -33,6 +35,7 @@ public void testOptionalStringAbsent() throws Exception { } + @Test public void testOptionalStringPresent() throws Exception { MockHttpRequest req = MockHttpRequest.get("/optional/string?value=88"); @@ -64,6 +67,81 @@ public void testOptionalLongAbsent() throws Exception { .getEntity()); } + @Test + public void testMatrixParamAbsent() throws Exception { + MockHttpRequest httpRequest = MockHttpRequest.post("/optional/matrix"); + Assert.assertEquals("42", registry + .getResourceInvoker(httpRequest) + .invoke(httpRequest, resp) + .getEntity()); + } + + @Test + public void testMatrixParamPresent() throws Exception { + MockHttpRequest httpRequest = MockHttpRequest.post("/optional/matrix;value=24"); + Assert.assertEquals("24", registry + .getResourceInvoker(httpRequest) + .invoke(httpRequest, resp) + .getEntity()); + } + + @Test + public void testPathParamPresent() throws Exception { + MockHttpRequest httpRequest = MockHttpRequest.get("/optional/path/24"); + Assert.assertEquals("24", registry + .getResourceInvoker(httpRequest) + .invoke(httpRequest, resp) + .getEntity()); + } + + @Test(expected = NotFoundException.class) + public void testPathParamNeverAbsentThrowsException() throws Exception { + MockHttpRequest httpRequest = MockHttpRequest.get("/optional/path/"); + registry.getResourceInvoker(httpRequest) + .invoke(httpRequest, resp) + .getEntity(); + } + + @Test + public void testHeaderParamAbsent() throws Exception { + MockHttpRequest httpRequest = MockHttpRequest.get("/optional/header"); + Assert.assertEquals("42", registry + .getResourceInvoker(httpRequest) + .invoke(httpRequest, resp) + .getEntity()); + } + + + @Test + public void testHeaderParamPresent() throws Exception { + MockHttpRequest httpRequest = MockHttpRequest.get("/optional/header"); + httpRequest.header("value", "24"); + Assert.assertEquals("24", registry + .getResourceInvoker(httpRequest) + .invoke(httpRequest, resp) + .getEntity()); + } + + @Test + public void testCookieParamAbsent() throws Exception { + MockHttpRequest httpRequest = MockHttpRequest.get("/optional/cookie"); + Assert.assertEquals("42", registry + .getResourceInvoker(httpRequest) + .invoke(httpRequest, resp) + .getEntity()); + } + + @Test + public void testCookieParamPresent() throws Exception { + MockHttpRequest httpRequest = MockHttpRequest.get("/optional/cookie"); + httpRequest.cookie("value", "24"); + Assert.assertEquals("24", registry + .getResourceInvoker(httpRequest) + .invoke(httpRequest, resp) + .getEntity()); + } + + @Test public void testOptionalLongPresent() throws Exception { MockHttpRequest req = MockHttpRequest.post("/optional/long"); diff --git a/testsuite/unit-tests/src/test/java/org/jboss/resteasy/test/resource/resource/OptionalResource.java b/testsuite/unit-tests/src/test/java/org/jboss/resteasy/test/resource/resource/OptionalResource.java index 2db19e3abbc..8e60107d20c 100644 --- a/testsuite/unit-tests/src/test/java/org/jboss/resteasy/test/resource/resource/OptionalResource.java +++ b/testsuite/unit-tests/src/test/java/org/jboss/resteasy/test/resource/resource/OptionalResource.java @@ -1,15 +1,20 @@ package org.jboss.resteasy.test.resource.resource; -import java.util.Optional; -import java.util.OptionalDouble; -import java.util.OptionalInt; -import java.util.OptionalLong; +import org.jboss.resteasy.annotations.jaxrs.MatrixParam; +import org.jboss.resteasy.annotations.jaxrs.PathParam; +import javax.ws.rs.CookieParam; import javax.ws.rs.FormParam; import javax.ws.rs.GET; +import javax.ws.rs.HeaderParam; import javax.ws.rs.POST; import javax.ws.rs.Path; import javax.ws.rs.QueryParam; +import java.util.Optional; +import java.util.OptionalDouble; +import java.util.OptionalInt; +import java.util.OptionalLong; + @Path("/optional") public class OptionalResource { @@ -57,4 +62,22 @@ public static Holder valueOf(String value) { return new Holder<>(value); } } + + @Path("/matrix") + @POST + public String matrix(@MatrixParam("value") OptionalLong value) { + return Long.toString(value.orElse(42)); + } + + @Path("/path/{value}") + @GET + public String path(@PathParam("value") OptionalLong value) { return Long.toString(value.orElse(42)); } + + @Path("/header") + @GET + public String header(@HeaderParam("value") OptionalLong value) { return Long.toString(value.orElse(42)); } + + @Path("/cookie") + @GET + public String cookie(@CookieParam("value") OptionalLong value) { return Long.toString(value.orElse(42)); } }