This commit is contained in:
Rossen Stoyanchev
2017-08-16 15:45:14 +02:00
parent 5b29555d88
commit e433d8b66a
5 changed files with 45 additions and 32 deletions

View File

@@ -17,12 +17,12 @@
package org.springframework.http.codec.json;
import java.nio.charset.StandardCharsets;
import java.util.Collections;
import java.util.List;
import java.util.Map;
import com.fasterxml.jackson.databind.ObjectMapper;
import org.junit.Test;
import org.springframework.util.MimeType;
import reactor.core.publisher.Flux;
import reactor.core.publisher.Mono;
import reactor.test.StepVerifier;
@@ -33,11 +33,15 @@ import org.springframework.core.codec.DecodingException;
import org.springframework.core.io.buffer.AbstractDataBufferAllocatingTestCase;
import org.springframework.core.io.buffer.DataBuffer;
import org.springframework.http.codec.Pojo;
import org.springframework.util.MimeType;
import static java.util.Arrays.asList;
import static java.util.Collections.emptyMap;
import static java.util.Collections.singletonMap;
import static org.junit.Assert.*;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertNull;
import static org.junit.Assert.assertTrue;
import static org.springframework.core.ResolvableType.forClass;
import static org.springframework.http.MediaType.APPLICATION_JSON;
import static org.springframework.http.MediaType.APPLICATION_XML;
@@ -64,19 +68,20 @@ public class Jackson2JsonDecoderTests extends AbstractDataBufferAllocatingTestCa
assertFalse(decoder.canDecode(forClass(Pojo.class), APPLICATION_XML));
}
@Test(expected = UnsupportedOperationException.class)
@Test // SPR-15866
public void canDecodeWithProvidedMimeType() {
MimeType textJavascript = new MimeType("text", "javascript", StandardCharsets.UTF_8);
Jackson2JsonDecoder decoder = new Jackson2JsonDecoder(new ObjectMapper(), textJavascript);
assertEquals(1, decoder.getDecodableMimeTypes().size());
assertTrue(decoder.getDecodableMimeTypes().contains(textJavascript));
assertTrue(decoder.canDecode(forClass(Pojo.class), textJavascript));
assertFalse(decoder.canDecode(forClass(Pojo.class), APPLICATION_JSON));
assertEquals(Collections.singletonList(textJavascript), decoder.getDecodableMimeTypes());
}
@Test(expected = UnsupportedOperationException.class)
public void decodableMimeTypesIsImmutable() {
MimeType textJavascript = new MimeType("text", "javascript", StandardCharsets.UTF_8);
Jackson2JsonDecoder decoder = new Jackson2JsonDecoder(new ObjectMapper(), textJavascript);
// Validate immutability of mime types list
decoder.getMimeTypes().add(new MimeType("text", "ecmascript"));
assertEquals(1, decoder.getDecodableMimeTypes().size());
}
@Test

View File

@@ -18,6 +18,7 @@ package org.springframework.http.codec.json;
import java.nio.charset.StandardCharsets;
import java.util.Arrays;
import java.util.Collections;
import java.util.Map;
import com.fasterxml.jackson.annotation.JsonTypeInfo;
@@ -62,19 +63,20 @@ public class Jackson2JsonEncoderTests extends AbstractDataBufferAllocatingTestCa
assertTrue(this.encoder.canEncode(ResolvableType.NONE, null));
}
@Test(expected = UnsupportedOperationException.class)
@Test // SPR-15866
public void canEncodeWithCustomMimeType() {
ResolvableType pojoType = ResolvableType.forClass(Pojo.class);
MimeType textJavascript = new MimeType("text", "javascript", StandardCharsets.UTF_8);
Jackson2JsonEncoder encoder = new Jackson2JsonEncoder(new ObjectMapper(), textJavascript);
assertEquals(1, encoder.getEncodableMimeTypes().size());
assertTrue(encoder.getEncodableMimeTypes().contains(textJavascript));
assertTrue(encoder.canEncode(pojoType, textJavascript));
assertEquals(Collections.singletonList(textJavascript), encoder.getEncodableMimeTypes());
}
@Test(expected = UnsupportedOperationException.class)
public void encodableMimeTypesIsImmutable() {
MimeType textJavascript = new MimeType("text", "javascript", StandardCharsets.UTF_8);
Jackson2JsonEncoder encoder = new Jackson2JsonEncoder(new ObjectMapper(), textJavascript);
// Validate immutability of mime types list
encoder.getMimeTypes().add(new MimeType("text", "ecmascript"));
assertEquals(1, encoder.getEncodableMimeTypes().size());
}
@Test