@@ -21,7 +21,7 @@ package dotpath
2121
2222import (
2323 "encoding/json"
24- //"fmt"
24+ // "fmt"
2525 "testing"
2626)
2727
@@ -140,8 +140,168 @@ func TestFindInArray(t *testing.T) {
140140 }
141141}
142142
143- /*
144143func 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