|
16 | 16 |
|
17 | 17 | package org.springframework.http.codec;
|
18 | 18 |
|
19 |
| -import java.lang.reflect.InvocationTargetException; |
20 |
| -import java.lang.reflect.Method; |
21 |
| -import java.nio.charset.StandardCharsets; |
22 |
| -import java.util.Arrays; |
23 |
| -import java.util.Collections; |
24 |
| -import java.util.List; |
25 |
| -import java.util.Map; |
26 |
| - |
27 | 19 | import org.junit.jupiter.api.Test;
|
28 | 20 | import org.mockito.ArgumentCaptor;
|
29 | 21 | import org.mockito.Mock;
|
30 | 22 | import org.mockito.junit.jupiter.MockitoSettings;
|
31 | 23 | import org.mockito.quality.Strictness;
|
32 |
| -import reactor.core.publisher.Flux; |
33 |
| -import reactor.core.publisher.Mono; |
34 |
| -import reactor.test.StepVerifier; |
35 |
| - |
| 24 | +import org.springframework.core.ResolvableType; |
36 | 25 | import org.springframework.core.codec.CharSequenceEncoder;
|
| 26 | +import org.springframework.core.codec.Encoder; |
37 | 27 | import org.springframework.core.io.buffer.DataBuffer;
|
38 | 28 | import org.springframework.core.io.buffer.DefaultDataBufferFactory;
|
| 29 | +import org.springframework.http.HttpHeaders; |
| 30 | +import org.springframework.http.HttpMethod; |
39 | 31 | import org.springframework.http.MediaType;
|
| 32 | +import org.springframework.http.ReactiveHttpOutputMessage; |
40 | 33 | import org.springframework.util.MimeType;
|
41 | 34 | import org.springframework.util.MimeTypeUtils;
|
42 | 35 | import org.springframework.util.ReflectionUtils;
|
| 36 | +import org.springframework.web.testfixture.http.client.reactive.MockClientHttpRequest; |
43 | 37 | import org.springframework.web.testfixture.http.server.reactive.MockServerHttpResponse;
|
| 38 | +import reactor.core.publisher.Flux; |
| 39 | +import reactor.core.publisher.Mono; |
| 40 | +import reactor.test.StepVerifier; |
| 41 | + |
| 42 | +import java.lang.reflect.InvocationTargetException; |
| 43 | +import java.lang.reflect.Method; |
| 44 | +import java.nio.charset.StandardCharsets; |
| 45 | +import java.util.Arrays; |
| 46 | +import java.util.Collections; |
| 47 | +import java.util.List; |
| 48 | +import java.util.Map; |
44 | 49 |
|
45 | 50 | import static java.nio.charset.StandardCharsets.ISO_8859_1;
|
46 | 51 | import static java.nio.charset.StandardCharsets.UTF_8;
|
@@ -199,6 +204,35 @@ void isStreamingMediaType() throws InvocationTargetException, IllegalAccessExcep
|
199 | 204 | assertThat((Boolean) method.invoke(writer, TEXT_HTML)).isFalse();
|
200 | 205 | }
|
201 | 206 |
|
| 207 | + @Test |
| 208 | + public void ifBodyPublisherEmpty_noContentTypeHeader() { |
| 209 | + Encoder<CharSequence> encoder = CharSequenceEncoder.textPlainOnly(); |
| 210 | + EncoderHttpMessageWriter<CharSequence> writer = new EncoderHttpMessageWriter<>(encoder); |
| 211 | + ReactiveHttpOutputMessage outputMessage = new MockClientHttpRequest(HttpMethod.POST, "/"); |
| 212 | + Mono<Void> writerMono = writer.write(Mono.empty(), ResolvableType.forClass(String.class), |
| 213 | + null, outputMessage, NO_HINTS); |
| 214 | + |
| 215 | + StepVerifier.create(writerMono) |
| 216 | + .verifyComplete(); |
| 217 | + assertThat(outputMessage.getHeaders()).doesNotContainKey(HttpHeaders.CONTENT_TYPE); |
| 218 | + } |
| 219 | + |
| 220 | + @Test |
| 221 | + public void ifBodyPublisherEmpty_contentLengthZero() { |
| 222 | + Encoder<CharSequence> encoder = CharSequenceEncoder.textPlainOnly(); |
| 223 | + EncoderHttpMessageWriter<CharSequence> writer = new EncoderHttpMessageWriter<>(encoder); |
| 224 | + ReactiveHttpOutputMessage outputMessage = new MockClientHttpRequest(HttpMethod.POST, "/"); |
| 225 | + Mono<Void> writerMono = writer.write(Mono.empty(), ResolvableType.forClass(String.class), |
| 226 | + null, outputMessage, NO_HINTS); |
| 227 | + |
| 228 | + StepVerifier.create(writerMono) |
| 229 | + .verifyComplete(); |
| 230 | + List<String> contentLengthValues = outputMessage.getHeaders().get(HttpHeaders.CONTENT_LENGTH); |
| 231 | + assertThat(contentLengthValues).hasSize(1); |
| 232 | + int contentLength = Integer.parseInt(contentLengthValues.get(0)); |
| 233 | + assertThat(contentLength).isEqualTo(0); |
| 234 | + } |
| 235 | + |
202 | 236 | private void configureEncoder(MimeType... mimeTypes) {
|
203 | 237 | configureEncoder(Flux.empty(), mimeTypes);
|
204 | 238 | }
|
|
0 commit comments