forked from tokuhirom/json_path_scanner
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathjson_path_scanner_test.go
128 lines (113 loc) · 2.08 KB
/
json_path_scanner_test.go
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
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
package json_path_scanner
import (
"encoding/json"
"fmt"
"log"
"testing"
)
func TestInt(t *testing.T) {
ch := make(chan *PathValue)
go func() {
Scan(3, ch)
}()
p := <-ch
log.Print(p)
if p.Path != "$" {
t.Fatalf("Path should be $ but %s", p.Path)
}
if p.Value != 3 {
t.Fatalf("Value should be 3 but %v", p.Value)
}
}
func TestFloat(t *testing.T) {
ch := make(chan *PathValue)
go func() {
Scan(3.14, ch)
}()
p := <-ch
log.Print(p)
if p.Path != "$" {
t.Fatalf("Path should be $ but %s", p.Path)
}
if p.Value != 3.14 {
t.Fatalf("Value should be 3.14 but %v", p.Value)
}
}
func TestString(t *testing.T) {
ch := make(chan *PathValue)
go func() {
Scan("Foo", ch)
}()
p := <-ch
log.Print(p)
if p.Path != "$" {
t.Fatalf("Path should be $ but %s", p.Path)
}
if p.Value != "Foo" {
t.Fatalf("Value should be 'Foo' but %v", p.Value)
}
}
func TestArray(t *testing.T) {
ch := make(chan *PathValue)
go func() {
Scan([]interface{}{5963, 4649}, ch)
}()
p := <-ch
log.Print(p)
if p.Path != "$[0]" {
t.Fatalf("Path should be $[0] but %s", p.Path)
}
if p.Value != 5963 {
t.Fatalf("Value should be 5963 but %v", p.Value)
}
p = <-ch
if p.Path != "$[1]" {
t.Fatalf("Path should be $[1] but %s", p.Path)
}
if p.Value != 4649 {
t.Fatalf("Value should be 4649 but %v", p.Value)
}
}
func TestMap(t *testing.T) {
ch := make(chan *PathValue)
go func() {
m := make(map[string]interface{})
m["hoge"] = "fuga"
Scan(m, ch)
}()
p := <-ch
if p.Path != "$.hoge" {
t.Fatalf("Path should be $.hoge but %s", p.Path)
}
if p.Value != "fuga" {
t.Fatalf("Value should be 'fuga' but %v", p.Value)
}
}
func ExampleSynopsys() {
ch := make(chan *PathValue)
go func() {
var m interface{}
err := json.Unmarshal([]byte(`{
"hoge":"fuga",
"x":[
{
"y": 3,
"z": [1,2,3]
}
]
}`), &m)
if err != nil {
log.Fatal(err)
}
Scan(m, ch)
}()
for p := range ch {
fmt.Printf("%s => %v\n", p.Path, p.Value)
}
// Unordered output:
// $.hoge => fuga
// $.x[0].y => 3
// $.x[0].z[0] => 1
// $.x[0].z[1] => 2
// $.x[0].z[2] => 3
}