Esempio n. 1
0
        public void Read_With_DateTime_yyyyMMdd_Converter()
        {
            var descriptor = new FixedRecordDescriptor();

            descriptor.AddField("Name")
            .SetLength(50)
            .SetTrimMode(TrimMode.Both);

            descriptor.AddField("Doc")
            .SetLength(14)
            .SetAlignMode(AlignMode.Left)
            .SetConverter(typeof(LongConverter))
            .SetAlignChar('0');

            descriptor.AddField("BirthDate")
            .SetLength(8)
            .SetConverter(typeof(DateTimeConverter))
            .SetConverterFormat("yyyyMMdd");

            var engine = new FluentFixedEngine(descriptor);

            var items = engine.ReadString("Harlen Naves                                      0000587065966319840330");

            Assert.AreEqual(1, items.Length);

            dynamic item = items[0];

            Assert.AreEqual("Harlen Naves", item.Name);
            Assert.AreEqual(05870659663, item.Doc);
        }
Esempio n. 2
0
        public void Write_Boolean_With_Format_True_Diff_Value()
        {
            var descriptor = new FixedRecordDescriptor();

            descriptor.AddField("Name")
            .SetLength(10)
            .SetTrimMode(TrimMode.Both);

            descriptor.AddField("Enabled")
            .SetLength(1)
            .SetConverter(typeof(BooleanConverter))
            .SetConverterFormat("1:V,0:F");

            var engine = new FluentFixedEngine(descriptor);

            var items = engine.ReadString("Product 1 V");

            Assert.AreEqual(1, items.Length);
            dynamic item = items[0];

            Assert.AreEqual(true, item.Enabled);

            var output = engine.WriteString(items).Replace("\r\n", string.Empty);

            Assert.AreEqual("Product 1 V", output);
        }
        public void Invalid_Array_Remainder_Length()
        {
            var descriptor = new FixedRecordDescriptor();

            descriptor.AddField("Function")
            .SetLength(3);

            descriptor.AddField("ArraySize")
            .SetLength(4)
            .SetAlignMode(AlignMode.Right)
            .SetAlignChar('0');

            var arrayBuilder = descriptor.AddArray("ArrayData");

            arrayBuilder.SetArrayLength(500)
            .SetArrayItemLength(11)
            .SetAlign(true);

            arrayBuilder.AddField("DealId")
            .SetLength(10)
            .SetAlignMode(AlignMode.Right)
            .SetNullValue(string.Empty)
            .SetAlignChar('0');

            var engine = new FluentFixedEngine(descriptor);
        }
Esempio n. 4
0
        public void Write_With_DateTime_yyyyMMdd_Converter()
        {
            var descriptor = new FixedRecordDescriptor();

            descriptor.AddField("Name")
            .SetLength(50)
            .SetTrimMode(TrimMode.Both);

            descriptor.AddField("Doc")
            .SetLength(14)
            .SetAlignMode(AlignMode.Left)
            .SetAlignChar('0');

            descriptor.AddField("BirthDate")
            .SetLength(8)
            .SetConverter(typeof(DateTimeConverter))
            .SetConverterFormat("yyyyMMdd");

            var engine = new FluentFixedEngine(descriptor);

            var item = new ExpandoObject();

            item.TryAdd("Name", "Harlen Naves");
            item.TryAdd("Doc", 05870659663);
            item.TryAdd("BirthDate", new DateTime(1984, 03, 30));

            string line = engine.WriteString(new[] { item });

            Assert.AreEqual("Harlen Naves                                      0000587065966319840330" + Environment.NewLine, line);
        }
