File: decoder_test.go

package info (click to toggle)
golang-github-viant-toolbox 0.33.2-4
  • links: PTS, VCS
  • area: main
  • in suites: bookworm, sid, trixie
  • size: 1,280 kB
  • sloc: makefile: 16
file content (123 lines) | stat: -rw-r--r-- 3,223 bytes parent folder | download | duplicates (2)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
package toolbox_test

import (
	"github.com/stretchr/testify/assert"
	"github.com/viant/toolbox"
	"os"
	"path"
	"strings"
	"testing"
)

func TestDecoderFactory(t *testing.T) {
	{
		reader := strings.NewReader("[1, 2, 3]")
		decoder := toolbox.NewJSONDecoderFactory().Create(reader)
		aSlice := make([]int, 0)
		err := decoder.Decode(&aSlice)
		assert.Nil(t, err)
		assert.Equal(t, 3, len(aSlice))
	}
	{
		reader := strings.NewReader("[1, 2, 3]")
		decoder := toolbox.NewJSONDecoderFactoryWithOption(true).Create(reader)
		aSlice := make([]int, 0)
		err := decoder.Decode(&aSlice)
		assert.Nil(t, err)
		assert.Equal(t, 3, len(aSlice))
	}
}

func TestUnMarshalerDecoderFactory(t *testing.T) {
	reader := strings.NewReader("abc")
	decoder := toolbox.NewUnMarshalerDecoderFactory().Create(reader)
	foo := &Foo100{}
	err := decoder.Decode(foo)
	assert.Nil(t, err)
	assert.Equal(t, "abc", foo.Attr)

	err = decoder.Decode(&Foo101{})
	assert.NotNil(t, err)

}

type Foo100 struct {
	Attr string
}

func (m *Foo100) Unmarshal(data []byte) error {
	m.Attr = string(data)
	return nil
}

type Foo101 struct {
	Attr string
}

func TestDelimiterDecoderFactory(t *testing.T) {

	record := &toolbox.DelimitedRecord{
		Delimiter: ",",
	}
	{
		decoder := toolbox.NewDelimiterDecoderFactory().Create(strings.NewReader("column1,\"column2\", column3,column4"))
		err := decoder.Decode(record)
		if assert.Nil(t, err) {
			assert.Equal(t, []string{"column1", "column2", "column3", "column4"}, record.Columns)

		}
	}

	{
		decoder := toolbox.NewDelimiterDecoderFactory().Create(strings.NewReader("1,2,\"ab,cd\",3"))
		err := decoder.Decode(record)
		if assert.Nil(t, err) {
			assert.EqualValues(t, "1", record.Record["column1"])
			assert.EqualValues(t, "2", record.Record["column2"])
			assert.EqualValues(t, "ab,cd", record.Record["column3"])
			assert.EqualValues(t, "3", record.Record["column4"])
		}
	}

	{
		decoder := toolbox.NewDelimiterDecoderFactory().Create(strings.NewReader("1,2,\" \"\"location:[\\\"\"BE\\\"\"]\"\"  \",3"))
		err := decoder.Decode(record)
		if assert.Nil(t, err) {
			assert.EqualValues(t, "1", record.Record["column1"])
			assert.EqualValues(t, "2", record.Record["column2"])
			assert.EqualValues(t, " \"location:[\\\"BE\\\"]\"  ", record.Record["column3"])
			assert.EqualValues(t, "3", record.Record["column4"])
		}
	}

}

func TestTestYamlDecoder(t *testing.T) {
	var filename = path.Join(os.Getenv("TMPDIR"), "test.yaml")
	toolbox.RemoveFileIfExist(filename)
	defer toolbox.RemoveFileIfExist(filename)
	var aMap = map[string]interface{}{
		"a": 1,
		"b": "123",
		"c": []int{1, 3, 6},
	}
	file, err := os.OpenFile(filename, os.O_CREATE|os.O_RDWR, 0644)
	if assert.Nil(t, err) {
		err = toolbox.NewYamlEncoderFactory().Create(file).Encode(aMap)
		assert.Nil(t, err)
	}
	var cloneMap = make(map[string]interface{})
	file.Close()
	file, err = os.OpenFile(filename, os.O_RDONLY, 0644)
	if assert.Nil(t, err) {
		defer file.Close()
		err = toolbox.NewYamlDecoderFactory().Create(file).Decode(&cloneMap)
		if assert.Nil(t, err) {
			assert.EqualValues(t, aMap["a"], cloneMap["a"])
			assert.EqualValues(t, aMap["b"], cloneMap["b"])
			assert.EqualValues(t, toolbox.AsSlice(aMap["c"]), cloneMap["c"])

		}
	}

}