Example #1
0
        public void Encode()
        {
            FormatterContext formatterContext =
                new FormatterContext(FormatterContext.DefaultBufferSize);

            int[] sizes = { 3, 15, 999, 4510, 16384, 681115 };

            StringLengthEncoder encoder;
            string data;

            for (int i = 0; i < sizes.Length; i++)
            {
                encoder = StringLengthEncoder.GetInstance(sizes[i]);
                encoder.Encode(sizes[i], ref formatterContext);
                data = formatterContext.GetDataAsString();
                Assert.IsTrue(data.Length == (i + 1));
                Assert.IsTrue(Convert.ToInt32(data) == sizes[i]);
                formatterContext.Clear();
            }

            encoder = StringLengthEncoder.GetInstance(999);
            try {
                encoder.Encode(1000, ref formatterContext);
                Assert.Fail();
            } catch (ArgumentOutOfRangeException e) {
                Assert.IsTrue(e.ParamName == "length");
            }
        }
Example #2
0
        public void Decode()
        {
            ParserContext parserContext =
                new ParserContext(ParserContext.DefaultBufferSize);
            StringLengthEncoder encoder;

            int[] sizes = { 9, 12, 115, 1984, 14215, 245121 };
            int   length;
            int   i;

            for (i = 0; i < sizes.Length; i++)
            {
                parserContext.Write(Convert.ToString(sizes[i]));
            }
            parserContext.Write("Some data");

            for (i = 0; i < sizes.Length; i++)
            {
                encoder = StringLengthEncoder.GetInstance(sizes[i]);
                length  = encoder.Decode(ref parserContext);
                Assert.IsTrue(length == sizes[i]);
            }

            encoder = StringLengthEncoder.GetInstance(999999);
            try {
                length = encoder.Decode(ref parserContext);
                Assert.Fail();
            } catch (MessagingException) {
            }
        }
Example #3
0
        public void Constructors()
        {
            // Test fixed length properties.
            StringMessageHeaderFormatter formatter = new StringMessageHeaderFormatter(
                new FixedLengthManager(12), StringEncoder.GetInstance(),
                SpacePaddingRight.GetInstance(false));

            Assert.IsTrue(formatter.LengthManager.MaximumLength == 12);
            Assert.IsTrue(formatter.Encoder == StringEncoder.GetInstance());
            Assert.IsTrue(formatter.Padding == SpacePaddingRight.GetInstance(false));

            // Test variable length properties without padding.
            formatter = new StringMessageHeaderFormatter(new VariableLengthManager(1, 800,
                                                                                   StringLengthEncoder.GetInstance(5)), StringEncoder.GetInstance());

            Assert.IsTrue(formatter.LengthManager.MaximumLength == 800);
            Assert.IsTrue(formatter.Encoder == StringEncoder.GetInstance());
            Assert.IsTrue(formatter.Padding == null);

            // Test variable length properties with padding.
            formatter = new StringMessageHeaderFormatter(new VariableLengthManager(1,
                                                                                   999, StringLengthEncoder.GetInstance(3)), StringEncoder.GetInstance(),
                                                         SpacePaddingRight.GetInstance(false));

            Assert.IsTrue(formatter.LengthManager.MaximumLength == 999);
            Assert.IsTrue(formatter.Encoder == StringEncoder.GetInstance());
            Assert.IsTrue(formatter.Padding == SpacePaddingRight.GetInstance(false));
        }
Example #4
0
        public void GetEncodedLength()
        {
            int[] sizes = { 3, 15, 999, 4510, 16384, 681115 };
            StringLengthEncoder encoder;

            for (int i = 0; i < sizes.Length; i++)
            {
                encoder = StringLengthEncoder.GetInstance(sizes[i]);
                Assert.IsTrue(encoder.EncodedLength == (i + 1));
            }
        }
Example #5
0
        public void MaximumLength()
        {
            int[] sizes         = { 3, 15, 999, 4510, 16384, 681115 };
            int[] expectedSizes = { 9, 99, 999, 9999, 99999, 999999 };
            StringLengthEncoder encoder;

            for (int i = 0; i < sizes.Length; i++)
            {
                encoder = StringLengthEncoder.GetInstance(sizes[i]);
                Assert.IsTrue(encoder.MaximumLength == expectedSizes[i]);
            }
        }
        public void EnoughData()
        {
            ParserContext parserContext = new ParserContext(
                ParserContext.DefaultBufferSize);
            VariableLengthManager lengthManager = new VariableLengthManager(1,
                                                                            480, StringLengthEncoder.GetInstance(480));

            parserContext.Write("0");
            Assert.IsFalse(lengthManager.EnoughData(ref parserContext));
            parserContext.Write("0");
            Assert.IsFalse(lengthManager.EnoughData(ref parserContext));
            parserContext.Write("9Some data");
            Assert.IsTrue(lengthManager.EnoughData(ref parserContext));
        }
