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  }