Azavea.NijPredictivePolicing.Test.Common.Data.FixedWidthColumnFileTests.FixedWidthInputTest C# (CSharp) 메소드

FixedWidthInputTest() 개인적인 메소드

private FixedWidthInputTest ( ) : void
리턴 void
        public void FixedWidthInputTest()
        {
            #region Setup

            FixedWidthColumnReader reader = new FixedWidthColumnReader();
            string filename = Path.Combine(InputDirectory, InputFile);
            reader.LoadFile(filename);

            var expectedStrings = new List<string[]>();
            var expectedObjects = new List<object[]>();
            var fields = new List<List<FixedWidthField>>();
            List<FixedWidthField> row;
            FixedWidthField temp, template;

            /***********************************************************************************
             * First row tests Seeker = FROM_START, Terminator = LENGTH, types int and float
             * Data = "this is some text25      13373.133712/20/18342:32 PM12 November 1978 15:38:24"
             ***********************************************************************************/
            expectedStrings.Add(new string[] {
                "this is some text25      ",
                "1337",
                "3.1337",
                "12/20/1834",
                "2:32 PM",
                "12 November 1978 15:38:24"
                });

            expectedObjects.Add(new object[] {
                "this is some text25      ",
                (int)1337,
                (float)3.1337,
                DateTime.Parse("12/20/1834"),
                DateTime.Parse("2:32 PM"),
                DateTime.Parse("12 November 1978 15:38:24")
                });

            row = new List<FixedWidthField>();
            template = temp = new FixedWidthField(0, 25, FixedWidthTypes.STRING, FixedWidthPositions.FROM_START, FixedWidthTerminators.LENGTH);
            row.Add(temp);

            temp = new FixedWidthField(template);
            temp.Start = 25;
            temp.End = 4;
            temp.Type = FixedWidthTypes.INT;
            row.Add(temp);

            temp = new FixedWidthField(template);
            temp.Start = 29;
            temp.End = 6;
            temp.Type = FixedWidthTypes.FLOAT;
            row.Add(temp);

            temp = new FixedWidthField(template);
            temp.Start = 35;
            temp.End = 10;
            temp.Type = FixedWidthTypes.DATETIME;
            row.Add(temp);

            temp = new FixedWidthField(template);
            temp.Start = 45;
            temp.End = 7;
            temp.Type = FixedWidthTypes.DATETIME;
            row.Add(temp);

            temp = new FixedWidthField(template);
            temp.Start = 52;
            temp.End = 25;
            temp.Type = FixedWidthTypes.DATETIME;
            row.Add(temp);

            fields.Add(row);
            row = new List<FixedWidthField>();

            /****************************************************************************************/

            /***********************************************************************************
             * Second row tests Seeker = FROM_CURRENT, otherwise same as first
             * Data = "this is some text25      13373.133712/20/18342:32 PM12 November 1978 15:38:24"
             **********************************************************************************/
            expectedStrings.Add(expectedStrings[0]);
            expectedObjects.Add(expectedObjects[0]);

            foreach (FixedWidthField f in fields[0])
            {
                temp = new FixedWidthField(f);
                temp.Seeker = FixedWidthPositions.FROM_CURRENT;
                temp.Start = 0;
                row.Add(temp);
            }

            fields.Add(row);
            row = new List<FixedWidthField>();

            /****************************************************************************************/

            /***********************************************************************************
             * Third row tests Seeker = FROM_START, Terminator = INDEX, types long and double
             * Data = "this is some text25      13373.133712/20/18342:32 PM12 November 1978 15:38:24"
             **********************************************************************************/
            expectedStrings.Add(expectedStrings[0]);

            expectedObjects.Add(new object[] {
                "this is some text25      ",
                (long)1337,
                (double)3.1337,
                DateTime.Parse("12/20/1834"),
                DateTime.Parse("2:32 PM"),
                DateTime.Parse("12 November 1978 15:38:24")
                });

            foreach (FixedWidthField f in fields[0])
            {
                temp = new FixedWidthField(f);
                temp.Terminator = FixedWidthTerminators.INDEX;

               //Used to be start index and length, converting to start index and end index
                temp.End = temp.Start + temp.End;
                if (temp.Type == FixedWidthTypes.FLOAT) temp.Type = FixedWidthTypes.DOUBLE;
                if (temp.Type == FixedWidthTypes.INT) temp.Type = FixedWidthTypes.LONG;
                row.Add(temp);
            }

            fields.Add(row);
            row = new List<FixedWidthField>();

            /****************************************************************************************/

            /***********************************************************************************
             * Fourth row tests Seeker = FROM_END, Terminator = NEWLINE, and overlapping records
             * Data = "0123456789"
             **********************************************************************************/

            expectedStrings.Add(new string[] { "34", "0123456789" });
            expectedObjects.Add(expectedStrings[expectedStrings.Count - 1] as object[]);

            row.Add(new FixedWidthField(7, 2, FixedWidthTypes.STRING, FixedWidthPositions.FROM_END, FixedWidthTerminators.LENGTH));
            row.Add(new FixedWidthField(0, 43847283, FixedWidthTypes.STRING, FixedWidthPositions.FROM_START, FixedWidthTerminators.NEWLINE));

            fields.Add(row);
            row = null;

            /****************************************************************************************/

            #endregion Setup

            Assert.AreEqual(expectedObjects.Count, expectedStrings.Count);
            Assert.AreEqual(expectedObjects.Count, fields.Count);

            //eString and eObject refer to the same object!
            var eObject = (reader as IEnumerable).GetEnumerator();
            var eString = eObject as IEnumerator<List<string>>;

            int count = expectedObjects.Count;

            for (int i = 0; i < count; i++)
            {
                if (!eString.MoveNext())
                {
                    Assert.Fail("Ran out of lines in input file {0}", InputFile);
                }
                reader.Columns = fields[i];
                List<string> myRowStrings = eString.Current;
                List<object> myRowObjects = eObject.Current as List<object>;

                //Make sure same number of elements for current row in myRowStrings, myRowObjects,
                //expectedObjects[i], expectedStrings[i], and fields[i]
                Assert.AreEqual(myRowStrings.Count, myRowObjects.Count);
                Assert.AreEqual(myRowObjects.Count, expectedObjects[i].Count());
                Assert.AreEqual(expectedObjects[i].Count(), expectedStrings[i].Count());
                Assert.AreEqual(expectedStrings[i].Count(), fields[i].Count());

                int fieldCount = myRowStrings.Count;
                for (int j = 0; j < fieldCount; j++)
                {
                    Assert.AreEqual(expectedObjects[i][j], myRowObjects[j]);
                    Assert.AreEqual(expectedStrings[i][j], myRowStrings[j]);
                }
            }
        }
FixedWidthColumnFileTests