github.com/qiniu/dyn@v1.3.0/dyn/dyn_test.go (about) 1 package dyn 2 3 import ( 4 "testing" 5 6 "github.com/qiniu/x/log" 7 "github.com/qiniu/x/ts" 8 ) 9 10 func init() { 11 log.SetOutputLevel(0) 12 } 13 14 // ---------------------------------------------------------- 15 16 type M map[string]interface{} 17 type M2 map[string]interface{} 18 19 func TestFuncGet(t *testing.T) { 20 21 c1 := 1 22 data := M{ 23 "a": 1, 24 "b": func() interface{} { 25 return map[string]interface{}{ 26 "c": func() interface{} { 27 c1++ 28 return c1 29 }, 30 } 31 }, 32 "d": nil, 33 "e": "123", 34 "f": M2{ 35 "g": 456, 36 }, 37 } 38 39 _, ok := Get(nil, "a") 40 if ok { 41 ts.Fatal(t, "a?") 42 } 43 44 cc, ok := Get(data, "b.c") 45 if !ok || cc == nil { 46 ts.Fatal(t, "b.c:", cc, ok) 47 } 48 49 c, ok := GetInt(data, "b.c") 50 if !ok || c != 2 { 51 ts.Fatal(t, "b.c != 2", c, ok) 52 } 53 54 c2, ok := GetFloat(data, "b.c") 55 if !ok || c2 != 3 { 56 ts.Fatal(t, "b.c != 3") 57 } 58 59 _, ok = GetFloat(data, "d") 60 if ok { 61 ts.Fatal(t, "d is float?") 62 } 63 64 _, ok = GetString(data, "d") 65 if ok { 66 ts.Fatal(t, "a is string?") 67 } 68 } 69 70 // ---------------------------------------------------------- 71 72 func TestMapGet(t *testing.T) { 73 74 data := map[string]interface{}{ 75 "a": 1, 76 "b": map[string]interface{}{ 77 "c": 2, 78 }, 79 "d": nil, 80 } 81 82 _, ok := Get(nil, "a") 83 if ok { 84 ts.Fatal(t, "a?") 85 } 86 87 c, ok := GetInt(data, "b.c") 88 if !ok || c != 2 { 89 ts.Fatal(t, "b.c != 2") 90 } 91 92 c2, ok := GetFloat(data, "b.c") 93 if !ok || c2 != 2 { 94 ts.Fatal(t, "b.c != 2") 95 } 96 97 _, ok = GetFloat(data, "d") 98 if ok { 99 ts.Fatal(t, "d is float?") 100 } 101 102 _, ok = GetString(data, "d") 103 if ok { 104 ts.Fatal(t, "a is string?") 105 } 106 } 107 108 // ---------------------------------------------------------- 109 110 type bar struct { 111 C int `json:"c"` 112 } 113 114 type foo struct { 115 A int `json:"a"` 116 B bar `json:"b"` 117 D interface{} `json:"d"` 118 } 119 120 func TestStructGet(t *testing.T) { 121 122 data := &foo{ 123 A: 1, 124 B: bar{ 125 C: 2, 126 }, 127 D: nil, 128 } 129 130 _, ok := Get(nil, "a") 131 if ok { 132 ts.Fatal(t, "a?") 133 } 134 135 c, ok := GetInt(data, "b.c") 136 if !ok || c != 2 { 137 ts.Fatal(t, "b.c != 2, b.c =", c, ok) 138 } 139 140 c2, ok := GetFloat(data, "b.c") 141 if !ok || c2 != 2 { 142 ts.Fatal(t, "b.c != 2") 143 } 144 145 _, ok = GetFloat(data, "d") 146 if ok { 147 ts.Fatal(t, "d is float?") 148 } 149 150 _, ok = GetString(data, "d") 151 if ok { 152 ts.Fatal(t, "a is string?") 153 } 154 } 155 156 // ---------------------------------------------------------- 157 158 func TestArrayGet(t *testing.T) { 159 160 data := []interface{}{ 161 5, 162 "a", 163 map[string]interface{}{ 164 "c": 2, 165 }, 166 []int{1, 3}, 167 } 168 169 c, ok := GetInt(data, "0") 170 if !ok || c != 5 { 171 ts.Fatal(t, "0 != 5") 172 } 173 174 c1, ok := GetString(data, "1") 175 if !ok || c1 != "a" { 176 ts.Fatal(t, "1 != a") 177 } 178 179 c2, ok := GetInt(data, "2.c") 180 if !ok || c2 != 2 { 181 ts.Fatal(t, "2.c != 2") 182 } 183 184 c3, ok := GetInt(data, "3.1") 185 if !ok || c3 != 3 { 186 ts.Fatal(t, "3.1 != 3") 187 } 188 } 189 190 // ----------------------------------------------------------