|
1 | 1 | package datadictionary |
2 | 2 |
|
3 | 3 | import ( |
4 | | - . "gopkg.in/check.v1" |
| 4 | + "testing" |
5 | 5 | ) |
6 | 6 |
|
7 | | -var _ = Suite(&DataDictionaryTests{}) |
8 | | - |
9 | | -type DataDictionaryTests struct { |
10 | | - dict *DataDictionary |
| 7 | +func TestParseBadPath(t *testing.T) { |
| 8 | + if _, err := Parse("../spec/bogus.xml"); err == nil { |
| 9 | + t.Error("Expected err") |
| 10 | + } |
11 | 11 | } |
12 | 12 |
|
13 | | -func (s *DataDictionaryTests) SetUpTest(c *C) { |
14 | | - dict, err := Parse("../spec/FIX43.xml") |
15 | | - c.Check(err, IsNil) |
16 | | - c.Check(dict, NotNil) |
| 13 | +func TestParseRecursiveComponents(t *testing.T) { |
| 14 | + dict, err := Parse("../spec/FIX44.xml") |
17 | 15 |
|
18 | | - s.dict = dict |
19 | | -} |
| 16 | + if dict == nil { |
| 17 | + t.Error("Dictionary is nil") |
| 18 | + } |
20 | 19 |
|
21 | | -func (s *DataDictionaryTests) TestParseBadPath(c *C) { |
22 | | - _, err := Parse("../spec/bogus.xml") |
23 | | - c.Check(err, NotNil) |
| 20 | + if err != nil { |
| 21 | + t.Errorf("Unexpected err: %v", err) |
| 22 | + } |
24 | 23 | } |
25 | 24 |
|
26 | | -func (s *DataDictionaryTests) TestParseRecursiveComponents(c *C) { |
27 | | - dict, err := Parse("../spec/FIX44.xml") |
28 | | - c.Check(err, IsNil) |
29 | | - c.Check(dict, NotNil) |
30 | | -} |
| 25 | +var cachedDataDictionary *DataDictionary |
31 | 26 |
|
32 | | -func (s *DataDictionaryTests) TestComponents(c *C) { |
33 | | - _, ok := s.dict.Components["SpreadOrBenchmarkCurveData"] |
34 | | - c.Check(ok, Equals, true) |
35 | | -} |
| 27 | +func dict() (*DataDictionary, error) { |
| 28 | + if cachedXmlDoc != nil { |
| 29 | + return cachedDataDictionary, nil |
| 30 | + } |
36 | 31 |
|
37 | | -func (s *DataDictionaryTests) TestFieldsByTag(c *C) { |
38 | | - f, ok := s.dict.FieldTypeByTag[655] |
39 | | - c.Check(ok, Equals, true) |
40 | | - c.Check(f.Tag, Equals, 655) |
41 | | - c.Check(f.Name, Equals, "ContraLegRefID") |
42 | | - c.Check(f.Type, Equals, "STRING") |
43 | | - c.Check(f.Enums, IsNil) |
44 | | - |
45 | | - f, ok = s.dict.FieldTypeByTag[658] |
46 | | - c.Check(ok, Equals, true) |
47 | | - c.Check(f.Tag, Equals, 658) |
48 | | - c.Check(f.Name, Equals, "QuoteRequestRejectReason") |
49 | | - c.Check(f.Type, Equals, "INT") |
50 | | - |
51 | | - c.Check(f.Enums, NotNil) |
52 | | - c.Check(len(f.Enums), Equals, 6) |
53 | | - c.Check(f.Enums["1"].Value, Equals, "1") |
54 | | - c.Check(f.Enums["1"].Description, Equals, "UNKNOWN_SYMBOL") |
| 32 | + var err error |
| 33 | + cachedDataDictionary, err = Parse("../spec/FIX43.xml") |
| 34 | + return cachedDataDictionary, err |
55 | 35 | } |
56 | 36 |
|
57 | | -func (s *DataDictionaryTests) TestMessages(c *C) { |
58 | | - _, ok := s.dict.Messages["D"] |
59 | | - c.Check(ok, Equals, true) |
| 37 | +func TestComponents(t *testing.T) { |
| 38 | + d, _ := dict() |
| 39 | + if _, ok := d.Components["SpreadOrBenchmarkCurveData"]; ok != true { |
| 40 | + t.Error("Component not found") |
| 41 | + } |
60 | 42 | } |
61 | 43 |
|
62 | | -func (s *DataDictionaryTests) TestHeader(c *C) { |
63 | | - c.Check(s.dict.Header, NotNil) |
| 44 | +func TestFieldsByTag(t *testing.T) { |
| 45 | + d, _ := dict() |
| 46 | + |
| 47 | + var tests = []struct { |
| 48 | + Tag int |
| 49 | + Name string |
| 50 | + Type string |
| 51 | + EnumsAreNil bool |
| 52 | + }{ |
| 53 | + {655, "ContraLegRefID", "STRING", true}, |
| 54 | + {658, "QuoteRequestRejectReason", "INT", false}, |
| 55 | + } |
| 56 | + |
| 57 | + for _, test := range tests { |
| 58 | + f, ok := d.FieldTypeByTag[test.Tag] |
| 59 | + |
| 60 | + if !ok { |
| 61 | + t.Errorf("%v not found", test.Tag) |
| 62 | + } |
| 63 | + |
| 64 | + if f.Name != test.Name { |
| 65 | + t.Errorf("Expected %v got %v", test.Name, f.Name) |
| 66 | + } |
| 67 | + |
| 68 | + if f.Type != test.Type { |
| 69 | + t.Errorf("Expected %v got %v", test.Type, f.Type) |
| 70 | + } |
| 71 | + |
| 72 | + switch { |
| 73 | + |
| 74 | + case f.Enums != nil && test.EnumsAreNil: |
| 75 | + t.Errorf("Expected no enums") |
| 76 | + case f.Enums == nil && !test.EnumsAreNil: |
| 77 | + t.Errorf("Expected enums") |
| 78 | + } |
| 79 | + } |
64 | 80 | } |
65 | 81 |
|
66 | | -func (s *DataDictionaryTests) TestTrailer(c *C) { |
67 | | - c.Check(s.dict.Trailer, NotNil) |
| 82 | +func TestEnumFieldsByTag(t *testing.T) { |
| 83 | + |
| 84 | + d, _ := dict() |
| 85 | + f, _ := d.FieldTypeByTag[658] |
| 86 | + |
| 87 | + var tests = []struct { |
| 88 | + Value string |
| 89 | + Description string |
| 90 | + }{ |
| 91 | + {"1", "UNKNOWN_SYMBOL"}, |
| 92 | + {"2", "EXCHANGE"}, |
| 93 | + {"3", "QUOTE_REQUEST_EXCEEDS_LIMIT"}, |
| 94 | + {"4", "TOO_LATE_TO_ENTER"}, |
| 95 | + {"5", "INVALID_PRICE"}, |
| 96 | + {"6", "NOT_AUTHORIZED_TO_REQUEST_QUOTE"}, |
| 97 | + } |
| 98 | + |
| 99 | + if len(f.Enums) != len(tests) { |
| 100 | + t.Errorf("Expected %v enums got %v", len(tests), len(f.Enums)) |
| 101 | + } |
| 102 | + |
| 103 | + for _, test := range tests { |
| 104 | + if enum, ok := f.Enums[test.Value]; !ok { |
| 105 | + t.Errorf("Expected Enum %v", test.Value) |
| 106 | + } else { |
| 107 | + |
| 108 | + if enum.Value != test.Value { |
| 109 | + t.Errorf("Expected value %v got %v", test.Value, enum.Value) |
| 110 | + } |
| 111 | + |
| 112 | + if enum.Description != test.Description { |
| 113 | + t.Errorf("Expected description %v got %v", test.Description, enum.Description) |
| 114 | + } |
| 115 | + } |
| 116 | + } |
68 | 117 | } |
69 | 118 |
|
70 | | -func (s *DataDictionaryTests) TestMessageRequiredTags(c *C) { |
71 | | - m, ok := s.dict.Messages["D"] |
72 | | - c.Check(ok, Equals, true) |
73 | | - |
74 | | - _, required := m.RequiredTags[11] |
75 | | - c.Check(required, Equals, true) |
76 | | - _, required = m.RequiredTags[526] |
77 | | - c.Check(required, Equals, false) |
78 | | - |
79 | | - _, required = s.dict.Header.RequiredTags[8] |
80 | | - c.Check(required, Equals, true) |
81 | | - |
82 | | - _, required = s.dict.Header.RequiredTags[115] |
83 | | - c.Check(required, Equals, false) |
84 | | - |
85 | | - _, required = s.dict.Trailer.RequiredTags[10] |
86 | | - c.Check(required, Equals, true) |
87 | | - |
88 | | - _, required = s.dict.Trailer.RequiredTags[89] |
89 | | - c.Check(required, Equals, false) |
90 | | - |
| 119 | +func TestDataDictionaryMessages(t *testing.T) { |
| 120 | + d, _ := dict() |
| 121 | + _, ok := d.Messages["D"] |
| 122 | + if !ok { |
| 123 | + t.Error("Did not find message") |
| 124 | + } |
91 | 125 | } |
92 | 126 |
|
93 | | -func (s *DataDictionaryTests) TestMessageTags(c *C) { |
94 | | - m, ok := s.dict.Messages["D"] |
95 | | - c.Check(ok, Equals, true) |
96 | | - |
97 | | - _, known := m.Tags[11] |
98 | | - c.Check(known, Equals, true) |
99 | | - _, known = m.Tags[526] |
100 | | - c.Check(known, Equals, true) |
101 | | - |
102 | | - _, known = s.dict.Header.Tags[8] |
103 | | - c.Check(known, Equals, true) |
| 127 | +func TestDataDictionaryHeader(t *testing.T) { |
| 128 | + d, _ := dict() |
| 129 | + if d.Header == nil { |
| 130 | + t.Error("Did not find header") |
| 131 | + } |
| 132 | +} |
104 | 133 |
|
105 | | - _, known = s.dict.Header.Tags[115] |
106 | | - c.Check(known, Equals, true) |
| 134 | +func TestDataDictionaryTrailer(t *testing.T) { |
| 135 | + d, _ := dict() |
| 136 | + if d.Trailer == nil { |
| 137 | + t.Error("Did not find trailer") |
| 138 | + } |
| 139 | +} |
107 | 140 |
|
108 | | - _, known = s.dict.Trailer.Tags[10] |
109 | | - c.Check(known, Equals, true) |
| 141 | +func TestMessageRequiredTags(t *testing.T) { |
| 142 | + d, _ := dict() |
| 143 | + |
| 144 | + nos, _ := d.Messages["D"] |
| 145 | + |
| 146 | + var tests = []struct { |
| 147 | + *MessageDef |
| 148 | + Tag int |
| 149 | + Required bool |
| 150 | + }{ |
| 151 | + {nos, 11, true}, |
| 152 | + {nos, 526, false}, |
| 153 | + {d.Header, 8, true}, |
| 154 | + {d.Header, 115, false}, |
| 155 | + {d.Trailer, 10, true}, |
| 156 | + {d.Trailer, 89, false}, |
| 157 | + } |
| 158 | + |
| 159 | + for _, test := range tests { |
| 160 | + switch _, required := test.MessageDef.RequiredTags[test.Tag]; { |
| 161 | + case required && !test.Required: |
| 162 | + t.Errorf("%v should not be required", test.Tag) |
| 163 | + case !required && test.Required: |
| 164 | + t.Errorf("%v should not required", test.Tag) |
| 165 | + } |
| 166 | + } |
| 167 | +} |
110 | 168 |
|
111 | | - _, known = s.dict.Trailer.Tags[89] |
112 | | - c.Check(known, Equals, true) |
| 169 | +func TestMessageTags(t *testing.T) { |
| 170 | + d, _ := dict() |
| 171 | + |
| 172 | + nos, _ := d.Messages["D"] |
| 173 | + |
| 174 | + var tests = []struct { |
| 175 | + *MessageDef |
| 176 | + Tag int |
| 177 | + }{ |
| 178 | + {nos, 11}, |
| 179 | + {nos, 526}, |
| 180 | + {d.Header, 8}, |
| 181 | + {d.Header, 115}, |
| 182 | + {d.Trailer, 10}, |
| 183 | + {d.Trailer, 89}, |
| 184 | + } |
| 185 | + |
| 186 | + for _, test := range tests { |
| 187 | + if _, known := test.MessageDef.Tags[test.Tag]; !known { |
| 188 | + t.Errorf("%v is not known", test.Tag) |
| 189 | + } |
| 190 | + } |
113 | 191 | } |
0 commit comments