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
|
package utils
import (
"bytes"
"encoding/json"
"os"
"path"
"strings"
"testing"
"github.com/antchfx/xmlquery"
"github.com/stretchr/testify/assert"
)
func TestXmlToJSON(t *testing.T) {
tests := []struct {
unformattedFile string
expectedFile string
depth int
}{
{"unformatted.xml", "formatted.json", -1},
{"unformatted2.xml", "formatted2.json", -1},
{"unformatted3.xml", "formatted3.json", -1},
{"unformatted4.xml", "formatted4.json", 1},
}
for _, testCase := range tests {
inputFileName := path.Join("..", "..", "test", "data", "xml2json", testCase.unformattedFile)
unformattedXmlReader := getFileReader(inputFileName)
outputFileName := path.Join("..", "..", "test", "data", "xml2json", testCase.expectedFile)
data, jsonReadErr := os.ReadFile(outputFileName)
assert.Nil(t, jsonReadErr)
expectedJson := string(data)
node, parseErr := xmlquery.Parse(unformattedXmlReader)
assert.Nil(t, parseErr)
result := NodeToJSON(node, testCase.depth)
jsonData, jsonMarshalErr := json.Marshal(result)
assert.Nil(t, jsonMarshalErr)
output := new(strings.Builder)
formatErr := FormatJson(bytes.NewReader(jsonData), output, " ", ColorsDisabled)
assert.Nil(t, formatErr)
assert.Equal(t, expectedJson, output.String())
}
}
|