Skip to content

Commit

Permalink
Supports utf8
Browse files Browse the repository at this point in the history
  • Loading branch information
fracassi-marco committed Dec 5, 2019
1 parent 5abff3e commit db8a6b2
Show file tree
Hide file tree
Showing 2 changed files with 62 additions and 0 deletions.
4 changes: 4 additions & 0 deletions src/main/kotlin/daikon/HttpResponse.kt
Original file line number Diff line number Diff line change
@@ -1,6 +1,9 @@
package daikon

import java.io.StringWriter
import java.nio.charset.Charset
import java.nio.charset.StandardCharsets
import java.nio.charset.StandardCharsets.UTF_8
import javax.servlet.http.HttpServletResponse

class HttpResponse(private val response: HttpServletResponse) : Response {
Expand Down Expand Up @@ -29,6 +32,7 @@ class HttpResponse(private val response: HttpServletResponse) : Response {

override fun write(text: String) {
writer.write(text)
response.characterEncoding = UTF_8.name()
response.writer.write(text)
}
}
58 changes: 58 additions & 0 deletions src/test/kotlin/daikon/CharacterEncodingTest.kt
Original file line number Diff line number Diff line change
@@ -0,0 +1,58 @@
package daikon

import daikon.Localhost.get
import daikon.Localhost.post
import org.assertj.core.api.Assertions.assertThat
import org.junit.jupiter.api.Test
import java.net.URLEncoder
import java.nio.charset.StandardCharsets.UTF_8

class CharacterEncodingTest {

@Test
fun `body supports utf8`() {
HttpServer()
.get("/") { _, res -> res.write("%&è") }
.start().use {
assertThat(get("/").text).isEqualTo("%&è")
}
}

@Test
fun `query string parameter supports utf8`() {
HttpServer()
.get("/") { req, res -> res.write(req.param("name")) }
.start().use {
assertThat(get("/?name=è$%26").text).isEqualTo("è$&")
}
}

@Test
fun `path parameters supports utf8`() {
HttpServer()
.get("/:name") { req, res -> res.write(req.param(":name")) }
.start().use {
assertThat(get("/è%24%26").text).isEqualTo(URLEncoder.encode("è$&", UTF_8.name()))
}
}

@Test
fun `post data supports utf8`() {
HttpServer()
.post("/") { req, res -> res.write(req.param("name")) }
.start().use {
val response = post("/", data = mapOf("name" to "è$&"))
assertThat(response.text).isEqualTo("è$&")
}
}

@Test
fun `header does not supports utf8`() {
HttpServer()
.get("/") { req, res -> res.write(req.header("name")) }
.start().use {
val response = get("/", headers = mapOf("name" to "è$&"))
assertThat(response.text).isEqualTo("è$&")
}
}
}

0 comments on commit db8a6b2

Please sign in to comment.