Beispiel #1
0
        public void TestDate6()
        {
            DateTimeOffset date = DateTimeOffset.FromUnixTimeMilliseconds(1514700000000L);
            var            tz   = TZConvert.GetTimeZoneInfo("Central Standard Time");

            date = TimeZoneInfo.ConvertTime(date,
                                            tz);

            IsoValue f = new IsoValue(IsoType.DATE6, date.DateTime);

            Assert.Equal("171231", f.ToString());
            Assert.Equal("171231", IsoType.DATE6.Format(date));
            var parsed = new Date6ParseInfo().Parse(1, "171231".GetSignedBytes(), 0, null);

            Assert.Equal("171231", parsed.ToString());
            Assert.Equal(f.Value, parsed.Value);

            var buf = new sbyte[3];

            buf[0] = 0x17;
            buf[1] = 0x12;
            buf[2] = 0x31;
            var dt = new Date6ParseInfo();

            parsed = dt.ParseBinary(2, buf, 0, null);
            Assert.Equal("171231", parsed.ToString());
            Assert.Equal(f.Value, parsed.Value);
        }
Beispiel #2
0
        public void WindowsToUtf8()
        {
            string   data     = "05ácido";
            Encoding encoding = Encoding.GetEncoding("ISO-8859-1");

            if (OsUtil.IsLinux())
            {
                encoding = Encoding.UTF8;
            }
            sbyte[]        buf    = data.GetSbytes(encoding);
            LlvarParseInfo parser = new LlvarParseInfo
            {
                Encoding = Encoding.Default
            };

            if (OsUtil.IsLinux())
            {
                parser.Encoding = Encoding.UTF8;
            }

            IsoValue field = parser.Parse(1, buf, 0, null);

            Assert.Equal(field.Value, data.Substring(2));
            parser.Encoding = encoding;
            field           = parser.Parse(1, buf, 0, null);
            Assert.Equal(data.Substring(2), field.Value);
        }
Beispiel #3
0
        public void TestBinaryNumberParsing()
        {
            NumericParseInfo npi = new NumericParseInfo(6);
            IsoValue         val = npi.ParseBinary(0, new byte[] { 0x12, 0x34, 0x56 }.ToSbytes(), 0, null);

            Assert.Equal(123456, Convert.ToInt32(val.Value));
        }
 public CompositeField AddValue(IsoValue value)
 {
     if (Values == null)
     {
         Values = new List <IsoValue>(4);
     }
     Values.Add(value);
     return(this);
 }
