From 356f4f0e1bd8d02a0516742242d6e5d6b25fd621 Mon Sep 17 00:00:00 2001 From: jim-krueger Date: Mon, 18 Mar 2024 15:56:02 -0500 Subject: [PATCH 1/8] Add tests for containsHeaderString --- .../clientrequestcontext/JAXRSClientIT.java | 53 +++++++++++++++++++ 1 file changed, 53 insertions(+) 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 0cf291da7..12f1fb2ca 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 @@ -860,6 +860,59 @@ protected void checkFilterContext(ClientRequestContext context) assertContains(entity, "Accept"); } + /* + * @testName: containsHeaderStringTest + * + * @assertion_ids: JAXRS:JAVADOC:???; + * + * @test_Strategy: Check if the specified headers a specified value. + * + * ClientRequestFilter.abortWith + */ + @Test + public void containsHeaderStringTest() throws Fault { + ContextProvider provider = new ContextProvider() { + @Override + protected void checkFilterContext(ClientRequestContext context) throws Fault { + boolean testCacheControlSingle = context.containsHeaderString("cache-control", "no-store"::equalsIgnoreCase); + boolean testCacheControlMultiple = context.containsHeaderString("CACHE-CONTROL", ",", "no-transform"::equalsIgnoreCase); + boolean testCacheControlWhiteSpaceFail = !(context.containsHeaderString("CACHE-CONTROL", ",", "Max-Age"::equalsIgnoreCase)); + boolean testCacheControlCaseFail = !(context.containsHeaderString("cache-control", ",", "no-transform"::equals)); + boolean testCacheControlSeparator = context.containsHeaderString("cache-control2", ";", "no-transform"::equalsIgnoreCase); + boolean testCacheControlSeparatorFail = !(context.containsHeaderString("cache-control2", ",", "no-transform"::equalsIgnoreCase)); + String entity = "testCache-control-single = " + + testCacheControlSingle + + ", testCache-control-multiple = " + + testCacheControlMultiple + + ", testCache-control-fail-white-space = " + + testCacheControlWhiteSpaceFail + + ", testCache-control-fail-case = " + + testCacheControlCaseFail + + ", testCache-control-separator = " + + testCacheControlSeparator + + ", testCache-control-fail-separator = " + + testCacheControlSeparatorFail; + Response r = Response.ok(entity).build(); + context.abortWith(r); + } + }; + Invocation invocation = buildBuilder(provider) + .header("cache-control", "no-store") + .header("cache-control", "{Max - Age, no-transform}") + .header("cache-control2", "{no-store;no-transform}") + .buildGet(); + Response response = invoke(invocation); + + String entity = response.readEntity(String.class); + assertTrue(entity.contains("testCache-control-single = true")); + assertTrue(entity.contains("testCache-control-multiple = true")); + assertTrue(entity.contains("testCache-control-fail-white-space = true")); + assertTrue(entity.contains("testCache-control-fail-case = true")); + assertTrue(entity.contains("testCache-control-separator = true")); + assertTrue(entity.contains("testCache-control-fail-separator = true")); + } + + /* * @testName: getHeaderStringTest * From 7d3251f1e3e0cd25f683bcb6b23fb0adb04c03da Mon Sep 17 00:00:00 2001 From: jim-krueger Date: Tue, 19 Mar 2024 15:09:37 -0500 Subject: [PATCH 2/8] simplify tests and added clientresponsecontext test --- .../clientrequestcontext/JAXRSClientIT.java | 33 +++++----------- .../clientresponsecontext/JAXRSClientIT.java | 39 +++++++++++++++++++ 2 files changed, 48 insertions(+), 24 deletions(-) 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 12f1fb2ca..65087cd22 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 @@ -874,24 +874,14 @@ public void containsHeaderStringTest() throws Fault { ContextProvider provider = new ContextProvider() { @Override protected void checkFilterContext(ClientRequestContext context) throws Fault { - boolean testCacheControlSingle = context.containsHeaderString("cache-control", "no-store"::equalsIgnoreCase); - boolean testCacheControlMultiple = context.containsHeaderString("CACHE-CONTROL", ",", "no-transform"::equalsIgnoreCase); - boolean testCacheControlWhiteSpaceFail = !(context.containsHeaderString("CACHE-CONTROL", ",", "Max-Age"::equalsIgnoreCase)); - boolean testCacheControlCaseFail = !(context.containsHeaderString("cache-control", ",", "no-transform"::equals)); - boolean testCacheControlSeparator = context.containsHeaderString("cache-control2", ";", "no-transform"::equalsIgnoreCase); - boolean testCacheControlSeparatorFail = !(context.containsHeaderString("cache-control2", ",", "no-transform"::equalsIgnoreCase)); - String entity = "testCache-control-single = " + - testCacheControlSingle + - ", testCache-control-multiple = " + - testCacheControlMultiple + - ", testCache-control-fail-white-space = " + - testCacheControlWhiteSpaceFail + - ", testCache-control-fail-case = " + - testCacheControlCaseFail + - ", testCache-control-separator = " + - testCacheControlSeparator + - ", testCache-control-fail-separator = " + - testCacheControlSeparatorFail; + assertTrue(context.containsHeaderString("cache-control", "no-store"::equalsIgnoreCase)); + assertTrue(context.containsHeaderString("CACHE-CONTROL", ",", "no-transform"::equalsIgnoreCase)); + assertTrue(!(context.containsHeaderString("CACHE-CONTROL", ",", "Max-Age"::equalsIgnoreCase))); + assertTrue(!(context.containsHeaderString("cache-control", ",", "no-transform"::equals))); + assertTrue(context.containsHeaderString("cache-control2", ";", "no-transform"::equalsIgnoreCase)); + assertTrue(!(context.containsHeaderString("cache-control2", ",", + "no-transform"::equalsIgnoreCase))); + String entity = "Success"; Response r = Response.ok(entity).build(); context.abortWith(r); } @@ -904,12 +894,7 @@ protected void checkFilterContext(ClientRequestContext context) throws Fault { Response response = invoke(invocation); String entity = response.readEntity(String.class); - assertTrue(entity.contains("testCache-control-single = true")); - assertTrue(entity.contains("testCache-control-multiple = true")); - assertTrue(entity.contains("testCache-control-fail-white-space = true")); - assertTrue(entity.contains("testCache-control-fail-case = true")); - assertTrue(entity.contains("testCache-control-separator = true")); - assertTrue(entity.contains("testCache-control-fail-separator = true")); + assertTrue(entity.contains("Sucess")); } 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 4b4d5d4af..50bea0ff1 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 @@ -426,6 +426,45 @@ protected void checkFilterContext(ClientRequestContext requestContext, invokeWithResponseAndAssertStatus(response, Status.OK, in); } + /* + * @testName: containsHeaderStringTest + * + * @assertion_ids: JAXRS:JAVADOC:???; + * + * @test_Strategy: Check if the specified headers a specified value. + * + * ClientRequestFilter.abortWith + */ + @Test + public void containsHeaderStringTest() throws Fault { + final String header1 = "cache-control"; + final String value1 = "no-store"; + final String value2 = "{Max - Age, no-transform}"; + final String header2 = "header2"; + final String value3 = "{no-store;no-transform}"; + + ContextProvider in = new ContextProvider() { + @Override + protected void checkFilterContext(ClientRequestContext requestContext, + ClientResponseContext responseContext) throws Fault { + assertTrue(responseContext.containsHeaderString("cache-control", "no-store"::equalsIgnoreCase)); + assertTrue(responseContext.containsHeaderString("CACHE-CONTROL", ",", "no-transform"::equalsIgnoreCase)); + assertTrue(!(responseContext.containsHeaderString("CACHE-CONTROL", ",", "Max-Age"::equalsIgnoreCase))); + assertTrue(!(responseContext.containsHeaderString("cache-control", ",", "no-transform"::equals))); + assertTrue(responseContext.containsHeaderString("header2", ";", "no-transform"::equalsIgnoreCase)); + assertTrue(!(responseContext.containsHeaderString("Header2", ",", "no-transform"::equalsIgnoreCase))); + } + }; + Response response = Response.ok() + .header(header1, value1) + .header(header1, value2) + .header(header2, value3) + .build(); + invokeWithResponseAndAssertStatus(response, Status.OK, in); + } + + + /* * @testName: getLanguageTest * From 8d986ae0400f4a837385aa70cd4f885dcbd5f9a9 Mon Sep 17 00:00:00 2001 From: jim-krueger Date: Tue, 19 Mar 2024 17:37:42 -0500 Subject: [PATCH 3/8] Added additional testing including regular expression and made small change to clarify javadoc from code review. --- .../ws/rs/client/ClientRequestContext.java | 3 +- .../ws/rs/client/ClientResponseContext.java | 3 +- .../clientrequestcontext/JAXRSClientIT.java | 30 ++++++++++++------ .../clientresponsecontext/JAXRSClientIT.java | 31 +++++++++++++------ 4 files changed, 45 insertions(+), 22 deletions(-) diff --git a/jaxrs-api/src/main/java/jakarta/ws/rs/client/ClientRequestContext.java b/jaxrs-api/src/main/java/jakarta/ws/rs/client/ClientRequestContext.java index 6bf01a0ba..5c2ee4ae0 100644 --- a/jaxrs-api/src/main/java/jakarta/ws/rs/client/ClientRequestContext.java +++ b/jaxrs-api/src/main/java/jakarta/ws/rs/client/ClientRequestContext.java @@ -207,7 +207,8 @@ public default boolean hasProperty(String name) { * (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 String or 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-api/src/main/java/jakarta/ws/rs/client/ClientResponseContext.java b/jaxrs-api/src/main/java/jakarta/ws/rs/client/ClientResponseContext.java index 756e4289d..c6b6d14e8 100644 --- a/jaxrs-api/src/main/java/jakarta/ws/rs/client/ClientResponseContext.java +++ b/jaxrs-api/src/main/java/jakarta/ws/rs/client/ClientResponseContext.java @@ -99,7 +99,8 @@ public interface ClientResponseContext { * (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 String or 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 65087cd22..90dc2f72d 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 @@ -17,6 +17,7 @@ package ee.jakarta.tck.ws.rs.api.client.clientrequestcontext; import static org.junit.jupiter.api.Assertions.assertTrue; +import static org.junit.jupiter.api.Assertions.assertFalse; import java.io.ByteArrayInputStream; import java.lang.annotation.Annotation; @@ -874,22 +875,31 @@ public void containsHeaderStringTest() throws Fault { ContextProvider provider = new ContextProvider() { @Override protected void checkFilterContext(ClientRequestContext context) throws Fault { - assertTrue(context.containsHeaderString("cache-control", "no-store"::equalsIgnoreCase)); - assertTrue(context.containsHeaderString("CACHE-CONTROL", ",", "no-transform"::equalsIgnoreCase)); - assertTrue(!(context.containsHeaderString("CACHE-CONTROL", ",", "Max-Age"::equalsIgnoreCase))); - assertTrue(!(context.containsHeaderString("cache-control", ",", "no-transform"::equals))); - assertTrue(context.containsHeaderString("cache-control2", ";", "no-transform"::equalsIgnoreCase)); - assertTrue(!(context.containsHeaderString("cache-control2", ",", - "no-transform"::equalsIgnoreCase))); + assertTrue(context.containsHeaderString("header1", "value"::equalsIgnoreCase)); + assertTrue(context.containsHeaderString("HEADER1", ",", "value2"::equals)); + //Incorrect separator character + assertFalse(context.containsHeaderString("header1", ";", "value2"::equalsIgnoreCase)); + //Shouldn't find first value when separator character is incorrect + assertFalse(context.containsHeaderString("header1", ";", "value1"::equalsIgnoreCase)); + //Test regular expression + assertFalse(context.containsHeaderString("header1", "; | ,", "value2"::equalsIgnoreCase)); + //White space in value not trimmed + assertFalse(context.containsHeaderString("header1", "whitespace"::equalsIgnoreCase)); + //Multiple character separator + assertTrue(context.containsHeaderString("header2", "::", "Value5"::equalsIgnoreCase)); + //Test default separator is comma + assertFalse(context.containsHeaderString("header3","value6"::equalsIgnoreCase)); String entity = "Success"; Response r = Response.ok(entity).build(); context.abortWith(r); } }; Invocation invocation = buildBuilder(provider) - .header("cache-control", "no-store") - .header("cache-control", "{Max - Age, no-transform}") - .header("cache-control2", "{no-store;no-transform}") + .header("header1", "value") + .header("header1", "value1 , value2") + .header("header1", "Value3,white space ") + .header("header2", "Value4::Value5") + .header("header3", "value6;value7") .buildGet(); Response response = invoke(invocation); 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 50bea0ff1..a0123ee00 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 @@ -16,6 +16,7 @@ package ee.jakarta.tck.ws.rs.api.client.clientresponsecontext; +import static org.junit.jupiter.api.Assertions.assertFalse; import static org.junit.jupiter.api.Assertions.assertTrue; import java.io.BufferedReader; @@ -437,7 +438,7 @@ protected void checkFilterContext(ClientRequestContext requestContext, */ @Test public void containsHeaderStringTest() throws Fault { - final String header1 = "cache-control"; + final String header1 = "Header1"; final String value1 = "no-store"; final String value2 = "{Max - Age, no-transform}"; final String header2 = "header2"; @@ -447,18 +448,28 @@ public void containsHeaderStringTest() throws Fault { @Override protected void checkFilterContext(ClientRequestContext requestContext, ClientResponseContext responseContext) throws Fault { - assertTrue(responseContext.containsHeaderString("cache-control", "no-store"::equalsIgnoreCase)); - assertTrue(responseContext.containsHeaderString("CACHE-CONTROL", ",", "no-transform"::equalsIgnoreCase)); - assertTrue(!(responseContext.containsHeaderString("CACHE-CONTROL", ",", "Max-Age"::equalsIgnoreCase))); - assertTrue(!(responseContext.containsHeaderString("cache-control", ",", "no-transform"::equals))); - assertTrue(responseContext.containsHeaderString("header2", ";", "no-transform"::equalsIgnoreCase)); - assertTrue(!(responseContext.containsHeaderString("Header2", ",", "no-transform"::equalsIgnoreCase))); + assertTrue(responseContext.containsHeaderString("header1", "value"::equalsIgnoreCase)); + assertTrue(responseContext.containsHeaderString("HEADER1", ",", "value2"::equals)); + //Incorrect separator character + assertFalse(responseContext.containsHeaderString("header1", ";", "value2"::equalsIgnoreCase)); + //Shouldn't find first value when separator character is incorrect + assertFalse(responseContext.containsHeaderString("header1", ";", "value1"::equalsIgnoreCase)); + //Test regular expression + assertFalse(responseContext.containsHeaderString("header1", "; | ,", "value2"::equalsIgnoreCase)); + //White space in value not trimmed + assertFalse(responseContext.containsHeaderString("header1", "whitespace"::equalsIgnoreCase)); + //Multiple character separator + assertTrue(responseContext.containsHeaderString("header2", "::", "Value5"::equalsIgnoreCase)); + //Test default separator is comma + assertFalse(responseContext.containsHeaderString("header3","value6"::equalsIgnoreCase)); } }; Response response = Response.ok() - .header(header1, value1) - .header(header1, value2) - .header(header2, value3) + .header("header1", "value") + .header("header1", "value1 , value2") + .header("header1", "Value3,white space ") + .header("header2", "Value4::Value5") + .header("header3", "value6;value7") .build(); invokeWithResponseAndAssertStatus(response, Status.OK, in); } From 709626fd92350d837ab46adb69bfa2ef4b5babdc Mon Sep 17 00:00:00 2001 From: jim-krueger Date: Wed, 20 Mar 2024 17:30:20 -0500 Subject: [PATCH 4/8] Review comments --- .../main/java/jakarta/ws/rs/client/ClientRequestContext.java | 2 +- .../main/java/jakarta/ws/rs/client/ClientResponseContext.java | 2 +- .../ws/rs/api/client/clientrequestcontext/JAXRSClientIT.java | 4 ++-- .../ws/rs/api/client/clientresponsecontext/JAXRSClientIT.java | 2 +- 4 files changed, 5 insertions(+), 5 deletions(-) diff --git a/jaxrs-api/src/main/java/jakarta/ws/rs/client/ClientRequestContext.java b/jaxrs-api/src/main/java/jakarta/ws/rs/client/ClientRequestContext.java index 5c2ee4ae0..96de1536f 100644 --- a/jaxrs-api/src/main/java/jakarta/ws/rs/client/ClientRequestContext.java +++ b/jaxrs-api/src/main/java/jakarta/ws/rs/client/ClientRequestContext.java @@ -207,7 +207,7 @@ public default boolean hasProperty(String name) { * (missing comma), or the value {@code no - store} (whitespace within value). * * @param name the message header. - * @param valueSeparatorRegex String or regular expression that separates the header value into single values. + * @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 diff --git a/jaxrs-api/src/main/java/jakarta/ws/rs/client/ClientResponseContext.java b/jaxrs-api/src/main/java/jakarta/ws/rs/client/ClientResponseContext.java index c6b6d14e8..cf75b207e 100644 --- a/jaxrs-api/src/main/java/jakarta/ws/rs/client/ClientResponseContext.java +++ b/jaxrs-api/src/main/java/jakarta/ws/rs/client/ClientResponseContext.java @@ -99,7 +99,7 @@ public interface ClientResponseContext { * (missing comma), or the value {@code no - store} (whitespace within value). * * @param name the message header. - * @param valueSeparatorRegex String or regular expression that separates the header value into single values. + * @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 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 90dc2f72d..debf1a15f 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 @@ -882,7 +882,7 @@ protected void checkFilterContext(ClientRequestContext context) throws Fault { //Shouldn't find first value when separator character is incorrect assertFalse(context.containsHeaderString("header1", ";", "value1"::equalsIgnoreCase)); //Test regular expression - assertFalse(context.containsHeaderString("header1", "; | ,", "value2"::equalsIgnoreCase)); + assertTrue(context.containsHeaderString("header1", ";|,", "value2"::equalsIgnoreCase)); //White space in value not trimmed assertFalse(context.containsHeaderString("header1", "whitespace"::equalsIgnoreCase)); //Multiple character separator @@ -904,7 +904,7 @@ protected void checkFilterContext(ClientRequestContext context) throws Fault { Response response = invoke(invocation); String entity = response.readEntity(String.class); - assertTrue(entity.contains("Sucess")); + assertTrue(entity.contains("Success")); } 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 a0123ee00..45cc7160e 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 @@ -455,7 +455,7 @@ protected void checkFilterContext(ClientRequestContext requestContext, //Shouldn't find first value when separator character is incorrect assertFalse(responseContext.containsHeaderString("header1", ";", "value1"::equalsIgnoreCase)); //Test regular expression - assertFalse(responseContext.containsHeaderString("header1", "; | ,", "value2"::equalsIgnoreCase)); + assertTrue(responseContext.containsHeaderString("header1", ";|,", "value2"::equalsIgnoreCase)); //White space in value not trimmed assertFalse(responseContext.containsHeaderString("header1", "whitespace"::equalsIgnoreCase)); //Multiple character separator From 8b025a51fea0126163e5547c69c29d1b7cabed29 Mon Sep 17 00:00:00 2001 From: jim-krueger Date: Fri, 22 Mar 2024 09:27:14 -0500 Subject: [PATCH 5/8] Add HttpHeaders.containsHeaderString() test --- .../java/jakarta/ws/rs/core/HttpHeaders.java | 3 +- .../clientrequestcontext/JAXRSClientIT.java | 4 +-- .../clientresponsecontext/JAXRSClientIT.java | 4 +-- .../ee/rs/core/headers/HttpHeadersTest.java | 36 +++++++++++++++++++ .../rs/ee/rs/core/headers/JAXRSClientIT.java | 20 +++++++++++ 5 files changed, 62 insertions(+), 5 deletions(-) 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 5b3cc4d87..1a4c8ceb2 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 * From 90cd0e84b62646523f5591086f5cbebef57244fb Mon Sep 17 00:00:00 2001 From: jim-krueger Date: Sat, 23 Mar 2024 18:47:08 -0500 Subject: [PATCH 6/8] Review comments. --- .../clientrequestcontext/JAXRSClientIT.java | 23 +++++---------- .../clientresponsecontext/JAXRSClientIT.java | 20 ++++--------- .../ee/rs/core/headers/HttpHeadersTest.java | 29 +++++++++++-------- .../rs/ee/rs/core/headers/JAXRSClientIT.java | 7 ++++- 4 files changed, 37 insertions(+), 42 deletions(-) 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 6f31ef008..c246a3c65 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 @@ -875,22 +875,19 @@ public void containsHeaderStringTest() throws Fault { ContextProvider provider = new ContextProvider() { @Override protected void checkFilterContext(ClientRequestContext context) throws Fault { - assertTrue(context.containsHeaderString("header1", "value"::equalsIgnoreCase)); + assertTrue(context.containsHeaderString("header1", "value"::equals)); assertTrue(context.containsHeaderString("HEADER1", ",", "value2"::equals)); //Incorrect separator character - assertFalse(context.containsHeaderString("header1", ";", "value2"::equalsIgnoreCase)); + assertFalse(context.containsHeaderString("header1", ";", "value2"::equals)); //Shouldn't find first value when separator character is incorrect - assertFalse(context.containsHeaderString("header1", ";", "value1"::equalsIgnoreCase)); + assertFalse(context.containsHeaderString("header1", ";", "Value1"::equalsIgnoreCase)); //Test regular expression - assertTrue(context.containsHeaderString("header1", ";|,", "value2"::equalsIgnoreCase)); + assertTrue(context.containsHeaderString("header1", ";|,", "VALUE2"::equalsIgnoreCase)); //White space in value not trimmed - assertFalse(context.containsHeaderString("header1", "whitespace"::equalsIgnoreCase)); + assertFalse(context.containsHeaderString("header1", "whitespace"::equals)); //Multiple character separator - assertTrue(context.containsHeaderString("header2", "::", "Value5"::equalsIgnoreCase)); - //Test default separator is comma - assertFalse(context.containsHeaderString("header3","value6"::equalsIgnoreCase)); - String entity = "Success"; - Response r = Response.ok(entity).build(); + assertTrue(context.containsHeaderString("header2", ";;", "Value5"::equalsIgnoreCase)); + Response r = Response.ok().build(); context.abortWith(r); } }; @@ -898,13 +895,9 @@ protected void checkFilterContext(ClientRequestContext context) throws Fault { .header("header1", "value") .header("header1", "value1 , value2") .header("header1", "Value3,white space ") - .header("header2", "Value4::Value5") - .header("header3", "value6;value7") + .header("header2", "Value4;;Value5") .buildGet(); Response response = invoke(invocation); - - String entity = response.readEntity(String.class); - assertTrue(entity.contains("Success")); } 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 5ab7ad843..d5afde10d 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 @@ -438,38 +438,30 @@ protected void checkFilterContext(ClientRequestContext requestContext, */ @Test public void containsHeaderStringTest() throws Fault { - final String header1 = "Header1"; - final String value1 = "no-store"; - final String value2 = "{Max - Age, no-transform}"; - final String header2 = "header2"; - final String value3 = "{no-store;no-transform}"; ContextProvider in = new ContextProvider() { @Override protected void checkFilterContext(ClientRequestContext requestContext, ClientResponseContext responseContext) throws Fault { - assertTrue(responseContext.containsHeaderString("header1", "value"::equalsIgnoreCase)); + assertTrue(responseContext.containsHeaderString("header1", "value"::equals)); assertTrue(responseContext.containsHeaderString("HEADER1", ",", "value2"::equals)); //Incorrect separator character - assertFalse(responseContext.containsHeaderString("header1", ";", "value2"::equalsIgnoreCase)); + assertFalse(responseContext.containsHeaderString("header1", ";", "value2"::equals)); //Shouldn't find first value when separator character is incorrect - assertFalse(responseContext.containsHeaderString("header1", ";", "value1"::equalsIgnoreCase)); + assertFalse(responseContext.containsHeaderString("header1", ";", "Value1"::equalsIgnoreCase)); //Test regular expression - assertTrue(responseContext.containsHeaderString("header1", ";|,", "value2"::equalsIgnoreCase)); + assertTrue(responseContext.containsHeaderString("header1", ";|,", "VALUE2"::equalsIgnoreCase)); //White space in value not trimmed assertFalse(responseContext.containsHeaderString("header1", "whitespace"::equalsIgnoreCase)); //Multiple character separator - assertTrue(responseContext.containsHeaderString("header2", "::", "Value5"::equalsIgnoreCase)); - //Test default separator is comma - assertFalse(responseContext.containsHeaderString("header3","value6"::equalsIgnoreCase)); + assertTrue(responseContext.containsHeaderString("header2", ";;", "Value5"::equalsIgnoreCase)); } }; Response response = Response.ok() .header("header1", "value") .header("header1", "value1 , value2") .header("header1", "Value3,white space ") - .header("header2", "Value4::Value5") - .header("header3", "value6;value7") + .header("header2", "Value4;;Value5") .build(); invokeWithResponseAndAssertStatus(response, Status.OK, in); } 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 43a7f41b0..7a60b23ab 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 @@ -74,27 +74,32 @@ public String headersGet() { @Path("/contains-headers") public String containsHeadersGet() { sb = new StringBuffer(); - List myHeaders = Arrays.asList("Accept", "Content-Type", "Header3"); + sb.append("containsHeaderString= "); try { - assertTrue(hs.containsHeaderString("accept", "text/html"::equalsIgnoreCase)); - sb.append("Header: accept contains text/html; "); + if(hs.containsHeaderString("accept", "text/html"::equals)) { + sb.append("Test1: 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; "); + if (hs.containsHeaderString("Accept", ",", "Text/html;Level=1"::equalsIgnoreCase)) { + sb.append("Test2: 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; "); + if (!(hs.containsHeaderString("Accept", ";", "text/html;level=1"::equals))) { + sb.append("Test3: 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 value not trimmed and double character separator + if (!(hs.containsHeaderString("header3", ";;", "value3"::equals))) { + sb.append("Test4: White space not trimmed from value 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; "); + if (hs.containsHeaderString("HEADER3", ";;", "value2"::equalsIgnoreCase)) { + sb.append("Test5: White space trimmed around value as expected; "); + } } catch (Throwable ex) { sb.append("Unexpected exception thrown in containsHeadersGet: " + ex.getMessage()); 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 1a4c8ceb2..bccc45962 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 @@ -225,8 +225,13 @@ public void containsHeaderStringTest() throws Fault { setProperty(Property.REQUEST_HEADERS, "Content-Type:application/xml;charset=utf8"); setProperty(Property.REQUEST_HEADERS, - "Header3:value1 ** value2 **value 3"); + "Header3:value1 ;; Value2 ;;value 3"); setProperty(Property.REQUEST, buildRequest(Request.GET, "contains-headers")); + setProperty(Property.SEARCH_STRING, "Test1"); + setProperty(Property.SEARCH_STRING, "Test2"); + setProperty(Property.SEARCH_STRING, "Test3"); + setProperty(Property.SEARCH_STRING, "Test4"); + setProperty(Property.SEARCH_STRING, "Test5"); invoke(); } From 78208eeb16344292f08791c0b555f9345311d84b Mon Sep 17 00:00:00 2001 From: jim-krueger Date: Mon, 25 Mar 2024 12:17:39 -0500 Subject: [PATCH 7/8] Add container*Context tests --- .../requestcontext/ContextOperation.java | 2 +- .../requestcontext/JAXRSClientIT.java | 28 ++++++++++++++ .../requestcontext/RequestFilter.java | 34 ++++++++++++++++- .../responsecontext/ContextOperation.java | 2 +- .../responsecontext/JAXRSClientIT.java | 19 ++++++++++ .../container/responsecontext/Resource.java | 11 ++++++ .../responsecontext/ResponseFilter.java | 37 +++++++++++++++++-- 7 files changed, 127 insertions(+), 6 deletions(-) diff --git a/jaxrs-tck/src/main/java/ee/jakarta/tck/ws/rs/ee/rs/container/requestcontext/ContextOperation.java b/jaxrs-tck/src/main/java/ee/jakarta/tck/ws/rs/ee/rs/container/requestcontext/ContextOperation.java index bace61872..26ac3439b 100644 --- a/jaxrs-tck/src/main/java/ee/jakarta/tck/ws/rs/ee/rs/container/requestcontext/ContextOperation.java +++ b/jaxrs-tck/src/main/java/ee/jakarta/tck/ws/rs/ee/rs/container/requestcontext/ContextOperation.java @@ -17,5 +17,5 @@ package ee.jakarta.tck.ws.rs.ee.rs.container.requestcontext; public enum ContextOperation { - ABORTWITH, GETACCEPTABLELANGUAGES, GETACCEPTABLELANGUAGESISREADONLY, GETACCEPTABLEMEDIATYPES, GETACCEPTABLEMEDIATYPESISREADONLY, GETCOOKIES, GETCOOKIESISREADONLY, GETDATE, GETENTITYSTREAM, GETHEADERS, GETHEADERSISMUTABLE, GETHEADERSTRING2, GETLANGUAGE, GETLENGTH, GETMEDIATYPE, GETMETHOD, GETPROPERTY, GETPROPERTYNAMES, GETPROPERTYNAMESISREADONLY, GETREQUEST, GETSECURITYCONTEXT, GETURIINFO, HASENTITY, REMOVEPROPERTY, SETENTITYSTREAM, SETMETHOD, SETPROPERTY, SETPROPERTYNULL, SETPROPERTYCONTEXT, SETREQUESTURI1, SETREQUESTURI2, SETSECURITYCONTEXT; + ABORTWITH, GETACCEPTABLELANGUAGES, GETACCEPTABLELANGUAGESISREADONLY, GETACCEPTABLEMEDIATYPES, GETACCEPTABLEMEDIATYPESISREADONLY, GETCOOKIES, GETCOOKIESISREADONLY, GETDATE, GETENTITYSTREAM, CONTAINSHEADERSTRING, GETHEADERS, GETHEADERSISMUTABLE, GETHEADERSTRING2, GETLANGUAGE, GETLENGTH, GETMEDIATYPE, GETMETHOD, GETPROPERTY, GETPROPERTYNAMES, GETPROPERTYNAMESISREADONLY, GETREQUEST, GETSECURITYCONTEXT, GETURIINFO, HASENTITY, REMOVEPROPERTY, SETENTITYSTREAM, SETMETHOD, SETPROPERTY, SETPROPERTYNULL, SETPROPERTYCONTEXT, SETREQUESTURI1, SETREQUESTURI2, SETSECURITYCONTEXT; } diff --git a/jaxrs-tck/src/main/java/ee/jakarta/tck/ws/rs/ee/rs/container/requestcontext/JAXRSClientIT.java b/jaxrs-tck/src/main/java/ee/jakarta/tck/ws/rs/ee/rs/container/requestcontext/JAXRSClientIT.java index dc3d48a9d..b41f8b956 100644 --- a/jaxrs-tck/src/main/java/ee/jakarta/tck/ws/rs/ee/rs/container/requestcontext/JAXRSClientIT.java +++ b/jaxrs-tck/src/main/java/ee/jakarta/tck/ws/rs/ee/rs/container/requestcontext/JAXRSClientIT.java @@ -333,6 +333,34 @@ public void getEntityStreamTest() throws Fault { ContextOperation.GETENTITYSTREAM); } + /* + * @testName: containsHeaderStringTest + * + * @assertion_ids: JAXRS:JAVADOC:??? + * + * @test_Strategy: Check if the specified header contains a specified value. + * + * Filter method called before a request has been dispatched to a resource. + * Throws IOException. + */ + @Test + @Tag("servlet") + 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.SEARCH_STRING, "Test1"); + setProperty(Property.SEARCH_STRING, "Test2"); + setProperty(Property.SEARCH_STRING, "Test3"); + setProperty(Property.SEARCH_STRING, "Test4"); + setProperty(Property.SEARCH_STRING, "Test5"); + + invokeRequestAndCheckResponse(ContextOperation.CONTAINSHEADERSTRING); + } + /* * @testName: getHeadersTest * diff --git a/jaxrs-tck/src/main/java/ee/jakarta/tck/ws/rs/ee/rs/container/requestcontext/RequestFilter.java b/jaxrs-tck/src/main/java/ee/jakarta/tck/ws/rs/ee/rs/container/requestcontext/RequestFilter.java index c0cc7568b..a2aa30e42 100644 --- a/jaxrs-tck/src/main/java/ee/jakarta/tck/ws/rs/ee/rs/container/requestcontext/RequestFilter.java +++ b/jaxrs-tck/src/main/java/ee/jakarta/tck/ws/rs/ee/rs/container/requestcontext/RequestFilter.java @@ -140,16 +140,48 @@ public void getEntityStream() throws IOException { abortWithEntity(entity); } + public void containsHeaderString() { + StringBuffer sb = new StringBuffer(); + sb.append("containsHeaderString= "); + + try { + assertTrue(requestContext.containsHeaderString("accept", "text/html"::equals)); + sb.append("Test1: accept contains text/html; "); + + //Verify Predicate and separator character usage + assertTrue(requestContext.containsHeaderString("Accept", ",", "Text/html;Level=1"::equalsIgnoreCase)); + sb.append("Test2: accept contains text/html;level=1; "); + + //Verify incorrect separator character fails + assertTrue(!(requestContext.containsHeaderString("Accept", ";", "text/html;level=1"::equals))); + sb.append("Test3: Incorrect separator character fails as expected; "); + + //Verify white space in value not trimmed and double character separator + assertTrue(!(requestContext.containsHeaderString("header3", ";;", "value3"::equals))); + sb.append("Test4: White space not trimmed from value as expected; "); + + //Verify white space in front and back of value trimmed + assertTrue(requestContext.containsHeaderString("HEADER3", ";;", "value2"::equalsIgnoreCase)); + sb.append("Test5: White space trimmed around value as expected; "); + } catch (Throwable ex) { + sb.append("Unexpected exception thrown in containsHeaderString: " + + ex.getMessage()); + ex.printStackTrace(); + } + abortWithEntity(sb.toString()); + } + public void getHeaders() { MultivaluedMap headers = requestContext.getHeaders(); StringBuilder sb = new StringBuilder(); for (Entry> set : headers.entrySet()) { - String first = headers.getFirst(set.getKey()); + String first = headers.getFirst(set.getKey()); sb.append(set.getKey()).append(":").append(first).append(";"); } abortWithEntity(sb.toString()); } + public void getHeadersIsMutable() { String key = "KEY"; MultivaluedMap headers = requestContext.getHeaders(); diff --git a/jaxrs-tck/src/main/java/ee/jakarta/tck/ws/rs/ee/rs/container/responsecontext/ContextOperation.java b/jaxrs-tck/src/main/java/ee/jakarta/tck/ws/rs/ee/rs/container/responsecontext/ContextOperation.java index 057e978fe..a1c2e8b01 100644 --- a/jaxrs-tck/src/main/java/ee/jakarta/tck/ws/rs/ee/rs/container/responsecontext/ContextOperation.java +++ b/jaxrs-tck/src/main/java/ee/jakarta/tck/ws/rs/ee/rs/container/responsecontext/ContextOperation.java @@ -17,7 +17,7 @@ package ee.jakarta.tck.ws.rs.ee.rs.container.responsecontext; public enum ContextOperation { - GETALLOWEDMETHODS, GETCOOKIES, GETCOOKIESISREADONLY, GETDATE, GETENTITY, GETENTITYANNOTATIONS, GETENTITYANNOTATIONSONENTITY, GETENTITYCLASS, GETENTITYSTREAM, GETENTITYTAG, GETENTITYTYPE, GETHEADERS, GETHEADERSISMUTABLE, GETHEADERSTRINGOPERATION, GETHEADERSTRINGHEADER, GETLANGUAGE, GETLASTMODIFIED, GETLENGTH, GETLINK, GETLINKBUILDER, GETLINKS, GETLOCATION, GETMEDIATYPE, GETSTATUS, GETSTATUSINFO, GETSTRINGHEADERS, HASENTITY, HASLINK, SETENTITY, SETENTITYSTREAM, SETSTATUS, SETSTATUSINFO, + GETALLOWEDMETHODS, GETCOOKIES, GETCOOKIESISREADONLY, GETDATE, GETENTITY, GETENTITYANNOTATIONS, GETENTITYANNOTATIONSONENTITY, GETENTITYCLASS, GETENTITYSTREAM, GETENTITYTAG, GETENTITYTYPE, CONTAINSHEADERSTRING, GETHEADERS, GETHEADERSISMUTABLE, GETHEADERSTRINGOPERATION, GETHEADERSTRINGHEADER, GETLANGUAGE, GETLASTMODIFIED, GETLENGTH, GETLINK, GETLINKBUILDER, GETLINKS, GETLOCATION, GETMEDIATYPE, GETSTATUS, GETSTATUSINFO, GETSTRINGHEADERS, HASENTITY, HASLINK, SETENTITY, SETENTITYSTREAM, SETSTATUS, SETSTATUSINFO, // just helping methods, pass SETSTRINGBEANRUNTIME, SETORIGINALRUNTIME diff --git a/jaxrs-tck/src/main/java/ee/jakarta/tck/ws/rs/ee/rs/container/responsecontext/JAXRSClientIT.java b/jaxrs-tck/src/main/java/ee/jakarta/tck/ws/rs/ee/rs/container/responsecontext/JAXRSClientIT.java index c40db3fbc..504b3600e 100644 --- a/jaxrs-tck/src/main/java/ee/jakarta/tck/ws/rs/ee/rs/container/responsecontext/JAXRSClientIT.java +++ b/jaxrs-tck/src/main/java/ee/jakarta/tck/ws/rs/ee/rs/container/responsecontext/JAXRSClientIT.java @@ -445,6 +445,25 @@ public void getEntityTypeInputStreamTest() throws Fault { invokeRequestAndCheckResponse(ContextOperation.GETENTITYTYPE); } + /* + * @testName: getHeadersTest + * + * @assertion_ids: JAXRS:JAVADOC:688; JAXRS:JAVADOC:707; JAXRS:JAVADOC:708; + * + * @test_Strategy: Get the mutable response headers multivalued map. + * + * Filter method called after a response has been provided for a request. + * Throws IOException. + */ + @Test + public void containsHeaderStringTest() throws Fault { + String header = "Test"; + for (int i = 1; i != 6; i++) + setProperty(Property.UNORDERED_SEARCH_STRING, header + i); + setProperty(Property.CONTENT, header); + invokeRequestAndCheckResponse(ContextOperation.CONTAINSHEADERSTRING); + } + /* * @testName: getHeadersTest * diff --git a/jaxrs-tck/src/main/java/ee/jakarta/tck/ws/rs/ee/rs/container/responsecontext/Resource.java b/jaxrs-tck/src/main/java/ee/jakarta/tck/ws/rs/ee/rs/container/responsecontext/Resource.java index dc0cef1f5..da7cfb64a 100644 --- a/jaxrs-tck/src/main/java/ee/jakarta/tck/ws/rs/ee/rs/container/responsecontext/Resource.java +++ b/jaxrs-tck/src/main/java/ee/jakarta/tck/ws/rs/ee/rs/container/responsecontext/Resource.java @@ -179,6 +179,17 @@ public Response setEntityStream() { return response; } + @POST + @Path("containsheaderstring") + public Response containsHeaderString(String header) { + ResponseBuilder builder = createResponseWithHeader(); + builder = builder.header("Accept", "text/html, text/html;level=1, */*"); + builder = builder.header("Content-Type", "application/xml;charset=utf8"); + builder = builder.header("Header3", "value1 ;; Value2 ;;value 3"); + Response response = builder.build(); + return response; + } + @POST @Path("getheaders") public Response getHeaders(String header) { diff --git a/jaxrs-tck/src/main/java/ee/jakarta/tck/ws/rs/ee/rs/container/responsecontext/ResponseFilter.java b/jaxrs-tck/src/main/java/ee/jakarta/tck/ws/rs/ee/rs/container/responsecontext/ResponseFilter.java index 7c7c3c929..82cd7a69b 100644 --- a/jaxrs-tck/src/main/java/ee/jakarta/tck/ws/rs/ee/rs/container/responsecontext/ResponseFilter.java +++ b/jaxrs-tck/src/main/java/ee/jakarta/tck/ws/rs/ee/rs/container/responsecontext/ResponseFilter.java @@ -152,10 +152,41 @@ else if (type != null) setEntity(name); } + public void containsHeaderString() { + StringBuffer sb = new StringBuffer(); + sb.append("containsHeaderString= "); + + try { + assertTrue(requestContext.containsHeaderString("accept", "text/html"::equals)); + sb.append("Test1: accept contains text/html; "); + + //Verify Predicate and separator character usage + assertTrue(requestContext.containsHeaderString("Accept", ",", "Text/html;Level=1"::equalsIgnoreCase)); + sb.append("Test2: accept contains text/html;level=1; "); + + //Verify incorrect separator character fails + assertTrue(!(requestContext.containsHeaderString("Accept", ";", "text/html;level=1"::equals))); + sb.append("Test3: Incorrect separator character fails as expected; "); + + //Verify white space in value not trimmed and double character separator + assertTrue(!(requestContext.containsHeaderString("header3", ";;", "value3"::equals))); + sb.append("Test4: White space not trimmed from value as expected; "); + + //Verify white space in front and back of value trimmed + assertTrue(requestContext.containsHeaderString("HEADER3", ";;", "value2"::equalsIgnoreCase)); + sb.append("Test5: White space trimmed around value as expected; "); + } catch (Throwable ex) { + sb.append("Unexpected exception thrown in containsHeaderString: " + + ex.getMessage()); + ex.printStackTrace(); + } + setEntity(sb.toString()); + } + public void getHeaders() { - MultivaluedMap headers = responseContext.getHeaders(); - setEntity(collectionToString(headers.keySet())); - } + MultivaluedMap headers = responseContext.getHeaders(); + setEntity(collectionToString(headers.keySet())); + } public void getHeadersIsMutable() { MultivaluedMap headers = responseContext.getHeaders(); From ac9837bebf1ab1c3a55811fbe83f002da6b2271e Mon Sep 17 00:00:00 2001 From: jim-krueger Date: Mon, 25 Mar 2024 13:50:09 -0500 Subject: [PATCH 8/8] Fix copyright dates --- .../ws/rs/client/ClientRequestContext.java | 2 +- .../ws/rs/client/ClientResponseContext.java | 2 +- .../rs/container/ContainerRequestContext.java | 4 ++-- .../rs/container/ContainerResponseContext.java | 4 ++-- .../java/jakarta/ws/rs/core/HttpHeaders.java | 2 +- .../clientrequestcontext/JAXRSClientIT.java | 2 +- .../clientresponsecontext/JAXRSClientIT.java | 2 +- .../requestcontext/ContextOperation.java | 2 +- .../requestcontext/JAXRSClientIT.java | 4 ++-- .../requestcontext/RequestFilter.java | 7 +++---- .../responsecontext/ContextOperation.java | 2 +- .../responsecontext/JAXRSClientIT.java | 4 ++-- .../rs/container/responsecontext/Resource.java | 2 +- .../responsecontext/ResponseFilter.java | 18 +++++++++--------- 14 files changed, 28 insertions(+), 29 deletions(-) diff --git a/jaxrs-api/src/main/java/jakarta/ws/rs/client/ClientRequestContext.java b/jaxrs-api/src/main/java/jakarta/ws/rs/client/ClientRequestContext.java index 96de1536f..51060ef8c 100644 --- a/jaxrs-api/src/main/java/jakarta/ws/rs/client/ClientRequestContext.java +++ b/jaxrs-api/src/main/java/jakarta/ws/rs/client/ClientRequestContext.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2012, 2019 Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2012 Oracle and/or its affiliates. All rights reserved. * * This program and the accompanying materials are made available under the * terms of the Eclipse Public License v. 2.0, which is available at diff --git a/jaxrs-api/src/main/java/jakarta/ws/rs/client/ClientResponseContext.java b/jaxrs-api/src/main/java/jakarta/ws/rs/client/ClientResponseContext.java index cf75b207e..5169f96ee 100644 --- a/jaxrs-api/src/main/java/jakarta/ws/rs/client/ClientResponseContext.java +++ b/jaxrs-api/src/main/java/jakarta/ws/rs/client/ClientResponseContext.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2012, 2019 Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2012 Oracle and/or its affiliates. All rights reserved. * * This program and the accompanying materials are made available under the * terms of the Eclipse Public License v. 2.0, which is available at diff --git a/jaxrs-api/src/main/java/jakarta/ws/rs/container/ContainerRequestContext.java b/jaxrs-api/src/main/java/jakarta/ws/rs/container/ContainerRequestContext.java index 9d05bbefd..bc912573a 100644 --- a/jaxrs-api/src/main/java/jakarta/ws/rs/container/ContainerRequestContext.java +++ b/jaxrs-api/src/main/java/jakarta/ws/rs/container/ContainerRequestContext.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2012, 2019 Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2012 Oracle and/or its affiliates. All rights reserved. * * This program and the accompanying materials are made available under the * terms of the Eclipse Public License v. 2.0, which is available at @@ -239,7 +239,7 @@ public default boolean hasProperty(String name) { * (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-api/src/main/java/jakarta/ws/rs/container/ContainerResponseContext.java b/jaxrs-api/src/main/java/jakarta/ws/rs/container/ContainerResponseContext.java index 6d6b74405..f1e1562c6 100644 --- a/jaxrs-api/src/main/java/jakarta/ws/rs/container/ContainerResponseContext.java +++ b/jaxrs-api/src/main/java/jakarta/ws/rs/container/ContainerResponseContext.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2012, 2019 Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2012 Oracle and/or its affiliates. All rights reserved. * * This program and the accompanying materials are made available under the * terms of the Eclipse Public License v. 2.0, which is available at @@ -129,7 +129,7 @@ public interface ContainerResponseContext { * (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-api/src/main/java/jakarta/ws/rs/core/HttpHeaders.java b/jaxrs-api/src/main/java/jakarta/ws/rs/core/HttpHeaders.java index 999577b35..0506be49c 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 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2010, 2020 Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2010 Oracle and/or its affiliates. All rights reserved. * * This program and the accompanying materials are made available under the * terms of the Eclipse Public License v. 2.0, which is available at 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 c246a3c65..2b958c6cd 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 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2012, 2021 Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2012 Oracle and/or its affiliates. All rights reserved. * * This program and the accompanying materials are made available under the * terms of the Eclipse Public License v. 2.0, which is available at 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 d5afde10d..bcce831b0 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 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2012, 2021 Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2012 Oracle and/or its affiliates. All rights reserved. * * This program and the accompanying materials are made available under the * terms of the Eclipse Public License v. 2.0, which is available at diff --git a/jaxrs-tck/src/main/java/ee/jakarta/tck/ws/rs/ee/rs/container/requestcontext/ContextOperation.java b/jaxrs-tck/src/main/java/ee/jakarta/tck/ws/rs/ee/rs/container/requestcontext/ContextOperation.java index 26ac3439b..60c4e9b65 100644 --- a/jaxrs-tck/src/main/java/ee/jakarta/tck/ws/rs/ee/rs/container/requestcontext/ContextOperation.java +++ b/jaxrs-tck/src/main/java/ee/jakarta/tck/ws/rs/ee/rs/container/requestcontext/ContextOperation.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2012, 2018 Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2012 Oracle and/or its affiliates. All rights reserved. * * This program and the accompanying materials are made available under the * terms of the Eclipse Public License v. 2.0, which is available at diff --git a/jaxrs-tck/src/main/java/ee/jakarta/tck/ws/rs/ee/rs/container/requestcontext/JAXRSClientIT.java b/jaxrs-tck/src/main/java/ee/jakarta/tck/ws/rs/ee/rs/container/requestcontext/JAXRSClientIT.java index b41f8b956..4b215b686 100644 --- a/jaxrs-tck/src/main/java/ee/jakarta/tck/ws/rs/ee/rs/container/requestcontext/JAXRSClientIT.java +++ b/jaxrs-tck/src/main/java/ee/jakarta/tck/ws/rs/ee/rs/container/requestcontext/JAXRSClientIT.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2012, 2022 Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2012 Oracle and/or its affiliates. All rights reserved. * * This program and the accompanying materials are made available under the * terms of the Eclipse Public License v. 2.0, which is available at @@ -336,7 +336,7 @@ public void getEntityStreamTest() throws Fault { /* * @testName: containsHeaderStringTest * - * @assertion_ids: JAXRS:JAVADOC:??? + * @assertion_ids: JAXRS:JAVADOC:JAXRS:JAVADOC:1359; JAXRS:JAVADOC:1360 * * @test_Strategy: Check if the specified header contains a specified value. * diff --git a/jaxrs-tck/src/main/java/ee/jakarta/tck/ws/rs/ee/rs/container/requestcontext/RequestFilter.java b/jaxrs-tck/src/main/java/ee/jakarta/tck/ws/rs/ee/rs/container/requestcontext/RequestFilter.java index a2aa30e42..3607f578c 100644 --- a/jaxrs-tck/src/main/java/ee/jakarta/tck/ws/rs/ee/rs/container/requestcontext/RequestFilter.java +++ b/jaxrs-tck/src/main/java/ee/jakarta/tck/ws/rs/ee/rs/container/requestcontext/RequestFilter.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2012, 2020 Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2012 Oracle and/or its affiliates. All rights reserved. * * This program and the accompanying materials are made available under the * terms of the Eclipse Public License v. 2.0, which is available at @@ -175,13 +175,12 @@ public void getHeaders() { MultivaluedMap headers = requestContext.getHeaders(); StringBuilder sb = new StringBuilder(); for (Entry> set : headers.entrySet()) { - String first = headers.getFirst(set.getKey()); + String first = headers.getFirst(set.getKey()); sb.append(set.getKey()).append(":").append(first).append(";"); } abortWithEntity(sb.toString()); } - - + public void getHeadersIsMutable() { String key = "KEY"; MultivaluedMap headers = requestContext.getHeaders(); diff --git a/jaxrs-tck/src/main/java/ee/jakarta/tck/ws/rs/ee/rs/container/responsecontext/ContextOperation.java b/jaxrs-tck/src/main/java/ee/jakarta/tck/ws/rs/ee/rs/container/responsecontext/ContextOperation.java index a1c2e8b01..8778fa04b 100644 --- a/jaxrs-tck/src/main/java/ee/jakarta/tck/ws/rs/ee/rs/container/responsecontext/ContextOperation.java +++ b/jaxrs-tck/src/main/java/ee/jakarta/tck/ws/rs/ee/rs/container/responsecontext/ContextOperation.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2012, 2018 Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2012 Oracle and/or its affiliates. All rights reserved. * * This program and the accompanying materials are made available under the * terms of the Eclipse Public License v. 2.0, which is available at diff --git a/jaxrs-tck/src/main/java/ee/jakarta/tck/ws/rs/ee/rs/container/responsecontext/JAXRSClientIT.java b/jaxrs-tck/src/main/java/ee/jakarta/tck/ws/rs/ee/rs/container/responsecontext/JAXRSClientIT.java index 504b3600e..416e1cabf 100644 --- a/jaxrs-tck/src/main/java/ee/jakarta/tck/ws/rs/ee/rs/container/responsecontext/JAXRSClientIT.java +++ b/jaxrs-tck/src/main/java/ee/jakarta/tck/ws/rs/ee/rs/container/responsecontext/JAXRSClientIT.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2012, 2020 Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2012 Oracle and/or its affiliates. All rights reserved. * * This program and the accompanying materials are made available under the * terms of the Eclipse Public License v. 2.0, which is available at @@ -448,7 +448,7 @@ public void getEntityTypeInputStreamTest() throws Fault { /* * @testName: getHeadersTest * - * @assertion_ids: JAXRS:JAVADOC:688; JAXRS:JAVADOC:707; JAXRS:JAVADOC:708; + * @assertion_ids: JAXRS:JAVADOC:1357; JAXRS:JAVADOC:1358; * * @test_Strategy: Get the mutable response headers multivalued map. * diff --git a/jaxrs-tck/src/main/java/ee/jakarta/tck/ws/rs/ee/rs/container/responsecontext/Resource.java b/jaxrs-tck/src/main/java/ee/jakarta/tck/ws/rs/ee/rs/container/responsecontext/Resource.java index da7cfb64a..f8effbee2 100644 --- a/jaxrs-tck/src/main/java/ee/jakarta/tck/ws/rs/ee/rs/container/responsecontext/Resource.java +++ b/jaxrs-tck/src/main/java/ee/jakarta/tck/ws/rs/ee/rs/container/responsecontext/Resource.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2012, 2020 Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2012 Oracle and/or its affiliates. All rights reserved. * * This program and the accompanying materials are made available under the * terms of the Eclipse Public License v. 2.0, which is available at diff --git a/jaxrs-tck/src/main/java/ee/jakarta/tck/ws/rs/ee/rs/container/responsecontext/ResponseFilter.java b/jaxrs-tck/src/main/java/ee/jakarta/tck/ws/rs/ee/rs/container/responsecontext/ResponseFilter.java index 82cd7a69b..5b816b527 100644 --- a/jaxrs-tck/src/main/java/ee/jakarta/tck/ws/rs/ee/rs/container/responsecontext/ResponseFilter.java +++ b/jaxrs-tck/src/main/java/ee/jakarta/tck/ws/rs/ee/rs/container/responsecontext/ResponseFilter.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2012, 2024 Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2012 Oracle and/or its affiliates. All rights reserved. * * This program and the accompanying materials are made available under the * terms of the Eclipse Public License v. 2.0, which is available at @@ -157,23 +157,23 @@ public void containsHeaderString() { sb.append("containsHeaderString= "); try { - assertTrue(requestContext.containsHeaderString("accept", "text/html"::equals)); + assertTrue(responseContext.containsHeaderString("accept", "text/html"::equals)); sb.append("Test1: accept contains text/html; "); //Verify Predicate and separator character usage - assertTrue(requestContext.containsHeaderString("Accept", ",", "Text/html;Level=1"::equalsIgnoreCase)); + assertTrue(responseContext.containsHeaderString("Accept", ",", "Text/html;Level=1"::equalsIgnoreCase)); sb.append("Test2: accept contains text/html;level=1; "); //Verify incorrect separator character fails - assertTrue(!(requestContext.containsHeaderString("Accept", ";", "text/html;level=1"::equals))); + assertTrue(!(responseContext.containsHeaderString("Accept", ";", "text/html;level=1"::equals))); sb.append("Test3: Incorrect separator character fails as expected; "); //Verify white space in value not trimmed and double character separator - assertTrue(!(requestContext.containsHeaderString("header3", ";;", "value3"::equals))); + assertTrue(!(responseContext.containsHeaderString("header3", ";;", "value3"::equals))); sb.append("Test4: White space not trimmed from value as expected; "); //Verify white space in front and back of value trimmed - assertTrue(requestContext.containsHeaderString("HEADER3", ";;", "value2"::equalsIgnoreCase)); + assertTrue(responseContext.containsHeaderString("HEADER3", ";;", "value2"::equalsIgnoreCase)); sb.append("Test5: White space trimmed around value as expected; "); } catch (Throwable ex) { sb.append("Unexpected exception thrown in containsHeaderString: " @@ -184,9 +184,9 @@ public void containsHeaderString() { } public void getHeaders() { - MultivaluedMap headers = responseContext.getHeaders(); - setEntity(collectionToString(headers.keySet())); - } + MultivaluedMap headers = responseContext.getHeaders(); + setEntity(collectionToString(headers.keySet())); + } public void getHeadersIsMutable() { MultivaluedMap headers = responseContext.getHeaders();