-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathreader_test.go
More file actions
100 lines (92 loc) · 2.61 KB
/
Copy pathreader_test.go
File metadata and controls
100 lines (92 loc) · 2.61 KB
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
package view_test
import (
"fmt"
"testing"
"github.com/sokool/view"
)
func TestReader_JSON(t *testing.T) {
j := []byte(`{
"id": 1,
"name": "John",
"age": 30.6,
"hired": true,
"location": {
"point": {
"lat": 40.7128,
"lon": -74.0060
},
"address": "New York Hudson 60"
},
"jobs": [
{"title": "developer", "salary": "100$"},
{"title": "manager", "salary": "200$"},
{"title": "ceo", "salary": "300$"}
],
"skills": ["go", "js", "python"]
}
`)
r := view.JSONReader(j)
if r.Text("name") != "John" {
t.Fatalf("expected John, got %s", r.Text("name"))
}
if r.Number("location.point.lat") != 40.7128 {
t.Fatalf("expected 40.7128, got %f", r.Number("location.point.lat"))
}
if r.Bool("hired") != true {
t.Fatalf("expected true, got %t", r.Bool("hired"))
}
var s string
var f float64
var p map[string]any
if err := r.Read("name", &s).Read("age", &f).Read("location.point", &p).Error(); err != nil {
t.Fatalf("expected nil, got %s err", err)
}
if s != "John" {
t.Fatalf("expected John, got %s", s)
}
if f != 30.6 {
t.Fatalf("expected 30.6, got %f", f)
}
s = ""
if err := r.Select("abc").To(&s); err != nil || s != "" { // abc attribute not exists
t.Fatalf("expected empty string withou error, got %v error and %s value", err, s)
}
if n := r.Select("a").Select("b"); !n.IsEmpty() {
t.Fatalf("expected empty meta")
}
if f = r.Select("location.point").Number("lat"); f != 40.7128 {
t.Fatalf("expected 40.7128, got %f", f)
}
if s = r.Select("jobs[1]").Text("title"); s != "manager" {
t.Fatalf("expected manager, got %s", s)
}
if s = r.Select("jobs[?(@.title == 'manager')]").Text("[0].salary"); s != "200$" {
t.Fatalf("expected 200$, got %s", s)
}
if err := r.Select("jobs[1.title").Error(); err == nil {
t.Fatalf("expected error, got nil")
}
var ss []string
if err := r.Select("jobs[*].title").To(&ss); err != nil || fmt.Sprintf("%v", ss) != "[developer manager ceo]" {
t.Fatalf("expected nil, got %s", err)
}
if s := r.Sprintf("%s: %s", "name", "location.address"); s != "John: New York Hudson 60" {
t.Fatalf("expected John New York Hudson 60, got %s", s)
}
}
func TestMeta_Each(t *testing.T) {
slice := []byte(`[{"name": "Tom", "age": 32},{"name": "Jerry", "age": 30},
{"name": "Spike", "age": 40},{"name": "Tyke", "age": 20}]`)
var m = view.JSONReader(slice)
var ss []string
if err := m.Select("[*].name").To(&ss); err != nil || fmt.Sprintf("%v", ss) != "[Tom Jerry Spike Tyke]" {
t.Fatalf("expected nil, got %s", err)
}
var s string
for n := range m.Each {
s += n.Text("name")
}
if s != "TomJerrySpikeTyke" {
t.Fatalf("expected TomJerrySpikeTyke, got %s", s)
}
}