summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKonrad `ktoso` Malawski <ktoso@project13.pl>2017-10-24 13:08:11 +0900
committerGitHub <noreply@github.com>2017-10-24 13:08:11 +0900
commit6d8e99c69d3ab7c471444849da0b9493311fdcd8 (patch)
tree691e312d032452d974d6c01e0d50247241659c45
parent9b042f8ed180e4f386d0dfcc064823c8aa231692 (diff)
parent6db24d692854339c41b483cc24c0b42cff255736 (diff)
downloadspray-json-6d8e99c69d3ab7c471444849da0b9493311fdcd8.tar.gz
spray-json-6d8e99c69d3ab7c471444849da0b9493311fdcd8.tar.bz2
spray-json-6d8e99c69d3ab7c471444849da0b9493311fdcd8.zip
Merge pull request #168 from pasieronen/master
Allow JsonParser to optionally parse multiple values (see #137)
-rw-r--r--src/main/scala/spray/json/JsonParser.scala8
-rw-r--r--src/test/scala/spray/json/JsonParserSpec.scala13
2 files changed, 19 insertions, 2 deletions
diff --git a/src/main/scala/spray/json/JsonParser.scala b/src/main/scala/spray/json/JsonParser.scala
index 20057c1..71c4c11 100644
--- a/src/main/scala/spray/json/JsonParser.scala
+++ b/src/main/scala/spray/json/JsonParser.scala
@@ -38,10 +38,14 @@ class JsonParser(input: ParserInput) {
private[this] var cursorChar: Char = input.nextChar()
private[this] var jsValue: JsValue = _
- def parseJsValue(): JsValue = {
+ def parseJsValue(): JsValue =
+ parseJsValue(false)
+
+ def parseJsValue(allowTrailingInput: Boolean): JsValue = {
ws()
`value`()
- require(EOI)
+ if (!allowTrailingInput)
+ require(EOI)
jsValue
}
diff --git a/src/test/scala/spray/json/JsonParserSpec.scala b/src/test/scala/spray/json/JsonParserSpec.scala
index d7db026..a97f021 100644
--- a/src/test/scala/spray/json/JsonParserSpec.scala
+++ b/src/test/scala/spray/json/JsonParserSpec.scala
@@ -108,5 +108,18 @@ class JsonParserSpec extends Specification {
| ^
|""".stripMargin
}
+
+ "parse multiple values when allowTrailingInput" in {
+ val parser = new JsonParser("""{"key":1}{"key":2}""")
+ parser.parseJsValue(true) === JsObject("key" -> JsNumber(1))
+ parser.parseJsValue(true) === JsObject("key" -> JsNumber(2))
+ }
+ "reject trailing input when !allowTrailingInput" in {
+ def parser = JsonParser("""{"key":1}x""")
+ parser must throwA[JsonParser.ParsingException].like {
+ case e: JsonParser.ParsingException => e.getMessage must contain("expected end-of-input")
+ }
+ }
+
}
}