| 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, |
| ) |
| |
| } |
| |
| } |