78
jsonx/parser_test.go
Normal file
78
jsonx/parser_test.go
Normal file
@@ -0,0 +1,78 @@
|
||||
package jsonx
|
||||
|
||||
import (
|
||||
"github.com/stretchr/testify/assert"
|
||||
"reflect"
|
||||
"testing"
|
||||
)
|
||||
|
||||
func TestParser_Find(t *testing.T) {
|
||||
testCases := []struct {
|
||||
tag string
|
||||
json string
|
||||
path string
|
||||
defaultValue interface{}
|
||||
valueKind reflect.Kind
|
||||
Except interface{}
|
||||
}{
|
||||
{"string1", "", "a", "", reflect.String, ""},
|
||||
{"string2", `{"a":1}`, "a", 2, reflect.String, "1"},
|
||||
{"string3", `{"a":true}`, "a", 2, reflect.String, "true"},
|
||||
{"string4", `{"a":true}`, "a.b", false, reflect.String, "false"},
|
||||
{"string5", `{"a":{"b": {"c": 123}}}`, "a.b", "{}", reflect.String, `{"c":123}`},
|
||||
{"string6", `{"a":{"b": {"c": 123}}}`, "a.b.c", "", reflect.String, "123"},
|
||||
{"string7", `{"a":{"b": {"c": [1,2,3]}}}`, "a.b.c.0", "", reflect.String, "1"},
|
||||
{"string8", `{"a":{"b": {"c": [1,2,3]}}}`, "a.b.c.2", "", reflect.String, "3"},
|
||||
{"string9", `{"a":{"b": {"c": [1,2,3]}}}`, "", "110", reflect.String, "110"},
|
||||
{"int1", `{"a":1}`, "a", 2, reflect.Int, 1},
|
||||
{"int2", `{"a":1}`, "aa", 2, reflect.Int, 2},
|
||||
{"int641", `{"a":1}`, "a", 2, reflect.Int64, int64(1)},
|
||||
{"int641", `{"a":1}`, "aa", 2, reflect.Int64, int64(2)},
|
||||
{"bool1", `{"a":true}`, "a", false, reflect.Bool, true},
|
||||
{"bool2", `{"a":true}`, "a.b", false, reflect.Bool, false},
|
||||
{"float321", `{"a":1.23}`, "a", 0, reflect.Float32, float32(1.23)},
|
||||
{"float322", `{"a":1.23}`, "b", 0, reflect.Float32, float32(0)},
|
||||
{"float641", `{"a":1.23}`, "a", 0, reflect.Float64, 1.23},
|
||||
{"float642", `{"a":1.23}`, "b", 0, reflect.Float64, 0.0},
|
||||
{"interface1", `{"a":1.23}`, "b", 0, reflect.Interface, 0},
|
||||
{"interface2", `null`, "b", 0, reflect.Interface, 0},
|
||||
}
|
||||
for _, testCase := range testCases {
|
||||
var v interface{}
|
||||
switch testCase.valueKind {
|
||||
case reflect.String:
|
||||
v = NewParser(testCase.json).Find(testCase.path, testCase.defaultValue).String()
|
||||
case reflect.Int:
|
||||
v = NewParser(testCase.json).Find(testCase.path, testCase.defaultValue).Int()
|
||||
case reflect.Int64:
|
||||
v = NewParser(testCase.json).Find(testCase.path, testCase.defaultValue).Int64()
|
||||
case reflect.Float32:
|
||||
v = NewParser(testCase.json).Find(testCase.path, testCase.defaultValue).Float32()
|
||||
case reflect.Float64:
|
||||
v = NewParser(testCase.json).Find(testCase.path, testCase.defaultValue).Float64()
|
||||
case reflect.Bool:
|
||||
v = NewParser(testCase.json).Find(testCase.path, testCase.defaultValue).Bool()
|
||||
case reflect.Interface:
|
||||
v = NewParser(testCase.json).Find(testCase.path, testCase.defaultValue).Interface()
|
||||
}
|
||||
assert.Equal(t, testCase.Except, v, testCase.tag)
|
||||
}
|
||||
}
|
||||
|
||||
func TestParser_Exists(t *testing.T) {
|
||||
testCases := []struct {
|
||||
tag string
|
||||
json string
|
||||
path string
|
||||
Except bool
|
||||
}{
|
||||
{"exists1", "", "a", false},
|
||||
{"exists2", `{"a"}`, "a", false},
|
||||
{"exists3", `{"a":1}`, "a", true},
|
||||
{"exists4", `{"a":[0,1,2]}`, "a.1", true},
|
||||
}
|
||||
for _, testCase := range testCases {
|
||||
v := NewParser(testCase.json).Exists(testCase.path)
|
||||
assert.Equal(t, testCase.Except, v, testCase.tag)
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user