| package objx |
| |
| import ( |
| "github.com/stretchr/testify/assert" |
| "testing" |
| ) |
| |
| func TestAccessorsAccessGetSingleField(t *testing.T) { |
| |
| current := map[string]interface{}{"name": "Tyler"} |
| assert.Equal(t, "Tyler", access(current, "name", nil, false, true)) |
| |
| } |
| func TestAccessorsAccessGetDeep(t *testing.T) { |
| |
| current := map[string]interface{}{"name": map[string]interface{}{"first": "Tyler", "last": "Bunnell"}} |
| assert.Equal(t, "Tyler", access(current, "name.first", nil, false, true)) |
| assert.Equal(t, "Bunnell", access(current, "name.last", nil, false, true)) |
| |
| } |
| func TestAccessorsAccessGetDeepDeep(t *testing.T) { |
| |
| current := map[string]interface{}{"one": map[string]interface{}{"two": map[string]interface{}{"three": map[string]interface{}{"four": 4}}}} |
| assert.Equal(t, 4, access(current, "one.two.three.four", nil, false, true)) |
| |
| } |
| func TestAccessorsAccessGetInsideArray(t *testing.T) { |
| |
| current := map[string]interface{}{"names": []interface{}{map[string]interface{}{"first": "Tyler", "last": "Bunnell"}, map[string]interface{}{"first": "Capitol", "last": "Bollocks"}}} |
| assert.Equal(t, "Tyler", access(current, "names[0].first", nil, false, true)) |
| assert.Equal(t, "Bunnell", access(current, "names[0].last", nil, false, true)) |
| assert.Equal(t, "Capitol", access(current, "names[1].first", nil, false, true)) |
| assert.Equal(t, "Bollocks", access(current, "names[1].last", nil, false, true)) |
| |
| assert.Panics(t, func() { |
| access(current, "names[2]", nil, false, true) |
| }) |
| assert.Nil(t, access(current, "names[2]", nil, false, false)) |
| |
| } |
| |
| func TestAccessorsAccessGetFromArrayWithInt(t *testing.T) { |
| |
| current := []interface{}{map[string]interface{}{"first": "Tyler", "last": "Bunnell"}, map[string]interface{}{"first": "Capitol", "last": "Bollocks"}} |
| one := access(current, 0, nil, false, false) |
| two := access(current, 1, nil, false, false) |
| three := access(current, 2, nil, false, false) |
| |
| assert.Equal(t, "Tyler", one.(map[string]interface{})["first"]) |
| assert.Equal(t, "Capitol", two.(map[string]interface{})["first"]) |
| assert.Nil(t, three) |
| |
| } |
| |
| func TestAccessorsGet(t *testing.T) { |
| |
| current := New(map[string]interface{}{"name": "Tyler"}) |
| assert.Equal(t, "Tyler", current.Get("name").data) |
| |
| } |
| |
| func TestAccessorsAccessSetSingleField(t *testing.T) { |
| |
| current := map[string]interface{}{"name": "Tyler"} |
| access(current, "name", "Mat", true, false) |
| assert.Equal(t, current["name"], "Mat") |
| |
| access(current, "age", 29, true, true) |
| assert.Equal(t, current["age"], 29) |
| |
| } |
| |
| func TestAccessorsAccessSetSingleFieldNotExisting(t *testing.T) { |
| |
| current := map[string]interface{}{} |
| access(current, "name", "Mat", true, false) |
| assert.Equal(t, current["name"], "Mat") |
| |
| } |
| |
| func TestAccessorsAccessSetDeep(t *testing.T) { |
| |
| current := map[string]interface{}{"name": map[string]interface{}{"first": "Tyler", "last": "Bunnell"}} |
| |
| access(current, "name.first", "Mat", true, true) |
| access(current, "name.last", "Ryer", true, true) |
| |
| assert.Equal(t, "Mat", access(current, "name.first", nil, false, true)) |
| assert.Equal(t, "Ryer", access(current, "name.last", nil, false, true)) |
| |
| } |
| func TestAccessorsAccessSetDeepDeep(t *testing.T) { |
| |
| current := map[string]interface{}{"one": map[string]interface{}{"two": map[string]interface{}{"three": map[string]interface{}{"four": 4}}}} |
| |
| access(current, "one.two.three.four", 5, true, true) |
| |
| assert.Equal(t, 5, access(current, "one.two.three.four", nil, false, true)) |
| |
| } |
| func TestAccessorsAccessSetArray(t *testing.T) { |
| |
| current := map[string]interface{}{"names": []interface{}{"Tyler"}} |
| |
| access(current, "names[0]", "Mat", true, true) |
| |
| assert.Equal(t, "Mat", access(current, "names[0]", nil, false, true)) |
| |
| } |
| func TestAccessorsAccessSetInsideArray(t *testing.T) { |
| |
| current := map[string]interface{}{"names": []interface{}{map[string]interface{}{"first": "Tyler", "last": "Bunnell"}, map[string]interface{}{"first": "Capitol", "last": "Bollocks"}}} |
| |
| access(current, "names[0].first", "Mat", true, true) |
| access(current, "names[0].last", "Ryer", true, true) |
| access(current, "names[1].first", "Captain", true, true) |
| access(current, "names[1].last", "Underpants", true, true) |
| |
| assert.Equal(t, "Mat", access(current, "names[0].first", nil, false, true)) |
| assert.Equal(t, "Ryer", access(current, "names[0].last", nil, false, true)) |
| assert.Equal(t, "Captain", access(current, "names[1].first", nil, false, true)) |
| assert.Equal(t, "Underpants", access(current, "names[1].last", nil, false, true)) |
| |
| } |
| |
| func TestAccessorsAccessSetFromArrayWithInt(t *testing.T) { |
| |
| current := []interface{}{map[string]interface{}{"first": "Tyler", "last": "Bunnell"}, map[string]interface{}{"first": "Capitol", "last": "Bollocks"}} |
| one := access(current, 0, nil, false, false) |
| two := access(current, 1, nil, false, false) |
| three := access(current, 2, nil, false, false) |
| |
| assert.Equal(t, "Tyler", one.(map[string]interface{})["first"]) |
| assert.Equal(t, "Capitol", two.(map[string]interface{})["first"]) |
| assert.Nil(t, three) |
| |
| } |
| |
| func TestAccessorsSet(t *testing.T) { |
| |
| current := New(map[string]interface{}{"name": "Tyler"}) |
| current.Set("name", "Mat") |
| assert.Equal(t, "Mat", current.Get("name").data) |
| |
| } |