mirror of
https://github.com/fnproject/fn.git
synced 2022-10-28 21:29:17 +03:00
187 lines
3.7 KiB
Go
187 lines
3.7 KiB
Go
package jsonq
|
|
|
|
import (
|
|
"encoding/json"
|
|
"fmt"
|
|
"strings"
|
|
"testing"
|
|
)
|
|
|
|
const TestData = `{
|
|
"foo": 1,
|
|
"bar": 2,
|
|
"test": "Hello, world!",
|
|
"baz": 123.1,
|
|
"numstring": "42",
|
|
"floatstring": "42.1",
|
|
"array": [
|
|
{"foo": 1},
|
|
{"bar": 2},
|
|
{"baz": 3}
|
|
],
|
|
"subobj": {
|
|
"foo": 1,
|
|
"subarray": [1,2,3],
|
|
"subsubobj": {
|
|
"bar": 2,
|
|
"baz": 3,
|
|
"array": ["hello", "world"]
|
|
}
|
|
},
|
|
"collections": {
|
|
"bools": [false, true, false],
|
|
"strings": ["hello", "strings"],
|
|
"numbers": [1,2,3,4],
|
|
"arrays": [[1.0,2.0],[2.0,3.0],[4.0,3.0]],
|
|
"objects": [
|
|
{"obj1": 1},
|
|
{"obj2": 2}
|
|
]
|
|
},
|
|
"bool": true
|
|
}`
|
|
|
|
func tErr(t *testing.T, err error) {
|
|
if err != nil {
|
|
t.Errorf("Error: %v\n", err)
|
|
}
|
|
}
|
|
|
|
func TestQuery(t *testing.T) {
|
|
data := map[string]interface{}{}
|
|
dec := json.NewDecoder(strings.NewReader(TestData))
|
|
err := dec.Decode(&data)
|
|
tErr(t, err)
|
|
q := NewQuery(data)
|
|
|
|
ival, err := q.Int("foo")
|
|
if ival != 1 {
|
|
t.Errorf("Expecting 1, got %v\n", ival)
|
|
}
|
|
tErr(t, err)
|
|
ival, err = q.Int("bar")
|
|
if ival != 2 {
|
|
t.Errorf("Expecting 2, got %v\n", ival)
|
|
}
|
|
tErr(t, err)
|
|
|
|
ival, err = q.Int("subobj", "foo")
|
|
if ival != 1 {
|
|
t.Errorf("Expecting 1, got %v\n", ival)
|
|
}
|
|
tErr(t, err)
|
|
|
|
// test that strings can get int-ed
|
|
ival, err = q.Int("numstring")
|
|
if ival != 42 {
|
|
t.Errorf("Expecting 42, got %v\n", ival)
|
|
}
|
|
tErr(t, err)
|
|
|
|
for i := 0; i < 3; i++ {
|
|
ival, err := q.Int("subobj", "subarray", fmt.Sprintf("%d", i))
|
|
if ival != i+1 {
|
|
t.Errorf("Expecting %d, got %v\n", i+1, ival)
|
|
}
|
|
tErr(t, err)
|
|
}
|
|
|
|
fval, err := q.Float("baz")
|
|
if fval != 123.1 {
|
|
t.Errorf("Expecting 123.1, got %f\n", fval)
|
|
}
|
|
tErr(t, err)
|
|
|
|
// test that strings can get float-ed
|
|
fval, err = q.Float("floatstring")
|
|
if fval != 42.1 {
|
|
t.Errorf("Expecting 42.1, got %v\n", fval)
|
|
}
|
|
tErr(t, err)
|
|
|
|
sval, err := q.String("test")
|
|
if sval != "Hello, world!" {
|
|
t.Errorf("Expecting \"Hello, World!\", got \"%v\"\n", sval)
|
|
}
|
|
|
|
sval, err = q.String("subobj", "subsubobj", "array", "0")
|
|
if sval != "hello" {
|
|
t.Errorf("Expecting \"hello\", got \"%s\"\n", sval)
|
|
}
|
|
tErr(t, err)
|
|
|
|
bval, err := q.Bool("bool")
|
|
if !bval {
|
|
t.Errorf("Expecting true, got %v\n", bval)
|
|
}
|
|
tErr(t, err)
|
|
|
|
obj, err := q.Object("subobj", "subsubobj")
|
|
tErr(t, err)
|
|
q2 := NewQuery(obj)
|
|
sval, err = q2.String("array", "1")
|
|
if sval != "world" {
|
|
t.Errorf("Expecting \"world\", got \"%s\"\n", sval)
|
|
}
|
|
tErr(t, err)
|
|
|
|
aobj, err := q.Array("subobj", "subarray")
|
|
tErr(t, err)
|
|
if aobj[0].(float64) != 1 {
|
|
t.Errorf("Expecting 1, got %v\n", aobj[0])
|
|
}
|
|
|
|
iobj, err := q.Interface("numstring")
|
|
tErr(t, err)
|
|
if _, ok := iobj.(string); !ok {
|
|
t.Errorf("Expecting type string got: %s", iobj)
|
|
}
|
|
|
|
/*
|
|
Test Extraction of typed slices
|
|
*/
|
|
|
|
//test array of strings
|
|
astrings, err := q.ArrayOfStrings("collections", "strings")
|
|
tErr(t, err)
|
|
if astrings[0] != "hello" {
|
|
t.Errorf("Expecting hello, got %v\n", astrings[0])
|
|
}
|
|
|
|
//test array of ints
|
|
aints, err := q.ArrayOfInts("collections", "numbers")
|
|
tErr(t, err)
|
|
if aints[0] != 1 {
|
|
t.Errorf("Expecting 1, got %v\n", aints[0])
|
|
}
|
|
|
|
//test array of floats
|
|
afloats, err := q.ArrayOfFloats("collections", "numbers")
|
|
tErr(t, err)
|
|
if afloats[0] != 1.0 {
|
|
t.Errorf("Expecting 1.0, got %v\n", afloats[0])
|
|
}
|
|
|
|
//test array of bools
|
|
abools, err := q.ArrayOfBools("collections", "bools")
|
|
tErr(t, err)
|
|
if abools[0] {
|
|
t.Errorf("Expecting true, got %v\n", abools[0])
|
|
}
|
|
|
|
//test array of arrays
|
|
aa, err := q.ArrayOfArrays("collections", "arrays")
|
|
tErr(t, err)
|
|
if aa[0][0].(float64) != 1 {
|
|
t.Errorf("Expecting 1, got %v\n", aa[0][0])
|
|
}
|
|
|
|
//test array of objs
|
|
aobjs, err := q.ArrayOfObjects("collections", "objects")
|
|
tErr(t, err)
|
|
if aobjs[0]["obj1"].(float64) != 1 {
|
|
t.Errorf("Expecting 1, got %v\n", aobjs[0]["obj1"])
|
|
}
|
|
|
|
}
|