diff --git a/spring-core/src/main/java/org/springframework/aot/nativex/BasicJsonWriter.java b/spring-core/src/main/java/org/springframework/aot/nativex/BasicJsonWriter.java index 00732e93b55..512f034eaa2 100644 --- a/spring-core/src/main/java/org/springframework/aot/nativex/BasicJsonWriter.java +++ b/spring-core/src/main/java/org/springframework/aot/nativex/BasicJsonWriter.java @@ -153,26 +153,25 @@ class BasicJsonWriter { private static String escape(CharSequence input) { StringBuilder builder = new StringBuilder(); input.chars().forEach(c -> builder.append( - switch (c) { - case '"' -> "\\\""; - case '\\' -> "\\\\"; - case '/' -> "\\/"; - case '\b' -> "\\b"; - case '\f' -> "\\f"; - case '\n' -> "\\n"; - case '\r' -> "\\r"; - case '\t' -> "\\t"; - default -> { - if (c <= 0x1F) { - yield String.format("\\u%04x", c); - } - else { - yield (char) c; - } - } - } - ) - ); + switch (c) { + case '"' -> "\\\""; + case '\\' -> "\\\\"; + case '/' -> "\\/"; + case '\b' -> "\\b"; + case '\f' -> "\\f"; + case '\n' -> "\\n"; + case '\r' -> "\\r"; + case '\t' -> "\\t"; + default -> { + if (c <= 0x1F) { + yield String.format("\\u%04x", c); + } + else { + yield (char) c; + } + } + } + )); return builder.toString(); } diff --git a/spring-messaging/spring-messaging.gradle b/spring-messaging/spring-messaging.gradle index 86b68df39d8..258b58e0f82 100644 --- a/spring-messaging/spring-messaging.gradle +++ b/spring-messaging/spring-messaging.gradle @@ -31,6 +31,7 @@ dependencies { testImplementation("io.reactivex.rxjava3:rxjava") testImplementation("org.jetbrains.kotlin:kotlin-reflect") testImplementation("org.jetbrains.kotlin:kotlin-stdlib") + testImplementation("org.skyscreamer:jsonassert") testImplementation("org.xmlunit:xmlunit-assertj") testImplementation("org.xmlunit:xmlunit-matchers") testRuntimeOnly("com.sun.activation:jakarta.activation") diff --git a/spring-messaging/src/test/java/org/springframework/messaging/converter/ProtobufMessageConverterTests.java b/spring-messaging/src/test/java/org/springframework/messaging/converter/ProtobufMessageConverterTests.java index b76222c044f..8bd4fd36562 100644 --- a/spring-messaging/src/test/java/org/springframework/messaging/converter/ProtobufMessageConverterTests.java +++ b/spring-messaging/src/test/java/org/springframework/messaging/converter/ProtobufMessageConverterTests.java @@ -16,12 +16,11 @@ package org.springframework.messaging.converter; -import java.util.HashMap; import java.util.Map; import com.google.protobuf.ExtensionRegistry; -import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; +import org.skyscreamer.jsonassert.JSONAssert; import org.springframework.messaging.Message; import org.springframework.messaging.MessageHeaders; @@ -35,113 +34,90 @@ import static org.springframework.messaging.MessageHeaders.CONTENT_TYPE; import static org.springframework.util.MimeTypeUtils.APPLICATION_JSON; /** - * Test suite for {@link ProtobufMessageConverter}. + * Tests for {@link ProtobufMessageConverter}. * * @author Parviz Rozikov + * @author Sam Brannen */ -public class ProtobufMessageConverterTests { +class ProtobufMessageConverterTests { - private ProtobufMessageConverter converter; + private final ProtobufMessageConverter converter = new ProtobufMessageConverter(); - private ExtensionRegistry extensionRegistry; + private Msg testMsg = Msg.newBuilder().setFoo("Foo").setBlah(SecondMsg.newBuilder().setBlah(123).build()).build(); - private Msg testMsg; + private Message message = MessageBuilder.withPayload(this.testMsg.toByteArray()) + .setHeader(CONTENT_TYPE, ProtobufMessageConverter.PROTOBUF).build(); - private Message message; + private Message messageWithoutContentType = MessageBuilder.withPayload(this.testMsg.toByteArray()).build(); - private Message messageWithoutContentType; - - private Message messageJson; - - - @BeforeEach - public void setup() { - this.extensionRegistry = mock(ExtensionRegistry.class); - this.converter = new ProtobufMessageConverter(); - this.testMsg = Msg.newBuilder().setFoo("Foo").setBlah(SecondMsg.newBuilder().setBlah(123).build()).build(); - this.message = MessageBuilder.withPayload(this.testMsg.toByteArray()) - .setHeader(CONTENT_TYPE, ProtobufMessageConverter.PROTOBUF).build(); - this.messageWithoutContentType = MessageBuilder.withPayload(this.testMsg.toByteArray()).build(); - this.messageJson = MessageBuilder.withPayload(""" - { - "foo": "Foo", - "blah": { - "blah": 123 - } - }""".replace("\t", " ")) - .setHeader(CONTENT_TYPE, APPLICATION_JSON) - .build(); - } + private final Message messageJson = MessageBuilder.withPayload(""" + { + "foo": "Foo", + "blah": { + "blah": 123 + } + } + """) + .setHeader(CONTENT_TYPE, APPLICATION_JSON) + .build(); @Test - public void extensionRegistryNull() { + void extensionRegistryNull() { ProtobufMessageConverter converter = new ProtobufMessageConverter(null); assertThat(converter.extensionRegistry).isNotNull(); } + @Test + void defaultContentType() { + assertThat(converter.getDefaultContentType(testMsg)).isEqualTo(ProtobufMessageConverter.PROTOBUF); + } @Test - public void canConvertFrom() { + void canConvertFrom() { assertThat(converter.canConvertFrom(message, Msg.class)).isTrue(); assertThat(converter.canConvertFrom(messageWithoutContentType, Msg.class)).isTrue(); assertThat(converter.canConvertFrom(messageJson, Msg.class)).isTrue(); } @Test - public void canConvertTo() { + void canConvertTo() { assertThat(converter.canConvertTo(testMsg, message.getHeaders())).isTrue(); assertThat(converter.canConvertTo(testMsg, messageWithoutContentType.getHeaders())).isTrue(); assertThat(converter.canConvertTo(testMsg, messageJson.getHeaders())).isTrue(); } - @Test - public void convertFrom() { - final Msg msg = (Msg) converter.fromMessage(message, Msg.class); - assertThat(msg).isEqualTo(testMsg); + void convertFrom() { + assertThat(converter.fromMessage(message, Msg.class)).isEqualTo(testMsg); } @Test - public void convertTo() { - final Message message = converter.toMessage(this.testMsg, this.message.getHeaders()); + void convertFromNoContentType(){ + assertThat(converter.fromMessage(messageWithoutContentType, Msg.class)).isEqualTo(testMsg); + } + + @Test + void convertTo() { + Message message = converter.toMessage(testMsg, this.message.getHeaders()); assertThat(message).isNotNull(); assertThat(message.getPayload()).isEqualTo(this.message.getPayload()); } - @Test - public void convertFromNoContentType(){ - Msg result = (Msg) converter.fromMessage(messageWithoutContentType, Msg.class); - assertThat(result).isEqualTo(testMsg); - } - - - @Test - public void defaultContentType() { - assertThat(converter.getDefaultContentType(testMsg)).isEqualTo(ProtobufMessageConverter.PROTOBUF); - } - - @Test - public void testJsonWithGoogleProtobuf() { - this.converter = new ProtobufMessageConverter( + void jsonWithGoogleProtobuf() throws Exception { + ProtobufMessageConverter converter = new ProtobufMessageConverter( new ProtobufMessageConverter.ProtobufJavaUtilSupport(null, null), - extensionRegistry); - - final Map headers = new HashMap<>(); - headers.put(CONTENT_TYPE, APPLICATION_JSON); + mock(ExtensionRegistry.class)); //convertTo - final Message message = this.converter.toMessage(this.testMsg, new MessageHeaders(headers)); + Message message = converter.toMessage(testMsg, new MessageHeaders(Map.of(CONTENT_TYPE, APPLICATION_JSON))); assertThat(message).isNotNull(); assertThat(message.getHeaders().get(CONTENT_TYPE)).isEqualTo(APPLICATION_JSON); - assertThat(((String) message.getPayload()).length() > 0).isTrue(); - assertThat(((String) message.getPayload()).isEmpty()).as("Body is empty").isFalse(); - assertThat(((String) message.getPayload())).isEqualTo(this.messageJson.getPayload()); + JSONAssert.assertEquals(messageJson.getPayload(), message.getPayload().toString(), true); //convertFrom - final Msg msg = (Msg) converter.fromMessage(message, Msg.class); - assertThat(msg).isEqualTo(this.testMsg); + assertThat(converter.fromMessage(message, Msg.class)).isEqualTo(testMsg); } } diff --git a/spring-tx/src/main/java/org/springframework/transaction/annotation/TransactionManagementConfigurationSelector.java b/spring-tx/src/main/java/org/springframework/transaction/annotation/TransactionManagementConfigurationSelector.java index 9881a00b357..ddf75e3bbd8 100644 --- a/spring-tx/src/main/java/org/springframework/transaction/annotation/TransactionManagementConfigurationSelector.java +++ b/spring-tx/src/main/java/org/springframework/transaction/annotation/TransactionManagementConfigurationSelector.java @@ -46,11 +46,9 @@ public class TransactionManagementConfigurationSelector extends AdviceModeImport @Override protected String[] selectImports(AdviceMode adviceMode) { return switch (adviceMode) { - case PROXY -> new String[]{ - AutoProxyRegistrar.class.getName(), - ProxyTransactionManagementConfiguration.class.getName() - }; - case ASPECTJ -> new String[]{determineTransactionAspectClass()}; + case PROXY -> new String[] {AutoProxyRegistrar.class.getName(), + ProxyTransactionManagementConfiguration.class.getName()}; + case ASPECTJ -> new String[] {determineTransactionAspectClass()}; }; } diff --git a/spring-web/src/test/java/org/springframework/http/codec/ServerSentEventHttpMessageReaderTests.java b/spring-web/src/test/java/org/springframework/http/codec/ServerSentEventHttpMessageReaderTests.java index a0bf12d4500..a5f23001cee 100644 --- a/spring-web/src/test/java/org/springframework/http/codec/ServerSentEventHttpMessageReaderTests.java +++ b/spring-web/src/test/java/org/springframework/http/codec/ServerSentEventHttpMessageReaderTests.java @@ -42,7 +42,7 @@ import static org.assertj.core.api.Assertions.assertThat; * @author Sebastien Deleuze * @author Juergen Hoeller */ -public class ServerSentEventHttpMessageReaderTests extends AbstractLeakCheckingTests { +class ServerSentEventHttpMessageReaderTests extends AbstractLeakCheckingTests { private Jackson2JsonDecoder jsonDecoder = new Jackson2JsonDecoder(); @@ -50,20 +50,20 @@ public class ServerSentEventHttpMessageReaderTests extends AbstractLeakCheckingT @Test - public void cantRead() { + void cannotRead() { assertThat(reader.canRead(ResolvableType.forClass(Object.class), new MediaType("foo", "bar"))).isFalse(); assertThat(reader.canRead(ResolvableType.forClass(Object.class), null)).isFalse(); } @Test - public void canRead() { + void canRead() { assertThat(reader.canRead(ResolvableType.forClass(Object.class), new MediaType("text", "event-stream"))).isTrue(); assertThat(reader.canRead(ResolvableType.forClass(ServerSentEvent.class), new MediaType("foo", "bar"))).isTrue(); } @Test @SuppressWarnings("rawtypes") - public void readServerSentEvents() { + void readServerSentEvents() { MockServerHttpRequest request = MockServerHttpRequest.post("/") .body(Mono.just(stringBuffer( "id:c42\nevent:foo\nretry:123\n:bla\n:bla bla\n:bla bla bla\ndata:bar\n\n" + @@ -96,7 +96,7 @@ public class ServerSentEventHttpMessageReaderTests extends AbstractLeakCheckingT @Test @SuppressWarnings("rawtypes") - public void readServerSentEventsWithMultipleChunks() { + void readServerSentEventsWithMultipleChunks() { MockServerHttpRequest request = MockServerHttpRequest.post("/") .body(Flux.just( stringBuffer("id:c42\nev"), @@ -127,7 +127,7 @@ public class ServerSentEventHttpMessageReaderTests extends AbstractLeakCheckingT } @Test - public void readString() { + void readString() { MockServerHttpRequest request = MockServerHttpRequest.post("/") .body(Mono.just(stringBuffer("data:foo\ndata:bar\n\ndata:baz\n\n"))); @@ -142,7 +142,7 @@ public class ServerSentEventHttpMessageReaderTests extends AbstractLeakCheckingT } @Test - public void trimWhitespace() { + void trimWhitespace() { MockServerHttpRequest request = MockServerHttpRequest.post("/") .body(Mono.just(stringBuffer("data: \tfoo \ndata:bar\t\n\n"))); @@ -156,15 +156,14 @@ public class ServerSentEventHttpMessageReaderTests extends AbstractLeakCheckingT } @Test - public void readPojo() { + void readPojo() { MockServerHttpRequest request = MockServerHttpRequest.post("/") - .body(Mono.just(stringBuffer( - """ - data:{"foo": "foofoo", "bar": "barbar"} + .body(Mono.just(stringBuffer(""" + data:{"foo": "foofoo", "bar": "barbar"} - data:{"foo": "foofoofoo", "bar": "barbarbar"} + data:{"foo": "foofoofoo", "bar": "barbarbar"} - """))); + """))); Flux data = reader.read(ResolvableType.forClass(Pojo.class), request, Collections.emptyMap()).cast(Pojo.class); @@ -194,7 +193,7 @@ public class ServerSentEventHttpMessageReaderTests extends AbstractLeakCheckingT } @Test // SPR-15331 - public void decodeFullContentAsString() { + void decodeFullContentAsString() { String body = "data:foo\ndata:bar\n\ndata:baz\n\n"; MockServerHttpRequest request = MockServerHttpRequest.post("/") .body(Mono.just(stringBuffer(body))); @@ -208,13 +207,11 @@ public class ServerSentEventHttpMessageReaderTests extends AbstractLeakCheckingT } @Test - public void readError() { - Flux body = - Flux.just(stringBuffer("data:foo\ndata:bar\n\ndata:baz\n\n")) - .concatWith(Flux.error(new RuntimeException())); + void readError() { + Flux body = Flux.just(stringBuffer("data:foo\ndata:bar\n\ndata:baz\n\n")) + .concatWith(Flux.error(new RuntimeException())); - MockServerHttpRequest request = MockServerHttpRequest.post("/") - .body(body); + MockServerHttpRequest request = MockServerHttpRequest.post("/").body(body); Flux data = reader.read(ResolvableType.forClass(String.class), request, Collections.emptyMap()).cast(String.class); @@ -227,7 +224,7 @@ public class ServerSentEventHttpMessageReaderTests extends AbstractLeakCheckingT } @Test - public void maxInMemoryLimit() { + void maxInMemoryLimit() { this.reader.setMaxInMemorySize(17); MockServerHttpRequest request = MockServerHttpRequest.post("/") @@ -242,10 +239,10 @@ public class ServerSentEventHttpMessageReaderTests extends AbstractLeakCheckingT } @Test // gh-24312 - public void maxInMemoryLimitAllowsReadingPojoLargerThanDefaultSize() { + void maxInMemoryLimitAllowsReadingPojoLargerThanDefaultSize() { int limit = this.jsonDecoder.getMaxInMemorySize(); - String fooValue = getStringOfSize(limit) + "and then some more"; + String fooValue = "x".repeat(limit) + " and then some more"; String content = "data:{\"foo\": \"" + fooValue + "\"}\n\n"; MockServerHttpRequest request = MockServerHttpRequest.post("/").body(Mono.just(stringBuffer(content))); @@ -272,12 +269,4 @@ public class ServerSentEventHttpMessageReaderTests extends AbstractLeakCheckingT return buffer; } - private static String getStringOfSize(long size) { - StringBuilder content = new StringBuilder("Aa"); - while (content.length() < size) { - content.append(content); - } - return content.toString(); - } - } diff --git a/spring-web/src/test/java/org/springframework/web/multipart/support/StandardMultipartHttpServletRequestTests.java b/spring-web/src/test/java/org/springframework/web/multipart/support/StandardMultipartHttpServletRequestTests.java index 2b46802b2d0..851b691a8e9 100644 --- a/spring-web/src/test/java/org/springframework/web/multipart/support/StandardMultipartHttpServletRequestTests.java +++ b/spring-web/src/test/java/org/springframework/web/multipart/support/StandardMultipartHttpServletRequestTests.java @@ -36,10 +36,10 @@ import static org.assertj.core.api.Assertions.assertThat; * * @author Rossen Stoyanchev */ -public class StandardMultipartHttpServletRequestTests { +class StandardMultipartHttpServletRequestTests { @Test - public void filename() throws Exception { + void filename() { String disposition = "form-data; name=\"file\"; filename=\"myFile.txt\""; StandardMultipartHttpServletRequest request = requestWithPart("file", disposition, ""); @@ -49,7 +49,7 @@ public class StandardMultipartHttpServletRequestTests { } @Test // SPR-13319 - public void filenameRfc5987() throws Exception { + void filenameRfc5987() { String disposition = "form-data; name=\"file\"; filename*=\"UTF-8''foo-%c3%a4-%e2%82%ac.html\""; StandardMultipartHttpServletRequest request = requestWithPart("file", disposition, ""); @@ -59,7 +59,7 @@ public class StandardMultipartHttpServletRequestTests { } @Test // SPR-15205 - public void filenameRfc2047() throws Exception { + void filenameRfc2047() { String disposition = "form-data; name=\"file\"; filename=\"=?UTF-8?Q?Declara=C3=A7=C3=A3o.pdf?=\""; StandardMultipartHttpServletRequest request = requestWithPart("file", disposition, ""); @@ -69,7 +69,7 @@ public class StandardMultipartHttpServletRequestTests { } @Test - public void multipartFileResource() throws IOException { + void multipartFileResource() throws IOException { String name = "file"; String disposition = "form-data; name=\"" + name + "\"; filename=\"myFile.txt\""; StandardMultipartHttpServletRequest request = requestWithPart(name, disposition, "myBody"); @@ -83,18 +83,17 @@ public class StandardMultipartHttpServletRequestTests { MockHttpOutputMessage output = new MockHttpOutputMessage(); new FormHttpMessageConverter().write(map, null, output); - assertThat(output.getBodyAsString(StandardCharsets.UTF_8)).contains( - """ - Content-Disposition: form-data; name="file"; filename="myFile.txt"\r - Content-Type: text/plain\r - Content-Length: 6\r - \r - myBody\r - """); + assertThat(output.getBodyAsString(StandardCharsets.UTF_8)).contains(""" + Content-Disposition: form-data; name="file"; filename="myFile.txt" + Content-Type: text/plain + Content-Length: 6 + + myBody + """.replace("\n", "\r\n")); } - private StandardMultipartHttpServletRequest requestWithPart(String name, String disposition, String content) { + private static StandardMultipartHttpServletRequest requestWithPart(String name, String disposition, String content) { MockHttpServletRequest request = new MockHttpServletRequest(); MockPart part = new MockPart(name, null, content.getBytes(StandardCharsets.UTF_8)); part.getHeaders().set("Content-Disposition", disposition); diff --git a/spring-webflux/src/test/java/org/springframework/web/reactive/function/BodyExtractorsTests.java b/spring-webflux/src/test/java/org/springframework/web/reactive/function/BodyExtractorsTests.java index cd4555194fc..8485adbf0a4 100644 --- a/spring-webflux/src/test/java/org/springframework/web/reactive/function/BodyExtractorsTests.java +++ b/spring-webflux/src/test/java/org/springframework/web/reactive/function/BodyExtractorsTests.java @@ -65,14 +65,16 @@ import org.springframework.web.testfixture.http.server.reactive.MockServerHttpRe import static org.assertj.core.api.Assertions.assertThat; import static org.assertj.core.api.Assertions.assertThatExceptionOfType; +import static org.assertj.core.api.InstanceOfAssertFactories.type; import static org.springframework.http.codec.json.Jackson2CodecSupport.JSON_VIEW_HINT; /** * @author Arjen Poutsma * @author Sebastien Deleuze * @author Brian Clozel + * @author Sam Brannen */ -public class BodyExtractorsTests { +class BodyExtractorsTests { private BodyExtractor.Context context; @@ -82,7 +84,7 @@ public class BodyExtractorsTests { @BeforeEach - public void createContext() { + void createContext() { final List> messageReaders = new ArrayList<>(); messageReaders.add(new DecoderHttpMessageReader<>(new ByteBufferDecoder())); messageReaders.add(new DecoderHttpMessageReader<>(StringDecoder.allMimeTypes())); @@ -116,7 +118,7 @@ public class BodyExtractorsTests { @Test - public void toMono() { + void toMono() { BodyExtractor, ReactiveHttpInputMessage> extractor = BodyExtractors.toMono(String.class); DefaultDataBufferFactory factory = DefaultDataBufferFactory.sharedInstance; @@ -134,7 +136,7 @@ public class BodyExtractorsTests { } @Test - public void toMonoParameterizedTypeReference() { + void toMonoParameterizedTypeReference() { BodyExtractor>, ReactiveHttpInputMessage> extractor = BodyExtractors.toMono(new ParameterizedTypeReference>() {}); @@ -155,7 +157,7 @@ public class BodyExtractorsTests { } @Test - public void toMonoWithHints() { + void toMonoWithHints() { BodyExtractor, ReactiveHttpInputMessage> extractor = BodyExtractors.toMono(User.class); this.hints.put(JSON_VIEW_HINT, SafeToDeserialize.class); @@ -179,7 +181,7 @@ public class BodyExtractorsTests { } @Test // SPR-15758 - public void toMonoWithEmptyBodyAndNoContentType() { + void toMonoWithEmptyBodyAndNoContentType() { BodyExtractor>, ReactiveHttpInputMessage> extractor = BodyExtractors.toMono(new ParameterizedTypeReference>() {}); @@ -190,7 +192,7 @@ public class BodyExtractorsTests { } @Test - public void toMonoVoidAsClientShouldConsumeAndCancel() { + void toMonoVoidAsClientShouldConsumeAndCancel() { byte[] bytes = "foo".getBytes(StandardCharsets.UTF_8); DefaultDataBuffer dataBuffer = DefaultDataBufferFactory.sharedInstance.wrap(ByteBuffer.wrap(bytes)); TestPublisher body = TestPublisher.create(); @@ -210,7 +212,7 @@ public class BodyExtractorsTests { } @Test - public void toMonoVoidAsClientWithEmptyBody() { + void toMonoVoidAsClientWithEmptyBody() { TestPublisher body = TestPublisher.create(); BodyExtractor, ReactiveHttpInputMessage> extractor = BodyExtractors.toMono(Void.class); @@ -226,7 +228,7 @@ public class BodyExtractorsTests { } @Test - public void toFlux() { + void toFlux() { BodyExtractor, ReactiveHttpInputMessage> extractor = BodyExtractors.toFlux(String.class); byte[] bytes = "foo".getBytes(StandardCharsets.UTF_8); @@ -243,7 +245,7 @@ public class BodyExtractorsTests { } @Test - public void toFluxWithHints() { + void toFluxWithHints() { BodyExtractor, ReactiveHttpInputMessage> extractor = BodyExtractors.toFlux(User.class); this.hints.put(JSON_VIEW_HINT, SafeToDeserialize.class); @@ -272,7 +274,7 @@ public class BodyExtractorsTests { } @Test - public void toFluxUnacceptable() { + void toFluxUnacceptable() { BodyExtractor, ReactiveHttpInputMessage> extractor = BodyExtractors.toFlux(String.class); byte[] bytes = "foo".getBytes(StandardCharsets.UTF_8); @@ -307,7 +309,7 @@ public class BodyExtractorsTests { } @Test - public void toFormData() { + void toFormData() { byte[] bytes = "name+1=value+1&name+2=value+2%2B1&name+2=value+2%2B2&name+3".getBytes(StandardCharsets.UTF_8); DefaultDataBuffer dataBuffer = DefaultDataBufferFactory.sharedInstance.wrap(ByteBuffer.wrap(bytes)); Flux body = Flux.just(dataBuffer); @@ -320,10 +322,10 @@ public class BodyExtractorsTests { StepVerifier.create(result) .consumeNextWith(form -> { - assertThat(form.size()).as("Invalid result").isEqualTo(3); + assertThat(form).as("Invalid result").hasSize(3); assertThat(form.getFirst("name 1")).as("Invalid result").isEqualTo("value 1"); List values = form.get("name 2"); - assertThat(values.size()).as("Invalid result").isEqualTo(2); + assertThat(values).as("Invalid result").hasSize(2); assertThat(values.get(0)).as("Invalid result").isEqualTo("value 2+1"); assertThat(values.get(1)).as("Invalid result").isEqualTo("value 2+2"); assertThat(form.getFirst("name 3")).as("Invalid result").isNull(); @@ -333,28 +335,28 @@ public class BodyExtractorsTests { } @Test - public void toParts() { + void toParts() { BodyExtractor, ServerHttpRequest> extractor = BodyExtractors.toParts(); String bodyContents = """ - -----------------------------9051914041544843365972754266\r - Content-Disposition: form-data; name="text"\r - \r - text default\r - -----------------------------9051914041544843365972754266\r - Content-Disposition: form-data; name="file1"; filename="a.txt"\r - Content-Type: text/plain\r - \r - Content of a.txt.\r - \r - -----------------------------9051914041544843365972754266\r - Content-Disposition: form-data; name="file2"; filename="a.html"\r - Content-Type: text/html\r - \r - Content of a.html.\r - \r - -----------------------------9051914041544843365972754266--\r - """; + -----------------------------9051914041544843365972754266 + Content-Disposition: form-data; name="text" + + text default + -----------------------------9051914041544843365972754266 + Content-Disposition: form-data; name="file1"; filename="a.txt" + Content-Type: text/plain + + Content of a.txt. + + -----------------------------9051914041544843365972754266 + Content-Disposition: form-data; name="file2"; filename="a.html" + Content-Type: text/html + + Content of a.html. + + -----------------------------9051914041544843365972754266-- + """.replace("\n", "\r\n"); byte[] bytes = bodyContents.getBytes(StandardCharsets.UTF_8); DefaultDataBuffer dataBuffer = DefaultDataBufferFactory.sharedInstance.wrap(ByteBuffer.wrap(bytes)); @@ -369,33 +371,27 @@ public class BodyExtractorsTests { StepVerifier.create(result) .consumeNextWith(part -> { assertThat(part.name()).isEqualTo("text"); - boolean condition = part instanceof FormFieldPart; - assertThat(condition).isTrue(); - FormFieldPart formFieldPart = (FormFieldPart) part; - assertThat(formFieldPart.value()).isEqualTo("text default"); + assertThat(part).asInstanceOf(type(FormFieldPart.class)).satisfies( + formFieldPart -> assertThat(formFieldPart.value()).isEqualTo("text default")); }) .consumeNextWith(part -> { assertThat(part.name()).isEqualTo("file1"); - boolean condition = part instanceof FilePart; - assertThat(condition).isTrue(); - FilePart filePart = (FilePart) part; - assertThat(filePart.filename()).isEqualTo("a.txt"); - assertThat(filePart.headers().getContentType()).isEqualTo(MediaType.TEXT_PLAIN); + assertThat(part).asInstanceOf(type(FilePart.class)).satisfies( + filePart -> assertThat(filePart.filename()).isEqualTo("a.txt"), + filePart -> assertThat(filePart.headers().getContentType()).isEqualTo(MediaType.TEXT_PLAIN)); }) .consumeNextWith(part -> { assertThat(part.name()).isEqualTo("file2"); - boolean condition = part instanceof FilePart; - assertThat(condition).isTrue(); - FilePart filePart = (FilePart) part; - assertThat(filePart.filename()).isEqualTo("a.html"); - assertThat(filePart.headers().getContentType()).isEqualTo(MediaType.TEXT_HTML); + assertThat(part).asInstanceOf(type(FilePart.class)).satisfies( + filePart -> assertThat(filePart.filename()).isEqualTo("a.html"), + filePart -> assertThat(filePart.headers().getContentType()).isEqualTo(MediaType.TEXT_HTML)); }) .expectComplete() .verify(); } @Test - public void toDataBuffers() { + void toDataBuffers() { BodyExtractor, ReactiveHttpInputMessage> extractor = BodyExtractors.toDataBuffers(); byte[] bytes = "foo".getBytes(StandardCharsets.UTF_8); @@ -412,7 +408,7 @@ public class BodyExtractorsTests { } @Test // SPR-17054 - public void unsupportedMediaTypeShouldConsumeAndCancel() { + void unsupportedMediaTypeShouldConsumeAndCancel() { NettyDataBufferFactory factory = new NettyDataBufferFactory(new PooledByteBufAllocator(true)); NettyDataBuffer buffer = factory.wrap(ByteBuffer.wrap("spring".getBytes(StandardCharsets.UTF_8))); TestPublisher body = TestPublisher.create(); @@ -428,10 +424,8 @@ public class BodyExtractorsTests { body.emit(buffer); }) .expectErrorSatisfies(throwable -> { - boolean condition = throwable instanceof UnsupportedMediaTypeException; - assertThat(condition).isTrue(); - assertThatExceptionOfType(IllegalReferenceCountException.class).isThrownBy( - buffer::release); + assertThat(throwable).isInstanceOf(UnsupportedMediaTypeException.class); + assertThatExceptionOfType(IllegalReferenceCountException.class).isThrownBy(buffer::release); body.assertCancelled(); }).verify(); } diff --git a/spring-webflux/src/test/java/org/springframework/web/reactive/function/server/DefaultServerRequestTests.java b/spring-webflux/src/test/java/org/springframework/web/reactive/function/server/DefaultServerRequestTests.java index d14ed3a0090..62c52ca614b 100644 --- a/spring-webflux/src/test/java/org/springframework/web/reactive/function/server/DefaultServerRequestTests.java +++ b/spring-webflux/src/test/java/org/springframework/web/reactive/function/server/DefaultServerRequestTests.java @@ -70,6 +70,7 @@ import org.springframework.web.testfixture.server.MockServerWebExchange; import static org.assertj.core.api.Assertions.assertThat; import static org.assertj.core.api.Assertions.assertThatIllegalArgumentException; +import static org.assertj.core.api.InstanceOfAssertFactories.type; import static org.springframework.web.reactive.function.BodyExtractors.toMono; /** @@ -413,16 +414,16 @@ public class DefaultServerRequestTests { @Test public void multipartData() { String data = """ - --12345\r - Content-Disposition: form-data; name="foo"\r - \r - bar\r - --12345\r - Content-Disposition: form-data; name="baz"\r - \r - qux\r - --12345--\r - """; + --12345 + Content-Disposition: form-data; name="foo" + + bar + --12345 + Content-Disposition: form-data; name="baz" + + qux + --12345-- + """.replace("\n", "\r\n"); byte[] bytes = data.getBytes(StandardCharsets.UTF_8); DefaultDataBuffer dataBuffer = DefaultDataBufferFactory.sharedInstance.wrap(ByteBuffer.wrap(bytes)); Flux body = Flux.just(dataBuffer); @@ -439,18 +440,10 @@ public class DefaultServerRequestTests { StepVerifier.create(resultData) .consumeNextWith(formData -> { assertThat(formData).hasSize(2); - - Part part = formData.getFirst("foo"); - boolean condition1 = part instanceof FormFieldPart; - assertThat(condition1).isTrue(); - FormFieldPart formFieldPart = (FormFieldPart) part; - assertThat(formFieldPart.value()).isEqualTo("bar"); - - part = formData.getFirst("baz"); - boolean condition = part instanceof FormFieldPart; - assertThat(condition).isTrue(); - formFieldPart = (FormFieldPart) part; - assertThat(formFieldPart.value()).isEqualTo("qux"); + assertThat(formData.getFirst("foo")).asInstanceOf(type(FormFieldPart.class)) + .extracting(FormFieldPart::value).isEqualTo("bar"); + assertThat(formData.getFirst("baz")).asInstanceOf(type(FormFieldPart.class)) + .extracting(FormFieldPart::value).isEqualTo("qux"); }) .verifyComplete(); } @@ -740,7 +733,6 @@ public class DefaultServerRequestTests { @ParameterizedTest(name = "[{index}] {0}") @ValueSource(strings = {"GET", "HEAD"}) @interface SafeHttpMethodsTest { - } } diff --git a/spring-webflux/src/test/java/org/springframework/web/reactive/function/server/ToStringVisitorTests.java b/spring-webflux/src/test/java/org/springframework/web/reactive/function/server/ToStringVisitorTests.java index ded97be8e4f..c225a8f4d72 100644 --- a/spring-webflux/src/test/java/org/springframework/web/reactive/function/server/ToStringVisitorTests.java +++ b/spring-webflux/src/test/java/org/springframework/web/reactive/function/server/ToStringVisitorTests.java @@ -36,10 +36,10 @@ import static org.springframework.web.reactive.function.server.RouterFunctions.r /** * @author Arjen Poutsma */ -public class ToStringVisitorTests { +class ToStringVisitorTests { @Test - public void nested() { + void nested() { HandlerFunction handler = new SimpleHandlerFunction(); RouterFunction routerFunction = route() .path("/foo", builder -> @@ -53,16 +53,17 @@ public class ToStringVisitorTests { routerFunction.accept(visitor); String result = visitor.toString(); - String expected = "/foo => {\n" + - " /bar => {\n" + - " (GET && /baz) -> \n" + - " }\n" + - "}"; + String expected = """ + /foo => { + /bar => { + (GET && /baz) ->\s + } + }""".replace('\t', ' '); assertThat(result).isEqualTo(expected); } @Test - public void predicates() { + void predicates() { testPredicate(methods(HttpMethod.GET), "GET"); testPredicate(methods(HttpMethod.GET, HttpMethod.POST), "[GET, POST]"); @@ -95,9 +96,7 @@ public class ToStringVisitorTests { private void testPredicate(RequestPredicate predicate, String expected) { ToStringVisitor visitor = new ToStringVisitor(); predicate.accept(visitor); - String result = visitor.toString(); - - assertThat(result).isEqualTo(expected); + assertThat(visitor).asString().isEqualTo(expected); } diff --git a/spring-webflux/src/test/java/org/springframework/web/reactive/resource/CssLinkResourceTransformerTests.java b/spring-webflux/src/test/java/org/springframework/web/reactive/resource/CssLinkResourceTransformerTests.java index bc854cdab94..cdb0047912b 100644 --- a/spring-webflux/src/test/java/org/springframework/web/reactive/resource/CssLinkResourceTransformerTests.java +++ b/spring-webflux/src/test/java/org/springframework/web/reactive/resource/CssLinkResourceTransformerTests.java @@ -16,10 +16,9 @@ package org.springframework.web.reactive.resource; -import java.nio.charset.StandardCharsets; -import java.util.ArrayList; import java.util.Collections; import java.util.List; +import java.util.Map; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; @@ -29,11 +28,11 @@ import reactor.test.StepVerifier; import org.springframework.core.io.ClassPathResource; import org.springframework.core.io.Resource; -import org.springframework.util.StringUtils; import org.springframework.web.reactive.resource.EncodedResourceResolver.EncodedResource; import org.springframework.web.reactive.resource.GzipSupport.GzippedFiles; import org.springframework.web.testfixture.server.MockServerWebExchange; +import static java.nio.charset.StandardCharsets.UTF_8; import static org.assertj.core.api.Assertions.assertThat; import static org.springframework.web.testfixture.http.server.reactive.MockServerHttpRequest.get; @@ -44,18 +43,16 @@ import static org.springframework.web.testfixture.http.server.reactive.MockServe * @author Sam Brannen */ @ExtendWith(GzipSupport.class) -public class CssLinkResourceTransformerTests { +class CssLinkResourceTransformerTests { private ResourceTransformerChain transformerChain; @BeforeEach - public void setup() { + void setup() { VersionResourceResolver versionResolver = new VersionResourceResolver(); versionResolver.setStrategyMap(Collections.singletonMap("/**", new ContentVersionStrategy())); - List resolvers = new ArrayList<>(); - resolvers.add(versionResolver); - resolvers.add(new PathResourceResolver()); + List resolvers = List.of(versionResolver, new PathResourceResolver()); CssLinkResourceTransformer cssLinkTransformer = new CssLinkResourceTransformer(); cssLinkTransformer.setResourceUrlProvider(createUrlProvider(resolvers)); @@ -66,18 +63,17 @@ public class CssLinkResourceTransformerTests { private ResourceUrlProvider createUrlProvider(List resolvers) { ResourceWebHandler handler = new ResourceWebHandler(); - handler.setLocations(Collections.singletonList(new ClassPathResource("test/", getClass()))); + handler.setLocations(List.of(new ClassPathResource("test/", getClass()))); handler.setResourceResolvers(resolvers); ResourceUrlProvider urlProvider = new ResourceUrlProvider(); - urlProvider.registerHandlers(Collections.singletonMap("/static/**", handler)); + urlProvider.registerHandlers(Map.of("/static/**", handler)); return urlProvider; } @Test - public void transform() { - + void transform() { MockServerWebExchange exchange = MockServerWebExchange.from(get("/static/main.css")); Resource css = getResource("main.css"); String expected = """ @@ -95,16 +91,15 @@ public class CssLinkResourceTransformerTests { StepVerifier.create(this.transformerChain.transform(exchange, css) .cast(TransformedResource.class)) .consumeNextWith(transformedResource -> { - String result = new String(transformedResource.getByteArray(), StandardCharsets.UTF_8); - result = StringUtils.deleteAny(result, "\r"); - assertThat(result).isEqualTo(expected); + String result = new String(transformedResource.getByteArray(), UTF_8); + assertThat(result).isEqualToNormalizingNewlines(expected); }) .expectComplete() .verify(); } @Test - public void transformNoLinks() { + void transformNoLinks() { MockServerWebExchange exchange = MockServerWebExchange.from(get("/static/foo.css")); Resource expected = getResource("foo.css"); @@ -114,7 +109,7 @@ public class CssLinkResourceTransformerTests { } @Test - public void transformExtLinksNotAllowed() { + void transformExtLinksNotAllowed() { MockServerWebExchange exchange = MockServerWebExchange.from(get("/static/external.css")); List transformers = Collections.singletonList(new CssLinkResourceTransformer()); @@ -130,9 +125,8 @@ public class CssLinkResourceTransformerTests { StepVerifier.create(chain.transform(exchange, resource) .cast(TransformedResource.class)) .consumeNextWith(transformedResource -> { - String result = new String(transformedResource.getByteArray(), StandardCharsets.UTF_8); - result = StringUtils.deleteAny(result, "\r"); - assertThat(result).isEqualTo(expected); + String result = new String(transformedResource.getByteArray(), UTF_8); + assertThat(result).isEqualToNormalizingNewlines(expected); }) .expectComplete() .verify(); @@ -144,7 +138,7 @@ public class CssLinkResourceTransformerTests { } @Test - public void transformSkippedForNonCssResource() { + void transformSkippedForNonCssResource() { MockServerWebExchange exchange = MockServerWebExchange.from(get("/static/images/image.png")); Resource expected = getResource("images/image.png"); @@ -155,7 +149,7 @@ public class CssLinkResourceTransformerTests { } @Test - public void transformSkippedForGzippedResource(GzippedFiles gzippedFiles) throws Exception { + void transformSkippedForGzippedResource(GzippedFiles gzippedFiles) throws Exception { gzippedFiles.create("main.css"); MockServerWebExchange exchange = MockServerWebExchange.from(get("/static/main.css")); @@ -169,20 +163,19 @@ public class CssLinkResourceTransformerTests { } @Test // https://github.com/spring-projects/spring-framework/issues/22602 - public void transformEmptyUrlFunction() throws Exception { + void transformEmptyUrlFunction() throws Exception { MockServerWebExchange exchange = MockServerWebExchange.from(get("/static/empty_url_function.css")); Resource css = getResource("empty_url_function.css"); String expected = """ .fooStyle { - \tbackground: transparent url() no-repeat left top; + background: transparent url() no-repeat left top; }"""; StepVerifier.create(this.transformerChain.transform(exchange, css) .cast(TransformedResource.class)) .consumeNextWith(transformedResource -> { - String result = new String(transformedResource.getByteArray(), StandardCharsets.UTF_8); - result = StringUtils.deleteAny(result, "\r"); - assertThat(result).isEqualTo(expected); + String result = new String(transformedResource.getByteArray(), UTF_8); + assertThat(result).isEqualToNormalizingNewlines(expected); }) .expectComplete() .verify(); diff --git a/spring-webmvc/src/test/java/org/springframework/web/servlet/function/DefaultServerRequestTests.java b/spring-webmvc/src/test/java/org/springframework/web/servlet/function/DefaultServerRequestTests.java index 08890f6670b..1496f0ab920 100644 --- a/spring-webmvc/src/test/java/org/springframework/web/servlet/function/DefaultServerRequestTests.java +++ b/spring-webmvc/src/test/java/org/springframework/web/servlet/function/DefaultServerRequestTests.java @@ -66,8 +66,8 @@ import static org.assertj.core.api.Assertions.assertThatIllegalArgumentException */ class DefaultServerRequestTests { - private final List> messageConverters = Collections.singletonList( - new StringHttpMessageConverter()); + private final List> messageConverters = List.of(new StringHttpMessageConverter()); + @Test void method() { @@ -84,8 +84,7 @@ class DefaultServerRequestTests { servletRequest.setScheme("https"); servletRequest.setServerPort(443); - DefaultServerRequest request = - new DefaultServerRequest(servletRequest, this.messageConverters); + DefaultServerRequest request = new DefaultServerRequest(servletRequest, this.messageConverters); assertThat(request.uri()).isEqualTo(URI.create("https://example.com/")); } @@ -95,8 +94,7 @@ class DefaultServerRequestTests { MockHttpServletRequest servletRequest = PathPatternsTestUtils.initRequest("GET", "/path", true); servletRequest.setQueryString("a=1"); - DefaultServerRequest request = - new DefaultServerRequest(servletRequest, this.messageConverters); + DefaultServerRequest request = new DefaultServerRequest(servletRequest, this.messageConverters); URI result = request.uriBuilder().build(); assertThat(result.getScheme()).isEqualTo("http"); @@ -111,8 +109,7 @@ class DefaultServerRequestTests { MockHttpServletRequest servletRequest = PathPatternsTestUtils.initRequest("GET", "/", true); servletRequest.setAttribute("foo", "bar"); - DefaultServerRequest request = - new DefaultServerRequest(servletRequest, this.messageConverters); + DefaultServerRequest request = new DefaultServerRequest(servletRequest, this.messageConverters); assertThat(request.attribute("foo")).isEqualTo(Optional.of("bar")); } @@ -122,8 +119,7 @@ class DefaultServerRequestTests { MockHttpServletRequest servletRequest = PathPatternsTestUtils.initRequest("GET", "/", true); servletRequest.setParameter("foo", "bar"); - DefaultServerRequest request = - new DefaultServerRequest(servletRequest, this.messageConverters); + DefaultServerRequest request = new DefaultServerRequest(servletRequest, this.messageConverters); assertThat(request.param("foo")).isEqualTo(Optional.of("bar")); } @@ -137,8 +133,7 @@ class DefaultServerRequestTests { servletRequest.addPart(formPart); servletRequest.addPart(filePart); - DefaultServerRequest request = - new DefaultServerRequest(servletRequest, this.messageConverters); + DefaultServerRequest request = new DefaultServerRequest(servletRequest, this.messageConverters); MultiValueMap result = request.multipartData(); @@ -152,8 +147,7 @@ class DefaultServerRequestTests { MockHttpServletRequest servletRequest = PathPatternsTestUtils.initRequest("GET", "/", true); servletRequest.setParameter("foo", ""); - DefaultServerRequest request = - new DefaultServerRequest(servletRequest, this.messageConverters); + DefaultServerRequest request = new DefaultServerRequest(servletRequest, this.messageConverters); assertThat(request.param("foo")).isEqualTo(Optional.of("")); } @@ -163,8 +157,7 @@ class DefaultServerRequestTests { MockHttpServletRequest servletRequest = PathPatternsTestUtils.initRequest("GET", "/", true); servletRequest.setParameter("foo", ""); - DefaultServerRequest request = - new DefaultServerRequest(servletRequest, this.messageConverters); + DefaultServerRequest request = new DefaultServerRequest(servletRequest, this.messageConverters); assertThat(request.param("bar")).isEqualTo(Optional.empty()); } @@ -173,11 +166,9 @@ class DefaultServerRequestTests { void pathVariable() { MockHttpServletRequest servletRequest = PathPatternsTestUtils.initRequest("GET", "/", true); Map pathVariables = Collections.singletonMap("foo", "bar"); - servletRequest - .setAttribute(RouterFunctions.URI_TEMPLATE_VARIABLES_ATTRIBUTE, pathVariables); + servletRequest.setAttribute(RouterFunctions.URI_TEMPLATE_VARIABLES_ATTRIBUTE, pathVariables); - DefaultServerRequest request = new DefaultServerRequest(servletRequest, - this.messageConverters); + DefaultServerRequest request = new DefaultServerRequest(servletRequest, this.messageConverters); assertThat(request.pathVariable("foo")).isEqualTo("bar"); } @@ -186,25 +177,20 @@ class DefaultServerRequestTests { void pathVariableNotFound() { MockHttpServletRequest servletRequest = PathPatternsTestUtils.initRequest("GET", "/", true); Map pathVariables = Collections.singletonMap("foo", "bar"); - servletRequest - .setAttribute(RouterFunctions.URI_TEMPLATE_VARIABLES_ATTRIBUTE, pathVariables); + servletRequest.setAttribute(RouterFunctions.URI_TEMPLATE_VARIABLES_ATTRIBUTE, pathVariables); - DefaultServerRequest request = new DefaultServerRequest(servletRequest, - this.messageConverters); + DefaultServerRequest request = new DefaultServerRequest(servletRequest, this.messageConverters); - assertThatIllegalArgumentException().isThrownBy(() -> - request.pathVariable("baz")); + assertThatIllegalArgumentException().isThrownBy(() -> request.pathVariable("baz")); } @Test void pathVariables() { MockHttpServletRequest servletRequest = PathPatternsTestUtils.initRequest("GET", "/", true); Map pathVariables = Collections.singletonMap("foo", "bar"); - servletRequest - .setAttribute(RouterFunctions.URI_TEMPLATE_VARIABLES_ATTRIBUTE, pathVariables); + servletRequest.setAttribute(RouterFunctions.URI_TEMPLATE_VARIABLES_ATTRIBUTE, pathVariables); - DefaultServerRequest request = new DefaultServerRequest(servletRequest, - this.messageConverters); + DefaultServerRequest request = new DefaultServerRequest(servletRequest, this.messageConverters); assertThat(request.pathVariables()).isEqualTo(pathVariables); } @@ -212,8 +198,7 @@ class DefaultServerRequestTests { @Test void header() { HttpHeaders httpHeaders = new HttpHeaders(); - List accept = - Collections.singletonList(MediaType.APPLICATION_JSON); + List accept = Collections.singletonList(MediaType.APPLICATION_JSON); httpHeaders.setAccept(accept); List acceptCharset = Collections.singletonList(UTF_8); httpHeaders.setAcceptCharset(acceptCharset); @@ -230,8 +215,7 @@ class DefaultServerRequestTests { httpHeaders.forEach(servletRequest::addHeader); servletRequest.setContentType(MediaType.TEXT_PLAIN_VALUE); - DefaultServerRequest request = new DefaultServerRequest(servletRequest, - this.messageConverters); + DefaultServerRequest request = new DefaultServerRequest(servletRequest, this.messageConverters); ServerRequest.Headers headers = request.headers(); assertThat(headers.accept()).isEqualTo(accept); @@ -250,8 +234,7 @@ class DefaultServerRequestTests { MockHttpServletRequest servletRequest = PathPatternsTestUtils.initRequest("GET", "/", true); servletRequest.setCookies(cookie); - DefaultServerRequest request = new DefaultServerRequest(servletRequest, - this.messageConverters); + DefaultServerRequest request = new DefaultServerRequest(servletRequest, this.messageConverters); MultiValueMap expected = new LinkedMultiValueMap<>(); expected.add("foo", cookie); @@ -266,8 +249,7 @@ class DefaultServerRequestTests { servletRequest.setContentType(MediaType.TEXT_PLAIN_VALUE); servletRequest.setContent("foo".getBytes(UTF_8)); - DefaultServerRequest request = new DefaultServerRequest(servletRequest, - this.messageConverters); + DefaultServerRequest request = new DefaultServerRequest(servletRequest, this.messageConverters); String result = request.body(String.class); assertThat(result).isEqualTo("foo"); @@ -280,7 +262,7 @@ class DefaultServerRequestTests { servletRequest.setContent("[\"foo\",\"bar\"]".getBytes(UTF_8)); DefaultServerRequest request = new DefaultServerRequest(servletRequest, - Collections.singletonList(new MappingJackson2HttpMessageConverter())); + List.of(new MappingJackson2HttpMessageConverter())); List result = request.body(new ParameterizedTypeReference>() {}); assertThat(result).hasSize(2); @@ -294,11 +276,10 @@ class DefaultServerRequestTests { servletRequest.setContentType(MediaType.TEXT_PLAIN_VALUE); servletRequest.setContent("foo".getBytes(UTF_8)); - DefaultServerRequest request = - new DefaultServerRequest(servletRequest, Collections.emptyList()); + DefaultServerRequest request = new DefaultServerRequest(servletRequest, Collections.emptyList()); - assertThatExceptionOfType(HttpMediaTypeNotSupportedException.class).isThrownBy(() -> - request.body(String.class)); + assertThatExceptionOfType(HttpMediaTypeNotSupportedException.class) + .isThrownBy(() -> request.body(String.class)); } @Test @@ -307,11 +288,9 @@ class DefaultServerRequestTests { MockHttpSession session = new MockHttpSession(); servletRequest.setSession(session); - DefaultServerRequest request = new DefaultServerRequest(servletRequest, - this.messageConverters); + DefaultServerRequest request = new DefaultServerRequest(servletRequest, this.messageConverters); assertThat(request.session()).isEqualTo(session); - } @Test @@ -320,8 +299,7 @@ class DefaultServerRequestTests { Principal principal = () -> "foo"; servletRequest.setUserPrincipal(principal); - DefaultServerRequest request = new DefaultServerRequest(servletRequest, - this.messageConverters); + DefaultServerRequest request = new DefaultServerRequest(servletRequest, this.messageConverters); assertThat(request.principal().get()).isEqualTo(principal); } diff --git a/spring-webmvc/src/test/java/org/springframework/web/servlet/function/ToStringVisitorTests.java b/spring-webmvc/src/test/java/org/springframework/web/servlet/function/ToStringVisitorTests.java index 2b00f2d882f..bcccd860a7e 100644 --- a/spring-webmvc/src/test/java/org/springframework/web/servlet/function/ToStringVisitorTests.java +++ b/spring-webmvc/src/test/java/org/springframework/web/servlet/function/ToStringVisitorTests.java @@ -35,10 +35,10 @@ import static org.springframework.web.servlet.function.RouterFunctions.route; /** * @author Arjen Poutsma */ -public class ToStringVisitorTests { +class ToStringVisitorTests { @Test - public void nested() { + void nested() { HandlerFunction handler = new SimpleHandlerFunction(); RouterFunction routerFunction = route() .path("/foo", builder -> @@ -62,7 +62,7 @@ public class ToStringVisitorTests { } @Test - public void predicates() { + void predicates() { testPredicate(methods(HttpMethod.GET), "GET"); testPredicate(methods(HttpMethod.GET, HttpMethod.POST), "[GET, POST]"); @@ -95,9 +95,7 @@ public class ToStringVisitorTests { private void testPredicate(RequestPredicate predicate, String expected) { ToStringVisitor visitor = new ToStringVisitor(); predicate.accept(visitor); - String result = visitor.toString(); - - assertThat(result).isEqualTo(expected); + assertThat(visitor).asString().isEqualTo(expected); } diff --git a/spring-webmvc/src/test/java/org/springframework/web/servlet/resource/CssLinkResourceTransformerTests.java b/spring-webmvc/src/test/java/org/springframework/web/servlet/resource/CssLinkResourceTransformerTests.java index 118ccc467f2..453528691f5 100644 --- a/spring-webmvc/src/test/java/org/springframework/web/servlet/resource/CssLinkResourceTransformerTests.java +++ b/spring-webmvc/src/test/java/org/springframework/web/servlet/resource/CssLinkResourceTransformerTests.java @@ -16,10 +16,9 @@ package org.springframework.web.servlet.resource; -import java.nio.charset.StandardCharsets; -import java.util.ArrayList; import java.util.Collections; import java.util.List; +import java.util.Map; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; @@ -28,11 +27,11 @@ import org.mockito.Mockito; import org.springframework.core.io.ClassPathResource; import org.springframework.core.io.Resource; -import org.springframework.util.StringUtils; import org.springframework.web.servlet.resource.EncodedResourceResolver.EncodedResource; import org.springframework.web.servlet.resource.GzipSupport.GzippedFiles; import org.springframework.web.testfixture.servlet.MockHttpServletRequest; +import static java.nio.charset.StandardCharsets.UTF_8; import static org.assertj.core.api.Assertions.assertThat; /** @@ -44,7 +43,7 @@ import static org.assertj.core.api.Assertions.assertThat; * @since 4.1 */ @ExtendWith(GzipSupport.class) -public class CssLinkResourceTransformerTests { +class CssLinkResourceTransformerTests { private ResourceTransformerChain transformerChain; @@ -52,14 +51,12 @@ public class CssLinkResourceTransformerTests { @BeforeEach - public void setUp() { + void setUp() { VersionResourceResolver versionResolver = new VersionResourceResolver(); versionResolver.setStrategyMap(Collections.singletonMap("/**", new ContentVersionStrategy())); PathResourceResolver pathResolver = new PathResourceResolver(); pathResolver.setAllowedLocations(new ClassPathResource("test/", getClass())); - List resolvers = new ArrayList<>(); - resolvers.add(versionResolver); - resolvers.add(new PathResourceResolver()); + List resolvers = List.of(versionResolver, new PathResourceResolver()); ResourceUrlProvider resourceUrlProvider = createUrlProvider(resolvers); CssLinkResourceTransformer cssLinkTransformer = new CssLinkResourceTransformer(); @@ -72,16 +69,16 @@ public class CssLinkResourceTransformerTests { private ResourceUrlProvider createUrlProvider(List resolvers) { ResourceHttpRequestHandler resourceHandler = new ResourceHttpRequestHandler(); resourceHandler.setResourceResolvers(resolvers); - resourceHandler.setLocations(Collections.singletonList(new ClassPathResource("test/", getClass()))); + resourceHandler.setLocations(List.of(new ClassPathResource("test/", getClass()))); ResourceUrlProvider resourceUrlProvider = new ResourceUrlProvider(); - resourceUrlProvider.setHandlerMap(Collections.singletonMap("/static/**", resourceHandler)); + resourceUrlProvider.setHandlerMap(Map.of("/static/**", resourceHandler)); return resourceUrlProvider; } @Test - public void transform() throws Exception { + void transform() throws Exception { this.request = new MockHttpServletRequest("GET", "/static/main.css"); Resource css = getResource("main.css"); String expected = """ @@ -97,13 +94,12 @@ public class CssLinkResourceTransformerTests { """; TransformedResource actual = (TransformedResource) this.transformerChain.transform(this.request, css); - String result = new String(actual.getByteArray(), StandardCharsets.UTF_8); - result = StringUtils.deleteAny(result, "\r"); - assertThat(result).isEqualTo(expected); + String result = new String(actual.getByteArray(), UTF_8); + assertThat(result).isEqualToNormalizingNewlines(expected); } @Test - public void transformNoLinks() throws Exception { + void transformNoLinks() throws Exception { this.request = new MockHttpServletRequest("GET", "/static/foo.css"); Resource expected = getResource("foo.css"); Resource actual = this.transformerChain.transform(this.request, expected); @@ -111,7 +107,7 @@ public class CssLinkResourceTransformerTests { } @Test - public void transformExtLinksNotAllowed() throws Exception { + void transformExtLinksNotAllowed() throws Exception { this.request = new MockHttpServletRequest("GET", "/static/external.css"); List transformers = Collections.singletonList(new CssLinkResourceTransformer()); @@ -125,18 +121,17 @@ public class CssLinkResourceTransformerTests { figure { background: url("//example.org/style.css")}"""; TransformedResource transformedResource = (TransformedResource) chain.transform(this.request, resource); - String result = new String(transformedResource.getByteArray(), StandardCharsets.UTF_8); - result = StringUtils.deleteAny(result, "\r"); - assertThat(result).isEqualTo(expected); + String result = new String(transformedResource.getByteArray(), UTF_8); + assertThat(result).isEqualToNormalizingNewlines(expected); - List locations = Collections.singletonList(resource); + List locations = List.of(resource); Mockito.verify(mockChain, Mockito.never()).resolveUrlPath("https://example.org/fonts/css", locations); Mockito.verify(mockChain, Mockito.never()).resolveUrlPath("file:///home/spring/image.png", locations); Mockito.verify(mockChain, Mockito.never()).resolveUrlPath("//example.org/style.css", locations); } @Test - public void transformSkippedForNonCssResource() throws Exception { + void transformSkippedForNonCssResource() throws Exception { this.request = new MockHttpServletRequest("GET", "/static/images/image.png"); Resource expected = getResource("images/image.png"); Resource actual = this.transformerChain.transform(this.request, expected); @@ -145,7 +140,7 @@ public class CssLinkResourceTransformerTests { } @Test - public void transformSkippedForGzippedResource(GzippedFiles gzippedFiles) throws Exception { + void transformSkippedForGzippedResource(GzippedFiles gzippedFiles) throws Exception { gzippedFiles.create("main.css"); this.request = new MockHttpServletRequest("GET", "/static/main.css"); @@ -157,18 +152,17 @@ public class CssLinkResourceTransformerTests { } @Test // https://github.com/spring-projects/spring-framework/issues/22602 - public void transformEmptyUrlFunction() throws Exception { + void transformEmptyUrlFunction() throws Exception { this.request = new MockHttpServletRequest("GET", "/static/empty_url_function.css"); Resource css = getResource("empty_url_function.css"); String expected = """ .fooStyle { - \tbackground: transparent url() no-repeat left top; + background: transparent url() no-repeat left top; }"""; TransformedResource actual = (TransformedResource) this.transformerChain.transform(this.request, css); - String result = new String(actual.getByteArray(), StandardCharsets.UTF_8); - result = StringUtils.deleteAny(result, "\r"); - assertThat(result).isEqualTo(expected); + String result = new String(actual.getByteArray(), UTF_8); + assertThat(result).isEqualToNormalizingNewlines(expected); } private Resource getResource(String filePath) {