Esempio n. 5
0
        public void Write_With_Decimal_Positive_N_Integer_Signal_Separator_Format()
        {
            var descriptor = new FixedRecordDescriptor();

            descriptor.AddField("Name")
            .SetLength(10)
            .SetTrimMode(TrimMode.Both);

            descriptor.AddField("Price")
            .SetLength(18)
            .SetConverter(typeof(DecimalConverter))
            .SetConverterFormat("+NS15.2");

            var engine = new FluentFixedEngine(descriptor);

            var items = engine.ReadString("Product 1 +00000000000001.29");

            Assert.AreEqual(1, items.Length);
            dynamic item = items[0];

            Assert.AreEqual(1.29M, item.Price);
            var output = engine.WriteString(items).Replace("\r\n", string.Empty);

            Assert.AreEqual("Product 1 +00000000000001.29", output);
        }
        public void Invalid_Property_Length()
        {
            var descriptor = new FixedRecordDescriptor();

            descriptor.AddField("")
            .SetLength(10);
            var engine = new FluentFixedEngine(descriptor);
        }
        public void Deserialize_Descriptor()
        {
            var descriptor = new FixedRecordDescriptor();

            descriptor.AddField("Function")
            .SetLength(3)
            .SetAlignMode(AlignMode.Right)
            .SetAlignChar('0');

            descriptor.AddField("ArraySize")
            .SetLength(4)
            .SetAlignMode(AlignMode.Left)
            .SetAlignChar('0')
            .SetConverter(typeof(IntegerConverter));

            var arrayDescriptor = descriptor.AddArray("ArrayData")
                                  .SetArrayLength(500)
                                  .SetArrayItemLength(10)
                                  .SetAlign(false);

            arrayDescriptor.AddField("DealId")
            .SetLength(10)
            .SetNullValue(string.Empty)
            .SetAlignMode(AlignMode.Right)
            .SetAlignChar('0');

            var engineToSerialize = descriptor.Build();

            var jsonDescriptor = engineToSerialize.Serialize();

            var engine = FluentFixedEngine.Build(jsonDescriptor);

            ExpandoObject item = new ExpandoObject();

            item.TryAdd("Function", "001");
            item.TryAdd("ArraySize", 25);

            List <ExpandoObject> arrayData = new List <ExpandoObject>();

            for (int i = 0; i < 25; i++)
            {
                ExpandoObject arrayItem = new ExpandoObject();
                arrayItem.TryAdd("DealId", "STOCKASC" + i.ToString().PadLeft(2, '0'));
                arrayData.Add(arrayItem);
            }

            item.TryAdd("ArrayData", arrayData);

            string content = engine.WriteString(new[] { item });

            Assert.AreEqual("0010025STOCKASC00STOCKASC01STOCKASC02STOCKASC03STOCKASC04STOCKASC05STOCKASC06STOCKASC07STOCKASC08STOCKASC09STOCKASC10STOCKASC11STOCKASC12STOCKASC13STOCKASC14STOCKASC15STOCKASC16STOCKASC17STOCKASC18STOCKASC19STOCKASC20STOCKASC21STOCKASC22STOCKASC23STOCKASC24" + Environment.NewLine, content);
        }
Esempio n. 8
0
        public void Read_With_Decimal_Positive()
        {
            var descriptor = new FixedRecordDescriptor();

            descriptor.AddField("Name")
            .SetLength(10)
            .SetTrimMode(TrimMode.Both);

            descriptor.AddField("Price")
            .SetLength(18)
            .SetConverter(typeof(DecimalConverter))
            .SetConverterFormat("0.00");

            var engine = new FluentFixedEngine(descriptor);

            var itens = engine.ReadString("Product 1 000000000000000129");
        }