Example #7
0
        public void GetInstance()
        {
            StringLengthEncoder encoder;

            int[] sizes = { 3, 15, 999, 4510, 16384, 681115 };

            for (int i = 0; i < sizes.Length; i++)
            {
                encoder = StringLengthEncoder.GetInstance(sizes[i]);
                Assert.IsTrue(encoder == StringLengthEncoder.GetInstance(sizes[i]));
            }

            try {
                encoder = StringLengthEncoder.GetInstance(1000000);
                Assert.Fail();
            } catch (ArgumentOutOfRangeException e) {
                Assert.IsTrue(e.ParamName == "maximumLength");
            }
        }
        public void Constructor()
        {
            VariableLengthManager lengthManager = new VariableLengthManager(5,
                                                                            40, StringLengthEncoder.GetInstance(2));

            Assert.IsTrue(lengthManager.MinimumLength == 5);
            Assert.IsTrue(lengthManager.MaximumLength == 40);
            Assert.IsTrue(lengthManager.LengthEncoder ==
                          StringLengthEncoder.GetInstance(2));

            lengthManager = new VariableLengthManager(20,
                                                      20, StringLengthEncoder.GetInstance(3));

            Assert.IsTrue(lengthManager.MinimumLength == 20);
            Assert.IsTrue(lengthManager.MaximumLength == 20);
            Assert.IsTrue(lengthManager.LengthEncoder ==
                          StringLengthEncoder.GetInstance(3));

            try {
                lengthManager = new VariableLengthManager(-1,
                                                          40, StringLengthEncoder.GetInstance(2));
                Assert.Fail();
            } catch (ArgumentOutOfRangeException e) {
                Assert.IsTrue(e.ParamName.Equals("minimumLength"));
            }

            try {
                lengthManager = new VariableLengthManager(50,
                                                          40, StringLengthEncoder.GetInstance(2));
                Assert.Fail();
            } catch (ArgumentOutOfRangeException e) {
                Assert.IsTrue(e.ParamName.Equals("minimumLength"));
            }

            try {
                lengthManager = new VariableLengthManager(10,
                                                          20, null);
                Assert.Fail();
            } catch (ArgumentNullException e) {
                Assert.IsTrue(e.ParamName.Equals("lengthEncoder"));
            }
        }
        public void Constructors()
        {
            // Test fixed length properties.
            BinaryFieldFormatter formatter = new BinaryFieldFormatter(37,
                                                                      new FixedLengthManager(12), BinaryEncoder.GetInstance(),
                                                                      "My formatter");

            Assert.IsTrue(formatter.FieldNumber == 37);
            Assert.IsTrue(formatter.LengthManager.MaximumLength == 12);
            Assert.IsTrue(formatter.Description.Equals("My formatter"));
            Assert.IsTrue(formatter.Encoder == BinaryEncoder.GetInstance());

            // Test variable length properties.
            formatter = new BinaryFieldFormatter(63, new VariableLengthManager(1, 800,
                                                                               StringLengthEncoder.GetInstance(5)), BinaryEncoder.GetInstance());

            Assert.IsTrue(formatter.FieldNumber == 63);
            Assert.IsTrue(formatter.LengthManager.MaximumLength == 800);
            Assert.IsTrue(formatter.Description.Equals(string.Empty));
            Assert.IsTrue(formatter.Encoder == BinaryEncoder.GetInstance());
        }
        public void Constructors()
        {
            // Test fixed length properties.
            StringFieldFormatter formatter = new StringFieldFormatter(37,
                                                                      new FixedLengthManager(12), StringEncoder.GetInstance(),
                                                                      SpacePaddingRight.GetInstance(false), NumericValidator.GetInstance(),
                                                                      null, "My formatter");

            Assert.IsTrue(formatter.FieldNumber == 37);
            Assert.IsTrue(formatter.LengthManager.MaximumLength == 12);
            Assert.IsTrue(formatter.Description.Equals("My formatter"));
            Assert.IsTrue(formatter.Encoder == StringEncoder.GetInstance());
            Assert.IsTrue(formatter.Padding == SpacePaddingRight.GetInstance(false));
            Assert.IsTrue(formatter.Validator == NumericValidator.GetInstance());
            Assert.IsNull(formatter.ValueFormatter);

            // Test variable length properties without padding.
            formatter = new StringFieldFormatter(63, new VariableLengthManager(1, 800,
                                                                               StringLengthEncoder.GetInstance(5)), StringEncoder.GetInstance());

            Assert.IsTrue(formatter.FieldNumber == 63);
            Assert.IsTrue(formatter.LengthManager.MaximumLength == 800);
            Assert.IsTrue(formatter.Description.Equals(string.Empty));
            Assert.IsTrue(formatter.Encoder == StringEncoder.GetInstance());
            Assert.IsTrue(formatter.Padding == null);
            Assert.IsTrue(formatter.Validator == null);

            // Test variable length properties with padding.
            formatter = new StringFieldFormatter(48, new VariableLengthManager(1,
                                                                               999, StringLengthEncoder.GetInstance(3)), StringEncoder.GetInstance(),
                                                 SpacePaddingRight.GetInstance(false), "My formatter");

            Assert.IsTrue(formatter.FieldNumber == 48);
            Assert.IsTrue(formatter.LengthManager.MaximumLength == 999);
            Assert.IsTrue(formatter.Description.Equals("My formatter"));
            Assert.IsTrue(formatter.Encoder == StringEncoder.GetInstance());
            Assert.IsTrue(formatter.Padding == SpacePaddingRight.GetInstance(false));
            Assert.IsTrue(formatter.Validator == null);
        }
        public void Format()
        {
            FormatterContext formatterContext = new FormatterContext(
                FormatterContext.DefaultBufferSize);
            BinaryField field = new BinaryField(1);

            field.Value = "DATA";
            BinaryFieldFormatter formatter;
            string formattedData;

            // Test fixed length formatting.
            formatter = new BinaryFieldFormatter(37,
                                                 new FixedLengthManager(4), BinaryEncoder.GetInstance());
            formatter.Format(field, ref formatterContext);
            formattedData = formatterContext.GetDataAsString();
            Assert.IsTrue(formattedData.Equals("DATA"));

            formatterContext.Clear();
            field.Value = "MORE DATA";
            try {
                formatter.Format(field, ref formatterContext);
                Assert.Fail();
            } catch (ArgumentOutOfRangeException e) {
                Assert.IsTrue(e.ParamName.Equals("dataLength"));
            }

            // Test variable length formatting.
            formatterContext.Clear();
            formatter = new BinaryFieldFormatter(48, new VariableLengthManager(0,
                                                                               999, StringLengthEncoder.GetInstance(999)),
                                                 BinaryEncoder.GetInstance());
            formatter.Format(field, ref formatterContext);
            formattedData = formatterContext.GetDataAsString();
            Assert.IsTrue(formattedData.Equals("009MORE DATA"));
            formatterContext.Clear();
            formatter.Format(new BinaryField(5, null), ref formatterContext);
            formattedData = formatterContext.GetDataAsString();
            Assert.IsTrue(formattedData.Equals("000"));
        }
        public void WriteLength()
        {
            FormatterContext formatterContext = new FormatterContext(
                FormatterContext.DefaultBufferSize);
            VariableLengthManager lengthManager = new VariableLengthManager(8,
                                                                            24, StringLengthEncoder.GetInstance(999));

            lengthManager.WriteLength(null, 8, 8, ref formatterContext);
            string length = formatterContext.GetDataAsString();

            Assert.IsTrue(length.Equals("008"));
            formatterContext.Clear();

            lengthManager.WriteLength(null, 15, 15, ref formatterContext);
            length = formatterContext.GetDataAsString();

            Assert.IsTrue(length.Equals("015"));
            formatterContext.Clear();

            lengthManager.WriteLength(null, 24, 24, ref formatterContext);
            length = formatterContext.GetDataAsString();

            Assert.IsTrue(length.Equals("024"));

            try {
                lengthManager.WriteLength(null, 1, 1, ref formatterContext);
                Assert.Fail();
            } catch (ArgumentOutOfRangeException e) {
                Assert.IsTrue(e.ParamName.Equals("dataLength"));
            }

            try {
                lengthManager.WriteLength(null, 90, 90, ref formatterContext);
                Assert.Fail();
            } catch (ArgumentOutOfRangeException e) {
                Assert.IsTrue(e.ParamName.Equals("dataLength"));
            }
        }
        public void ReadLength()
        {
            ParserContext parserContext = new ParserContext(
                ParserContext.DefaultBufferSize);
            VariableLengthManager lengthManager = new VariableLengthManager(120,
                                                                            180, StringLengthEncoder.GetInstance(999));

            parserContext.Write("120");
            int length = lengthManager.ReadLength(ref parserContext);

            Assert.IsTrue(length == 120);

            parserContext.Write("150");
            length = lengthManager.ReadLength(ref parserContext);

            Assert.IsTrue(length == 150);

            parserContext.Write("180");
            length = lengthManager.ReadLength(ref parserContext);

            Assert.IsTrue(length == 180);

            parserContext.Write("005");
            try {
                lengthManager.ReadLength(ref parserContext);
                Assert.Fail();
            } catch (MessagingException) {
            }

            parserContext.Clear();
            parserContext.Write("999");
            try {
                lengthManager.ReadLength(ref parserContext);
                Assert.Fail();
            } catch (MessagingException) {
            }
        }
