|
18 | 18 |
|
19 | 19 | import java.util.List;
|
20 | 20 | import java.util.concurrent.atomic.AtomicInteger;
|
| 21 | +import java.util.stream.Collectors; |
21 | 22 |
|
22 | 23 | import com.google.protobuf.ExtensionRegistry;
|
23 | 24 | import org.junit.jupiter.api.Test;
|
|
42 | 43 | import org.springframework.http.codec.HttpMessageWriter;
|
43 | 44 | import org.springframework.http.codec.ResourceHttpMessageReader;
|
44 | 45 | import org.springframework.http.codec.ResourceHttpMessageWriter;
|
| 46 | +import org.springframework.http.codec.ServerSentEventHttpMessageReader; |
| 47 | +import org.springframework.http.codec.ServerSentEventHttpMessageWriter; |
45 | 48 | import org.springframework.http.codec.json.Jackson2JsonDecoder;
|
46 | 49 | import org.springframework.http.codec.json.Jackson2JsonEncoder;
|
47 | 50 | import org.springframework.http.codec.json.Jackson2SmileDecoder;
|
@@ -269,11 +272,68 @@ public void encoderDecoderOverrides() {
|
269 | 272 | }
|
270 | 273 |
|
271 | 274 | @Test
|
272 |
| - public void cloneConfigurer() { |
273 |
| - CodecConfigurer clone = this.configurer.clone(); |
| 275 | + public void cloneCustomCodecs() { |
274 | 276 | this.configurer.registerDefaults(false);
|
| 277 | + CodecConfigurer clone = this.configurer.clone(); |
| 278 | + |
| 279 | + clone.customCodecs().encoder(new Jackson2JsonEncoder()); |
| 280 | + clone.customCodecs().decoder(new Jackson2JsonDecoder()); |
| 281 | + clone.customCodecs().reader(new ServerSentEventHttpMessageReader()); |
| 282 | + clone.customCodecs().writer(new ServerSentEventHttpMessageWriter()); |
| 283 | + |
275 | 284 | assertThat(this.configurer.getReaders().size()).isEqualTo(0);
|
276 |
| - assertThat(clone.getReaders().size()).isEqualTo(11); |
| 285 | + assertThat(this.configurer.getWriters().size()).isEqualTo(0); |
| 286 | + assertThat(clone.getReaders().size()).isEqualTo(2); |
| 287 | + assertThat(clone.getWriters().size()).isEqualTo(2); |
| 288 | + } |
| 289 | + |
| 290 | + @Test |
| 291 | + public void cloneDefaultCodecs() { |
| 292 | + CodecConfigurer clone = this.configurer.clone(); |
| 293 | + |
| 294 | + Jackson2JsonDecoder jacksonDecoder = new Jackson2JsonDecoder(); |
| 295 | + Jackson2JsonEncoder jacksonEncoder = new Jackson2JsonEncoder(); |
| 296 | + Jaxb2XmlDecoder jaxb2Decoder = new Jaxb2XmlDecoder(); |
| 297 | + Jaxb2XmlEncoder jaxb2Encoder = new Jaxb2XmlEncoder(); |
| 298 | + ProtobufDecoder protoDecoder = new ProtobufDecoder(); |
| 299 | + ProtobufEncoder protoEncoder = new ProtobufEncoder(); |
| 300 | + |
| 301 | + clone.defaultCodecs().jackson2JsonDecoder(jacksonDecoder); |
| 302 | + clone.defaultCodecs().jackson2JsonEncoder(jacksonEncoder); |
| 303 | + clone.defaultCodecs().jaxb2Decoder(jaxb2Decoder); |
| 304 | + clone.defaultCodecs().jaxb2Encoder(jaxb2Encoder); |
| 305 | + clone.defaultCodecs().protobufDecoder(protoDecoder); |
| 306 | + clone.defaultCodecs().protobufEncoder(protoEncoder); |
| 307 | + |
| 308 | + // Clone has the customized the customizations |
| 309 | + |
| 310 | + List<Decoder<?>> decoders = clone.getReaders().stream() |
| 311 | + .filter(reader -> reader instanceof DecoderHttpMessageReader) |
| 312 | + .map(reader -> ((DecoderHttpMessageReader<?>) reader).getDecoder()) |
| 313 | + .collect(Collectors.toList()); |
| 314 | + |
| 315 | + List<Encoder<?>> encoders = clone.getWriters().stream() |
| 316 | + .filter(writer -> writer instanceof EncoderHttpMessageWriter) |
| 317 | + .map(reader -> ((EncoderHttpMessageWriter<?>) reader).getEncoder()) |
| 318 | + .collect(Collectors.toList()); |
| 319 | + |
| 320 | + assertThat(decoders).contains(jacksonDecoder, jaxb2Decoder, protoDecoder); |
| 321 | + assertThat(encoders).contains(jacksonEncoder, jaxb2Encoder, protoEncoder); |
| 322 | + |
| 323 | + // Original does not have the customizations |
| 324 | + |
| 325 | + decoders = this.configurer.getReaders().stream() |
| 326 | + .filter(reader -> reader instanceof DecoderHttpMessageReader) |
| 327 | + .map(reader -> ((DecoderHttpMessageReader<?>) reader).getDecoder()) |
| 328 | + .collect(Collectors.toList()); |
| 329 | + |
| 330 | + encoders = this.configurer.getWriters().stream() |
| 331 | + .filter(writer -> writer instanceof EncoderHttpMessageWriter) |
| 332 | + .map(reader -> ((EncoderHttpMessageWriter<?>) reader).getEncoder()) |
| 333 | + .collect(Collectors.toList()); |
| 334 | + |
| 335 | + assertThat(decoders).doesNotContain(jacksonDecoder, jaxb2Decoder, protoDecoder); |
| 336 | + assertThat(encoders).doesNotContain(jacksonEncoder, jaxb2Encoder, protoEncoder); |
277 | 337 | }
|
278 | 338 |
|
279 | 339 | private Decoder<?> getNextDecoder(List<HttpMessageReader<?>> readers) {
|
@@ -324,10 +384,21 @@ private void assertEncoderInstance(Encoder<?> encoder) {
|
324 | 384 | private static class TestCodecConfigurer extends BaseCodecConfigurer {
|
325 | 385 |
|
326 | 386 | TestCodecConfigurer() {
|
327 |
| - super(new TestDefaultCodecs()); |
| 387 | + super(new BaseDefaultCodecs()); |
| 388 | + } |
| 389 | + |
| 390 | + TestCodecConfigurer(TestCodecConfigurer other) { |
| 391 | + super(other); |
| 392 | + } |
| 393 | + |
| 394 | + @Override |
| 395 | + protected BaseDefaultCodecs cloneDefaultCodecs() { |
| 396 | + return new BaseDefaultCodecs((BaseDefaultCodecs) defaultCodecs()); |
328 | 397 | }
|
329 | 398 |
|
330 |
| - private static class TestDefaultCodecs extends BaseDefaultCodecs { |
| 399 | + @Override |
| 400 | + public CodecConfigurer clone() { |
| 401 | + return new TestCodecConfigurer(this); |
331 | 402 | }
|
332 | 403 | }
|
333 | 404 |
|
|
0 commit comments