-
Notifications
You must be signed in to change notification settings - Fork 275
/
ExtractionBugs.scala
73 lines (58 loc) · 2.55 KB
/
ExtractionBugs.scala
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
/*
* 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.Specification
object ExtractionBugs extends Specification("Extraction bugs Specification") {
implicit val formats = DefaultFormats
"ClassCastException (BigInt) regression 2 must pass" in {
val opt = OptionOfInt(Some(39))
Extraction.decompose(opt).extract[OptionOfInt].opt.get mustEqual 39
}
"Extraction should not fail when Maps values are Lists" in {
val m = PMap(Map("a" -> List("b"), "c" -> List("d")))
Extraction.decompose(m).extract[PMap] mustEqual m
}
"Extraction should always choose constructor with the most arguments if more than one constructor exists" in {
val args = Meta.Reflection.primaryConstructorArgs(classOf[ManyConstructors])
args.size mustEqual 4
}
"Extraction should handle AnyRef" in {
implicit val formats = DefaultFormats.withHints(FullTypeHints(classOf[ExtractWithAnyRef] :: Nil))
val json = JObject(JField("jsonClass", JString(classOf[ExtractWithAnyRef].getName)) :: Nil)
val extracted = Extraction.extract[AnyRef](json)
extracted mustEqual ExtractWithAnyRef()
}
"Extraction should work with unicode encoded field names (issue 1075)" in {
parse("""{"foo.bar,baz":"x"}""").extract[UnicodeFieldNames] mustEqual UnicodeFieldNames("x")
}
"Extraction should not fail if case class has a companion object" in {
parse("""{"nums":[10]}""").extract[HasCompanion] mustEqual HasCompanion(List(10))
}
case class OptionOfInt(opt: Option[Int])
case class PMap(m: Map[String, List[String]])
case class ManyConstructors(id: Long, name: String, lastName: String, email: String) {
def this() = this(0, "John", "Doe", "")
def this(name: String) = this(0, name, "Doe", "")
def this(name: String, email: String) = this(0, name, "Doe", email)
}
case class ExtractWithAnyRef()
case class UnicodeFieldNames(`foo.bar,baz`: String)
object HasCompanion {
def hello = "hello"
}
case class HasCompanion(nums: List[Int])
}