|
Lift Framework example source code file (JsonParserSpec.scala)
The Lift Framework JsonParserSpec.scala source code/* * Copyright 2009-2011 WorldWide Conferencing, LLC * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package net.liftweb package json import org.specs.{ScalaCheck, Specification} import org.scalacheck.{Arbitrary, Gen} import org.scalacheck.Prop._ /** * System under specification for JSON Parser. */ object JsonParserSpec extends Specification("JSON Parser Specification") with JValueGen with ScalaCheck { "Any valid json can be parsed" in { val parsing = (json: JValue) => { parse(Printer.pretty(render(json))); true } forAll(parsing) must pass } "Buffer size does not change parsing result" in { val bufSize = Gen.choose(2, 64) val parsing = (x: JValue, s1: Int, s2: Int) => { parseVal(x, s1) == parseVal(x, s2) } forAll(genObject, bufSize, bufSize)(parsing) must pass } "Parsing is thread safe" in { import java.util.concurrent._ val json = Examples.person val executor = Executors.newFixedThreadPool(100) val results = (0 to 100).map(_ => executor.submit(new Callable[JValue] { def call = parse(json) })).toList.map(_.get) results.zip(results.tail).forall(pair => pair._1 == pair._2) mustEqual true } "All valid string escape characters can be parsed" in { parse("[\"abc\\\"\\\\\\/\\b\\f\\n\\r\\t\\u00a0\"]") must_== JArray(JString("abc\"\\/\b\f\n\r\t\u00a0")::Nil) } "Unclosed string literal fails parsing" in { parseOpt("{\"foo\":\"sd") mustEqual None parseOpt("{\"foo\":\"sd}") mustEqual None } "The EOF has reached when the Reader returns EOF" in { class StingyReader(s: String) extends java.io.StringReader(s) { override def read(cbuf: Array[Char], off: Int, len: Int): Int = { val c = read() if (c == -1) -1 else { cbuf(off) = c.toChar 1 } } } val json = JsonParser.parse(new StingyReader(""" ["hello"] """)) json mustEqual JArray(JString("hello") :: Nil) } implicit def arbJValue: Arbitrary[JValue] = Arbitrary(genObject) private def parseVal(json: JValue, bufSize: Int) = { val existingSize = JsonParser.Segments.segmentSize try { JsonParser.Segments.segmentSize = bufSize JsonParser.Segments.clear JsonParser.parse(compact(render(json))) } finally { JsonParser.Segments.segmentSize = existingSize } } } Other Lift Framework examples (source code examples)Here is a short list of links related to this Lift Framework JsonParserSpec.scala source code file: |
... this post is sponsored by my books ... | |
#1 New Release! |
FP Best Seller |
Copyright 1998-2021 Alvin Alexander, alvinalexander.com
All Rights Reserved.
A percentage of advertising revenue from
pages under the /java/jwarehouse
URI on this website is
paid back to open source projects.