Esempio n. 9
0
        public void Read_With_NullValue()
        {
            var descriptor = new FixedRecordDescriptor();

            descriptor.AddField("Name")
            .SetLength(50)
            .SetTrimMode(TrimMode.Both);

            descriptor.AddField("Doc")
            .SetLength(14)
            .SetAlignMode(AlignMode.Left)
            .SetConverter(typeof(LongConverter))
            .SetNullValue("05870659663")
            .SetAlignChar('0');

            var engine = new FluentFixedEngine(descriptor);

            var items = engine.ReadString("Harlen Naves                                                    ");
        }
        public void Write()
        {
            var recordDescriptor = new FixedRecordDescriptor();

            recordDescriptor.AddField("Name")
            .SetLength(50);
            recordDescriptor.AddField("Doc")
            .SetLength(14)
            .SetAlignMode(AlignMode.Left)
            .SetAlignChar('0');

            var engine = new FluentFixedEngine(recordDescriptor);

            ExpandoObject item = new ExpandoObject();

            item.TryAdd("Name", "Harlen Naves");
            item.TryAdd("Doc", 05870659663);

            string line = engine.WriteString(new[] { item });
        }
        public void Invalid_Array_Without_Fields()
        {
            var descriptor = new FixedRecordDescriptor();

            descriptor.AddField("Function")
            .SetLength(3);

            descriptor.AddField("ArraySize")
            .SetLength(4)
            .SetAlignMode(AlignMode.Right)
            .SetAlignChar('0');

            var arrayBuilder = descriptor.AddArray("ArrayData");

            arrayBuilder.SetArrayLength(500)
            .SetArrayItemLength(10)
            .SetAlign(true);

            var engine = new FluentFixedEngine(descriptor);
        }
Esempio n. 12
0
        public void Read_With_Array()
        {
            var descriptor = new FixedRecordDescriptor();

            descriptor.AddField("Function")
            .SetLength(3)
            .SetAlignMode(AlignMode.Right)
            .SetAlignChar('0');

            descriptor.AddField("ArraySize")
            .SetLength(4)
            .SetAlignMode(AlignMode.Left)
            .SetAlignChar('0')
            .SetConverter(typeof(IntegerConverter));

            var arrayDescriptor = descriptor.AddArray("ArrayData")
                                  .SetArrayLength(500)
                                  .SetArrayItemLength(10)
                                  .SetAlign(true)
                                  .SetAlignChar('0');

            arrayDescriptor.AddField("DealId")
            .SetLength(10)
            .SetNullValue(string.Empty)
            .SetAlignMode(AlignMode.Right)
            .SetAlignChar('0');

            var engine = new FluentFixedEngine(descriptor);

            var items = engine.ReadString(
                "0010025STOCKAPA17STOCKASS18STOCKASS17STOCKDIC18STOCKDIC17STOCKDIP18STOCKDIP17STOCKGOT18STOCKGOT17STOCKLUV18STOCKLUV17STOCKNOR18STOCKNOR17STOCKRIV18STOCKRIV17STOCKSUE18STOCKSUE17STOCKTRC18STOCKTRC17STOCKTRV18STOCKTRV17STOCKLAP18STOCKLAP17STOCKASC18STOCKASC17000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000");

            Assert.AreEqual(1, items.Length);

            dynamic item = items[0];

            Assert.AreEqual("001", item.Function);
            Assert.AreEqual(25, item.ArraySize);
            Assert.AreEqual(item.ArraySize, item.ArrayData.Length);
        }
Esempio n. 13
0
        public void Read_Boolean_With_True_Format_False_Value()
        {
            var descriptor = new FixedRecordDescriptor();

            descriptor.AddField("Name")
            .SetLength(10)
            .SetTrimMode(TrimMode.Both);

            descriptor.AddField("Enabled")
            .SetLength(1)
            .SetConverter(typeof(BooleanConverter))
            .SetConverterFormat("1:T");

            var engine = new FluentFixedEngine(descriptor);

            var items = engine.ReadString("Product 1 A");

            Assert.AreEqual(1, items.Length);
            dynamic item = items[0];

            Assert.AreEqual(false, item.Enabled);
        }
