1919
2020package quickfix ;
2121
22- import static org . junit . Assert . assertEquals ;
23- import static org . junit . Assert . assertTrue ;
24-
22+ import java . io . UnsupportedEncodingException ;
23+ import java . math . BigDecimal ;
24+ import java . time . LocalDate ;
2525import java .time .LocalDateTime ;
26+ import java .time .LocalTime ;
2627import java .util .Arrays ;
28+ import java .util .Date ;
2729
2830import org .junit .Test ;
2931import org .quickfixj .CharsetSupport ;
3941import quickfix .fix50 .MarketDataIncrementalRefresh ;
4042import quickfix .fix50 .NewOrderSingle ;
4143
44+ import static org .junit .Assert .assertEquals ;
45+ import static org .junit .Assert .assertFalse ;
46+ import static org .junit .Assert .assertTrue ;
47+
4248public class FieldTest {
4349
4450 @ Test
@@ -52,6 +58,185 @@ public void testMessageSetGetString() {
5258 assertEquals (side1 , side2 );
5359 }
5460
61+ private void testFieldCalcuations (String value , int checksum , int length ) {
62+ Field <String > field = new Field <>(12 , value );
63+ field .setObject (value );
64+ assertEquals ("12=" + value , field .toString ());
65+ assertEquals (checksum , field .getChecksum ());
66+ assertEquals (length , field .getLength ());
67+
68+ value = value .substring (0 , value .length () - 1 ) + (char )(value .charAt (value .length () - 1 ) + 1 );
69+ checksum = (checksum + 1 ) & 0xFF ;
70+ field .setObject (value );
71+ assertEquals ("12=" + value , field .toString ());
72+ assertEquals (checksum , field .getChecksum ());
73+ assertEquals (length , field .getLength ());
74+
75+ field .setTag (13 );
76+ checksum = (checksum + 1 ) & 0xFF ;
77+ assertEquals ("13=" + value , field .toString ());
78+ assertEquals (checksum , field .getChecksum ());
79+ assertEquals (length , field .getLength ());
80+ }
81+
82+ @ Test
83+ public void testFieldCalculationsWithDefaultCharset () {
84+ testFieldCalcuations ("VALUE" , 30 , 9 );
85+ }
86+
87+ @ Test
88+ public void testFieldCalculationsWithUTF8Charset () throws UnsupportedEncodingException {
89+ CharsetSupport .setCharset ("UTF-8" );
90+ try {
91+ testFieldCalcuations ("\u6D4B \u9A8C \u6570 \u636E " , 50 , 16 );
92+ } finally {
93+ CharsetSupport .setDefaultCharset ();
94+ }
95+ }
96+
97+ @ Test
98+ public void testDateField () {
99+ DateField field = new DateField (11 );
100+ Date date = new Date ();
101+ field .setValue (date );
102+ assertEquals (11 , field .getTag ());
103+ assertEquals (date , field .getValue ());
104+ field = new DateField (11 , date );
105+ assertEquals (11 , field .getTag ());
106+ assertEquals (date , field .getValue ());
107+ }
108+
109+ @ Test
110+ public void testUtcDateOnlyField () {
111+ UtcDateOnlyField field = new UtcDateOnlyField (11 );
112+ LocalDate date = LocalDate .now ();
113+ field .setValue (date );
114+ assertEquals (11 , field .getTag ());
115+ assertEquals (date , field .getValue ());
116+ field = new UtcDateOnlyField (11 , date );
117+ assertEquals (11 , field .getTag ());
118+ assertEquals (date , field .getValue ());
119+ }
120+
121+ @ Test
122+ public void testUtcTimeOnlyField () {
123+ UtcTimeOnlyField field = new UtcTimeOnlyField (11 );
124+ LocalTime date = LocalTime .now ();
125+ field .setValue (date );
126+ assertEquals (11 , field .getTag ());
127+ assertEquals (date , field .getValue ());
128+ field = new UtcTimeOnlyField (11 , date );
129+ assertEquals (11 , field .getTag ());
130+ assertEquals (date , field .getValue ());
131+ }
132+
133+ @ Test
134+ public void testUtcTimeStampField () {
135+ UtcTimeStampField field = new UtcTimeStampField (11 );
136+ LocalDateTime date = LocalDateTime .now ();
137+ field .setValue (date );
138+ assertEquals (11 , field .getTag ());
139+ assertEquals (date , field .getValue ());
140+ field = new UtcTimeStampField (11 , date );
141+ assertEquals (11 , field .getTag ());
142+ assertEquals (date , field .getValue ());
143+ }
144+
145+ @ Test
146+ public void testBooleanField () {
147+ BooleanField field = new BooleanField (11 );
148+ field .setValue (true );
149+ assertEquals (11 , field .getTag ());
150+ assertTrue (field .getValue ());
151+ field .setValue (Boolean .FALSE );
152+ assertEquals (11 , field .getTag ());
153+ assertFalse (field .getValue ());
154+ field = new BooleanField (22 , true );
155+ assertEquals (22 , field .getTag ());
156+ assertTrue (field .getValue ());
157+ field = new BooleanField (33 , Boolean .TRUE );
158+ assertEquals (33 , field .getTag ());
159+ assertTrue (field .getValue ());
160+ }
161+
162+ @ Test
163+ public void testDoubleField () {
164+ DoubleField field = new DoubleField (11 );
165+ field .setValue (12.3 );
166+ assertEquals (11 , field .getTag ());
167+ assertEquals (12.3 , field .getValue (), 0 );
168+ field .setValue (new Double (23.4 ));
169+ assertEquals (11 , field .getTag ());
170+ assertEquals (23.4 , field .getValue (), 0 );
171+ field = new DoubleField (22 , 34.5 );
172+ assertEquals (22 , field .getTag ());
173+ assertEquals (34.5 , field .getValue (), 0 );
174+ field = new DoubleField (33 , new Double (45.6 ));
175+ assertEquals (33 , field .getTag ());
176+ assertEquals (45.6 , field .getValue (), 0 );
177+ }
178+
179+ @ Test (expected = NumberFormatException .class )
180+ public void testDoubleFieldException () {
181+ DoubleField field = new DoubleField (11 , Double .NaN );
182+ }
183+
184+ @ Test
185+ public void testDecimalField () {
186+ DecimalField field = new DecimalField (11 );
187+ field .setValue (12.3 );
188+ assertEquals (11 , field .getTag ());
189+ assertEquals (BigDecimal .valueOf (12.3 ), field .getValue ());
190+ field .setValue (23.4 );
191+ assertEquals (11 , field .getTag ());
192+ assertEquals (BigDecimal .valueOf (23.4 ), field .getValue ());
193+ field = new DecimalField (22 , 34.5 );
194+ assertEquals (22 , field .getTag ());
195+ assertEquals (BigDecimal .valueOf (34.5 ), field .getValue ());
196+ field = new DecimalField (33 , 45.6 );
197+ assertEquals (33 , field .getTag ());
198+ assertEquals (BigDecimal .valueOf (45.6 ), field .getValue ());
199+ }
200+
201+ @ Test (expected = NumberFormatException .class )
202+ public void testDecimalFieldException () {
203+ DecimalField field = new DecimalField (11 , Double .POSITIVE_INFINITY );
204+ }
205+
206+ @ Test
207+ public void testCharField () {
208+ CharField field = new CharField (11 );
209+ field .setValue ('x' );
210+ assertEquals (11 , field .getTag ());
211+ assertEquals ('x' , field .getValue ());
212+ field .setValue (Character .valueOf ('X' ));
213+ assertEquals (11 , field .getTag ());
214+ assertEquals ('X' , field .getValue ());
215+ field = new CharField (22 , 'a' );
216+ assertEquals (22 , field .getTag ());
217+ assertEquals ('a' , field .getValue ());
218+ field = new CharField (33 , Character .valueOf ('A' ));
219+ assertEquals (33 , field .getTag ());
220+ assertEquals ('A' , field .getValue ());
221+ }
222+
223+ @ Test
224+ public void testIntField () {
225+ IntField field = new IntField (11 );
226+ field .setValue (12 );
227+ assertEquals (11 , field .getTag ());
228+ assertEquals (12 , field .getValue ());
229+ field .setValue (Integer .valueOf (23 ));
230+ assertEquals (11 , field .getTag ());
231+ assertEquals (23 , field .getValue ());
232+ field = new IntField (22 , 23 );
233+ assertEquals (22 , field .getTag ());
234+ assertEquals (23 , field .getValue ());
235+ field = new IntField (33 , Integer .valueOf (44 ));
236+ assertEquals (33 , field .getTag ());
237+ assertEquals (44 , field .getValue ());
238+ }
239+
55240 @ Test
56241 public void testBytesField () {
57242 byte [] data = "rawdata" .getBytes ();
0 commit comments