package datadictionary import ( "encoding/xml" "reflect" "testing" ) var cachedXMLDoc *XMLDoc func xmlDoc() (*XMLDoc, error) { if cachedXMLDoc != nil { return cachedXMLDoc, nil } data := `
` cachedXMLDoc = new(XMLDoc) err := xml.Unmarshal([]byte(data), cachedXMLDoc) return cachedXMLDoc, err } func TestBoilerPlate(t *testing.T) { doc, err := xmlDoc() if err != nil { t.Fatalf("Unexpected error %v", err) } var tests = []struct { Value interface{} ExpectedValue interface{} }{ {doc.Type, "FIX"}, {doc.Major, "4"}, {doc.Minor, "3"}, {doc.ServicePack, 0}, } for _, test := range tests { if !reflect.DeepEqual(test.Value, test.ExpectedValue) { t.Errorf("Expected %v got %v", test.ExpectedValue, test.Value) } } } func TestComponentMembers(t *testing.T) { doc, err := xmlDoc() if err != nil { t.Fatalf("Unexpected error %v", err) } if doc.Header == nil { t.Fatal("Header is nil") } var tests = []struct { Value *XMLComponentMember XMLNameLocal string Name string Required bool }{ {doc.Header.Members[0], "field", "BeginString", true}, {doc.Header.Members[1], "group", "NoHops", false}, {doc.Header.Members[1].Members[0], "field", "HopCompID", false}, {doc.Trailer.Members[0], "field", "SignatureLength", false}, {doc.Messages[0].Members[0], "field", "TestReqID", false}, {doc.Messages[1].Members[3], "component", "Instrument", true}, {doc.Messages[1].Members[4], "group", "NoRoutingIDs", false}, {doc.Messages[1].Members[4].Members[0], "field", "RoutingType", false}, {doc.Messages[1].Members[4].Members[1], "field", "RoutingID", false}, } for _, test := range tests { if test.Value.XMLName.Local != test.XMLNameLocal { t.Errorf("%v: Expected XMLName Local %v got %v", test.Name, test.XMLNameLocal, test.Value.XMLName.Local) } if test.Value.Name != test.Name { t.Errorf("%v: Expected Name %v got %v", test.Name, test.Name, test.Value.Name) } if test.Value.isRequired() != test.Required { t.Errorf("%v: Expected Required %v got %v", test.Name, test.Required, test.Value.isRequired()) } } } func TestMessages(t *testing.T) { doc, err := xmlDoc() if err != nil { t.Fatalf("Unexpected error %v", err) } var tests = []struct { Value *XMLComponent Name string MsgCat string MsgType string }{ {doc.Messages[0], "Heartbeat", "admin", "0"}, } for _, test := range tests { if test.Value.Name != test.Name { t.Errorf("Expected Name %v got %v", test.Name, test.Value.Name) } if test.Value.MsgCat != test.MsgCat { t.Errorf("Expected MsgCat %v got %v", test.MsgCat, test.Value.MsgCat) } if test.Value.MsgType != test.MsgType { t.Errorf("Expected MsgType %v got %v", test.MsgType, test.Value.MsgType) } } }