Esempio n. 14
0
        public void Read_With_Decimal_Negative()
        {
            var descriptor = new FixedRecordDescriptor();

            descriptor.AddField("Name")
            .SetLength(10)
            .SetTrimMode(TrimMode.Both);

            descriptor.AddField("Price")
            .SetLength(18)
            .SetConverter(Type.GetType("FileHelpers.Fluent.Core.Converters.DecimalConverter, FileHelpers.Fluent.Core", false))
            .SetConverterFormat("0.00");

            var engine = new FluentFixedEngine(descriptor);

            var items = engine.ReadString("Product 1 -00000000000000129");

            Assert.AreEqual(1, items.Length);
            dynamic item = items[0];

            Assert.AreEqual(-1.29M, item.Price);
        }
Esempio n. 15
0
        public void Read_With_Decimal_Positive_N_3_Format()
        {
            var descriptor = new FixedRecordDescriptor();

            descriptor.AddField("Name")
            .SetLength(10)
            .SetTrimMode(TrimMode.Both);

            descriptor.AddField("Price")
            .SetLength(18)
            .SetConverter(typeof(DecimalConverter))
            .SetConverterFormat("N3");

            var engine = new FluentFixedEngine(descriptor);

            var items = engine.ReadString("Product 1 000000000000000129");

            Assert.AreEqual(1, items.Length);
            dynamic item = items[0];

            Assert.AreEqual(0.129M, item.Price);
        }
