diff options
author | Bjørn Erik Pedersen <bjorn.erik.pedersen@gmail.com> | 2018-12-23 10:40:32 +0100 |
---|---|---|
committer | Bjørn Erik Pedersen <bjorn.erik.pedersen@gmail.com> | 2018-12-23 16:33:21 +0100 |
commit | a5744697971d296eb973e04e4259fe9e516b908f (patch) | |
tree | 488ed37ebfc8916b5cfcdaade249884aec7105c3 /tpl/transform/unmarshal_test.go | |
parent | 822dc627a1cfdf1f97882f27761675ac6ace7669 (diff) |
Add CSV support to transform.Unmarshal
Fixes #5555
Diffstat (limited to 'tpl/transform/unmarshal_test.go')
-rw-r--r-- | tpl/transform/unmarshal_test.go | 71 |
1 files changed, 56 insertions, 15 deletions
diff --git a/tpl/transform/unmarshal_test.go b/tpl/transform/unmarshal_test.go index 77e14edad..00424c693 100644 --- a/tpl/transform/unmarshal_test.go +++ b/tpl/transform/unmarshal_test.go @@ -89,38 +89,74 @@ func TestUnmarshal(t *testing.T) { } for i, test := range []struct { - data interface{} - expect interface{} + data interface{} + options interface{} + expect interface{} }{ - {`{ "slogan": "Hugo Rocks!" }`, func(m map[string]interface{}) { + {`{ "slogan": "Hugo Rocks!" }`, nil, func(m map[string]interface{}) { assertSlogan(m) }}, - {`slogan: "Hugo Rocks!"`, func(m map[string]interface{}) { + {`slogan: "Hugo Rocks!"`, nil, func(m map[string]interface{}) { assertSlogan(m) }}, - {`slogan = "Hugo Rocks!"`, func(m map[string]interface{}) { + {`slogan = "Hugo Rocks!"`, nil, func(m map[string]interface{}) { assertSlogan(m) }}, - {testContentResource{content: `slogan: "Hugo Rocks!"`, mime: media.YAMLType}, func(m map[string]interface{}) { + {testContentResource{content: `slogan: "Hugo Rocks!"`, mime: media.YAMLType}, nil, func(m map[string]interface{}) { assertSlogan(m) }}, - {testContentResource{content: `{ "slogan": "Hugo Rocks!" }`, mime: media.JSONType}, func(m map[string]interface{}) { + {testContentResource{content: `{ "slogan": "Hugo Rocks!" }`, mime: media.JSONType}, nil, func(m map[string]interface{}) { assertSlogan(m) }}, - {testContentResource{content: `slogan = "Hugo Rocks!"`, mime: media.TOMLType}, func(m map[string]interface{}) { + {testContentResource{content: `slogan = "Hugo Rocks!"`, mime: media.TOMLType}, nil, func(m map[string]interface{}) { assertSlogan(m) }}, + {testContentResource{content: `1997,Ford,E350,"ac, abs, moon",3000.00 +1999,Chevy,"Venture ""Extended Edition""","",4900.00`, mime: media.CSVType}, nil, func(r [][]string) { + assert.Equal(2, len(r)) + first := r[0] + assert.Equal(5, len(first)) + assert.Equal("Ford", first[1]) + }}, + {testContentResource{content: `a;b;c`, mime: media.CSVType}, map[string]interface{}{"comma": ";"}, func(r [][]string) { + assert.Equal(r, [][]string{[]string{"a", "b", "c"}}) + + }}, + {"a,b,c", nil, func(r [][]string) { + assert.Equal(r, [][]string{[]string{"a", "b", "c"}}) + + }}, + {"a;b;c", map[string]interface{}{"comma": ";"}, func(r [][]string) { + assert.Equal(r, [][]string{[]string{"a", "b", "c"}}) + + }}, + {testContentResource{content: ` +% This is a comment +a;b;c`, mime: media.CSVType}, map[string]interface{}{"CommA": ";", "Comment": "%"}, func(r [][]string) { + assert.Equal(r, [][]string{[]string{"a", "b", "c"}}) + + }}, // errors - {"thisisnotavaliddataformat", false}, - {testContentResource{content: `invalid&toml"`, mime: media.TOMLType}, false}, - {testContentResource{content: `unsupported: MIME"`, mime: media.CalendarType}, false}, - {"thisisnotavaliddataformat", false}, - {`{ notjson }`, false}, - {tstNoStringer{}, false}, + {"thisisnotavaliddataformat", nil, false}, + {testContentResource{content: `invalid&toml"`, mime: media.TOMLType}, nil, false}, + {testContentResource{content: `unsupported: MIME"`, mime: media.CalendarType}, nil, false}, + {"thisisnotavaliddataformat", nil, false}, + {`{ notjson }`, nil, false}, + {tstNoStringer{}, nil, false}, } { errMsg := fmt.Sprintf("[%d]", i) - result, err := ns.Unmarshal(test.data) + ns.cache.Clear() + + var args []interface{} + + if test.options != nil { + args = []interface{}{test.options, test.data} + } else { + args = []interface{}{test.data} + } + + result, err := ns.Unmarshal(args...) if b, ok := test.expect.(bool); ok && !b { assert.Error(err, errMsg) @@ -129,6 +165,11 @@ func TestUnmarshal(t *testing.T) { m, ok := result.(map[string]interface{}) assert.True(ok, errMsg) fn(m) + } else if fn, ok := test.expect.(func(r [][]string)); ok { + assert.NoError(err, errMsg) + r, ok := result.([][]string) + assert.True(ok, errMsg) + fn(r) } else { assert.NoError(err, errMsg) assert.Equal(test.expect, result, errMsg) |