Example #14
0
        public void Format()
        {
            FormatterContext formatterContext = new FormatterContext(
                FormatterContext.DefaultBufferSize);
            StringMessageHeader          header = new StringMessageHeader("DATA");
            StringMessageHeaderFormatter formatter;
            string formattedData;

            // Test fixed length formatting.
            formatter = new StringMessageHeaderFormatter(
                new FixedLengthManager(12), StringEncoder.GetInstance());
            formatter.Format(header, ref formatterContext);
            formattedData = formatterContext.GetDataAsString();
            Assert.IsTrue(formattedData.Equals("DATA        "));
            formatterContext.Clear();
            formatter.Format(null, ref formatterContext);
            formattedData = formatterContext.GetDataAsString();
            Assert.IsTrue(formattedData.Equals("            "));

            // Test variable length formatting without padding.
            formatterContext.Clear();
            formatter = new StringMessageHeaderFormatter(new VariableLengthManager(0,
                                                                                   999, StringLengthEncoder.GetInstance(999)),
                                                         StringEncoder.GetInstance());
            formatter.Format(header, ref formatterContext);
            formattedData = formatterContext.GetDataAsString();
            Assert.IsTrue(formattedData.Equals("004DATA"));
            formatterContext.Clear();
            formatter.Format(null, ref formatterContext);
            formattedData = formatterContext.GetDataAsString();
            Assert.IsTrue(formattedData.Equals("000"));

            // Test variable length formatting with padding.
            formatterContext.Clear();
            formatter = new StringMessageHeaderFormatter(new VariableLengthManager(10,
                                                                                   10, StringLengthEncoder.GetInstance(10)),
                                                         StringEncoder.GetInstance(), SpacePaddingLeft.GetInstance(false));
            formatter.Format(header, ref formatterContext);
            formattedData = formatterContext.GetDataAsString();
            Assert.IsTrue(formattedData.Equals("10      DATA"));
        }
        public void Parse()
        {
            ParserContext parseContext = new ParserContext(
                ParserContext.DefaultBufferSize);
            InnerMessageField          field;
            InnerMessageFieldFormatter formatter;

            parseContext.Write("HELLO0512345005ABCDE00");

            // Test fixed length parse.
            formatter = new InnerMessageFieldFormatter(37, new FixedLengthManager(5),
                                                       BinaryEncoder.GetInstance(), GetFormatter(_fixedMessageFormatter));
            field = ( InnerMessageField )formatter.Parse(ref parseContext);
            Assert.IsNotNull(field);
            parseContext.ResetDecodedLength();
            Assert.IsTrue(field.ToString() == "1:HE,2:LLO");

            // Test variable length parse.
            formatter = new InnerMessageFieldFormatter(48, new VariableLengthManager(1, 20,
                                                                                     StringLengthEncoder.GetInstance(99)), BinaryEncoder.GetInstance(),
                                                       GetFormatter(_fixedMessageFormatter), string.Empty);
            field = ( InnerMessageField )formatter.Parse(ref parseContext);
            Assert.IsNotNull(field);
            parseContext.ResetDecodedLength();
            Assert.IsTrue(field.ToString() == "1:12,2:345");

            formatter = new InnerMessageFieldFormatter(48, new VariableLengthManager(1,
                                                                                     999, StringLengthEncoder.GetInstance(999)), BinaryEncoder.GetInstance(),
                                                       GetFormatter(_fixedMessageFormatter));
            field = ( InnerMessageField )formatter.Parse(ref parseContext);
            Assert.IsNotNull(field);
            parseContext.ResetDecodedLength();
            Assert.IsTrue(field.ToString() == "1:AB,2:CDE");

            // Test partial variable length parse.
            field = ( InnerMessageField )formatter.Parse(ref parseContext);
            Assert.IsNull(field);
            parseContext.Write("5HOU");
            field = ( InnerMessageField )formatter.Parse(ref parseContext);
            Assert.IsNull(field);
            parseContext.Write("SE");
            field = ( InnerMessageField )formatter.Parse(ref parseContext);
            Assert.IsNotNull(field);
            parseContext.ResetDecodedLength();
            Assert.IsTrue(field.ToString() == "1:HO,2:USE");

            // Test partial fixed.
            formatter = new InnerMessageFieldFormatter(37, new FixedLengthManager(5),
                                                       BinaryEncoder.GetInstance(), GetFormatter(_fixedMessageFormatter));
            field = ( InnerMessageField )formatter.Parse(ref parseContext);
            Assert.IsNull(field);
            parseContext.Write("34 ");
            field = ( InnerMessageField )formatter.Parse(ref parseContext);
            Assert.IsNull(field);
            parseContext.Write("56");
            field = ( InnerMessageField )formatter.Parse(ref parseContext);
            Assert.IsNotNull(field);
            parseContext.ResetDecodedLength();
            Assert.IsTrue(field.ToString() == "1:34,2: 56");

            // Test variable length header with zero length.
            formatter = new InnerMessageFieldFormatter(48, new VariableLengthManager(0,
                                                                                     999, StringLengthEncoder.GetInstance(999)), BinaryEncoder.GetInstance(),
                                                       GetFormatter(_fixedMessageFormatter));
            parseContext.Write("000");
            field = ( InnerMessageField )formatter.Parse(ref parseContext);
            Assert.IsNotNull(field);
            parseContext.ResetDecodedLength();
            Assert.IsNull(field.Value);
        }
        public void Format()
        {
            FormatterContext formatterContext = new FormatterContext(
                FormatterContext.DefaultBufferSize);
            Message value = new Message();

            value.Formatter = GetFormatter(_fixedMessageFormatter);
            value.Fields.Add(1, "HE");
            value.Fields.Add(2, "LLO");

            InnerMessageField field = new InnerMessageField(37, value);

            InnerMessageFieldFormatter formatter;
            string formattedData;

            // Test fixed length formatting.
            formatter = new InnerMessageFieldFormatter(37,
                                                       new FixedLengthManager(5), BinaryEncoder.GetInstance(),
                                                       GetFormatter(_fixedMessageFormatter));

            formatter.Format(field, ref formatterContext);
            formattedData = formatterContext.GetDataAsString();
            Assert.IsTrue(formattedData.Equals("HELLO"));

            formatterContext.Clear();
            formatter = new InnerMessageFieldFormatter(37,
                                                       new FixedLengthManager(4), BinaryEncoder.GetInstance(),
                                                       GetFormatter(_fixedMessageFormatter));
            try {
                formatter.Format(field, ref formatterContext);
                Assert.Fail();
            }
            catch (ArgumentOutOfRangeException e) {
                Assert.IsTrue(e.ParamName.Equals("dataLength"));
            }

            // Test variable length formatting.
            formatterContext.Clear();
            formatter = new InnerMessageFieldFormatter(48, new VariableLengthManager(0,
                                                                                     999, StringLengthEncoder.GetInstance(999)),
                                                       BinaryEncoder.GetInstance(), GetFormatter(_fixedMessageFormatter));
            formatter.Format(field, ref formatterContext);
            formattedData = formatterContext.GetDataAsString();
            Assert.IsTrue(formattedData.Equals("005HELLO"));
            formatterContext.Clear();
            formatter.Format(new InnerMessageField(35, null), ref formatterContext);
            formattedData = formatterContext.GetDataAsString();
            Assert.IsTrue(formattedData.Equals("000"));
        }
        public void Parse()
        {
            ParserContext parseContext = new ParserContext(
                ParserContext.DefaultBufferSize);
            StringField          field;
            StringFieldFormatter formatter;

            // Setup data for three complete fields an one with partial data.
            parseContext.Write("DATA        20   DATA TO BE PARSED009SOME DATA00");

            // Test fixed length parse.
            formatter = new StringFieldFormatter(37, new FixedLengthManager(12),
                                                 StringEncoder.GetInstance());
            field = ( StringField)formatter.Parse(ref parseContext);
            Assert.IsNotNull(field);
            parseContext.ResetDecodedLength();
            Assert.IsTrue(field.FieldValue.Equals("DATA"));

            // Test variable length parse with padding.
            formatter = new StringFieldFormatter(48, new VariableLengthManager(1, 20,
                                                                               StringLengthEncoder.GetInstance(99)), StringEncoder.GetInstance(),
                                                 SpacePaddingLeft.GetInstance(false), string.Empty);
            field = ( StringField)formatter.Parse(ref parseContext);
            Assert.IsNotNull(field);
            parseContext.ResetDecodedLength();
            Assert.IsTrue(field.FieldValue.Equals("DATA TO BE PARSED"));

            // Test variable length parse without padding.
            formatter = new StringFieldFormatter(48, new VariableLengthManager(1,
                                                                               999, StringLengthEncoder.GetInstance(999)), StringEncoder.GetInstance());
            field = ( StringField)formatter.Parse(ref parseContext);
            Assert.IsNotNull(field);
            parseContext.ResetDecodedLength();
            Assert.IsTrue(field.FieldValue.Equals("SOME DATA"));

            // Test partial variable length parse without padding.
            field = ( StringField)formatter.Parse(ref parseContext);
            Assert.IsNull(field);
            parseContext.Write("9MORE D");
            field = ( StringField)formatter.Parse(ref parseContext);
            Assert.IsNull(field);
            parseContext.Write("ATA");
            field = ( StringField)formatter.Parse(ref parseContext);
            Assert.IsNotNull(field);
            parseContext.ResetDecodedLength();
            Assert.IsTrue(field.FieldValue.Equals("MORE DATA"));

            // Test partial fixed parse with padding.
            formatter = new StringFieldFormatter(37, new FixedLengthManager(12),
                                                 StringEncoder.GetInstance());
            field = ( StringField)formatter.Parse(ref parseContext);
            Assert.IsNull(field);
            parseContext.Write("ONE MORE");
            field = ( StringField)formatter.Parse(ref parseContext);
            Assert.IsNull(field);
            parseContext.Write("    ");
            field = ( StringField)formatter.Parse(ref parseContext);
            Assert.IsNotNull(field);
            parseContext.ResetDecodedLength();
            Assert.IsTrue(field.FieldValue.Equals("ONE MORE"));

            // Test variable length header with zero length.
            formatter = new StringFieldFormatter(48, new VariableLengthManager(0,
                                                                               999, StringLengthEncoder.GetInstance(999)), StringEncoder.GetInstance());
            parseContext.Write("000");
            field = ( StringField)formatter.Parse(ref parseContext);
            Assert.IsNotNull(field);
            parseContext.ResetDecodedLength();
            Assert.IsNull(field.FieldValue);

            // Test fixed length parse with validation.
            formatter = new StringFieldFormatter(37, new FixedLengthManager(12),
                                                 StringEncoder.GetInstance(), ZeroPaddingLeft.GetInstance(false, true),
                                                 NumericValidator.GetInstance());
            parseContext.Write("000000145000");
            field = ( StringField)formatter.Parse(ref parseContext);
            Assert.IsNotNull(field);
            parseContext.ResetDecodedLength();
            Assert.IsTrue(field.FieldValue.Equals("145000"));

            // Try with an invalid value.
            parseContext.Write("0000001450F0");
            try {
                field = ( StringField)formatter.Parse(ref parseContext);
                Assert.Fail();
            } catch (StringValidationException) {
            }

            // Test variable length parse with validation.
            parseContext.Clear();
            parseContext.ResetDecodedLength();
            formatter = new StringFieldFormatter(48, new VariableLengthManager(1,
                                                                               999, StringLengthEncoder.GetInstance(999)), StringEncoder.GetInstance(),
                                                 NumericValidator.GetInstance());
            parseContext.Write("00532000");
            field = ( StringField)formatter.Parse(ref parseContext);
            Assert.IsNotNull(field);
            parseContext.ResetDecodedLength();
            Assert.IsTrue(field.FieldValue.Equals("32000"));

            // Try with an invalid value.
            parseContext.Write("005350F0");
            try {
                field = ( StringField)formatter.Parse(ref parseContext);
                Assert.Fail();
            } catch (StringValidationException) {
            }
        }
        public void Format()
        {
            FormatterContext formatterContext = new FormatterContext(
                FormatterContext.DefaultBufferSize);
            StringField          field = new StringField(1, "DATA");
            StringFieldFormatter formatter;
            string formattedData;

            // Test fixed length formatting.
            formatter = new StringFieldFormatter(37,
                                                 new FixedLengthManager(12), StringEncoder.GetInstance());
            formatter.Format(field, ref formatterContext);
            formattedData = formatterContext.GetDataAsString();
            Assert.IsTrue(formattedData.Equals("DATA        "));

            // Test variable length formatting without padding.
            formatterContext.Clear();
            formatter = new StringFieldFormatter(48, new VariableLengthManager(0,
                                                                               999, StringLengthEncoder.GetInstance(999)),
                                                 StringEncoder.GetInstance());
            formatter.Format(field, ref formatterContext);
            formattedData = formatterContext.GetDataAsString();
            Assert.IsTrue(formattedData.Equals("004DATA"));
            formatterContext.Clear();
            formatter.Format(new StringField(5, null), ref formatterContext);
            formattedData = formatterContext.GetDataAsString();
            Assert.IsTrue(formattedData.Equals("000"));

            // Test variable length formatting with padding.
            formatterContext.Clear();
            formatter = new StringFieldFormatter(48, new VariableLengthManager(10,
                                                                               10, StringLengthEncoder.GetInstance(10)),
                                                 StringEncoder.GetInstance(), SpacePaddingLeft.GetInstance(false),
                                                 string.Empty);
            formatter.Format(field, ref formatterContext);
            formattedData = formatterContext.GetDataAsString();
            Assert.IsTrue(formattedData.Equals("10      DATA"));

            // Test validator with fixed length formatting.
            formatterContext.Clear();
            formatter = new StringFieldFormatter(37,
                                                 new FixedLengthManager(12), StringEncoder.GetInstance(),
                                                 NumericValidator.GetInstance(), string.Empty);
            field.FieldValue = "000000001500";
            formatter.Format(field, ref formatterContext);
            formattedData = formatterContext.GetDataAsString();
            Assert.IsTrue(formattedData.Equals("000000001500"));

            // Try with an invalid value.
            formatterContext.Clear();
            field.FieldValue = "D1500";
            try {
                formatter.Format(field, ref formatterContext);
                Assert.Fail();
            } catch (StringValidationException) {
            }

            // Test validator with fixed length formatting and numeric padding.
            formatterContext.Clear();
            formatter = new StringFieldFormatter(37,
                                                 new FixedLengthManager(12), StringEncoder.GetInstance(),
                                                 ZeroPaddingLeft.GetInstance(false, true), NumericValidator.GetInstance());
            field.FieldValue = "56600";
            formatter.Format(field, ref formatterContext);
            formattedData = formatterContext.GetDataAsString();
            Assert.IsTrue(formattedData.Equals("000000056600"));

            // Try with an invalid value.
            formatterContext.Clear();
            field.FieldValue = "D1500";
            try {
                formatter.Format(field, ref formatterContext);
                Assert.Fail();
            } catch (StringValidationException) {
            }
        }
