140 lines
2.3 KiB
Go
140 lines
2.3 KiB
Go
package datadictionary
|
|
|
|
import (
|
|
"encoding/xml"
|
|
"strconv"
|
|
"testing"
|
|
|
|
"github.com/stretchr/testify/assert"
|
|
"github.com/stretchr/testify/suite"
|
|
)
|
|
|
|
type BuildSuite struct {
|
|
suite.Suite
|
|
doc *XMLDoc
|
|
*builder
|
|
}
|
|
|
|
func TestBuildSuite(t *testing.T) {
|
|
suite.Run(t, new(BuildSuite))
|
|
}
|
|
|
|
func (s *BuildSuite) SetupTest() {
|
|
s.doc = &XMLDoc{Type: "FIX", Major: "4", Minor: "5"}
|
|
s.builder = new(builder)
|
|
}
|
|
|
|
func (s *BuildSuite) TestValidTypes() {
|
|
var tests = []string{
|
|
"FIX",
|
|
"FIXT",
|
|
}
|
|
|
|
for _, test := range tests {
|
|
s.doc.Type = test
|
|
dict, err := s.builder.build(s.doc)
|
|
|
|
s.Nil(err)
|
|
s.NotNil(dict)
|
|
s.Equal(test, dict.FIXType)
|
|
}
|
|
}
|
|
|
|
func (s *BuildSuite) TestInvalidTypes() {
|
|
var tests = []string{
|
|
"",
|
|
"invalid",
|
|
}
|
|
|
|
for _, test := range tests {
|
|
s.doc.Type = test
|
|
_, err := s.builder.build(s.doc)
|
|
|
|
s.NotNil(err)
|
|
}
|
|
}
|
|
|
|
func (s *BuildSuite) TestValidMajor() {
|
|
var tests = []int{
|
|
4,
|
|
5,
|
|
}
|
|
|
|
for _, test := range tests {
|
|
s.doc.Major = strconv.Itoa(test)
|
|
dict, err := s.builder.build(s.doc)
|
|
|
|
s.Nil(err)
|
|
s.NotNil(dict)
|
|
s.Equal(test, dict.Major)
|
|
}
|
|
}
|
|
|
|
func (s *BuildSuite) TestInvalidMajor() {
|
|
var tests = []string{
|
|
"",
|
|
"notanumber",
|
|
}
|
|
|
|
for _, test := range tests {
|
|
s.doc.Major = test
|
|
_, err := s.builder.build(s.doc)
|
|
|
|
s.NotNil(err)
|
|
}
|
|
}
|
|
|
|
func (s *BuildSuite) TestValidMinor() {
|
|
var tests = []int{
|
|
4,
|
|
5,
|
|
}
|
|
|
|
for _, test := range tests {
|
|
s.doc.Minor = strconv.Itoa(test)
|
|
dict, err := s.builder.build(s.doc)
|
|
|
|
s.Nil(err)
|
|
s.NotNil(dict)
|
|
s.Equal(test, dict.Minor)
|
|
}
|
|
}
|
|
|
|
func (s *BuildSuite) TestInvalidMinor() {
|
|
var tests = []string{
|
|
"",
|
|
"notanumber",
|
|
}
|
|
|
|
for _, test := range tests {
|
|
s.doc.Minor = test
|
|
_, err := s.builder.build(s.doc)
|
|
|
|
s.NotNil(err)
|
|
}
|
|
}
|
|
|
|
func TestBuildFieldDef(t *testing.T) {
|
|
var tests = []struct {
|
|
element string
|
|
}{
|
|
{"field"},
|
|
{"group"},
|
|
}
|
|
|
|
for _, test := range tests {
|
|
xmlField := &XMLComponentMember{XMLName: xml.Name{Local: test.element}, Name: "myfield", Members: []*XMLComponentMember{}}
|
|
|
|
fieldTypeByName := make(map[string]*FieldType)
|
|
fieldTypeByName["myfield"] = NewFieldType("some field", 11, "INT")
|
|
dict := &DataDictionary{FieldTypeByName: fieldTypeByName}
|
|
|
|
b := &builder{doc: nil, dict: dict}
|
|
f, err := b.buildFieldDef(xmlField)
|
|
|
|
assert.Nil(t, err)
|
|
assert.Equal(t, 11, f.Tag())
|
|
assert.Empty(t, f.childTags())
|
|
}
|
|
}
|