Skip to content

Commit dc03600

Browse files
committed
Quick Save
1 parent 50797ab commit dc03600

File tree

1 file changed

+164
-4
lines changed

1 file changed

+164
-4
lines changed

dotpath/dotpath_test.go

Lines changed: 164 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@ package dotpath
2121

2222
import (
2323
"encoding/json"
24-
//"fmt"
24+
// "fmt"
2525
"testing"
2626
)
2727

@@ -140,8 +140,168 @@ func TestFindInArray(t *testing.T) {
140140
}
141141
}
142142

143-
/*
144143
func TestEval(t *testing.T) {
145-
t.Error("dotpath.Eval(dotpath, jsonSource) not implemented")
144+
var (
145+
err error
146+
src []byte
147+
)
148+
149+
// Check to see if we can fit value of dot when it is a string.
150+
p := "."
151+
/*
152+
src = []byte(`"Hello World"`)
153+
if data, err := JSONDecode(src); err != nil {
154+
t.Errorf("Can't decode string %q, error %s", src, err)
155+
t.FailNow()
156+
} else {
157+
blob, err := Eval(".", data)
158+
if err != nil {
159+
t.Errorf("Eval(%q, %q) -> %s", p, src, err)
160+
t.FailNow()
161+
}
162+
switch blob.(type) {
163+
case string:
164+
// We're OK
165+
if blob.(string) != "Hello World" {
166+
t.Errorf("Expected %q, got %q", "Hello World", blob)
167+
t.FailNow()
168+
}
169+
default:
170+
// something went wrong
171+
t.Errorf("Eval(%q, %q) -> wrong type: %T", p, src, blob)
172+
}
173+
}
174+
175+
// Decode a Number
176+
p = "."
177+
src = []byte(`1`)
178+
if data, err := JSONDecode(src); err != nil {
179+
t.Errorf("Can't decode string %q, error %s", src, err)
180+
t.FailNow()
181+
} else {
182+
blob, err := Eval(".", data)
183+
if err != nil {
184+
t.Errorf("Eval(%q, %q) -> %s", p, src, err)
185+
t.FailNow()
186+
}
187+
switch blob.(type) {
188+
case json.Number:
189+
// We're OK
190+
if i, _ := blob.(json.Number).Int64(); i != int64(1) {
191+
t.Errorf("Expected %q, got %q", "Hello World", blob)
192+
t.FailNow()
193+
}
194+
default:
195+
// something went wrong
196+
t.Errorf("Eval(%q, %q) -> wrong type: %T", p, src, blob)
197+
}
198+
}
199+
200+
// Decode an Object
201+
p = "."
202+
src = []byte(`{"greeting": "Hello World"}`)
203+
if data, err := JSONDecode(src); err != nil {
204+
t.Errorf("Can't decode string %q, error %s", src, err)
205+
t.FailNow()
206+
} else {
207+
blob, err := Eval(".", data)
208+
if err != nil {
209+
t.Errorf("Eval(%q, %q) -> %s", p, src, err)
210+
t.FailNow()
211+
}
212+
switch blob.(type) {
213+
case map[string]string:
214+
// We're OK
215+
m := blob.(map[string]string)
216+
if s, _ := m["greeting"]; s != "Hello World" {
217+
t.Errorf("Expected %q, got %q", "Hello World", blob)
218+
t.FailNow()
219+
}
220+
default:
221+
// something went wrong
222+
t.Errorf("Eval(%q, %q) -> wrong type: %T", p, src, blob)
223+
}
224+
}
225+
226+
// Decode an Array
227+
p = "."
228+
src = []byte(`[1,2,3]`)
229+
if data, err := JSONDecode(src); err != nil {
230+
t.Errorf("Can't decode string %q, error %s", src, err)
231+
t.FailNow()
232+
} else {
233+
blob, err := Eval(".", data)
234+
if err != nil {
235+
t.Errorf("Eval(%q, %q) -> %s", p, src, err)
236+
t.FailNow()
237+
}
238+
switch blob.(type) {
239+
case []int:
240+
// We're OK
241+
a := blob.([]int)
242+
for i, v := range []int{1, 2, 3} {
243+
if a[i] != v {
244+
t.Errorf("Expected %d, got %d", v, a[i])
245+
t.FailNow()
246+
}
247+
}
248+
default:
249+
// something went wrong
250+
t.Errorf("Eval(%q, %q) -> wrong type: %T", p, src, blob)
251+
}
252+
}
253+
*/
254+
255+
// Sub Array test
256+
src = []byte(`{
257+
"display_name": "Fred Zip",
258+
"sort_name": "Zip, Fred",
259+
"name": {
260+
"first": "Fred",
261+
"last": "Zip"
262+
},
263+
"works": [
264+
{"title":"One"},
265+
{"title": "two"},
266+
{"title": "three"}
267+
],
268+
"dates": [
269+
{ "year": 1992, "month": 10, "day": 23 },
270+
{ "year": 2016, "month": 2, "day": 21 }
271+
]
272+
}`)
273+
274+
data := map[string]interface{}{}
275+
blob, err := JSONDecode(src)
276+
if err != nil {
277+
t.Errorf("JSONDecode error for %q, %s", src, err)
278+
t.FailNow()
279+
}
280+
data = blob.(map[string]interface{})
281+
282+
// Check to make sure simple data worked
283+
if expected, ok := data["display_name"]; ok == true {
284+
switch expected.(type) {
285+
case string:
286+
default:
287+
t.Errorf("Expected a string for display_name")
288+
t.FailNow()
289+
}
290+
p = ".display_name"
291+
blob, err := Eval(p, data)
292+
if err != nil {
293+
t.Errorf("Eval() returned an error, %s", err)
294+
t.FailNow()
295+
}
296+
switch blob.(type) {
297+
case string:
298+
default:
299+
t.Errorf("Expected display_string to be type string, %T", blob)
300+
}
301+
if expected.(string) != blob.(string) {
302+
t.Errorf("Expected %q, got %q", expected, blob)
303+
t.FailNow()
304+
}
305+
}
306+
// Now see how we handle object in an object
146307
}
147-
*/

0 commit comments

Comments
 (0)