public void ReplaceGroupTest() { Group g1 = new Group(100, 200); Group g2 = new Group(100, 201); FieldMap fm = new FieldMap(); fm.AddGroup(g1); fm.AddGroup(g2); Assert.That(fm.GetGroup(1, 100), Is.EqualTo(g1)); Assert.That(fm.GetGroup(2, 100), Is.EqualTo(g2)); Group g3 = new Group(100, 202); Assert.Throws(typeof(FieldNotFoundException), delegate { fieldmap.ReplaceGroup(0, 101, g3); }); Assert.Throws(typeof(FieldNotFoundException), delegate { fieldmap.ReplaceGroup(3, 100, g3); }); Assert.Throws(typeof(FieldNotFoundException), delegate { fieldmap.ReplaceGroup(1, 101, g3); }); fm.ReplaceGroup(1, 100, g3); fm.ReplaceGroup(2, 100, g3); Assert.That(fm.GetGroup(1, 100), Is.EqualTo(g3)); Assert.That(fm.GetGroup(2, 100), Is.EqualTo(g3)); }
public void AddGetGroupTest() { Group g1 = new Group(100, 200); Group g2 = new Group(100, 201); FieldMap fm = new FieldMap(); fm.AddGroup(g1); fm.AddGroup(g2); Assert.That(fm.GetGroup(1, 100), Is.EqualTo(g1)); Assert.That(fm.GetGroup(2, 100), Is.EqualTo(g2)); Assert.Throws(typeof(FieldNotFoundException), delegate { fieldmap.GetGroup(0, 101); }); Assert.Throws(typeof(FieldNotFoundException), delegate { fieldmap.GetGroup(3, 100); }); Assert.Throws(typeof(FieldNotFoundException), delegate { fieldmap.GetGroup(1, 101); }); }
public void GroupDelimTest() { Group g1 = new Group(100, 200); Assert.AreEqual(100, g1.Field); //counter Assert.AreEqual(200, g1.Delim); g1.SetField(new StringField(200, "delim!")); FieldMap fm = new FieldMap(); fm.AddGroup(g1); Assert.AreEqual(1, fm.GetInt(100)); Group g2 = new Group(100, 200); g2.SetField(new StringField(200, "again!")); fm.AddGroup(g2); Assert.AreEqual(2, fm.GetInt(100)); }
public void AddGroupKeepTypeTest() { // bug found during issue 56 - Group object was losing type after being added FieldMap fm = new FieldMap(); QuickFix.FIX42.News.LinesOfTextGroup linesGroup = new QuickFix.FIX42.News.LinesOfTextGroup(); linesGroup.Text = new QuickFix.Fields.Text("foo"); fm.AddGroup(linesGroup); var rvGroup = fm.GetGroup(1, Tags.LinesOfText); Assert.IsInstanceOf<QuickFix.FIX42.News.LinesOfTextGroup>(rvGroup); }
public void AddGroupKeepTypeTest() { // bug found during issue 56 - Group object was losing type after being added FieldMap fm = new FieldMap(); QuickFix.FIX42.News.LinesOfTextGroup linesGroup = new QuickFix.FIX42.News.LinesOfTextGroup(); linesGroup.Text = new QuickFix.Fields.Text("foo"); fm.AddGroup(linesGroup); var rvGroup = fm.GetGroup(1, Tags.LinesOfText); Assert.IsInstanceOf <QuickFix.FIX42.News.LinesOfTextGroup>(rvGroup); }
public void ClearAndIsEmptyTest() { FieldMap fieldmap = new FieldMap(); BooleanField field = new BooleanField(200, true); Assert.That(fieldmap.IsEmpty(), Is.EqualTo(true)); fieldmap.SetField(field); Assert.That(fieldmap.IsEmpty(), Is.EqualTo(false)); fieldmap.Clear(); Assert.That(fieldmap.IsEmpty(), Is.EqualTo(true)); Group g = new Group(100, 101); fieldmap.AddGroup(g); Assert.That(fieldmap.IsEmpty(), Is.EqualTo(false)); fieldmap.Clear(); Assert.That(fieldmap.IsEmpty(), Is.EqualTo(true)); }
/// <summary> /// Constructs a group and stores it in this Message object /// </summary> /// <param name="grpNoFld">the group's counter field</param> /// <param name="msgstr">full message string</param> /// <param name="pos">starting character position of group</param> /// <param name="fieldMap">full message as FieldMap</param> /// <param name="dd">group definition structure from dd</param> /// <param name="sessionDataDictionary"></param> /// <param name="appDD"></param> /// <param name="msgFactory">if null, then this method will use the generic Group class constructor</param> /// <returns></returns> protected int SetGroup( StringField grpNoFld, string msgstr, int pos, FieldMap fieldMap, DataDictionary.IGroupSpec dd, DataDictionary.DataDictionary sessionDataDictionary, DataDictionary.DataDictionary appDD, IMessageFactory msgFactory) { int grpEntryDelimiterTag = dd.Delim; int grpPos = pos; Group grp = null; // the group entry being constructed while (pos < msgstr.Length) { grpPos = pos; StringField f = ExtractField(msgstr, ref pos, sessionDataDictionary, appDD); if (f.Tag == grpEntryDelimiterTag) { // This is the start of a group entry. if (grp != null) { // We were already building an entry, so the delimiter means it's done. fieldMap.AddGroup(grp, false); grp = null; // prepare for new Group } // Create a new group! if (msgFactory != null) grp = msgFactory.Create(Message.ExtractBeginString(msgstr), Message.GetMsgType(msgstr), grpNoFld.Tag); //If above failed (shouldn't ever happen), just use a generic Group. if (grp == null) grp = new Group(grpNoFld.Tag, grpEntryDelimiterTag); } else if (!dd.IsField(f.Tag)) { // This field is not in the group, thus the repeating group is done. if (grp != null) { fieldMap.AddGroup(grp, false); } return grpPos; } if (grp == null) { // This means we got into the group's fields without finding a delimiter tag. throw new GroupDelimiterTagException(grpNoFld.Tag, grpEntryDelimiterTag); } // f is just a field in our group entry. Add it and iterate again. grp.SetField(f); if(dd.IsGroup(f.Tag)) { // f is a counter for a nested group. Recurse! pos = SetGroup(f, msgstr, pos, grp, dd.GetGroupSpec(f.Tag), sessionDataDictionary, appDD, msgFactory); } } return grpPos; }
protected int SetGroup(StringField grpNoFld, string msgstr, int pos, FieldMap fieldMap, DataDictionary.IGroupSpec dd, DataDictionary.DataDictionary sessionDataDictionary, DataDictionary.DataDictionary appDD) { int delim = dd.Delim; int grpPos = pos; Group grp = null; while (pos < msgstr.Length) { grpPos = pos; StringField f = ExtractField(msgstr, ref pos, sessionDataDictionary, appDD); if (f.Tag == delim) { if (grp != null) { fieldMap.AddGroup(grp, false); } grp = new Group(grpNoFld.Tag, delim); } else if (!dd.IsField(f.Tag)) { if (grp != null) { fieldMap.AddGroup(grp, false); } return grpPos; } grp.SetField(f); if(dd.IsGroup(f.Tag)) { pos = SetGroup(f, msgstr, pos, grp, dd.GetGroupSpec(f.Tag), sessionDataDictionary, appDD); } } return grpPos; }
/// <summary> /// Constructs a group and stores it in this Message object /// </summary> /// <param name="grpNoFld"></param> /// <param name="msgstr"></param> /// <param name="pos"></param> /// <param name="fieldMap"></param> /// <param name="dd"></param> /// <param name="sessionDataDictionary"></param> /// <param name="appDD"></param> /// <param name="msgFactory">if this is null, then this method will use the generic Group class constructor</param> /// <returns></returns> protected int SetGroup(StringField grpNoFld, string msgstr, int pos, FieldMap fieldMap, DataDictionary.IGroupSpec dd, DataDictionary.DataDictionary sessionDataDictionary, DataDictionary.DataDictionary appDD, IMessageFactory msgFactory) { int delim = dd.Delim; int grpPos = pos; Group grp = null; while (pos < msgstr.Length) { grpPos = pos; StringField f = ExtractField(msgstr, ref pos, sessionDataDictionary, appDD); if (f.Tag == delim) { if (grp != null) { fieldMap.AddGroup(grp, false); } if (msgFactory != null) grp = msgFactory.Create(Message.ExtractBeginString(msgstr), Message.GetMsgType(msgstr), grpNoFld.Tag); //If above failed, just use a generic Group. if (grp == null) grp = new Group(grpNoFld.Tag, delim); } else if (!dd.IsField(f.Tag)) { if (grp != null) { fieldMap.AddGroup(grp, false); } return grpPos; } grp.SetField(f); if (dd.IsGroup(f.Tag)) { if (FixMessageDescriptorEnabled) { var oldCurrField = _currentGroupField; _currentGroupField = new GroupFixFieldInfo(); _currentGroupField.Tag = f.Tag; DataDictionary.DDField field = null; if (appDD != null && appDD.FieldsByTag.TryGetValue(f.Tag, out field)) { _currentGroupField.Name = field.Name; } else if (sessionDataDictionary != null && sessionDataDictionary.FieldsByTag.TryGetValue(f.Tag, out field)) { _currentGroupField.Name = field.Name; } _currentGroupField.Value = f.getValue(); _currentGroupField.EnumValue = GetEnumValueFromField(f, field); oldCurrField.Fields.Add(_currentGroupField); } pos = SetGroup(f, msgstr, pos, grp, dd.GetGroupSpec(f.Tag), sessionDataDictionary, appDD, msgFactory); } else { if (FixMessageDescriptorEnabled) { FixFieldInfo fi = new FixFieldInfo(); fi.Tag = f.Tag; DataDictionary.DDField field = null; if (appDD != null && appDD.FieldsByTag.TryGetValue(f.Tag, out field)) { _currentGroupField.Name = field.Name; } else if (sessionDataDictionary != null && sessionDataDictionary.FieldsByTag.TryGetValue(f.Tag, out field)) { _currentGroupField.Name = field.Name; } fi.Value = f.getValue(); fi.EnumValue = GetEnumValueFromField(f, field); _currentGroupField.Fields.Add(fi); } } } return grpPos; }
/// <summary> /// Constructs a group and stores it in this Message object /// </summary> /// <param name="grpNoFld"></param> /// <param name="msgstr"></param> /// <param name="pos"></param> /// <param name="fieldMap"></param> /// <param name="dd"></param> /// <param name="sessionDataDictionary"></param> /// <param name="appDD"></param> /// <param name="msgFactory">if this is null, then this method will use the generic Group class constructor</param> /// <returns></returns> protected int SetGroup(StringField grpNoFld, string msgstr, int pos, FieldMap fieldMap, DataDictionary.IGroupSpec dd, DataDictionary.DataDictionary sessionDataDictionary, DataDictionary.DataDictionary appDD, IMessageFactory msgFactory) { int delim = dd.Delim; int grpPos = pos; Group grp = null; while (pos < msgstr.Length) { grpPos = pos; StringField f = ExtractField(msgstr, ref pos, sessionDataDictionary, appDD); if (f.Tag == delim) { if (grp != null) { fieldMap.AddGroup(grp, false); } if (msgFactory != null) grp = msgFactory.Create(Message.ExtractBeginString(msgstr), Message.GetMsgType(msgstr), grpNoFld.Tag); //If above failed, just use a generic Group. if (grp == null) grp = new Group(grpNoFld.Tag, delim); } else if (!dd.IsField(f.Tag)) { if (grp != null) { fieldMap.AddGroup(grp, false); } return grpPos; } grp.SetField(f); if(dd.IsGroup(f.Tag)) { pos = SetGroup(f, msgstr, pos, grp, dd.GetGroupSpec(f.Tag), sessionDataDictionary, appDD, msgFactory); } } return grpPos; }