From af4b1229a54b0e93f565873acb14abdd29a2bd4f Mon Sep 17 00:00:00 2001 From: Sam Brannen <104798+sbrannen@users.noreply.github.com> Date: Thu, 16 Apr 2026 14:38:17 +0200 Subject: [PATCH] Extract ServletRequestParameterPropertyValuesTests (cherry picked from commit c9b88b4ebd47c7616816602204b106dd2c1275ef) --- ...etRequestParameterPropertyValuesTests.java | 103 ++++++++++++++++++ .../support/WebRequestDataBinderTests.java | 76 ------------- 2 files changed, 103 insertions(+), 76 deletions(-) create mode 100644 spring-web/src/test/java/org/springframework/web/bind/support/ServletRequestParameterPropertyValuesTests.java diff --git a/spring-web/src/test/java/org/springframework/web/bind/support/ServletRequestParameterPropertyValuesTests.java b/spring-web/src/test/java/org/springframework/web/bind/support/ServletRequestParameterPropertyValuesTests.java new file mode 100644 index 00000000000..78ba1507479 --- /dev/null +++ b/spring-web/src/test/java/org/springframework/web/bind/support/ServletRequestParameterPropertyValuesTests.java @@ -0,0 +1,103 @@ +/* + * Copyright 2002-present the original author or authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.springframework.web.bind.support; + +import java.util.HashMap; +import java.util.Map; + +import org.junit.jupiter.api.Test; + +import org.springframework.beans.PropertyValue; +import org.springframework.beans.PropertyValues; +import org.springframework.web.bind.ServletRequestParameterPropertyValues; +import org.springframework.web.testfixture.servlet.MockHttpServletRequest; + +import static org.assertj.core.api.Assertions.assertThat; + +/** + * Tests for {@link ServletRequestParameterPropertyValues}. + */ +class ServletRequestParameterPropertyValuesTests { + + private final MockHttpServletRequest request = new MockHttpServletRequest(); + + + @Test + void noParameters() { + var pvs = new ServletRequestParameterPropertyValues(request); + assertThat(pvs.getPropertyValues()).as("Found no parameters").isEmpty(); + } + + @Test + void multipleValuesForParameter() { + String[] original = new String[] {"Tony", "Rod"}; + request.addParameter("forname", original); + + var pvs = new ServletRequestParameterPropertyValues(request); + assertThat(pvs.getPropertyValues().length).as("Found 1 parameter").isEqualTo(1); + assertThat(pvs.getPropertyValue("forname").getValue()).as("Found array value").isInstanceOf(String[].class); + String[] values = (String[]) pvs.getPropertyValue("forname").getValue(); + assertThat(original).containsExactly(values); + } + + @Test + void noPrefix() { + request.addParameter("forname", "Tony"); + request.addParameter("surname", "Blair"); + request.addParameter("age", "" + 50); + + testTony(new ServletRequestParameterPropertyValues(request)); + } + + @Test + void prefix() { + request.addParameter("test_forname", "Tony"); + request.addParameter("test_surname", "Blair"); + request.addParameter("test_age", "" + 50); + + var pvs = new ServletRequestParameterPropertyValues(request); + assertThat(pvs.contains("forname")).as("Didn't find normal when given prefix").isFalse(); + assertThat(pvs.contains("test_forname")).as("Did treat prefix as normal when not given prefix").isTrue(); + + testTony(new ServletRequestParameterPropertyValues(request, "test")); + } + + /** + * Must contain: forname=Tony surname=Blair age=50 + */ + private static void testTony(PropertyValues pvs) { + assertThat(pvs.getPropertyValues().length).as("Contains 3").isEqualTo(3); + assertThat(pvs.contains("forname")).as("Contains forname").isTrue(); + assertThat(pvs.contains("surname")).as("Contains surname").isTrue(); + assertThat(pvs.contains("age")).as("Contains age").isTrue(); + assertThat(pvs.contains("tory")).as("Doesn't contain tory").isFalse(); + + Map map = new HashMap<>(); + map.put("forname", "Tony"); + map.put("surname", "Blair"); + map.put("age", "50"); + for (PropertyValue pv : pvs.getPropertyValues()) { + Object val = map.get(pv.getName()); + assertThat(val).as("Can't have unexpected value").isNotNull(); + assertThat(val).as("Val is string").isInstanceOf(String.class); + assertThat(val).as("val matches expected").isEqualTo(pv.getValue()); + map.remove(pv.getName()); + } + assertThat(map).isEmpty(); + } + +} diff --git a/spring-web/src/test/java/org/springframework/web/bind/support/WebRequestDataBinderTests.java b/spring-web/src/test/java/org/springframework/web/bind/support/WebRequestDataBinderTests.java index bd1d341d6fc..9332e28798b 100644 --- a/spring-web/src/test/java/org/springframework/web/bind/support/WebRequestDataBinderTests.java +++ b/spring-web/src/test/java/org/springframework/web/bind/support/WebRequestDataBinderTests.java @@ -17,8 +17,6 @@ package org.springframework.web.bind.support; import java.beans.PropertyEditorSupport; -import java.util.Arrays; -import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.Set; @@ -30,11 +28,8 @@ import org.junit.jupiter.params.ParameterizedClass; import org.junit.jupiter.params.ParameterizedTest; import org.junit.jupiter.params.provider.ValueSource; -import org.springframework.beans.PropertyValue; -import org.springframework.beans.PropertyValues; import org.springframework.beans.testfixture.beans.ITestBean; import org.springframework.beans.testfixture.beans.TestBean; -import org.springframework.web.bind.ServletRequestParameterPropertyValues; import org.springframework.web.context.request.ServletWebRequest; import org.springframework.web.multipart.support.StringMultipartFileEditor; import org.springframework.web.testfixture.servlet.MockHttpServletRequest; @@ -308,77 +303,6 @@ class WebRequestDataBinderTests { assertThat(target.getStringArray()[1]).isEqualTo("Eva"); } - @Test - void noPrefix() { - MockHttpServletRequest request = new MockHttpServletRequest(); - request.addParameter("forname", "Tony"); - request.addParameter("surname", "Blair"); - request.addParameter("age", "" + 50); - - ServletRequestParameterPropertyValues pvs = new ServletRequestParameterPropertyValues(request); - doTestTony(pvs); - } - - @Test - void prefix() { - MockHttpServletRequest request = new MockHttpServletRequest(); - request.addParameter("test_forname", "Tony"); - request.addParameter("test_surname", "Blair"); - request.addParameter("test_age", "" + 50); - - ServletRequestParameterPropertyValues pvs = new ServletRequestParameterPropertyValues(request); - assertThat(pvs.contains("forname")).as("Didn't find normal when given prefix").isFalse(); - assertThat(pvs.contains("test_forname")).as("Did treat prefix as normal when not given prefix").isTrue(); - - pvs = new ServletRequestParameterPropertyValues(request, "test"); - doTestTony(pvs); - } - - /** - * Must contain: forname=Tony surname=Blair age=50 - */ - void doTestTony(PropertyValues pvs) { - assertThat(pvs.getPropertyValues().length).as("Contains 3").isEqualTo(3); - assertThat(pvs.contains("forname")).as("Contains forname").isTrue(); - assertThat(pvs.contains("surname")).as("Contains surname").isTrue(); - assertThat(pvs.contains("age")).as("Contains age").isTrue(); - assertThat(pvs.contains("tory")).as("Doesn't contain tory").isFalse(); - - PropertyValue[] pvArray = pvs.getPropertyValues(); - Map m = new HashMap<>(); - m.put("forname", "Tony"); - m.put("surname", "Blair"); - m.put("age", "50"); - for (PropertyValue pv : pvArray) { - Object val = m.get(pv.getName()); - assertThat(val).as("Can't have unexpected value").isNotNull(); - assertThat(val).as("Val is string").isInstanceOf(String.class); - assertThat(val).as("val matches expected").isEqualTo(pv.getValue()); - m.remove(pv.getName()); - } - assertThat(m.size()).as("Map size is 0").isEqualTo(0); - } - - @Test - void noParameters() { - MockHttpServletRequest request = new MockHttpServletRequest(); - ServletRequestParameterPropertyValues pvs = new ServletRequestParameterPropertyValues(request); - assertThat(pvs.getPropertyValues().length).as("Found no parameters").isEqualTo(0); - } - - @Test - void multipleValuesForParameter() { - MockHttpServletRequest request = new MockHttpServletRequest(); - String[] original = new String[] {"Tony", "Rod"}; - request.addParameter("forname", original); - - ServletRequestParameterPropertyValues pvs = new ServletRequestParameterPropertyValues(request); - assertThat(pvs.getPropertyValues().length).as("Found 1 parameter").isEqualTo(1); - assertThat(pvs.getPropertyValue("forname").getValue()).as("Found array value").isInstanceOf(String[].class); - String[] values = (String[]) pvs.getPropertyValue("forname").getValue(); - assertThat(Arrays.asList(original)).as("Correct values").isEqualTo(Arrays.asList(values)); - } - @ParameterizedClass // gh-36625 @ValueSource(strings = { DEFAULT_FIELD_DEFAULT_PREFIX, DEFAULT_FIELD_MARKER_PREFIX })