Files
qfixpt/quickfix/datadictionary/build_test.go
2026-03-12 12:08:34 -03:00

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())
}
}