github.com/viant/toolbox@v0.34.5/decoder_test.go (about) 1 package toolbox_test 2 3 import ( 4 "github.com/stretchr/testify/assert" 5 "github.com/viant/toolbox" 6 "os" 7 "path" 8 "strings" 9 "testing" 10 ) 11 12 func TestDecoderFactory(t *testing.T) { 13 { 14 reader := strings.NewReader("[1, 2, 3]") 15 decoder := toolbox.NewJSONDecoderFactory().Create(reader) 16 aSlice := make([]int, 0) 17 err := decoder.Decode(&aSlice) 18 assert.Nil(t, err) 19 assert.Equal(t, 3, len(aSlice)) 20 } 21 { 22 reader := strings.NewReader("[1, 2, 3]") 23 decoder := toolbox.NewJSONDecoderFactoryWithOption(true).Create(reader) 24 aSlice := make([]int, 0) 25 err := decoder.Decode(&aSlice) 26 assert.Nil(t, err) 27 assert.Equal(t, 3, len(aSlice)) 28 } 29 } 30 31 func TestUnMarshalerDecoderFactory(t *testing.T) { 32 reader := strings.NewReader("abc") 33 decoder := toolbox.NewUnMarshalerDecoderFactory().Create(reader) 34 foo := &Foo100{} 35 err := decoder.Decode(foo) 36 assert.Nil(t, err) 37 assert.Equal(t, "abc", foo.Attr) 38 39 err = decoder.Decode(&Foo101{}) 40 assert.NotNil(t, err) 41 42 } 43 44 type Foo100 struct { 45 Attr string 46 } 47 48 func (m *Foo100) Unmarshal(data []byte) error { 49 m.Attr = string(data) 50 return nil 51 } 52 53 type Foo101 struct { 54 Attr string 55 } 56 57 func TestDelimiterDecoderFactory(t *testing.T) { 58 59 record := &toolbox.DelimitedRecord{ 60 Delimiter: ",", 61 } 62 { 63 decoder := toolbox.NewDelimiterDecoderFactory().Create(strings.NewReader("column1,\"column2\", column3,column4")) 64 err := decoder.Decode(record) 65 if assert.Nil(t, err) { 66 assert.Equal(t, []string{"column1", "column2", "column3", "column4"}, record.Columns) 67 68 } 69 } 70 71 { 72 decoder := toolbox.NewDelimiterDecoderFactory().Create(strings.NewReader("1,2,\"ab,cd\",3")) 73 err := decoder.Decode(record) 74 if assert.Nil(t, err) { 75 assert.EqualValues(t, "1", record.Record["column1"]) 76 assert.EqualValues(t, "2", record.Record["column2"]) 77 assert.EqualValues(t, "ab,cd", record.Record["column3"]) 78 assert.EqualValues(t, "3", record.Record["column4"]) 79 } 80 } 81 82 { 83 decoder := toolbox.NewDelimiterDecoderFactory().Create(strings.NewReader("1,2,\" \"\"location:[\\\"\"BE\\\"\"]\"\" \",3")) 84 err := decoder.Decode(record) 85 if assert.Nil(t, err) { 86 assert.EqualValues(t, "1", record.Record["column1"]) 87 assert.EqualValues(t, "2", record.Record["column2"]) 88 assert.EqualValues(t, " \"location:[\\\"BE\\\"]\" ", record.Record["column3"]) 89 assert.EqualValues(t, "3", record.Record["column4"]) 90 } 91 } 92 93 } 94 95 func TestTestYamlDecoder(t *testing.T) { 96 var filename = path.Join(os.Getenv("TMPDIR"), "test.yaml") 97 toolbox.RemoveFileIfExist(filename) 98 defer toolbox.RemoveFileIfExist(filename) 99 var aMap = map[string]interface{}{ 100 "a": 1, 101 "b": "123", 102 "c": []int{1, 3, 6}, 103 } 104 file, err := os.OpenFile(filename, os.O_CREATE|os.O_RDWR, 0644) 105 if assert.Nil(t, err) { 106 err = toolbox.NewYamlEncoderFactory().Create(file).Encode(aMap) 107 assert.Nil(t, err) 108 } 109 var cloneMap = make(map[string]interface{}) 110 file.Close() 111 file, err = os.OpenFile(filename, os.O_RDONLY, 0644) 112 if assert.Nil(t, err) { 113 defer file.Close() 114 err = toolbox.NewYamlDecoderFactory().Create(file).Decode(&cloneMap) 115 if assert.Nil(t, err) { 116 assert.EqualValues(t, aMap["a"], cloneMap["a"]) 117 assert.EqualValues(t, aMap["b"], cloneMap["b"]) 118 assert.EqualValues(t, toolbox.AsSlice(aMap["c"]), cloneMap["c"]) 119 120 } 121 } 122 123 }