-
Notifications
You must be signed in to change notification settings - Fork 11
/
Copy pathstack_test.go
103 lines (90 loc) · 2.3 KB
/
stack_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
package main
import (
"github.com/peterbourgon/mergemap"
"testing"
)
func TestAddGet(t *testing.T) {
s := NewStack()
s.Add("/a", map[string]interface{}{"a": "A"})
s.Add("/a/1", map[string]interface{}{"one": "1"})
s.Add("/b", map[string]interface{}{"b": "B"})
t.Logf("%v", s.m)
assert := func(m map[string]interface{}, key, expected string) {
v, ok := m[key]
if !ok {
t.Fatalf("key '%s' wasn't present", key)
}
s, ok := v.(string)
if !ok {
t.Fatalf("key '%s' wasn't a string", key)
}
if s != expected {
t.Fatalf("key '%s' wasn't '%s'", key, expected)
}
}
assert(s.Get("/a/foo.txt"), "a", "A")
}
func TestAddForGlobal(t *testing.T) {
assert := func(ctx string, m map[string]interface{}, key, expected string) {
if got := m[key]; expected != got {
t.Fatalf("%s: m['%s'] expected '%s' got '%s'", ctx, key, expected, got)
}
}
s := NewStack()
func() {
s.Add("", map[string]interface{}{"a": map[string]interface{}{"first": "OK"}})
v, ok := s.Get("/some/arbitrary/path")["a"]
if !ok {
t.Fatalf("didn't get 'a'")
}
m, ok := v.(map[string]interface{})
if !ok {
t.Fatalf("bad type for 'a'")
}
assert("take 1", m, "first", "OK")
}()
func() {
s.Add("", map[string]interface{}{"a": map[string]interface{}{"second": "K"}})
v, ok := s.Get("/some/other/deeper/path.html")["a"]
if !ok {
t.Fatalf("didn't get 'a'")
}
m, ok := v.(map[string]interface{})
if !ok {
t.Fatalf("bad type for 'a'")
}
assert("add 'second'", m, "first", "OK")
assert("add 'second'", m, "second", "K")
}()
func() {
s.Add("", map[string]interface{}{"a": map[string]string{"first": "NO"}})
v, ok := s.Get("/path.md")["a"]
if !ok {
t.Fatalf("didn't get 'a'")
}
m, ok := v.(map[string]interface{})
if !ok {
t.Fatalf("bad type for 'a'")
}
assert("overwrite 'first'", m, "first", "NO")
assert("overwrite 'first'", m, "second", "K")
}()
}
func TestMergeInto(t *testing.T) {
m := map[string]interface{}{}
m1 := mergemap.Merge(m, map[string]interface{}{"a": "b"})
if m1["a"] != "b" {
t.Fatal("m1[a] != b")
}
m2 := mergemap.Merge(m1, map[string]interface{}{"a": "c"})
if m2["a"] != "c" {
t.Fatal("m2[a] != c")
}
m3 := mergemap.Merge(m2, map[string]interface{}{"b": "d"})
if m3["a"] != "c" {
t.Fatal("m3[a] != c")
}
if m3["b"] != "d" {
t.Fatal("m3[b] != d")
}
}