-
Notifications
You must be signed in to change notification settings - Fork 2
/
ReaderTest.scala
86 lines (71 loc) · 2.88 KB
/
ReaderTest.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
74
75
76
77
78
79
80
81
82
83
84
85
86
package EDN
import java.util.UUID
import org.scalatest.FunSuite
class ReaderTest extends FunSuite {
test("set") {
expectResult(Set()) { Reader.readAll("#{}") }
expectResult(Set(1)) { Reader.readAll("#{1}") }
expectResult(Set(1)) { Reader.readAll("#{1 1}") }
expectResult(Set(Set())) { Reader.readAll("#{#{}}") }
}
test("vector") {
expectResult(Vector()) { Reader.readAll("[]") }
expectResult(Vector(1)) { Reader.readAll("[1]") }
expectResult(Vector(1,1)) { Reader.readAll("[1 1]") }
expectResult(Vector(Vector())) { Reader.readAll("[[]]") }
expectResult(Vector(Vector(), Set())) { Reader.readAll("[[] #{}]") }
}
test("list") {
expectResult(List()) { Reader.readAll("()") }
expectResult(List(1)) { Reader.readAll("(1)") }
expectResult(List(1,1)) { Reader.readAll("(1 1)") }
expectResult(List(List())) { Reader.readAll("(())") }
expectResult(List(List(), List(), Set())) { Reader.readAll("(() [] #{})") }
}
test("keyword") {
expectResult(":a") { Reader.readAll(":a") }
expectResult("::a") { Reader.readAll("::a") }
expectResult(":foo/bar") { Reader.readAll(":foo/bar") }
}
test("map") {
expectResult(Map()) { Reader.readAll("{}") }
expectResult(Map(":a" -> 1)) { Reader.readAll("{:a 1}") }
expectResult(Map(":a" -> 1, ":b" -> 2)) { Reader.readAll("{:a 1 :b 2}") }
expectResult(Map(Map() -> Map())) { Reader.readAll("{{} {}}") }
expectResult(Map(Map() -> Map(), Set() -> Vector(), List() -> ":a"))
{ Reader.readAll("{{} {} #{} [] () :a}") }
}
test("true / false / nil ") {
expectResult(true) { Reader.readAll("true") }
expectResult(false) { Reader.readAll("false") }
expectResult(null) { Reader.readAll("nil") }
expectResult(List(true, false, List(null))) { Reader.readAll("(true false (nil))") }
}
test("#uuid") {
val uuidStr = "f81d4fae-7dec-11d0-a765-00a0c91e6bf6"
expectResult(UUID.fromString(uuidStr)) { Reader.readAll("#uuid\"" + uuidStr + "\"") }
}
test("#inst") {
val dateStr = "2012-01-01T01:23:45.000-00:00"
expectResult(Instant.read(dateStr)) { Reader.readAll("#inst \"" + dateStr + "\"") }
}
test("commas") {
expectResult(1) { Reader.readAll(",,,1") }
// expectResult(1) { Reader.readAll("1,,,") } // TODO FIX
expectResult(Vector(1,2,3)) { Reader.readAll("[1,2,3]") }
expectResult(Map(":a" -> 1, ":b" -> 2)) { Reader.readAll("{:a 1, :b 2}") }
}
test("strings") {
intercept[RuntimeException] { Reader.readAll("") }
expectResult("foo") { Reader.readAll("\"foo\"") }
expectResult(Map("foo" -> Vector("bar"))) { Reader.readAll{"{\"foo\" [\"bar\"]}"} }
}
// non edn spec stuff (still accepted by 'clojure.edn)
test("ratio") {
expectResult(0.5) { Reader.readAll("1/2") }
expectResult(Set(0.5, 1)) { Reader.readAll("#{1/2 42/42}") }
}
test("numbers with N") {
expectResult(List(42, 1)) { Reader.readAll("(42N 1)") }
}
}