Beispiel #5
0
        public void TestParser()
        {
            string configXml = @"/Resources/config.xml";
            MessageFactory <IsoMessage> mfact = Config(configXml);

            //Headers
            Assert.NotNull(mfact.GetIsoHeader(0x800));
            Assert.NotNull(mfact.GetIsoHeader(0x810));
            Assert.Equal(mfact.GetIsoHeader(0x800), mfact.GetIsoHeader(0x810));

            //Templates
            IsoMessage m200 = mfact.GetMessageTemplate(0x200);

            Assert.NotNull(m200);
            IsoMessage m400 = mfact.GetMessageTemplate(0x400);

            Assert.NotNull(m400);

            for (int i = 2; i < 89; i++)
            {
                IsoValue v = m200.GetField(i);
                if (v == null)
                {
                    Assert.False(m400.HasField(i));
                }
                else
                {
                    Assert.True(m400.HasField(i));
                    Assert.Equal(v, m400.GetField(i));
                }
            }

            Assert.False(m200.HasField(90));
            Assert.True(m400.HasField(90));
            Assert.True(m200.HasField(102));
            Assert.False(m400.HasField(102));

            //Parsing guides
            string     s800 = "0800201080000000000012345611251125";
            string     s810 = "08102010000002000000123456112500";
            IsoMessage m    = mfact.ParseMessage(s800.GetSbytes(), 0);

            Assert.NotNull(m);
            Assert.True(m.HasField(3));
            Assert.True(m.HasField(12));
            Assert.True(m.HasField(17));
            Assert.False(m.HasField(39));
            m = mfact.ParseMessage(s810.GetSbytes(),
                                   0);
            Assert.NotNull(m);
            Assert.True(m.HasField(3));
            Assert.True(m.HasField(12));
            Assert.False(m.HasField(17));
            Assert.True(m.HasField(39));
        }
        public override IsoValue ParseBinary(int field,
                                             sbyte[] buf,
                                             int pos,
                                             ICustomField custom)
        {
            var sbytes = buf;

            if (pos < 0)
            {
                throw new ParseException($"Invalid bin LLLVAR field {field} pos {pos}");
            }

            if (pos + 2 > buf.Length)
            {
                throw new ParseException($"Insufficient data for bin LLLVAR header, field {field} pos {pos}");
            }

            var len = (sbytes[pos] & 0x0f) * 100 + ((sbytes[pos + 1] & 0xf0) >> 4) * 10 + (sbytes[pos + 1] & 0x0f);

            if (len < 0)
            {
                throw new ParseException($"Invalid bin LLLVAR length {len}, field {field} pos {pos}");
            }

            if (len + pos + 2 > buf.Length)
            {
                throw new ParseException($"Insufficient data for bin LLLVAR field {field}, pos {pos}");
            }

            if (custom == null)
            {
                return(new IsoValue(IsoType,
                                    buf.ToString(pos + 2,
                                                 len,
                                                 Encoding)));
            }

            var v = new IsoValue(IsoType,
                                 custom.DecodeField(buf.ToString(pos + 2,
                                                                 len,
                                                                 Encoding)),
                                 custom);

            if (v.Value == null)
            {
                return(new IsoValue(IsoType,
                                    buf.ToString(pos + 2,
                                                 len,
                                                 Encoding.Default)));
            }
            return(v);
        }
Beispiel #7
0
        public void TestSimpleFieldSetter()
        {
            IsoMessage iso = mf.NewMessage(0x200);
            IsoValue   f3  = iso.GetField(3);

            iso.UpdateValue(3, "999999");
            Assert.Equal("999999", iso.GetObjectValue(3));
            IsoValue nf3 = iso.GetField(3);

            Assert.NotSame(f3, nf3);
            Assert.Equal(f3.Type, nf3.Type);
            Assert.Equal(f3.Length, nf3.Length);
            Assert.Same(f3.Encoder, nf3.Encoder);
            Assert.Throws <ArgumentException>(() => iso.UpdateValue(4, "INVALID!"))
            ;
        }
Beispiel #8
0
        public void WindowsToUtf8()
        {
            string   data     = "05ácido";
            Encoding encoding = Encoding.UTF8;

            sbyte[]        buf    = data.GetSignedbytes(encoding);
            LlvarParseInfo parser = new LlvarParseInfo
            {
                Encoding = Encoding.Default
            };

            IsoValue field = parser.Parse(1, buf, 0, null);

            Assert.Equal(field.Value, data.Substring(2));
            parser.Encoding = encoding;
            field           = parser.Parse(1, buf, 0, null);
            Assert.Equal(data.Substring(2), field.Value);
        }
Beispiel #9
0
        public void TestExtendCompositeWithSameField()
        {
            string configXml = @"/Resources/issue47.xml";
            MessageFactory <IsoMessage> mfact = Config(configXml);

            string m200 = "02001000000000000004000000100000013ABCDEFGHIJKLM";

            IsoMessage isoMessage = mfact.ParseMessage(m200.GetSbytes(), 0);

            // check field num 4
            IsoValue field4 = isoMessage.GetField(4);

            Assert.Equal(IsoType.AMOUNT, field4.Type);
            Assert.Equal(IsoType.AMOUNT.Length(), field4.Length);

            // check nested field num 4 from composite field 62
            CompositeField compositeField62 = (CompositeField)isoMessage.GetField(62).Value;
            IsoValue       nestedField4     = compositeField62.GetField(0); // first in list

            Assert.Equal(IsoType.ALPHA, nestedField4.Type);
            Assert.Equal(13, nestedField4.Length);
        }