Esempio n. 16
0
        public void Read_With_Double_Negative_LessChars()
        {
            var descriptor = new FixedRecordDescriptor();

            descriptor.AddField("Name")
            .SetLength(10)
            .SetTrimMode(TrimMode.Both);

            descriptor.AddField("Price")
            .SetLength(12)
            .SetConverter(typeof(DoubleConverter))
            .SetConverterFormat("0.00");

            var engine = new FluentFixedEngine(descriptor);

            var items = engine.ReadString("Product 1 -129");

            Assert.AreEqual(1, items.Length);
            dynamic item = items[0];

            Assert.AreEqual(-1.29, item.Price);
        }
        public void Two_Record_Types()
        {
            var clientDescriptor = new FixedRecordDescriptor();

            clientDescriptor.AddField("RecordType")
            .SetLength(3)
            .SetTrimMode(TrimMode.Both)
            .SetAlignMode(AlignMode.Right)
            .SetAlignChar(' ');

            clientDescriptor.AddField("Name")
            .SetLength(50)
            .SetAlignMode(AlignMode.Right)
            .SetTrimMode(TrimMode.Both)
            .SetAlignChar(' ');

            clientDescriptor.AddField("Doc")
            .SetLength(14)
            .SetAlignMode(AlignMode.Left)
            .SetConverter(typeof(LongConverter))
            .SetAlignChar('0');

            clientDescriptor.AddField("BirthDate")
            .SetLength(8)
            .SetConverter(typeof(DateTimeConverter))
            .SetConverterFormat("yyyyMMdd");

            var addressDescriptor = new FixedRecordDescriptor();

            addressDescriptor.AddField("RecordType")
            .SetLength(3)
            .SetTrimMode(TrimMode.Both)
            .SetAlignMode(AlignMode.Right)
            .SetAlignChar(' ');

            addressDescriptor.AddField("Street")
            .SetLength(20)
            .SetTrimMode(TrimMode.Both)
            .SetAlignMode(AlignMode.Right)
            .SetAlignChar(' ');
            addressDescriptor.AddField("City")
            .SetLength(20)
            .SetTrimMode(TrimMode.Both)
            .SetAlignMode(AlignMode.Right)
            .SetAlignChar(' ');

            var engine = new FluentFixedEngine(new List <RecordItem>
            {
                new RecordItem
                {
                    Descriptor         = clientDescriptor,
                    Name               = "Client",
                    RegexPattern       = "^(CLI)",
                    RecordTypeProperty = "RecordType"
                },
                new RecordItem
                {
                    Descriptor         = addressDescriptor,
                    Name               = "Address",
                    RegexPattern       = "^(ADR)",
                    RecordTypeProperty = "RecordType"
                }
            });

            string content =
                "CLIHarlen Naves                                      0000587065966319840330\r\nADRNo name street      No name city        ";

            var items = engine.ReadString(content);

            Assert.IsNotNull(items);

            Assert.AreEqual(2, items.Length);

            dynamic customer = items[0];

            Assert.AreEqual("CLI", customer.RecordType);
            Assert.AreEqual("Harlen Naves", customer.Name);
            Assert.AreEqual((long)05870659663, (long)customer.Doc);

            dynamic address = items[1];

            Assert.AreEqual("ADR", address.RecordType);
            Assert.AreEqual("No name street", address.Street);
            Assert.AreEqual("No name city", address.City);
        }
        public void Two_Record_Types_With_Array()
        {
            var clientDescriptor = new FixedRecordDescriptor();

            clientDescriptor.AddField("RecordType")
            .SetLength(3)
            .SetTrimMode(TrimMode.Both)
            .SetAlignMode(AlignMode.Right)
            .SetAlignChar(' ');

            clientDescriptor.AddField("Name")
            .SetLength(50)
            .SetAlignMode(AlignMode.Right)
            .SetTrimMode(TrimMode.Both)
            .SetAlignChar(' ');

            clientDescriptor.AddField("Doc")
            .SetLength(14)
            .SetAlignMode(AlignMode.Left)
            .SetConverter(typeof(LongConverter))
            .SetAlignChar('0');

            clientDescriptor.AddField("BirthDate")
            .SetLength(8)
            .SetConverter(typeof(DateTimeConverter))
            .SetConverterFormat("yyyyMMdd");

            var descriptor = new FixedRecordDescriptor();

            descriptor.AddField("RecordType")
            .SetLength(3)
            .SetTrimMode(TrimMode.Both)
            .SetAlignMode(AlignMode.Right)
            .SetAlignChar(' ');

            descriptor.AddField("Function")
            .SetLength(3)
            .SetAlignMode(AlignMode.Right)
            .SetAlignChar('0');

            descriptor.AddField("ArraySize")
            .SetLength(4)
            .SetAlignMode(AlignMode.Left)
            .SetAlignChar('0')
            .SetConverter(typeof(IntegerConverter));

            var arrayDescriptor = descriptor.AddArray("ArrayData")
                                  .SetArrayLength(500)
                                  .SetArrayItemLength(10)
                                  .SetAlign(true)
                                  .SetAlignChar('0');

            arrayDescriptor.AddField("DealId")
            .SetLength(10)
            .SetNullValue(string.Empty)
            .SetAlignMode(AlignMode.Right)
            .SetAlignChar('0');



            ExpandoObject item = new ExpandoObject();

            item.TryAdd("Function", "001");
            item.TryAdd("ArraySize", 25);

            List <ExpandoObject> arrayData = new List <ExpandoObject>();

            for (int i = 0; i < 25; i++)
            {
                ExpandoObject arrayItem = new ExpandoObject();
                arrayItem.TryAdd("DealId", "STOCKASC" + i.ToString().PadLeft(2, '0'));
                arrayData.Add(arrayItem);
            }

            item.TryAdd("ArrayData", arrayData);

            var engine = new FluentFixedEngine(new List <RecordItem>
            {
                new RecordItem
                {
                    Descriptor         = clientDescriptor,
                    Name               = "Client",
                    RegexPattern       = "^(CLI)",
                    RecordTypeProperty = "RecordType"
                },
                new RecordItem
                {
                    Descriptor         = descriptor,
                    Name               = "Test",
                    RegexPattern       = "^(TST)",
                    RecordTypeProperty = "RecordType"
                }
            });

            string content =
                "TST0010025STOCKASC00STOCKASC01STOCKASC02STOCKASC03STOCKASC04STOCKASC05STOCKASC06STOCKASC07STOCKASC08STOCKASC09STOCKASC10STOCKASC11STOCKASC12STOCKASC13STOCKASC14STOCKASC15STOCKASC16STOCKASC17STOCKASC18STOCKASC19STOCKASC20STOCKASC21STOCKASC22STOCKASC23STOCKASC240000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" +
                Environment.NewLine + "CLIHarlen Naves                                      0000587065966319840330" + Environment.NewLine;

            var records = engine.ReadString(content);

            Assert.IsNotNull(records);
            Assert.AreEqual(2, records.Length);

            dynamic customer = records[1];

            Assert.AreEqual("CLI", customer.RecordType);
            Assert.AreEqual("Harlen Naves", customer.Name);
            Assert.AreEqual((long)05870659663, (long)customer.Doc);
            Assert.IsNotNull(customer.BirthDate);
            Assert.AreEqual(new DateTime(1984, 3, 30).Date, ((DateTime)customer.BirthDate).Date);

            dynamic items = records[0];

            Assert.AreEqual("TST", items.RecordType);
            Assert.AreEqual("001", items.Function);
            Assert.AreEqual(25, (int)items.ArraySize);
            Assert.AreEqual(25, ((object[])items.ArrayData).Length);

            dynamic firstItem = ((object[])items.ArrayData)[0];

            Assert.IsNotNull(firstItem);
            Assert.AreEqual("STOCKASC00", firstItem.DealId);

            dynamic lastItem = ((object[])items.ArrayData)[24];

            Assert.IsNotNull(lastItem);
            Assert.AreEqual("STOCKASC24", lastItem.DealId);
        }
        public void Two_Record_Types()
        {
            var clientDescriptor = new FixedRecordDescriptor();

            clientDescriptor.AddField("RecordType")
            .SetLength(3)
            .SetTrimMode(TrimMode.Both)
            .SetAlignMode(AlignMode.Right)
            .SetAlignChar(' ');

            clientDescriptor.AddField("Name")
            .SetLength(50)
            .SetAlignMode(AlignMode.Right)
            .SetTrimMode(TrimMode.Both)
            .SetAlignChar(' ');

            clientDescriptor.AddField("Doc")
            .SetLength(14)
            .SetAlignMode(AlignMode.Left)
            .SetConverter(typeof(LongConverter))
            .SetAlignChar('0');

            clientDescriptor.AddField("BirthDate")
            .SetLength(8)
            .SetConverter(typeof(DateTimeConverter))
            .SetConverterFormat("yyyyMMdd");

            var addressDescriptor = new FixedRecordDescriptor();

            addressDescriptor.AddField("RecordType")
            .SetLength(3)
            .SetTrimMode(TrimMode.Both)
            .SetAlignMode(AlignMode.Right)
            .SetAlignChar(' ');

            addressDescriptor.AddField("Street")
            .SetLength(20)
            .SetTrimMode(TrimMode.Both)
            .SetAlignMode(AlignMode.Right)
            .SetAlignChar(' ');
            addressDescriptor.AddField("City")
            .SetLength(20)
            .SetTrimMode(TrimMode.Both)
            .SetAlignMode(AlignMode.Right)
            .SetAlignChar(' ');

            var engine = new FluentFixedEngine(new List <RecordItem>
            {
                new RecordItem
                {
                    Descriptor         = clientDescriptor,
                    Name               = "Client",
                    RegexPattern       = "^(CLI)",
                    RecordTypeProperty = "RecordType"
                },
                new RecordItem
                {
                    Descriptor         = addressDescriptor,
                    Name               = "Address",
                    RegexPattern       = "^(ADR)",
                    RecordTypeProperty = "RecordType"
                }
            });

            string content =
                "CLIHarlen Naves                                      0000587065966319840330\r\nADRNo name street      No name city        ";

            var items = engine.ReadString(content);

            string output = engine.WriteString(items);

            Assert.AreEqual(content + Environment.NewLine, output);
        }
        public void Has_No_Fields()
        {
            var descriptor = new FixedRecordDescriptor();

            var engine = new FluentFixedEngine(descriptor);
        }
        public void Two_Record_Types_With_Array()
        {
            var clientDescriptor = new FixedRecordDescriptor();

            clientDescriptor.AddField("RecordType")
            .SetLength(3)
            .SetTrimMode(TrimMode.Both)
            .SetAlignMode(AlignMode.Right)
            .SetAlignChar(' ');

            clientDescriptor.AddField("Name")
            .SetLength(50)
            .SetAlignMode(AlignMode.Right)
            .SetTrimMode(TrimMode.Both)
            .SetAlignChar(' ');

            clientDescriptor.AddField("Doc")
            .SetLength(14)
            .SetAlignMode(AlignMode.Left)
            .SetConverter(typeof(LongConverter))
            .SetAlignChar('0');

            clientDescriptor.AddField("BirthDate")
            .SetLength(8)
            .SetConverter(typeof(DateTimeConverter))
            .SetConverterFormat("yyyyMMdd");

            var descriptor = new FixedRecordDescriptor();

            descriptor.AddField("RecordType")
            .SetLength(3)
            .SetTrimMode(TrimMode.Both)
            .SetAlignMode(AlignMode.Right)
            .SetAlignChar(' ');

            descriptor.AddField("Function")
            .SetLength(3)
            .SetAlignMode(AlignMode.Right)
            .SetAlignChar('0');

            descriptor.AddField("ArraySize")
            .SetLength(4)
            .SetAlignMode(AlignMode.Left)
            .SetAlignChar('0')
            .SetConverter(typeof(IntegerConverter));

            var arrayDescriptor = descriptor.AddArray("ArrayData")
                                  .SetArrayLength(500)
                                  .SetArrayItemLength(10)
                                  .SetAlign(true)
                                  .SetAlignChar('0');

            arrayDescriptor.AddField("DealId")
            .SetLength(10)
            .SetNullValue(string.Empty)
            .SetAlignMode(AlignMode.Right)
            .SetAlignChar('0');



            ExpandoObject item = new ExpandoObject();

            item.TryAdd("Function", "001");
            item.TryAdd("ArraySize", 25);

            List <ExpandoObject> arrayData = new List <ExpandoObject>();

            for (int i = 0; i < 25; i++)
            {
                ExpandoObject arrayItem = new ExpandoObject();
                arrayItem.TryAdd("DealId", "STOCKASC" + i.ToString().PadLeft(2, '0'));
                arrayData.Add(arrayItem);
            }

            item.TryAdd("ArrayData", arrayData);

            var engine = new FluentFixedEngine(new List <RecordItem>
            {
                new RecordItem
                {
                    Descriptor         = clientDescriptor,
                    Name               = "Client",
                    RegexPattern       = "^(CLI)",
                    RecordTypeProperty = "RecordType"
                },
                new RecordItem
                {
                    Descriptor         = descriptor,
                    Name               = "Test",
                    RegexPattern       = "^(TST)",
                    RecordTypeProperty = "RecordType"
                }
            });

            string content =
                "TST0010025STOCKASC00STOCKASC01STOCKASC02STOCKASC03STOCKASC04STOCKASC05STOCKASC06STOCKASC07STOCKASC08STOCKASC09STOCKASC10STOCKASC11STOCKASC12STOCKASC13STOCKASC14STOCKASC15STOCKASC16STOCKASC17STOCKASC18STOCKASC19STOCKASC20STOCKASC21STOCKASC22STOCKASC23STOCKASC240000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" +
                Environment.NewLine + "CLIHarlen Naves                                      0000587065966319840330" + Environment.NewLine;

            var records = engine.ReadString(content);

            var output = engine.WriteString(records);

            Assert.AreEqual(content, output);
        }