-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathpair_test.go
More file actions
100 lines (90 loc) · 2.46 KB
/
pair_test.go
File metadata and controls
100 lines (90 loc) · 2.46 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 iter
import (
"errors"
"fmt"
"reflect"
"testing"
)
func TestPairInterface(t *testing.T) {
var _ Pair = (*pair)(nil)
}
func TestPair(t *testing.T) {
tok := func(t *testing.T, pr Pair) {
if err := pr.Err(); err != nil {
t.Fatalf("pair returned error: %v", err)
}
}
rk := "rkey"
rv := "rval"
root := NewPair(nil, rk, rv, nil)
tok(t, root)
t.Run("String", func(t *testing.T) {
exp := `Pair{(string) rkey => rval (string)}`
if got := fmt.Sprintf("%v", root); got != exp {
t.Errorf("String() failed:\n exp: %#v\n got: %#v", exp, got)
}
})
t.Run("String", func(t *testing.T) {
type tstruct struct {
Str string
}
typ := reflect.TypeOf(tstruct{"foo"})
pr := NewPair(nil, typ.Field(0), "foo", nil)
exp := `Pair{(reflect.StructField) Str => foo (string)}`
if got := fmt.Sprintf("%v", pr); got != exp {
t.Errorf("String() failed:\n exp: %#v\n got: %#v", exp, got)
}
})
t.Run("Pair", func(t *testing.T) {
k, v := root.Pair()
if !reflect.DeepEqual(rk, k) {
t.Errorf("DeepEqual failed Pair() key:\n exp: %#v\n got: %#v", rk, k)
}
if !reflect.DeepEqual(rv, v) {
t.Errorf("DeepEqual failed Pair() value:\n exp: %#v\n got: %#v", rv, v)
}
})
t.Run("Err", func(t *testing.T) {
err := errors.New("exp err")
pr := &pair{err: err}
pr.err = err
if got := pr.Err(); !reflect.DeepEqual(err, got) {
t.Errorf("DeepEqual failed pr.Err():\n exp: %#v\n got: %#v", err, got)
}
})
t.Run("Parent", func(t *testing.T) {
k := "key"
pr := NewPair(root, k, nil, nil)
if got := pr.Parent(); !reflect.DeepEqual(root, got) {
t.Errorf("DeepEqual failed pr.Parent():\n exp: %#v\n got: %#v", k, got)
}
})
t.Run("Depth", func(t *testing.T) {
exp := 100
var root Pair
for i := 0; i <= exp; i++ {
root = NewPair(root, i, fmt.Sprintf("Val%d", i), nil)
tok(t, root)
if got := root.Depth(); got != i {
t.Errorf("failed pr.Depth():\n exp: %#v\n got: %#v", i, got)
}
}
if got := root.Depth(); got != exp {
t.Errorf("failed pr.Depth():\n exp: %#v\n got: %#v", exp, got)
}
})
t.Run("Key", func(t *testing.T) {
k := "key"
pr := NewPair(nil, k, nil, nil)
if got := pr.Key(); !reflect.DeepEqual(k, got) {
t.Errorf("DeepEqual failed pr.Key():\n exp: %#v\n got: %#v", k, got)
}
})
t.Run("Value", func(t *testing.T) {
v := "val"
pr := NewPair(nil, v, nil, nil)
if got := pr.Key(); !reflect.DeepEqual(v, got) {
t.Errorf("DeepEqual failed pr.Val():\n exp: %#v\n got: %#v", v, got)
}
})
}