Skip to content

Commit 7a32f28

Browse files
andreydpAndrii Poletaiev
authored andcommitted
Solve merge conflicts. Merge master. Fix tests
1 parent e368c17 commit 7a32f28

File tree

1 file changed

+64
-0
lines changed

1 file changed

+64
-0
lines changed

quickfixj-core/src/test/java/quickfix/MessageTest.java

Lines changed: 64 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,9 @@
2727
import static org.junit.Assert.assertTrue;
2828
import static org.junit.Assert.fail;
2929

30+
import static org.junit.Assert.assertThrows;
31+
import static quickfix.DataDictionaryTest.getDictionary;
32+
3033
import java.math.BigDecimal;
3134
import java.time.LocalDateTime;
3235
import java.time.ZoneOffset;
@@ -120,6 +123,7 @@
120123
import quickfix.fix44.ExecutionReport;
121124
import quickfix.fix44.IndicationOfInterest;
122125
import quickfix.fix44.Logon;
126+
import quickfix.fix44.NewOrderMultileg;
123127
import quickfix.fix44.Logon.NoMsgTypes;
124128
import quickfix.fix44.NewOrderCross;
125129
import quickfix.fix44.NewOrderSingle.NoPartyIDs;
@@ -1445,6 +1449,66 @@ public void testValidateFieldsOutOfOrderPreFIXT11() throws Exception {
14451449
assertEquals(tcrOrdered.toString(), tcrUnOrdered.toString());
14461450
}
14471451

1452+
@Test
1453+
public void testFirstFieldInGroupIsDelimiter() throws Exception {
1454+
1455+
final DataDictionary dataDictionary = new DataDictionary(getDictionary());
1456+
ValidationSettings validationSettings = new ValidationSettings();
1457+
1458+
String fixMsg = "8=FIX.4.4\u00019=688\u000135=AB\u000149=AAA\u000156=BBB\u000134=21133\u000150=ABCABC" +
1459+
"\u000152=20230905-13:24:37.022\u000155=AAPL\u00011=ACC1\u000111=123456abcedf\u000121=1\u000138=5\u000154=1\u000140=2\u000144=-0.8" +
1460+
"\u000159=0\u000160=20230905-13:24:36.984\u0001100=ALGO\u0001167=MLEG\u0001555=3\u0001602=111\u0001600=AAA" +
1461+
"\u0001602=222\u0001654=231\u0001600=BBB\u0001602=333\u0001654=332\u0001600=CCC\u000158=TEXT\u000110=168\u0001";
1462+
1463+
String byDictFixMsg = "8=FIX.4.4\u00019=688\u000135=AB\u000149=AAA\u000156=BBB\u000134=21133\u000150=ABCABC" +
1464+
"\u000152=20230905-13:24:37.022\u000155=AAPL\u00011=ACC1\u000111=123456abcedf\u000121=1\u000138=5\u000154=1\u000140=2\u000144=-0.8" +
1465+
"\u000159=0\u000160=20230905-13:24:36.984\u0001100=ALGO\u0001167=MLEG\u0001555=3\u0001600=AAA\u0001602=111" +
1466+
"\u0001600=BBB\u0001602=222\u0001654=231\u0001600=CCC\u0001602=333\u0001654=332\u000158=TEXT\u000110=168\u0001";
1467+
1468+
validationSettings.setFirstFieldInGroupIsDelimiter(true);
1469+
validationSettings.setCheckUnorderedGroupFields(false);
1470+
final NewOrderMultileg noml1 = new NewOrderMultileg();
1471+
noml1.fromString(fixMsg, dataDictionary, validationSettings, true);
1472+
dataDictionary.validate(noml1, validationSettings);
1473+
assertTrue(noml1.hasGroup(555));
1474+
assertEquals(3, noml1.getGroupCount(555));
1475+
//when firstFieldInGroupIsDelimiter = true and setCheckUnorderedGroupFields = false - valid
1476+
//delimiter should be first tag in group
1477+
assertEquals(602, noml1.getGroup(1, 555).delim());
1478+
1479+
validationSettings.setFirstFieldInGroupIsDelimiter(false);
1480+
validationSettings.setCheckUnorderedGroupFields(false);
1481+
final NewOrderMultileg noml2 = new NewOrderMultileg();
1482+
noml2.fromString(fixMsg, dataDictionary, validationSettings, true);
1483+
//when firstFieldInGroupIsDelimiter = false and setCheckUnorderedGroupFields = false - exception is thrown
1484+
assertThrows(FieldException.class, () -> dataDictionary.validate(noml2, validationSettings));
1485+
1486+
validationSettings.setFirstFieldInGroupIsDelimiter(false);
1487+
validationSettings.setCheckUnorderedGroupFields(true);
1488+
final NewOrderMultileg noml3 = new NewOrderMultileg();
1489+
noml3.fromString(fixMsg, dataDictionary, validationSettings, true);
1490+
//when firstFieldInGroupIsDelimiter = false and setCheckUnorderedGroupFields = true - exception is thrown
1491+
assertThrows(FieldException.class, () -> dataDictionary.validate(noml3, validationSettings));
1492+
1493+
validationSettings.setFirstFieldInGroupIsDelimiter(true);
1494+
validationSettings.setCheckUnorderedGroupFields(true);
1495+
final NewOrderMultileg noml4 = new NewOrderMultileg();
1496+
noml4.fromString(fixMsg, dataDictionary, validationSettings, true);
1497+
//when firstFieldInGroupIsDelimiter = true and setCheckUnorderedGroupFields = true - exception is thrown, since order of tags is incorrect.
1498+
assertThrows(FieldException.class, () -> dataDictionary.validate(noml4, validationSettings));
1499+
1500+
validationSettings.setFirstFieldInGroupIsDelimiter(true);
1501+
validationSettings.setCheckUnorderedGroupFields(true);
1502+
final NewOrderMultileg noml5 = new NewOrderMultileg();
1503+
noml5.fromString(byDictFixMsg, dataDictionary, validationSettings, true);
1504+
//when firstFieldInGroupIsDelimiter = true and setCheckUnorderedGroupFields = true, message aligns with dictionary - do NOT fail
1505+
dataDictionary.validate(noml5, validationSettings);
1506+
assertTrue(noml5.hasGroup(555));
1507+
assertEquals(3, noml5.getGroupCount(555));
1508+
//delimiter should be dictionary first tag = 600
1509+
assertEquals(600, noml5.getGroup(1, 555).delim());
1510+
}
1511+
14481512
private void assertHeaderField(Message message, String expectedValue, int field)
14491513
throws FieldNotFound {
14501514
assertEquals(expectedValue, message.getHeader().getString(field));

0 commit comments

Comments
 (0)