66 lines
1.1 KiB
Go
66 lines
1.1 KiB
Go
package json_test
|
|
|
|
import (
|
|
"reflect"
|
|
"testing"
|
|
|
|
"go.neonxp.ru/json"
|
|
"go.neonxp.ru/json/std"
|
|
)
|
|
|
|
func TestMustQuery(t *testing.T) {
|
|
jsonString := `{
|
|
"string key": "string value",
|
|
"number key": 123.321,
|
|
"bool key": true,
|
|
"object": {
|
|
"one": "two",
|
|
"object 2": {
|
|
"three": "four"
|
|
}
|
|
},
|
|
"array": [
|
|
"one",
|
|
2,
|
|
true,
|
|
null,
|
|
{
|
|
"five": "six"
|
|
}
|
|
]
|
|
}`
|
|
type args struct {
|
|
parent json.Node
|
|
path []string
|
|
}
|
|
tests := []struct {
|
|
name string
|
|
args args
|
|
want json.Node
|
|
}{
|
|
{
|
|
name: "find in object",
|
|
args: args{
|
|
parent: json.New(std.Factory).MustUnmarshal(jsonString),
|
|
path: []string{"object", "object 2", "three"},
|
|
},
|
|
want: &std.StringNode{Value: "four"},
|
|
},
|
|
{
|
|
name: "find in array",
|
|
args: args{
|
|
parent: json.New(std.Factory).MustUnmarshal(jsonString),
|
|
path: []string{"array", "[4]", "five"},
|
|
},
|
|
want: &std.StringNode{Value: "six"},
|
|
},
|
|
}
|
|
for _, tt := range tests {
|
|
t.Run(tt.name, func(t *testing.T) {
|
|
if got := json.MustQuery(tt.args.parent, tt.args.path); !reflect.DeepEqual(got, tt.want) {
|
|
t.Errorf("MustQuery() = %v, want %v", got, tt.want)
|
|
}
|
|
})
|
|
}
|
|
}
|