98 lines
2.2 KiB
Go
98 lines
2.2 KiB
Go
package objx
|
|
|
|
import (
|
|
"github.com/stretchr/testify/assert"
|
|
"testing"
|
|
)
|
|
|
|
var fixtures = []struct {
|
|
// name is the name of the fixture (used for reporting
|
|
// failures)
|
|
name string
|
|
// data is the JSON data to be worked on
|
|
data string
|
|
// get is the argument(s) to pass to Get
|
|
get interface{}
|
|
// output is the expected output
|
|
output interface{}
|
|
}{
|
|
{
|
|
name: "Simple get",
|
|
data: `{"name": "Mat"}`,
|
|
get: "name",
|
|
output: "Mat",
|
|
},
|
|
{
|
|
name: "Get with dot notation",
|
|
data: `{"address": {"city": "Boulder"}}`,
|
|
get: "address.city",
|
|
output: "Boulder",
|
|
},
|
|
{
|
|
name: "Deep get with dot notation",
|
|
data: `{"one": {"two": {"three": {"four": "hello"}}}}`,
|
|
get: "one.two.three.four",
|
|
output: "hello",
|
|
},
|
|
{
|
|
name: "Get missing with dot notation",
|
|
data: `{"one": {"two": {"three": {"four": "hello"}}}}`,
|
|
get: "one.ten",
|
|
output: nil,
|
|
},
|
|
{
|
|
name: "Get with array notation",
|
|
data: `{"tags": ["one", "two", "three"]}`,
|
|
get: "tags[1]",
|
|
output: "two",
|
|
},
|
|
{
|
|
name: "Get with array and dot notation",
|
|
data: `{"types": { "tags": ["one", "two", "three"]}}`,
|
|
get: "types.tags[1]",
|
|
output: "two",
|
|
},
|
|
{
|
|
name: "Get with array and dot notation - field after array",
|
|
data: `{"tags": [{"name":"one"}, {"name":"two"}, {"name":"three"}]}`,
|
|
get: "tags[1].name",
|
|
output: "two",
|
|
},
|
|
{
|
|
name: "Complex get with array and dot notation",
|
|
data: `{"tags": [{"list": [{"one":"pizza"}]}]}`,
|
|
get: "tags[0].list[0].one",
|
|
output: "pizza",
|
|
},
|
|
{
|
|
name: "Get field from within string should be nil",
|
|
data: `{"name":"Tyler"}`,
|
|
get: "name.something",
|
|
output: nil,
|
|
},
|
|
{
|
|
name: "Get field from within string (using array accessor) should be nil",
|
|
data: `{"numbers":["one", "two", "three"]}`,
|
|
get: "numbers[0].nope",
|
|
output: nil,
|
|
},
|
|
}
|
|
|
|
func TestFixtures(t *testing.T) {
|
|
|
|
for _, fixture := range fixtures {
|
|
|
|
m := MustFromJSON(fixture.data)
|
|
|
|
// get the value
|
|
t.Logf("Running get fixture: \"%s\" (%v)", fixture.name, fixture)
|
|
value := m.Get(fixture.get.(string))
|
|
|
|
// make sure it matches
|
|
assert.Equal(t, fixture.output, value.data,
|
|
"Get fixture \"%s\" failed: %v", fixture.name, fixture,
|
|
)
|
|
|
|
}
|
|
|
|
}
|