public void TestDataTableLoadsReader()
        {
            using (var stream = new MemoryStream())
                using (var writer = new StreamWriter(stream))
                    using (var reader = new StreamReader(stream))
                        using (var dtReader = new DelimitedTextReader(reader))
                        {
                            writer.Write(headerLine);
                            writer.Write(dataLine1);
                            writer.Write(dataLine1.Replace("Son of a beach!", "Son of a gun!"));
                            writer.Write(dataLine1.Replace("Son of a beach!", "Monkey's Uncle!"));
                            writer.Flush();
                            stream.Position = 0;

                            using (var dataReader = new DelimitedTextDataReader(dtReader))
                            {
                                Assert.NotNull(dataReader);
                                Assert.False(dataReader.IsClosed);

                                DataTable dt = new DataTable();
                                dt.Load(dataReader);
                                Assert.Equal(3, dt.Rows.Count);
                                Assert.Equal("Son of a beach!", dt.Rows[0]["StringField"]);
                                Assert.Equal("Son of a gun!", dt.Rows[1]["StringField"]);
                                Assert.Equal("Monkey's Uncle!", dt.Rows[2]["StringField"]);
                            }
                        }
        }
        public void TestReaderRead()
        {
            using (var stream = new MemoryStream())
                using (var writer = new StreamWriter(stream))
                    using (var reader = new StreamReader(stream))
                        using (var dtReader = new DelimitedTextReader(reader))
                        {
                            writer.Write(headerLine);
                            writer.Write(dataLine1);
                            writer.Write(dataLine1.Replace("Son of a beach!", "Son of a gun!"));
                            writer.Write(dataLine1.Replace("Son of a beach!", "Monkey's Uncle!"));
                            writer.Flush();
                            stream.Position = 0;

                            using (var dataReader = new DelimitedTextDataReader(dtReader))
                            {
                                Assert.NotNull(dataReader);
                                Assert.False(dataReader.IsClosed);
                                Assert.True(dataReader.Read(), "1st read failed");
                                Assert.Equal("Son of a beach!", dataReader["StringField"]);
                                Assert.True(dataReader.Read(), "2nd read failed");
                                Assert.Equal("Son of a gun!", dataReader["StringField"]);
                                Assert.True(dataReader.Read(), "3rd read failed");
                                Assert.Equal("Monkey's Uncle!", dataReader["StringField"]);
                                Assert.False(dataReader.Read(), "last read failed");
                            }
                        }
        }
        public void TestReaderGetRecordShouldSkipRecord()
        {
            using (var stream = new MemoryStream())
                using (var writer = new StreamWriter(stream))
                    using (var reader = new StreamReader(stream))
                        using (var dtReader = new DelimitedTextReader(reader))
                        {
                            writer.Write("HDR,AAAA11111XXX000-FFF\r]n");
                            writer.Write("Field1,Field2,Field3,Field4,Field5\r\n");
                            writer.Write("value1,100,true,\"12/31/2016\", 25.76\r\n");
                            writer.Flush();
                            stream.Position = 0;

                            dtReader.FirstRowIsHeader = true;
                            dtReader.ShouldSkipRecord = (row => row[0] == "HDR" || row[0] == "TRL");
                            dtReader.Read();
                            TestRecord trecord = dtReader.GetRecord <TestRecord>();
                            Assert.NotNull(trecord);
                            Assert.Equal("value1", trecord.Field1);
                            Assert.Equal(100, trecord.Field2);
                            Assert.True(trecord.Field3);
                            Assert.Equal(DateTime.Parse("12/31/2016").ToShortDateString(), trecord.Field4.ToShortDateString());
                            Assert.Equal(25.76M, trecord.Field5);
                        }
        }
        public void TestGetRecordsGeneric()
        {
            using (var stream = new MemoryStream())
                using (var writer = new StreamWriter(stream))
                    using (var reader = new StreamReader(stream))
                        using (var dtReader = new DelimitedTextReader(reader))
                        {
                            writer.Write("Field1,Field2,Field3,Field4,Field5\r\n");
                            writer.Write("value1,100,true,\"12/31/2016\", 25.76\r\n");
                            writer.Write("value2,200,false,\"1/1/2016\", 67.52\r\n");
                            writer.Flush();
                            stream.Position = 0;

                            dtReader.FirstRowIsHeader = true;
                            var records = dtReader.GetAllRecords <TestRecord>().ToList();

                            Assert.Equal(2, records.Count);

                            TestRecord trecord = records[0];
                            Assert.NotNull(trecord);
                            Assert.Equal("value1", trecord.Field1);
                            Assert.Equal(100, trecord.Field2);
                            Assert.True(trecord.Field3);
                            Assert.Equal(DateTime.Parse("12/31/2016").ToShortDateString(), trecord.Field4.ToShortDateString());
                            Assert.Equal(25.76M, trecord.Field5);

                            trecord = records[1];
                            Assert.NotNull(trecord);
                            Assert.Equal("value2", trecord.Field1);
                            Assert.Equal(200, trecord.Field2);
                            Assert.False(trecord.Field3);
                            Assert.Equal(DateTime.Parse("1/1/2016").ToShortDateString(), trecord.Field4.ToShortDateString());
                            Assert.Equal(67.52M, trecord.Field5);
                        }
        }
        public void TestReaderMapPropertiesWithFunkyDate()
        {
            using (var stream = new MemoryStream())
                using (var writer = new StreamWriter(stream))
                    using (var reader = new StreamReader(stream))
                        using (var dtReader = new DelimitedTextReader(reader))
                        {
                            writer.Write("Field1,Field2,Field3,Field4,Field5\r\n");
                            writer.Write("value1,100,true,\"20161231\", 25.76\r\n");
                            writer.Flush();
                            stream.Position = 0;

                            dtReader.FirstRowIsHeader = true;
                            dtReader.MapProperty <TestRecord>(m => m.Field1).ColumnIndex(0);
                            dtReader.MapProperty <TestRecord>(m => m.Field2).ColumnIndex(1);
                            dtReader.MapProperty <TestRecord>(m => m.Field3).ColumnIndex(2);
                            dtReader.MapProperty <TestRecord>(m => m.Field4).ColumnIndex(3).TypeConverter(new DateTimeConverter()
                            {
                                Format = "yyyyMMdd"
                            });
                            dtReader.MapProperty <TestRecord>(m => m.Field5).ColumnIndex(4);
                            dtReader.Read();
                            TestRecord trecord = dtReader.GetRecord <TestRecord>();
                            Assert.NotNull(trecord);
                            Assert.Equal("value1", trecord.Field1);
                            Assert.Equal(100, trecord.Field2);
                            Assert.True(trecord.Field3);
                            Assert.Equal(DateTime.Parse("12/31/2016").ToShortDateString(), trecord.Field4.ToShortDateString());
                            Assert.Equal(25.76M, trecord.Field5);
                        }
        }
        public void TestReaderMapPropertiesByName()
        {
            using (var stream = new MemoryStream())
                using (var writer = new StreamWriter(stream))
                    using (var reader = new StreamReader(stream))
                        using (var dtReader = new DelimitedTextReader(reader, '|'))
                        {
                            writer.Write("X1|X2|X3|X4|X5\r\n");
                            writer.Write("value1|100|true|\"12/31/2016\"| 25.76\r\n");
                            writer.Flush();
                            stream.Position = 0;

                            dtReader.FirstRowIsHeader = true;
                            dtReader.MapProperty <TestRecord>(m => m.Field1).ColumnName("X1");
                            dtReader.MapProperty <TestRecord>(m => m.Field4).ColumnName("X4");
                            dtReader.MapProperty <TestRecord>(m => m.Field2).ColumnName("X2");
                            dtReader.MapProperty <TestRecord>(m => m.Field5).ColumnName("X5");
                            dtReader.MapProperty <TestRecord>(m => m.Field3).ColumnName("X3");
                            dtReader.Read();
                            TestRecord trecord = dtReader.GetRecord <TestRecord>();
                            Assert.NotNull(trecord);
                            Assert.Equal("value1", trecord.Field1);
                            Assert.Equal(100, trecord.Field2);
                            Assert.True(trecord.Field3);
                            Assert.Equal(DateTime.Parse("12/31/2016").ToShortDateString(), trecord.Field4.ToShortDateString());
                            Assert.Equal(25.76M, trecord.Field5);
                        }
        }
        public void TestReaderGetRecordCustomFieldsDefaultValues()
        {
            using (var stream = new MemoryStream())
                using (var writer = new StreamWriter(stream))
                    using (var reader = new StreamReader(stream))
                        using (var dtReader = new DelimitedTextReader(reader))
                        {
                            writer.Write("Field1,Field2,Field3,Field4,Field5\r\n");
                            writer.Write("value1,100,true,\"12/31/2016\", 25.76\r\n");
                            writer.Flush();
                            stream.Position = 0;

                            dtReader.FirstRowIsHeader = false;
                            dtReader.ShouldSkipRecord = (row => row[0] == "Field1");
                            dtReader.AddColumn("F1");
                            dtReader.AddColumn("F2");
                            dtReader.AddColumn("F3");
                            dtReader.AddColumn("F4");
                            dtReader.AddColumn("F5");
                            dtReader.AddColumn("F6");
                            dtReader.AddColumn("F7", "defaultVal");

                            dtReader.Read();
                            TestRecord trecord = dtReader.GetRecord <TestRecord>();
                            Assert.NotNull(trecord);
                            Assert.Equal("value1", trecord.Field1);
                            Assert.Equal(100, trecord.Field2);
                            Assert.True(trecord.Field3);
                            Assert.Equal(DateTime.Parse("12/31/2016").ToShortDateString(), trecord.Field4.ToShortDateString());
                            Assert.Equal(25.76M, trecord.Field5);
                            Assert.Equal("", trecord.Field6);
                            Assert.Equal("defaultVal", trecord.Field7);
                            Assert.Equal("F1", dtReader.FieldHeaders[0]);
                        }
        }
        public void TestReaderMapPropertiesWitoutHeaderRow()
        {
            using (var stream = new MemoryStream())
                using (var writer = new StreamWriter(stream))
                    using (var reader = new StreamReader(stream))
                        using (var dtReader = new DelimitedTextReader(reader, '|'))
                        {
                            writer.Write("value1|100|true|\"12/31/2016\"| 25.76\r\n");
                            writer.Flush();
                            stream.Position = 0;

                            dtReader.FirstRowIsHeader = false;
                            dtReader.MapProperty <TestRecord>(m => m.Field1).MappedColumnIndex = 0;
                            dtReader.MapProperty <TestRecord>(m => m.Field4).MappedColumnIndex = 3;
                            dtReader.MapProperty <TestRecord>(m => m.Field2).MappedColumnIndex = 1;
                            dtReader.MapProperty <TestRecord>(m => m.Field5).MappedColumnIndex = 4;
                            dtReader.MapProperty <TestRecord>(m => m.Field3).MappedColumnIndex = 2;
                            dtReader.Read();
                            TestRecord trecord = dtReader.GetRecord <TestRecord>();
                            Assert.NotNull(trecord);
                            Assert.Equal("value1", trecord.Field1);
                            Assert.Equal(100, trecord.Field2);
                            Assert.True(trecord.Field3);
                            Assert.Equal(DateTime.Parse("12/31/2016").ToShortDateString(), trecord.Field4.ToShortDateString());
                            Assert.Equal(25.76M, trecord.Field5);
                        }
        }
        protected override object CoreGetAlternativeValueFromId(DictionaryConfiguration dictionaryConfiguration, IMetaColumn metaColumn, object surrogateId)
        {
            object value;
            int    index;

            HeaderSpec[] headerSpecs;
            IEnumerable <IDictionary <string, object> > records;

            if ((object)dictionaryConfiguration == null)
            {
                throw new ArgumentNullException("dictionaryConfiguration");
            }

            if ((object)metaColumn == null)
            {
                throw new ArgumentNullException("metaColumn");
            }

            if ((object)surrogateId == null)
            {
                throw new ArgumentNullException("surrogateId");
            }

            if ((object)this.AdapterConfiguration.AdapterSpecificConfiguration.DelimitedTextSpec == null)
            {
                throw new InvalidOperationException(string.Format("Configuration missing: '{0}'.", "DelimitedTextSpec"));
            }

            if (DataTypeFascade.Instance.IsNullOrWhiteSpace(this.AdapterConfiguration.AdapterSpecificConfiguration.DelimitedTextFilePath))
            {
                throw new InvalidOperationException(string.Format("Configuration missing: '{0}'.", "DelimitedTextFilePath"));
            }

            using (RecordTextReader delimitedTextReader = new DelimitedTextReader(new StreamReader(File.Open(this.AdapterConfiguration.AdapterSpecificConfiguration.DelimitedTextFilePath, FileMode.Open, FileAccess.Read, FileShare.None)), this.AdapterConfiguration.AdapterSpecificConfiguration.DelimitedTextSpec))
            {
                index = surrogateId.ChangeType <int>() - 1;

                headerSpecs = delimitedTextReader.ReadHeaderSpecs().ToArray();
                records     = delimitedTextReader.ReadRecords();

                var record = records.ElementAtOrDefault(index);

                if ((object)record == null)
                {
                    value = null;
                }
                else
                {
                    value = record[headerSpecs[index].HeaderName];
                }
            }

            return(value);
        }
        protected override void CorePreloadCache(DictionaryConfiguration dictionaryConfiguration, IDictionary <string, IDictionary <long, object> > substitutionCacheRoot)
        {
            HeaderSpec[] headerSpecs;
            IEnumerable <IDictionary <string, object> > records;
            IDictionary <long, object> dictionaryCache;

            if ((object)dictionaryConfiguration == null)
            {
                throw new ArgumentNullException("dictionaryConfiguration");
            }

            if ((object)substitutionCacheRoot == null)
            {
                throw new ArgumentNullException("substitutionCacheRoot");
            }

            if ((object)this.AdapterConfiguration.AdapterSpecificConfiguration.DelimitedTextSpec == null)
            {
                throw new InvalidOperationException(string.Format("Configuration missing: '{0}'.", "DelimitedTextSpec"));
            }

            if (DataTypeFascade.Instance.IsNullOrWhiteSpace(this.AdapterConfiguration.AdapterSpecificConfiguration.DelimitedTextFilePath))
            {
                throw new InvalidOperationException(string.Format("Configuration missing: '{0}'.", "DelimitedTextFilePath"));
            }

            using (RecordTextReader delimitedTextReader = new DelimitedTextReader(new StreamReader(File.Open(this.AdapterConfiguration.AdapterSpecificConfiguration.DelimitedTextFilePath, FileMode.Open, FileAccess.Read, FileShare.None)), this.AdapterConfiguration.AdapterSpecificConfiguration.DelimitedTextSpec))
            {
                dictionaryCache = new Dictionary <long, object>();

                headerSpecs = delimitedTextReader.ReadHeaderSpecs().ToArray();
                records     = delimitedTextReader.ReadRecords();

                foreach (IDictionary <string, object> record in records)
                {
                    object[] values = record.Values.ToArray();
                    long     id     = values[0].ChangeType <long>();
                    object   value  = values[1].ChangeType <string>();

                    dictionaryCache.Add(id, value);
                }

                substitutionCacheRoot.Add(dictionaryConfiguration.DictionaryId, dictionaryCache);
            }
        }
        public void TestFieldCount()
        {
            using (var stream = new MemoryStream())
                using (var writer = new StreamWriter(stream))
                    using (var reader = new StreamReader(stream))
                        using (var dtReader = new DelimitedTextReader(reader))
                        {
                            writer.Write(headerLine);
                            writer.Write(dataLine1);
                            writer.Flush();
                            stream.Position = 0;

                            using (var dataReader = new DelimitedTextDataReader(dtReader))
                            {
                                dataReader.Read();
                                Assert.Equal(15, dataReader.FieldCount);
                            }
                        }
        }
        public void TestReaderCreation()
        {
            using (var stream = new MemoryStream())
                using (var writer = new StreamWriter(stream))
                    using (var reader = new StreamReader(stream))
                        using (var dtReader = new DelimitedTextReader(reader))
                        {
                            writer.Write(headerLine);
                            writer.Write(dataLine1);
                            writer.Flush();
                            stream.Position = 0;

                            using (var dataReader = new DelimitedTextDataReader(dtReader))
                            {
                                Assert.NotNull(dataReader);
                                Assert.False(dataReader.IsClosed);
                            }
                        }
        }
        public void TestGetBoolean()
        {
            using (var stream = new MemoryStream())
                using (var writer = new StreamWriter(stream))
                    using (var reader = new StreamReader(stream))
                        using (var dtReader = new DelimitedTextReader(reader))
                        {
                            writer.Write(headerLine);
                            writer.Write(dataLine1);
                            writer.Flush();
                            stream.Position = 0;

                            using (var dataReader = new DelimitedTextDataReader(dtReader))
                            {
                                dataReader.Read();
                                Assert.True(dataReader.GetBoolean(0), "Boolean value should be true.");
                            }
                        }
        }
        public void TestGetString()
        {
            using (var stream = new MemoryStream())
                using (var writer = new StreamWriter(stream))
                    using (var reader = new StreamReader(stream))
                        using (var dtReader = new DelimitedTextReader(reader))
                        {
                            writer.Write(headerLine);
                            writer.Write(dataLine1);
                            writer.Flush();
                            stream.Position = 0;

                            using (var dataReader = new DelimitedTextDataReader(dtReader))
                            {
                                dataReader.Read();
                                Assert.Equal("Son of a beach!", dataReader.GetString(11));
                            }
                        }
        }
        public void TestIsDbNull()
        {
            using (var stream = new MemoryStream())
                using (var writer = new StreamWriter(stream))
                    using (var reader = new StreamReader(stream))
                        using (var dtReader = new DelimitedTextReader(reader))
                        {
                            writer.Write(headerLine);
                            writer.Write(dataLine1);
                            writer.Flush();
                            stream.Position = 0;

                            using (var dataReader = new DelimitedTextDataReader(dtReader))
                            {
                                dataReader.Read();
                                Assert.True(dataReader.IsDBNull(12));
                                Assert.True(dataReader.IsDBNull(13));
                            }
                        }
        }
        public void TestReaderGetRecordPropertiesOutnumberFields()
        {
            using (var stream = new MemoryStream())
                using (var writer = new StreamWriter(stream))
                    using (var reader = new StreamReader(stream))
                        using (var dtReader = new DelimitedTextReader(reader))
                        {
                            writer.Write("Field1,Field2\r\n");
                            writer.Write("value1,100\r\n");
                            writer.Flush();
                            stream.Position = 0;

                            dtReader.FirstRowIsHeader = true;
                            dtReader.Read();
                            TestRecord trecord = dtReader.GetRecord <TestRecord>();
                            Assert.NotNull(trecord);
                            Assert.Equal("value1", trecord.Field1);
                            Assert.Equal(100, trecord.Field2);
                        }
        }
        public void TestReaderGetRecordWithoutFieldHeadersOrPropertyMappingsNestedObject()
        {
            using (var stream = new MemoryStream())
                using (var writer = new StreamWriter(stream))
                    using (var reader = new StreamReader(stream))
                        using (var dtReader = new DelimitedTextReader(reader))
                        {
                            writer.Write("value1,100,true,\"12/31/2016\", 25.76\r\n");
                            writer.Flush();
                            stream.Position = 0;

                            dtReader.FirstRowIsHeader = false;
                            dtReader.Read();
                            TestRecordData trecord = dtReader.GetRecord <TestRecordData>();
                            Assert.NotNull(trecord);
                            Assert.Equal("value1", trecord.Data1);
                            Assert.Equal(100, trecord.Data2);
                            Assert.True(trecord.Data4);
                        }
        }
        public void TestIsClosed()
        {
            using (var stream = new MemoryStream())
                using (var writer = new StreamWriter(stream))
                    using (var reader = new StreamReader(stream))
                        using (var dtReader = new DelimitedTextReader(reader))
                        {
                            writer.Write(headerLine);
                            writer.Write(dataLine1);
                            writer.Flush();
                            stream.Position = 0;

                            using (var dataReader = new DelimitedTextDataReader(dtReader))
                            {
                                dataReader.Read();
                                Assert.False(dataReader.IsClosed, "data reader should not be closed yet.");
                                dataReader.Read();
                                Assert.True(dataReader.IsClosed, "data reader should be closed but is not.");
                            }
                        }
        }
        public void TestGetByte()
        {
            byte b = Byte.Parse("255");

            using (var stream = new MemoryStream())
                using (var writer = new StreamWriter(stream))
                    using (var reader = new StreamReader(stream))
                        using (var dtReader = new DelimitedTextReader(reader))
                        {
                            writer.Write(headerLine);
                            writer.Write(dataLine1);
                            writer.Flush();
                            stream.Position = 0;

                            using (var dataReader = new DelimitedTextDataReader(dtReader))
                            {
                                dataReader.Read();
                                Assert.Equal(b, dataReader.GetByte(1));
                            }
                        }
        }
        public void TestGetDateTime()
        {
            var datetime = DateTime.Parse("01/01/2016");

            using (var stream = new MemoryStream())
                using (var writer = new StreamWriter(stream))
                    using (var reader = new StreamReader(stream))
                        using (var dtReader = new DelimitedTextReader(reader))
                        {
                            writer.Write(headerLine);
                            writer.Write(dataLine1);
                            writer.Flush();
                            stream.Position = 0;

                            using (var dataReader = new DelimitedTextDataReader(dtReader))
                            {
                                dataReader.Read();
                                Assert.Equal(datetime, dataReader.GetDateTime(3));
                            }
                        }
        }
        public void TestGetDecimal()
        {
            decimal dec = 123.4567M;

            using (var stream = new MemoryStream())
                using (var writer = new StreamWriter(stream))
                    using (var reader = new StreamReader(stream))
                        using (var dtReader = new DelimitedTextReader(reader))
                        {
                            writer.Write(headerLine);
                            writer.Write(dataLine1);
                            writer.Flush();
                            stream.Position = 0;

                            using (var dataReader = new DelimitedTextDataReader(dtReader))
                            {
                                dataReader.Read();
                                Assert.Equal(dec, dataReader.GetDecimal(4));
                            }
                        }
        }
        public void TestGetDouble()
        {
            double dbl = 890.12D;

            using (var stream = new MemoryStream())
                using (var writer = new StreamWriter(stream))
                    using (var reader = new StreamReader(stream))
                        using (var dtReader = new DelimitedTextReader(reader))
                        {
                            writer.Write(headerLine);
                            writer.Write(dataLine1);
                            writer.Flush();
                            stream.Position = 0;

                            using (var dataReader = new DelimitedTextDataReader(dtReader))
                            {
                                dataReader.Read();
                                Assert.Equal(dbl, dataReader.GetDouble(5));
                            }
                        }
        }
        public void TestGetFloat()
        {
            float flt = 34.56F;

            using (var stream = new MemoryStream())
                using (var writer = new StreamWriter(stream))
                    using (var reader = new StreamReader(stream))
                        using (var dtReader = new DelimitedTextReader(reader))
                        {
                            writer.Write(headerLine);
                            writer.Write(dataLine1);
                            writer.Flush();
                            stream.Position = 0;

                            using (var dataReader = new DelimitedTextDataReader(dtReader))
                            {
                                dataReader.Read();
                                Assert.Equal(flt, dataReader.GetFloat(6));
                            }
                        }
        }
        public void TestReaderGetField()
        {
            using (var stream = new MemoryStream())
                using (var writer = new StreamWriter(stream))
                    using (var reader = new StreamReader(stream))
                        using (var dtReader = new DelimitedTextReader(reader))
                        {
                            writer.Write("Field1,Field2,Field3,Field4,Field5\r\n");
                            writer.Write("value1,100,true,\"12/31/2016\", 25.76\r\n");
                            writer.Flush();
                            stream.Position = 0;

                            dtReader.FirstRowIsHeader = true;
                            dtReader.Read();
                            Assert.Equal("value1", dtReader.GetField <string>(0));
                            Assert.Equal(100, dtReader.GetField <int>(1));
                            Assert.True(dtReader.GetField <bool>(2));
                            Assert.Equal(DateTime.Parse("12/31/2016").ToShortDateString(), dtReader.GetField <DateTime>(3).ToShortDateString());
                            Assert.Equal(25.76M, dtReader.GetField <decimal>(4));
                        }
        }
        public void TestGetGuid()
        {
            Guid guid = Guid.Parse("3E11803C-AB25-454C-953E-D940E4FCF655");

            using (var stream = new MemoryStream())
                using (var writer = new StreamWriter(stream))
                    using (var reader = new StreamReader(stream))
                        using (var dtReader = new DelimitedTextReader(reader))
                        {
                            writer.Write(headerLine);
                            writer.Write(dataLine1);
                            writer.Flush();
                            stream.Position = 0;

                            using (var dataReader = new DelimitedTextDataReader(dtReader))
                            {
                                dataReader.Read();
                                Assert.Equal(guid, dataReader.GetGuid(7));
                            }
                        }
        }
        public void TestGetInt64()
        {
            Int64 integer64 = Int64.MaxValue;

            using (var stream = new MemoryStream())
                using (var writer = new StreamWriter(stream))
                    using (var reader = new StreamReader(stream))
                        using (var dtReader = new DelimitedTextReader(reader))
                        {
                            writer.Write(headerLine);
                            writer.Write(dataLine1);
                            writer.Flush();
                            stream.Position = 0;

                            using (var dataReader = new DelimitedTextDataReader(dtReader))
                            {
                                dataReader.Read();
                                Assert.Equal(integer64, dataReader.GetInt64(10));
                            }
                        }
        }
        public void TestGetSchemaTableNotRead()
        {
            using (var stream = new MemoryStream())
                using (var writer = new StreamWriter(stream))
                    using (var reader = new StreamReader(stream))
                        using (var dtReader = new DelimitedTextReader(reader))
                        {
                            writer.Write(headerLine);
                            writer.Write(dataLine1);
                            writer.Flush();
                            stream.Position = 0;

                            using (var dataReader = new DelimitedTextDataReader(dtReader))
                            {
                                DataTable dt = dataReader.GetSchemaTable();
                                Assert.NotNull(dt);
                                Assert.Equal(15, dt.Rows.Count);
                                Assert.Equal("StringField", dt.Rows[11][0].ToString());
                            }
                        }
        }
        public void TestReaderDispose()
        {
            using (var stream = new MemoryStream())
                using (var writer = new StreamWriter(stream))
                    using (var reader = new StreamReader(stream))
                    {
                        var dtReader = new DelimitedTextReader(reader);
                        writer.Write(headerLine);
                        writer.Write(dataLine1);
                        writer.Flush();
                        stream.Position = 0;

                        using (var dataReader = new DelimitedTextDataReader(dtReader))
                        {
                            dataReader.Read();
                            Assert.Equal("Son of a beach!", dataReader["StringField"]);
                        }

                        dtReader.Dispose();
                        Assert.Null(dtReader.Parser);
                    }
        }
        public void TestReaderGetRecordWithoutFieldHeadersOrPropertyMappings()
        {
            using (var stream = new MemoryStream())
                using (var writer = new StreamWriter(stream))
                    using (var reader = new StreamReader(stream))
                        using (var dtReader = new DelimitedTextReader(reader))
                        {
                            writer.Write("value1,100,true,\"12/31/2016\", 25.76\r\n");
                            writer.Flush();
                            stream.Position = 0;

                            dtReader.FirstRowIsHeader = false;
                            dtReader.Read();
                            TestRecord trecord = dtReader.GetRecord <TestRecord>();
                            Assert.NotNull(trecord);
                            Assert.Equal("value1", trecord.Field1);
                            Assert.Equal(100, trecord.Field2);
                            Assert.True(trecord.Field3);
                            Assert.Equal(DateTime.Parse("12/31/2016").ToShortDateString(), trecord.Field4.ToShortDateString());
                            Assert.Equal(25.76M, trecord.Field5);
                        }
        }
        public void GetRecordCaseInsensitiveTest()
        {
            using (var stream = new MemoryStream())
                using (var writer = new StreamWriter(stream))
                    using (var reader = new StreamReader(stream))
                        using (var dtReader = new DelimitedTextReader(reader))
                        {
                            writer.Write("field1,field2,Field3,Field4,Field5\r\n");
                            writer.Write("value1,100,true,\"12/31/2016\", 25.76\r\n");
                            writer.Flush();
                            stream.Position = 0;

                            dtReader.FirstRowIsHeader = true;
                            dtReader.Read();
                            TestRecord trecord = dtReader.GetRecord <TestRecord>();
                            Assert.NotNull(trecord);
                            Assert.Equal("value1", trecord.Field1);
                            Assert.Equal(100, trecord.Field2);
                            Assert.True(trecord.Field3);
                            Assert.Equal(DateTime.Parse("12/31/2016").ToShortDateString(), trecord.Field4.ToShortDateString());
                            Assert.Equal(25.76M, trecord.Field5);
                        }
        }