From 9f81375698f9c78cfc284811352e538ca161e7ae Mon Sep 17 00:00:00 2001 From: pugnack Date: Wed, 14 May 2025 01:58:09 +0500 Subject: [PATCH] add unit-tests (#137) --- go.mod | 4 ++- go.sum | 6 +++++ reader_test.go | 40 +++++++++++++++++++++++++++++ xml.go | 6 ++--- xml_test.go | 70 ++++++++++++++++++++++++++++++++++++++++++++++++++ 5 files changed, 122 insertions(+), 4 deletions(-) create mode 100644 reader_test.go create mode 100644 xml_test.go diff --git a/go.mod b/go.mod index 5b9df47..ae2b234 100644 --- a/go.mod +++ b/go.mod @@ -2,18 +2,20 @@ module go.unistack.org/micro-codec-xml/v4 go 1.22.0 - require ( + github.com/stretchr/testify v1.10.0 go.unistack.org/micro-proto/v4 v4.1.0 go.unistack.org/micro/v4 v4.1.3 ) require ( github.com/ash3in/uuidv8 v1.2.0 // indirect + github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc // indirect github.com/google/go-cmp v0.6.0 // indirect github.com/google/uuid v1.6.0 // indirect github.com/kr/pretty v0.3.1 // indirect github.com/matoous/go-nanoid v1.5.1 // indirect + github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 // indirect google.golang.org/protobuf v1.36.3 // indirect gopkg.in/yaml.v3 v3.0.1 // indirect ) diff --git a/go.sum b/go.sum index 2c6519e..b8c1781 100644 --- a/go.sum +++ b/go.sum @@ -3,6 +3,8 @@ github.com/DATA-DOG/go-sqlmock v1.5.2/go.mod h1:88MAG/4G7SMwSE3CeA0ZKzrT5CiOU3OJ github.com/ash3in/uuidv8 v1.2.0 h1:2oogGdtCPwaVtyvPPGin4TfZLtOGE5F+W++E880G6SI= github.com/ash3in/uuidv8 v1.2.0/go.mod h1:BnU0wJBxnzdEKmVg4xckBkD+VZuecTFTUP3M0dWgyY4= github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E= +github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc h1:U9qPSI2PIWSS1VwoXQT9A3Wy9MM3WgvqSxFWenqJduM= +github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/google/go-cmp v0.6.0 h1:ofyhxvXcZhMsU5ulbFiLKl/XBFqE1GSq7atu8tAmTRI= github.com/google/go-cmp v0.6.0/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= github.com/google/uuid v1.6.0 h1:NIvaJDMOsjHA8n1jAhLSgzrAzy1Hgr+hNrb57e+94F0= @@ -14,9 +16,13 @@ github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE= github.com/matoous/go-nanoid v1.5.1 h1:aCjdvTyO9LLnTIi0fgdXhOPPvOHjpXN6Ik9DaNjIct4= github.com/matoous/go-nanoid v1.5.1/go.mod h1:zyD2a71IubI24efhpvkJz+ZwfwagzgSO6UNiFsZKN7U= github.com/pkg/diff v0.0.0-20210226163009-20ebb0f2a09e/go.mod h1:pJLUxLENpZxwdsKMEsNbx1VGcRFpLqf3715MtcvvzbA= +github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 h1:Jamvg5psRIccs7FGNTlIRMkT8wgtp5eCXdBlqhYGL6U= +github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= github.com/rogpeppe/go-internal v1.9.0/go.mod h1:WtVeX8xhTBvf0smdhujwtBcq4Qrzq/fJaraNFVN+nFs= github.com/rogpeppe/go-internal v1.13.1 h1:KvO1DLK/DRN07sQ1LQKScxyZJuNnedQ5/wKSR38lUII= github.com/rogpeppe/go-internal v1.13.1/go.mod h1:uMEvuHeurkdAXX61udpOXGD/AzZDWNMNyH2VO9fmH0o= +github.com/stretchr/testify v1.10.0 h1:Xv5erBjTwe/5IxqUQTdXv5kgmIvbHo3QQyRwhJsOfJA= +github.com/stretchr/testify v1.10.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY= go.unistack.org/micro-proto/v4 v4.1.0 h1:qPwL2n/oqh9RE3RTTDgt28XK3QzV597VugQPaw9lKUk= go.unistack.org/micro-proto/v4 v4.1.0/go.mod h1:ArmK7o+uFvxSY3dbJhKBBX4Pm1rhWdLEFf3LxBrMtec= go.unistack.org/micro/v4 v4.1.3 h1:9QHiLHBTfPtfKyoY3HsLPNVSK0wlAAoMV+9saLz2iR4= diff --git a/reader_test.go b/reader_test.go new file mode 100644 index 0000000..2686e6a --- /dev/null +++ b/reader_test.go @@ -0,0 +1,40 @@ +package xml + +import ( + "testing" + + "github.com/stretchr/testify/require" +) + +func TestReader_Read(t *testing.T) { + tests := []struct { + name string + input []byte + expected []byte + }{ + { + name: "with replacement", + input: []byte(`ITEM`), + expected: []byte(`ITEM`), + }, + { + name: "without replacement", + input: []byte(`ITEM`), + expected: []byte(`ITEM`), + }, + { + name: "check invalid replacement", + input: []byte(`ITEM`), + expected: []byte(`ITEM`), + }, + } + + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + buf := make([]byte, len(tt.input)) + n, err := newReader(tt.input).Read(buf) + require.NoError(t, err) + require.Equal(t, tt.expected, buf[:n]) + }) + } +} diff --git a/xml.go b/xml.go index 868833c..3e348d3 100644 --- a/xml.go +++ b/xml.go @@ -134,9 +134,9 @@ func newReader(b []byte) io.Reader { } var ( - srcP = []byte(`version="1.1"`) + srcP = []byte(` 0 { + if idx := bytes.Index(b, srcP); idx >= 0 { copy(b[idx:idx+srcL], dstP) r.skip = true } diff --git a/xml_test.go b/xml_test.go new file mode 100644 index 0000000..69caced --- /dev/null +++ b/xml_test.go @@ -0,0 +1,70 @@ +package xml + +import ( + "encoding/xml" + "testing" + + "github.com/stretchr/testify/require" + "go.unistack.org/micro/v4/codec" +) + +func TestXmlCodec_Unmarshal(t *testing.T) { + type result struct { + XMLName xml.Name `xml:"root"` + Name string `xml:"name,attr"` + Item string `xml:"item"` + } + + tests := []struct { + name string + input []byte + isXML11 bool + expected result + }{ + { + name: "without version", + input: []byte(`ITEM`), + expected: result{ + XMLName: xml.Name{Local: "root"}, + Name: "NAME", + Item: "ITEM", + }, + }, + { + name: "version 1.0", + input: []byte(`ITEM`), + expected: result{ + XMLName: xml.Name{Local: "root"}, + Name: "NAME", + Item: "ITEM", + }, + }, + { + name: "version 1.1", + input: []byte(`ITEM`), + isXML11: true, + expected: result{ + XMLName: xml.Name{Local: "root"}, + Name: "NAME", + Item: "ITEM", + }, + }, + } + + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + var ( + r result + opts []codec.Option + ) + + if tt.isXML11 { + opts = append(opts, UnmarshalXML11(true)) + } + + err := NewCodec(opts...).Unmarshal(tt.input, &r) + require.NoError(t, err) + require.Equal(t, tt.expected, r) + }) + } +}