diff --git a/spring-web/src/test/java/org/springframework/http/converter/StringHttpMessageConverterTests.java b/spring-web/src/test/java/org/springframework/http/converter/StringHttpMessageConverterTests.java index 6dcdb25fcf7..2fa2a574f58 100644 --- a/spring-web/src/test/java/org/springframework/http/converter/StringHttpMessageConverterTests.java +++ b/spring-web/src/test/java/org/springframework/http/converter/StringHttpMessageConverterTests.java @@ -1,5 +1,5 @@ /* - * Copyright 2002-2012 the original author or authors. + * Copyright 2002-2016 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. @@ -22,86 +22,97 @@ import java.nio.charset.Charset; import org.junit.Before; import org.junit.Test; +import org.springframework.http.HttpHeaders; import org.springframework.http.MediaType; import org.springframework.http.MockHttpInputMessage; import org.springframework.http.MockHttpOutputMessage; import static org.junit.Assert.*; -/** @author Arjen Poutsma */ +/** + * @author Arjen Poutsma + * @author Rossen Stoyanchev + */ public class StringHttpMessageConverterTests { + public static final Charset UTF_8 = Charset.forName("UTF-8"); + + public static final MediaType TEXT_PLAIN_UTF_8 = new MediaType("text", "plain", UTF_8); + + private StringHttpMessageConverter converter; + private MockHttpOutputMessage outputMessage; + + @Before public void setUp() { - converter = new StringHttpMessageConverter(); + this.converter = new StringHttpMessageConverter(); + this.outputMessage = new MockHttpOutputMessage(); } + @Test public void canRead() { - assertTrue(converter.canRead(String.class, new MediaType("text", "plain"))); + assertTrue(this.converter.canRead(String.class, MediaType.TEXT_PLAIN)); } @Test public void canWrite() { - assertTrue(converter.canWrite(String.class, new MediaType("text", "plain"))); - assertTrue(converter.canWrite(String.class, MediaType.ALL)); + assertTrue(this.converter.canWrite(String.class, MediaType.TEXT_PLAIN)); + assertTrue(this.converter.canWrite(String.class, MediaType.ALL)); } @Test public void read() throws IOException { String body = "Hello World"; - Charset charset = Charset.forName("UTF-8"); - MockHttpInputMessage inputMessage = new MockHttpInputMessage(body.getBytes(charset)); - inputMessage.getHeaders().setContentType(new MediaType("text", "plain", charset)); - String result = converter.read(String.class, inputMessage); + MockHttpInputMessage inputMessage = new MockHttpInputMessage(body.getBytes(UTF_8)); + inputMessage.getHeaders().setContentType(TEXT_PLAIN_UTF_8); + String result = this.converter.read(String.class, inputMessage); + assertEquals("Invalid result", body, result); } @Test public void writeDefaultCharset() throws IOException { Charset iso88591 = Charset.forName("ISO-8859-1"); - MockHttpOutputMessage outputMessage = new MockHttpOutputMessage(); String body = "H\u00e9llo W\u00f6rld"; - converter.write(body, null, outputMessage); - assertEquals("Invalid result", body, outputMessage.getBodyAsString(iso88591)); - assertEquals("Invalid content-type", new MediaType("text", "plain", iso88591), - outputMessage.getHeaders().getContentType()); - assertEquals("Invalid content-length", body.getBytes(iso88591).length, - outputMessage.getHeaders().getContentLength()); - assertFalse("Invalid accept-charset", outputMessage.getHeaders().getAcceptCharset().isEmpty()); + this.converter.write(body, null, this.outputMessage); + + HttpHeaders headers = this.outputMessage.getHeaders(); + assertEquals(body, this.outputMessage.getBodyAsString(iso88591)); + assertEquals(new MediaType("text", "plain", iso88591), headers.getContentType()); + assertEquals(body.getBytes(iso88591).length, headers.getContentLength()); + assertFalse(headers.getAcceptCharset().isEmpty()); } @Test public void writeUTF8() throws IOException { - Charset utf8 = Charset.forName("UTF-8"); - MediaType contentType = new MediaType("text", "plain", utf8); - MockHttpOutputMessage outputMessage = new MockHttpOutputMessage(); String body = "H\u00e9llo W\u00f6rld"; - converter.write(body, contentType, outputMessage); - assertEquals("Invalid result", body, outputMessage.getBodyAsString(utf8)); - assertEquals("Invalid content-type", contentType, outputMessage.getHeaders().getContentType()); - assertEquals("Invalid content-length", body.getBytes(utf8).length, - outputMessage.getHeaders().getContentLength()); - assertFalse("Invalid accept-charset", outputMessage.getHeaders().getAcceptCharset().isEmpty()); + this.converter.write(body, TEXT_PLAIN_UTF_8, this.outputMessage); + + HttpHeaders headers = this.outputMessage.getHeaders(); + assertEquals(body, this.outputMessage.getBodyAsString(UTF_8)); + assertEquals(TEXT_PLAIN_UTF_8, headers.getContentType()); + assertEquals(body.getBytes(UTF_8).length, headers.getContentLength()); + assertFalse(headers.getAcceptCharset().isEmpty()); } // SPR-8867 @Test public void writeOverrideRequestedContentType() throws IOException { - Charset utf8 = Charset.forName("UTF-8"); - MediaType requestedContentType = new MediaType("text", "html"); - MockHttpOutputMessage outputMessage = new MockHttpOutputMessage(); - MediaType contentType = new MediaType("text", "plain", utf8); - outputMessage.getHeaders().setContentType(contentType); String body = "H\u00e9llo W\u00f6rld"; - converter.write(body, requestedContentType, outputMessage); - assertEquals("Invalid result", body, outputMessage.getBodyAsString(utf8)); - assertEquals("Invalid content-type", contentType, outputMessage.getHeaders().getContentType()); - assertEquals("Invalid content-length", body.getBytes(utf8).length, - outputMessage.getHeaders().getContentLength()); - assertFalse("Invalid accept-charset", outputMessage.getHeaders().getAcceptCharset().isEmpty()); + MediaType requestedContentType = new MediaType("text", "html"); + + HttpHeaders headers = this.outputMessage.getHeaders(); + headers.setContentType(TEXT_PLAIN_UTF_8); + this.converter.write(body, requestedContentType, this.outputMessage); + + assertEquals(body, this.outputMessage.getBodyAsString(UTF_8)); + assertEquals(TEXT_PLAIN_UTF_8, headers.getContentType()); + assertEquals(body.getBytes(UTF_8).length, headers.getContentLength()); + assertFalse(headers.getAcceptCharset().isEmpty()); } + }