diff --git a/jaxrs-api/src/main/java/jakarta/ws/rs/core/HttpHeaders.java b/jaxrs-api/src/main/java/jakarta/ws/rs/core/HttpHeaders.java index 84cdd4c18..999577b35 100644 --- a/jaxrs-api/src/main/java/jakarta/ws/rs/core/HttpHeaders.java +++ b/jaxrs-api/src/main/java/jakarta/ws/rs/core/HttpHeaders.java @@ -75,7 +75,8 @@ public interface HttpHeaders { * (missing comma), or the value {@code no - store} (whitespace within value). * * @param name the message header. - * @param valueSeparatorRegex Separates the header value into single values. {@code null} does not split. + * @param valueSeparatorRegex Regular expression that separates the header value into single values. + * {@code null} does not split. * @param valuePredicate value must fulfil this predicate. * @return {@code true} if and only if a header with the given name exists, having either a whitespace-trimmed value * matching the predicate, or having at least one whitespace-trimmed single value in a token-separated list of single values. diff --git a/jaxrs-tck/src/main/java/ee/jakarta/tck/ws/rs/api/client/clientrequestcontext/JAXRSClientIT.java b/jaxrs-tck/src/main/java/ee/jakarta/tck/ws/rs/api/client/clientrequestcontext/JAXRSClientIT.java index debf1a15f..6f31ef008 100644 --- a/jaxrs-tck/src/main/java/ee/jakarta/tck/ws/rs/api/client/clientrequestcontext/JAXRSClientIT.java +++ b/jaxrs-tck/src/main/java/ee/jakarta/tck/ws/rs/api/client/clientrequestcontext/JAXRSClientIT.java @@ -864,9 +864,9 @@ protected void checkFilterContext(ClientRequestContext context) /* * @testName: containsHeaderStringTest * - * @assertion_ids: JAXRS:JAVADOC:???; + * @assertion_ids: JAXRS:JAVADOC:1353; JAXRS:JAVADOC:1354; * - * @test_Strategy: Check if the specified headers a specified value. + * @test_Strategy: Check if the specified header contains a specified value. * * ClientRequestFilter.abortWith */ diff --git a/jaxrs-tck/src/main/java/ee/jakarta/tck/ws/rs/api/client/clientresponsecontext/JAXRSClientIT.java b/jaxrs-tck/src/main/java/ee/jakarta/tck/ws/rs/api/client/clientresponsecontext/JAXRSClientIT.java index 45cc7160e..5ab7ad843 100644 --- a/jaxrs-tck/src/main/java/ee/jakarta/tck/ws/rs/api/client/clientresponsecontext/JAXRSClientIT.java +++ b/jaxrs-tck/src/main/java/ee/jakarta/tck/ws/rs/api/client/clientresponsecontext/JAXRSClientIT.java @@ -430,9 +430,9 @@ protected void checkFilterContext(ClientRequestContext requestContext, /* * @testName: containsHeaderStringTest * - * @assertion_ids: JAXRS:JAVADOC:???; + * @assertion_ids: JAXRS:JAVADOC:1355; JAXRS:JAVADOC:1356; * - * @test_Strategy: Check if the specified headers a specified value. + * @test_Strategy: Check if the specified header contains a specified value. * * ClientRequestFilter.abortWith */ diff --git a/jaxrs-tck/src/main/java/ee/jakarta/tck/ws/rs/ee/rs/core/headers/HttpHeadersTest.java b/jaxrs-tck/src/main/java/ee/jakarta/tck/ws/rs/ee/rs/core/headers/HttpHeadersTest.java index 72df7b60d..43a7f41b0 100644 --- a/jaxrs-tck/src/main/java/ee/jakarta/tck/ws/rs/ee/rs/core/headers/HttpHeadersTest.java +++ b/jaxrs-tck/src/main/java/ee/jakarta/tck/ws/rs/ee/rs/core/headers/HttpHeadersTest.java @@ -16,6 +16,9 @@ package ee.jakarta.tck.ws.rs.ee.rs.core.headers; +import static org.junit.jupiter.api.Assertions.assertFalse; +import static org.junit.jupiter.api.Assertions.assertTrue; + import java.util.Arrays; import java.util.Date; import java.util.Iterator; @@ -67,6 +70,39 @@ public String headersGet() { return sb.toString(); } + @GET + @Path("/contains-headers") + public String containsHeadersGet() { + sb = new StringBuffer(); + List myHeaders = Arrays.asList("Accept", "Content-Type", "Header3"); + + try { + assertTrue(hs.containsHeaderString("accept", "text/html"::equalsIgnoreCase)); + sb.append("Header: accept contains text/html; "); + + //Verify Predicate and separator character usage + assertTrue(hs.containsHeaderString("Accept", ",", "Text/html;Level=1"::equalsIgnoreCase)); + sb.append("Header: accept contains text/html;level=1; "); + + //Verify incorrect separator character fails + assertFalse(hs.containsHeaderString("Accept", ";", "text/html;level=1"::equals)); + sb.append("Incorrect separator character fails as expected; "); + + //Verify white space in parameter not trimmed + assertFalse(hs.containsHeaderString("header3", "**", "value3"::equalsIgnoreCase)); + sb.append("White space not trimmed from parameter as expected; "); + + //Verify white space in front and back of value trimmed + assertTrue(hs.containsHeaderString("HEADER3", "**", "value2"::equalsIgnoreCase)); + sb.append("White space trimmed around value as expected; "); + } catch (Throwable ex) { + sb.append("Unexpected exception thrown in containsHeadersGet: " + + ex.getMessage()); + ex.printStackTrace(); + } + return sb.toString(); + } + @GET @Path("/acl") public String aclGet() { diff --git a/jaxrs-tck/src/main/java/ee/jakarta/tck/ws/rs/ee/rs/core/headers/JAXRSClientIT.java b/jaxrs-tck/src/main/java/ee/jakarta/tck/ws/rs/ee/rs/core/headers/JAXRSClientIT.java index bf016ef94..d1d1a901a 100644 --- a/jaxrs-tck/src/main/java/ee/jakarta/tck/ws/rs/ee/rs/core/headers/JAXRSClientIT.java +++ b/jaxrs-tck/src/main/java/ee/jakarta/tck/ws/rs/ee/rs/core/headers/JAXRSClientIT.java @@ -210,6 +210,26 @@ public void requestHeadersTest() throws Fault { invoke(); } + /* + * @testName: requestHeadersTest + * + * @assertion_ids: JAXRS:JAVADOC:1361; JAXRS:JAVADOC:1362; + * + * @test_Strategy: HttpHeaders.containsHeaderString used to confirm that a given header contains + * a specified value with the appropriate value separator. + */ + @Test + public void containsHeaderStringTest() throws Fault { + setProperty(Property.REQUEST_HEADERS, + "Accept:text/*, text/html, text/html;level=1, */*"); + setProperty(Property.REQUEST_HEADERS, + "Content-Type:application/xml;charset=utf8"); + setProperty(Property.REQUEST_HEADERS, + "Header3:value1 ** value2 **value 3"); + setProperty(Property.REQUEST, buildRequest(Request.GET, "contains-headers")); + invoke(); + } + /* * @testName: getDateTest *