Example #19
0
        public void Parse()
        {
            ParserContext parseContext = new ParserContext(
                ParserContext.DefaultBufferSize);
            StringMessageHeader          header;
            StringMessageHeaderFormatter formatter;

            // Setup data for three complete fields an one with partial data.
            parseContext.Write("DATA        20   DATA TO BE PARSED009SOME DATA00");

            // Test fixed length parse.
            formatter = new StringMessageHeaderFormatter(new FixedLengthManager(12),
                                                         StringEncoder.GetInstance());
            header = ( StringMessageHeader)formatter.Parse(ref parseContext);
            Assert.IsNotNull(header);
            parseContext.ResetDecodedLength();
            Assert.IsTrue(header.Value.Equals("DATA"));

            // Test variable length parse with padding.
            formatter = new StringMessageHeaderFormatter(new VariableLengthManager(1, 20,
                                                                                   StringLengthEncoder.GetInstance(99)), StringEncoder.GetInstance(),
                                                         SpacePaddingLeft.GetInstance(false));
            header = ( StringMessageHeader)formatter.Parse(ref parseContext);
            Assert.IsNotNull(header);
            parseContext.ResetDecodedLength();
            Assert.IsTrue(header.Value.Equals("DATA TO BE PARSED"));

            // Test variable length parse without padding.
            formatter = new StringMessageHeaderFormatter(new VariableLengthManager(1,
                                                                                   999, StringLengthEncoder.GetInstance(999)), StringEncoder.GetInstance());
            header = ( StringMessageHeader)formatter.Parse(ref parseContext);
            Assert.IsNotNull(header);
            parseContext.ResetDecodedLength();
            Assert.IsTrue(header.Value.Equals("SOME DATA"));

            // Test partial variable length parse without padding.
            header = ( StringMessageHeader)formatter.Parse(ref parseContext);
            Assert.IsNull(header);
            parseContext.Write("9MORE D");
            header = ( StringMessageHeader)formatter.Parse(ref parseContext);
            Assert.IsNull(header);
            parseContext.Write("ATA");
            header = ( StringMessageHeader)formatter.Parse(ref parseContext);
            Assert.IsNotNull(header);
            parseContext.ResetDecodedLength();
            Assert.IsTrue(header.Value.Equals("MORE DATA"));

            // Test partial fixed parse with padding.
            formatter = new StringMessageHeaderFormatter(new FixedLengthManager(12),
                                                         StringEncoder.GetInstance());
            header = ( StringMessageHeader)formatter.Parse(ref parseContext);
            Assert.IsNull(header);
            parseContext.Write("ONE MORE");
            header = ( StringMessageHeader)formatter.Parse(ref parseContext);
            Assert.IsNull(header);
            parseContext.Write("    ");
            header = ( StringMessageHeader)formatter.Parse(ref parseContext);
            Assert.IsNotNull(header);
            parseContext.ResetDecodedLength();
            Assert.IsTrue(header.Value.Equals("ONE MORE"));

            // Test variable length header with zero length.
            formatter = new StringMessageHeaderFormatter(new VariableLengthManager(0,
                                                                                   999, StringLengthEncoder.GetInstance(999)), StringEncoder.GetInstance());
            parseContext.Write("000");
            header = ( StringMessageHeader)formatter.Parse(ref parseContext);
            Assert.IsNotNull(header);
            parseContext.ResetDecodedLength();
            Assert.IsNull(header.Value);
        }
        /// <summary>
        /// It initializes the fields formatters for this message formatter.
        /// </summary>
        private void SetupFields()
        {
            MessageTypeIdentifierFormatter = new StringFieldFormatter(
                -1, new FixedLengthManager(4), StringEncoder.GetInstance(),
                ZeroPaddingLeft.GetInstance(false, true), "Message type identifier");

            FieldFormatters.Add(new BitMapFieldFormatter(0, 1, 64,
                                                         HexadecimalBinaryEncoder.GetInstance(), "Primary bitmap"));
            FieldFormatters.Add(new BitMapFieldFormatter(1, 65, 128,
                                                         HexadecimalBinaryEncoder.GetInstance(), "Secondary bitmap"));
            FieldFormatters.Add(new StringFieldFormatter(
                                    2, new VariableLengthManager(0, 19, StringLengthEncoder.GetInstance(19)),
                                    StringEncoder.GetInstance(), NumericValidator.GetInstance(),
                                    "Primary Account Number"));
            FieldFormatters.Add(new StringFieldFormatter(
                                    3, new FixedLengthManager(6), StringEncoder.GetInstance(),
                                    ZeroPaddingLeft.GetInstance(false, false), "Processing Code"));
            FieldFormatters.Add(new StringFieldFormatter(
                                    4, new FixedLengthManager(12), StringEncoder.GetInstance(),
                                    ZeroPaddingLeft.GetInstance(false, true), "Transaction amount"));
            FieldFormatters.Add(new StringFieldFormatter(
                                    5, new FixedLengthManager(12), StringEncoder.GetInstance(),
                                    ZeroPaddingLeft.GetInstance(false, true), "Reconciliation amount"));
            FieldFormatters.Add(new StringFieldFormatter(
                                    6, new FixedLengthManager(12), StringEncoder.GetInstance(),
                                    ZeroPaddingLeft.GetInstance(false, true), "Cardholder billing amount"));
            FieldFormatters.Add(new StringFieldFormatter(
                                    7, new FixedLengthManager(10), StringEncoder.GetInstance(),
                                    ZeroPaddingLeft.GetInstance(false, false), "Transmission date and time"));
            FieldFormatters.Add(new StringFieldFormatter(
                                    8, new FixedLengthManager(8), StringEncoder.GetInstance(),
                                    ZeroPaddingLeft.GetInstance(false, true), "Cardholder billing fee amount"));
            FieldFormatters.Add(new StringFieldFormatter(
                                    9, new FixedLengthManager(8), StringEncoder.GetInstance(),
                                    ZeroPaddingLeft.GetInstance(false, false), "Reconciliation conversion rate"));
            FieldFormatters.Add(new StringFieldFormatter(
                                    10, new FixedLengthManager(8), StringEncoder.GetInstance(),
                                    ZeroPaddingLeft.GetInstance(false, true), "Cardholder billing conversion rate"));
            FieldFormatters.Add(new StringFieldFormatter(
                                    11, new FixedLengthManager(6), StringEncoder.GetInstance(),
                                    ZeroPaddingLeft.GetInstance(false, true), "Systems trace audit number"));
            FieldFormatters.Add(new StringFieldFormatter(
                                    12, new FixedLengthManager(12), StringEncoder.GetInstance(),
                                    ZeroPaddingLeft.GetInstance(false, false), "Local transaction date and time"));
            FieldFormatters.Add(new StringFieldFormatter(
                                    13, new FixedLengthManager(4), StringEncoder.GetInstance(),
                                    ZeroPaddingLeft.GetInstance(false, false), "Effective date"));
            FieldFormatters.Add(new StringFieldFormatter(
                                    14, new FixedLengthManager(4), StringEncoder.GetInstance(),
                                    ZeroPaddingLeft.GetInstance(false, false), "Expiration date"));
            FieldFormatters.Add(new StringFieldFormatter(
                                    15, new FixedLengthManager(6), StringEncoder.GetInstance(),
                                    ZeroPaddingLeft.GetInstance(false, false), "Settlement date"));
            FieldFormatters.Add(new StringFieldFormatter(
                                    16, new FixedLengthManager(4), StringEncoder.GetInstance(),
                                    ZeroPaddingLeft.GetInstance(false, false), "Conversion date"));
            FieldFormatters.Add(new StringFieldFormatter(
                                    17, new FixedLengthManager(4), StringEncoder.GetInstance(),
                                    ZeroPaddingLeft.GetInstance(false, false), "Capture date"));
            FieldFormatters.Add(new StringFieldFormatter(
                                    18, new FixedLengthManager(4), StringEncoder.GetInstance(),
                                    ZeroPaddingLeft.GetInstance(false, true), "Merchant type"));
            FieldFormatters.Add(new StringFieldFormatter(
                                    19, new FixedLengthManager(3), StringEncoder.GetInstance(),
                                    ZeroPaddingLeft.GetInstance(false, true), "Acquiring institution country code"));
            FieldFormatters.Add(new StringFieldFormatter(
                                    20, new FixedLengthManager(3), StringEncoder.GetInstance(),
                                    ZeroPaddingLeft.GetInstance(false, true), "Primary account number country code"));
            FieldFormatters.Add(new StringFieldFormatter(
                                    21, new FixedLengthManager(3), StringEncoder.GetInstance(),
                                    ZeroPaddingLeft.GetInstance(false, true), "Forwarding institution country code"));
            FieldFormatters.Add(new StringFieldFormatter(
                                    22, new FixedLengthManager(12), StringEncoder.GetInstance(),
                                    "Point of service data code"));
            FieldFormatters.Add(new StringFieldFormatter(
                                    23, new FixedLengthManager(3), StringEncoder.GetInstance(),
                                    ZeroPaddingLeft.GetInstance(false, true), "Card sequence number"));
            FieldFormatters.Add(new StringFieldFormatter(
                                    24, new FixedLengthManager(3), StringEncoder.GetInstance(),
                                    ZeroPaddingLeft.GetInstance(false, true), "Function code"));
            FieldFormatters.Add(new StringFieldFormatter(
                                    25, new FixedLengthManager(4), StringEncoder.GetInstance(),
                                    ZeroPaddingLeft.GetInstance(false, true), "Message reason code"));
            FieldFormatters.Add(new StringFieldFormatter(
                                    26, new FixedLengthManager(4), StringEncoder.GetInstance(),
                                    ZeroPaddingLeft.GetInstance(false, true), "Card acceptor business code"));
            FieldFormatters.Add(new StringFieldFormatter(
                                    27, new FixedLengthManager(1), StringEncoder.GetInstance(),
                                    ZeroPaddingLeft.GetInstance(false, true), "Approval code length"));
            FieldFormatters.Add(new StringFieldFormatter(
                                    28, new FixedLengthManager(6), StringEncoder.GetInstance(),
                                    ZeroPaddingLeft.GetInstance(false, false), "Reconciliation date"));
            FieldFormatters.Add(new StringFieldFormatter(
                                    29, new FixedLengthManager(3), StringEncoder.GetInstance(),
                                    ZeroPaddingLeft.GetInstance(false, false), "Reconciliation indicator"));
            FieldFormatters.Add(new StringFieldFormatter(
                                    30, new FixedLengthManager(24), StringEncoder.GetInstance(),
                                    ZeroPaddingLeft.GetInstance(false, true), "Original amounts"));
            FieldFormatters.Add(new StringFieldFormatter(
                                    31, new VariableLengthManager(0, 99, StringLengthEncoder.GetInstance(99)),
                                    StringEncoder.GetInstance(), "Acquirer reference data"));
            FieldFormatters.Add(new StringFieldFormatter(
                                    32, new VariableLengthManager(0, 11, StringLengthEncoder.GetInstance(11)),
                                    StringEncoder.GetInstance(), NumericValidator.GetInstance(),
                                    "Acquirer institution identification code"));
            FieldFormatters.Add(new StringFieldFormatter(
                                    33, new VariableLengthManager(0, 11, StringLengthEncoder.GetInstance(11)),
                                    StringEncoder.GetInstance(), NumericValidator.GetInstance(),
                                    "Forwarding institution identification code"));
            FieldFormatters.Add(new StringFieldFormatter(
                                    34, new VariableLengthManager(0, 28, StringLengthEncoder.GetInstance(28)),
                                    StringEncoder.GetInstance(), "Extended primary account number"));
            FieldFormatters.Add(new StringFieldFormatter(
                                    35, new VariableLengthManager(0, 37, StringLengthEncoder.GetInstance(37)),
                                    StringEncoder.GetInstance(), "Track 2 data"));
            FieldFormatters.Add(new StringFieldFormatter(
                                    36, new VariableLengthManager(0, 104, StringLengthEncoder.GetInstance(104)),
                                    StringEncoder.GetInstance(), "Track 3 data"));
            FieldFormatters.Add(new StringFieldFormatter(
                                    37, new FixedLengthManager(12), StringEncoder.GetInstance(),
                                    "Retrieval reference number"));
            FieldFormatters.Add(new StringFieldFormatter(
                                    38, new FixedLengthManager(6), StringEncoder.GetInstance(),
                                    "Approval code"));
            FieldFormatters.Add(new StringFieldFormatter(
                                    39, new FixedLengthManager(3), StringEncoder.GetInstance(),
                                    ZeroPaddingLeft.GetInstance(false, true), "Action code"));
            FieldFormatters.Add(new StringFieldFormatter(
                                    40, new FixedLengthManager(3), StringEncoder.GetInstance(),
                                    ZeroPaddingLeft.GetInstance(false, false), "Service code"));
            FieldFormatters.Add(new StringFieldFormatter(
                                    41, new FixedLengthManager(8), StringEncoder.GetInstance(),
                                    "Card acceptor terminal identification"));
            FieldFormatters.Add(new StringFieldFormatter(
                                    42, new FixedLengthManager(15), StringEncoder.GetInstance(),
                                    "Card acceptor identification code"));
            FieldFormatters.Add(new StringFieldFormatter(
                                    43, new VariableLengthManager(0, 99, StringLengthEncoder.GetInstance(99)),
                                    StringEncoder.GetInstance(), "Card acceptor name/location"));
            FieldFormatters.Add(new StringFieldFormatter(
                                    44, new VariableLengthManager(0, 99, StringLengthEncoder.GetInstance(99)),
                                    StringEncoder.GetInstance(), "Additional response data"));
            FieldFormatters.Add(new StringFieldFormatter(
                                    45, new VariableLengthManager(0, 76, StringLengthEncoder.GetInstance(76)),
                                    StringEncoder.GetInstance(), "Track 1 data"));
            FieldFormatters.Add(new StringFieldFormatter(
                                    46, new VariableLengthManager(0, 204, StringLengthEncoder.GetInstance(204)),
                                    StringEncoder.GetInstance(), "Fees amounts"));
            FieldFormatters.Add(new StringFieldFormatter(
                                    47, new VariableLengthManager(0, 999, StringLengthEncoder.GetInstance(999)),
                                    StringEncoder.GetInstance(), "Additional data - national"));
            FieldFormatters.Add(new StringFieldFormatter(
                                    48, new VariableLengthManager(0, 999, StringLengthEncoder.GetInstance(999)),
                                    StringEncoder.GetInstance(), "Additional data - private"));
            FieldFormatters.Add(new StringFieldFormatter(
                                    49, new FixedLengthManager(3), StringEncoder.GetInstance(),
                                    "Transaction currency code"));
            FieldFormatters.Add(new StringFieldFormatter(
                                    50, new FixedLengthManager(3), StringEncoder.GetInstance(),
                                    "Reconciliation currency code"));
            FieldFormatters.Add(new StringFieldFormatter(
                                    51, new FixedLengthManager(3), StringEncoder.GetInstance(),
                                    "Cardholder billing currency code"));
            FieldFormatters.Add(new BinaryFieldFormatter(
                                    52, new FixedLengthManager(8), BinaryEncoder.GetInstance(),
                                    "Personal identification number (PIN) data"));
            FieldFormatters.Add(new BinaryFieldFormatter(
                                    53, new VariableLengthManager(0, 48, StringLengthEncoder.GetInstance(48)),
                                    HexadecimalBinaryEncoder.GetInstance(), "Security related control information"));
            FieldFormatters.Add(new StringFieldFormatter(
                                    54, new VariableLengthManager(0, 120, StringLengthEncoder.GetInstance(120)),
                                    StringEncoder.GetInstance(), "Amounts, additional"));
            FieldFormatters.Add(new BinaryFieldFormatter(
                                    55, new VariableLengthManager(0, 255, StringLengthEncoder.GetInstance(255)),
                                    HexadecimalBinaryEncoder.GetInstance(), "IC card system related data"));
            FieldFormatters.Add(new StringFieldFormatter(
                                    56, new VariableLengthManager(0, 35, StringLengthEncoder.GetInstance(35)),
                                    StringEncoder.GetInstance(), NumericValidator.GetInstance(),
                                    "Original data elements"));
            FieldFormatters.Add(new StringFieldFormatter(
                                    57, new FixedLengthManager(3), StringEncoder.GetInstance(),
                                    ZeroPaddingLeft.GetInstance(false, false), "Authorization life cycle code"));
            FieldFormatters.Add(new StringFieldFormatter(
                                    58, new VariableLengthManager(0, 11, StringLengthEncoder.GetInstance(11)),
                                    StringEncoder.GetInstance(), NumericValidator.GetInstance(),
                                    "Authorizing agent institution Id Code"));
            FieldFormatters.Add(new StringFieldFormatter(
                                    59, new VariableLengthManager(0, 999, StringLengthEncoder.GetInstance(999)),
                                    StringEncoder.GetInstance(), "Transport data"));
            FieldFormatters.Add(new StringFieldFormatter(
                                    60, new VariableLengthManager(0, 999, StringLengthEncoder.GetInstance(999)),
                                    StringEncoder.GetInstance(), "Reserved for national use"));
            FieldFormatters.Add(new StringFieldFormatter(
                                    61, new VariableLengthManager(0, 999, StringLengthEncoder.GetInstance(999)),
                                    StringEncoder.GetInstance(), "Reserved for national use"));
            FieldFormatters.Add(new StringFieldFormatter(
                                    62, new VariableLengthManager(0, 999, StringLengthEncoder.GetInstance(999)),
                                    StringEncoder.GetInstance(), "Reserved for private use"));
            FieldFormatters.Add(new StringFieldFormatter(
                                    63, new VariableLengthManager(0, 999, StringLengthEncoder.GetInstance(999)),
                                    StringEncoder.GetInstance(), "Reserved for private use"));
            FieldFormatters.Add(new BinaryFieldFormatter(
                                    64, new FixedLengthManager(8), BinaryEncoder.GetInstance(),
                                    "Message authentication code field"));
            FieldFormatters.Add(new BinaryFieldFormatter(
                                    65, new FixedLengthManager(8), BinaryEncoder.GetInstance(),
                                    "Reserved for ISO use"));
            FieldFormatters.Add(new StringFieldFormatter(
                                    66, new VariableLengthManager(0, 204, StringLengthEncoder.GetInstance(204)),
                                    StringEncoder.GetInstance(), "Amounts, original fees"));
            FieldFormatters.Add(new StringFieldFormatter(
                                    67, new FixedLengthManager(2), StringEncoder.GetInstance(),
                                    ZeroPaddingLeft.GetInstance(false, false), "Extended payment data"));
            FieldFormatters.Add(new StringFieldFormatter(
                                    68, new FixedLengthManager(3), StringEncoder.GetInstance(),
                                    ZeroPaddingLeft.GetInstance(false, true), "Receiving institution country code"));
            FieldFormatters.Add(new StringFieldFormatter(
                                    69, new FixedLengthManager(3), StringEncoder.GetInstance(),
                                    ZeroPaddingLeft.GetInstance(false, true), "Settlement institution country code"));
            FieldFormatters.Add(new StringFieldFormatter(
                                    70, new FixedLengthManager(3), StringEncoder.GetInstance(),
                                    ZeroPaddingLeft.GetInstance(false, true), "Authorizing agent institution country code"));
            FieldFormatters.Add(new StringFieldFormatter(
                                    71, new FixedLengthManager(8), StringEncoder.GetInstance(),
                                    ZeroPaddingLeft.GetInstance(false, true), "Message number"));
            FieldFormatters.Add(new StringFieldFormatter(
                                    72, new VariableLengthManager(0, 999, StringLengthEncoder.GetInstance(999)),
                                    StringEncoder.GetInstance(), "Data record"));
            FieldFormatters.Add(new StringFieldFormatter(
                                    73, new FixedLengthManager(6), StringEncoder.GetInstance(),
                                    ZeroPaddingLeft.GetInstance(false, false), "Action date"));
            FieldFormatters.Add(new StringFieldFormatter(
                                    74, new FixedLengthManager(10), StringEncoder.GetInstance(),
                                    ZeroPaddingLeft.GetInstance(false, true), "Credits, number"));
            FieldFormatters.Add(new StringFieldFormatter(
                                    75, new FixedLengthManager(10), StringEncoder.GetInstance(),
                                    ZeroPaddingLeft.GetInstance(false, true), "Credits, reversal number"));
            FieldFormatters.Add(new StringFieldFormatter(
                                    76, new FixedLengthManager(10), StringEncoder.GetInstance(),
                                    ZeroPaddingLeft.GetInstance(false, true), "Debits, number"));
            FieldFormatters.Add(new StringFieldFormatter(
                                    77, new FixedLengthManager(10), StringEncoder.GetInstance(),
                                    ZeroPaddingLeft.GetInstance(false, true), "Debits, reversal number"));
            FieldFormatters.Add(new StringFieldFormatter(
                                    78, new FixedLengthManager(10), StringEncoder.GetInstance(),
                                    ZeroPaddingLeft.GetInstance(false, true), "Transfer, number"));
            FieldFormatters.Add(new StringFieldFormatter(
                                    79, new FixedLengthManager(10), StringEncoder.GetInstance(),
                                    ZeroPaddingLeft.GetInstance(false, true), "Transfer, reversal number"));
            FieldFormatters.Add(new StringFieldFormatter(
                                    80, new FixedLengthManager(10), StringEncoder.GetInstance(),
                                    ZeroPaddingLeft.GetInstance(false, true), "Inquiries, number"));
            FieldFormatters.Add(new StringFieldFormatter(
                                    81, new FixedLengthManager(10), StringEncoder.GetInstance(),
                                    ZeroPaddingLeft.GetInstance(false, true), "Authorizations, number"));
            FieldFormatters.Add(new StringFieldFormatter(
                                    82, new FixedLengthManager(10), StringEncoder.GetInstance(),
                                    ZeroPaddingLeft.GetInstance(false, true), "Inquiries, reversal number"));
            FieldFormatters.Add(new StringFieldFormatter(
                                    83, new FixedLengthManager(10), StringEncoder.GetInstance(),
                                    ZeroPaddingLeft.GetInstance(false, true), "Payments, number"));
            FieldFormatters.Add(new StringFieldFormatter(
                                    84, new FixedLengthManager(10), StringEncoder.GetInstance(),
                                    ZeroPaddingLeft.GetInstance(false, true), "Payments, reversal number"));
            FieldFormatters.Add(new StringFieldFormatter(
                                    85, new FixedLengthManager(10), StringEncoder.GetInstance(),
                                    ZeroPaddingLeft.GetInstance(false, true), "Fee collections, number"));
            FieldFormatters.Add(new StringFieldFormatter(
                                    86, new FixedLengthManager(16), StringEncoder.GetInstance(),
                                    ZeroPaddingLeft.GetInstance(false, true), "Credits, amount"));
            FieldFormatters.Add(new StringFieldFormatter(
                                    87, new FixedLengthManager(16), StringEncoder.GetInstance(),
                                    ZeroPaddingLeft.GetInstance(false, true), "Credits, reversal amount"));
            FieldFormatters.Add(new StringFieldFormatter(
                                    88, new FixedLengthManager(16), StringEncoder.GetInstance(),
                                    ZeroPaddingLeft.GetInstance(false, true), "Debits, amount"));
            FieldFormatters.Add(new StringFieldFormatter(
                                    89, new FixedLengthManager(16), StringEncoder.GetInstance(),
                                    ZeroPaddingLeft.GetInstance(false, true), "Debits, reversal amount"));
            FieldFormatters.Add(new StringFieldFormatter(
                                    90, new FixedLengthManager(10), StringEncoder.GetInstance(),
                                    ZeroPaddingLeft.GetInstance(false, true), "Authorizations, reversal number"));
            FieldFormatters.Add(new StringFieldFormatter(
                                    91, new FixedLengthManager(3), StringEncoder.GetInstance(),
                                    ZeroPaddingLeft.GetInstance(false, true), "Transaction destination institution country code"));
            FieldFormatters.Add(new StringFieldFormatter(
                                    92, new FixedLengthManager(3), StringEncoder.GetInstance(),
                                    ZeroPaddingLeft.GetInstance(false, true), "Transaction originator institution country code"));
            FieldFormatters.Add(new StringFieldFormatter(
                                    93, new VariableLengthManager(0, 11, StringLengthEncoder.GetInstance(11)),
                                    StringEncoder.GetInstance(), NumericValidator.GetInstance(),
                                    "Transaction destination institution Id Code"));
            FieldFormatters.Add(new StringFieldFormatter(
                                    94, new VariableLengthManager(0, 11, StringLengthEncoder.GetInstance(11)),
                                    StringEncoder.GetInstance(), NumericValidator.GetInstance(),
                                    "Transaction originator institution Id Code"));
            FieldFormatters.Add(new StringFieldFormatter(
                                    95, new VariableLengthManager(0, 99, StringLengthEncoder.GetInstance(99)),
                                    StringEncoder.GetInstance(), "Card issuer reference data"));
            FieldFormatters.Add(new BinaryFieldFormatter(
                                    96, new VariableLengthManager(0, 999, StringLengthEncoder.GetInstance(48)),
                                    HexadecimalBinaryEncoder.GetInstance(), "Key management data"));
            FieldFormatters.Add(new StringFieldFormatter(
                                    97, new FixedLengthManager(17), StringEncoder.GetInstance(),
                                    "Net reconciliation amount"));
            FieldFormatters.Add(new StringFieldFormatter(
                                    98, new FixedLengthManager(25), StringEncoder.GetInstance(),
                                    "Payee"));
            FieldFormatters.Add(new StringFieldFormatter(
                                    99, new VariableLengthManager(0, 11, StringLengthEncoder.GetInstance(11)),
                                    StringEncoder.GetInstance(), "Settlement institution Id code"));
            FieldFormatters.Add(new StringFieldFormatter(
                                    100, new VariableLengthManager(0, 11, StringLengthEncoder.GetInstance(11)),
                                    StringEncoder.GetInstance(), NumericValidator.GetInstance(),
                                    "Receiving institution Id code"));
            FieldFormatters.Add(new StringFieldFormatter(
                                    101, new VariableLengthManager(0, 17, StringLengthEncoder.GetInstance(17)),
                                    StringEncoder.GetInstance(), "File name"));
            FieldFormatters.Add(new StringFieldFormatter(
                                    102, new VariableLengthManager(0, 28, StringLengthEncoder.GetInstance(28)),
                                    StringEncoder.GetInstance(), "Account identification 1"));
            FieldFormatters.Add(new StringFieldFormatter(
                                    103, new VariableLengthManager(0, 28, StringLengthEncoder.GetInstance(28)),
                                    StringEncoder.GetInstance(), "Account identification 2"));
            FieldFormatters.Add(new StringFieldFormatter(
                                    104, new VariableLengthManager(0, 100, StringLengthEncoder.GetInstance(100)),
                                    StringEncoder.GetInstance(), "Transaction description"));
            FieldFormatters.Add(new StringFieldFormatter(
                                    105, new FixedLengthManager(16), StringEncoder.GetInstance(),
                                    ZeroPaddingLeft.GetInstance(false, true), "Credits, chargeback amount"));
            FieldFormatters.Add(new StringFieldFormatter(
                                    106, new FixedLengthManager(16), StringEncoder.GetInstance(),
                                    ZeroPaddingLeft.GetInstance(false, true), "Debits, chargeback amount"));
            FieldFormatters.Add(new StringFieldFormatter(
                                    107, new FixedLengthManager(10), StringEncoder.GetInstance(),
                                    ZeroPaddingLeft.GetInstance(false, true), "Credits, chargeback number"));
            FieldFormatters.Add(new StringFieldFormatter(
                                    108, new FixedLengthManager(10), StringEncoder.GetInstance(),
                                    ZeroPaddingLeft.GetInstance(false, true), "Debits, chargeback number"));
            FieldFormatters.Add(new StringFieldFormatter(
                                    109, new VariableLengthManager(0, 84, StringLengthEncoder.GetInstance(84)),
                                    StringEncoder.GetInstance(), "Credits, fee amounts"));
            FieldFormatters.Add(new StringFieldFormatter(
                                    110, new VariableLengthManager(0, 84, StringLengthEncoder.GetInstance(84)),
                                    StringEncoder.GetInstance(), "Debits, fee amounts"));
            FieldFormatters.Add(new StringFieldFormatter(
                                    111, new VariableLengthManager(0, 999, StringLengthEncoder.GetInstance(999)),
                                    StringEncoder.GetInstance(), "Reserved for ISO use"));
            FieldFormatters.Add(new StringFieldFormatter(
                                    112, new VariableLengthManager(0, 999, StringLengthEncoder.GetInstance(999)),
                                    StringEncoder.GetInstance(), "Reserved for ISO use"));
            FieldFormatters.Add(new StringFieldFormatter(
                                    113, new VariableLengthManager(0, 999, StringLengthEncoder.GetInstance(999)),
                                    StringEncoder.GetInstance(), "Reserved for ISO use"));
            FieldFormatters.Add(new StringFieldFormatter(
                                    114, new VariableLengthManager(0, 999, StringLengthEncoder.GetInstance(999)),
                                    StringEncoder.GetInstance(), "Reserved for ISO use"));
            FieldFormatters.Add(new StringFieldFormatter(
                                    115, new VariableLengthManager(0, 999, StringLengthEncoder.GetInstance(999)),
                                    StringEncoder.GetInstance(), "Reserved for ISO use"));
            FieldFormatters.Add(new StringFieldFormatter(
                                    116, new VariableLengthManager(0, 999, StringLengthEncoder.GetInstance(999)),
                                    StringEncoder.GetInstance(), "Reserved for national use"));
            FieldFormatters.Add(new StringFieldFormatter(
                                    117, new VariableLengthManager(0, 999, StringLengthEncoder.GetInstance(999)),
                                    StringEncoder.GetInstance(), "Reserved for national use"));
            FieldFormatters.Add(new StringFieldFormatter(
                                    118, new VariableLengthManager(0, 999, StringLengthEncoder.GetInstance(999)),
                                    StringEncoder.GetInstance(), "Reserved for national use"));
            FieldFormatters.Add(new StringFieldFormatter(
                                    119, new VariableLengthManager(0, 999, StringLengthEncoder.GetInstance(999)),
                                    StringEncoder.GetInstance(), "Reserved for national use"));
            FieldFormatters.Add(new StringFieldFormatter(
                                    120, new VariableLengthManager(0, 999, StringLengthEncoder.GetInstance(999)),
                                    StringEncoder.GetInstance(), "Reserved for national use"));
            FieldFormatters.Add(new StringFieldFormatter(
                                    121, new VariableLengthManager(0, 999, StringLengthEncoder.GetInstance(999)),
                                    StringEncoder.GetInstance(), "Reserved for national use"));
            FieldFormatters.Add(new StringFieldFormatter(
                                    122, new VariableLengthManager(0, 999, StringLengthEncoder.GetInstance(999)),
                                    StringEncoder.GetInstance(), "Reserved for national use"));
            FieldFormatters.Add(new StringFieldFormatter(
                                    123, new VariableLengthManager(0, 999, StringLengthEncoder.GetInstance(999)),
                                    StringEncoder.GetInstance(), "Reserved for private use"));
            FieldFormatters.Add(new StringFieldFormatter(
                                    124, new VariableLengthManager(0, 999, StringLengthEncoder.GetInstance(999)),
                                    StringEncoder.GetInstance(), "Reserved for private use"));
            FieldFormatters.Add(new StringFieldFormatter(
                                    125, new VariableLengthManager(0, 999, StringLengthEncoder.GetInstance(999)),
                                    StringEncoder.GetInstance(), "Reserved for private use"));
            FieldFormatters.Add(new StringFieldFormatter(
                                    126, new VariableLengthManager(0, 999, StringLengthEncoder.GetInstance(999)),
                                    StringEncoder.GetInstance(), "Reserved for private use"));
            FieldFormatters.Add(new StringFieldFormatter(
                                    127, new VariableLengthManager(0, 999, StringLengthEncoder.GetInstance(999)),
                                    StringEncoder.GetInstance(), "Reserved for private use"));
            FieldFormatters.Add(new BinaryFieldFormatter(
                                    128, new FixedLengthManager(8), BinaryEncoder.GetInstance(),
                                    "Message authentication code"));
        }
        public void Parse()
        {
            ParserContext parseContext = new ParserContext(
                ParserContext.DefaultBufferSize);
            BinaryField          field;
            BinaryFieldFormatter formatter;

            // Setup data for three complete fields an one with partial data.
            parseContext.Write("DATA17DATA TO BE PARSED009SOME DATA00");

            // Test fixed length parse.
            formatter = new BinaryFieldFormatter(37, new FixedLengthManager(4),
                                                 BinaryEncoder.GetInstance());
            field = ( BinaryField)formatter.Parse(ref parseContext);
            Assert.IsNotNull(field);
            parseContext.ResetDecodedLength();
            Assert.IsTrue(field.ToString().Equals("DATA"));

            // Test variable length parse.
            formatter = new BinaryFieldFormatter(48, new VariableLengthManager(1, 20,
                                                                               StringLengthEncoder.GetInstance(99)), BinaryEncoder.GetInstance(),
                                                 string.Empty);
            field = ( BinaryField)formatter.Parse(ref parseContext);
            Assert.IsNotNull(field);
            parseContext.ResetDecodedLength();
            Assert.IsTrue(field.ToString().Equals("DATA TO BE PARSED"));

            formatter = new BinaryFieldFormatter(48, new VariableLengthManager(1,
                                                                               999, StringLengthEncoder.GetInstance(999)), BinaryEncoder.GetInstance());
            field = ( BinaryField)formatter.Parse(ref parseContext);
            Assert.IsNotNull(field);
            parseContext.ResetDecodedLength();
            Assert.IsTrue(field.ToString().Equals("SOME DATA"));

            // Test partial variable length parse.
            field = ( BinaryField)formatter.Parse(ref parseContext);
            Assert.IsNull(field);
            parseContext.Write("9MORE D");
            field = ( BinaryField)formatter.Parse(ref parseContext);
            Assert.IsNull(field);
            parseContext.Write("ATA");
            field = ( BinaryField)formatter.Parse(ref parseContext);
            Assert.IsNotNull(field);
            parseContext.ResetDecodedLength();
            Assert.IsTrue(field.ToString().Equals("MORE DATA"));

            // Test partial fixed.
            formatter = new BinaryFieldFormatter(37, new FixedLengthManager(8),
                                                 BinaryEncoder.GetInstance());
            field = ( BinaryField)formatter.Parse(ref parseContext);
            Assert.IsNull(field);
            parseContext.Write("ONE ");
            field = ( BinaryField)formatter.Parse(ref parseContext);
            Assert.IsNull(field);
            parseContext.Write("MORE");
            field = ( BinaryField)formatter.Parse(ref parseContext);
            Assert.IsNotNull(field);
            parseContext.ResetDecodedLength();
            Assert.IsTrue(field.ToString().Equals("ONE MORE"));

            // Test variable length header with zero length.
            formatter = new BinaryFieldFormatter(48, new VariableLengthManager(0,
                                                                               999, StringLengthEncoder.GetInstance(999)), BinaryEncoder.GetInstance());
            parseContext.Write("000");
            field = ( BinaryField)formatter.Parse(ref parseContext);
            Assert.IsNotNull(field);
            parseContext.ResetDecodedLength();
            Assert.IsNull(field.Value);
        }