コード例 #1
0
        public void ReadTest()
        {
            var queue = new Queue <string[]>();

            queue.Enqueue(new[] { "Names" });
            queue.Enqueue(new[] { "one" });
            queue.Enqueue(null);
            var parserMock = new ParserMock(queue);
            var csv        = new CsvReader(parserMock);

            csv.Read();
            try
            {
                csv.GetRecord <Test>();
                Assert.Fail();
            }
            catch (CsvTypeConverterException)
            {
            }
        }
コード例 #2
0
        public void GetRecords_WithBooleanFalseValuesAttribute_HasHeader_CreatesRecords()
        {
            var rows = new Queue <string[]>(new List <string[]>
            {
                new [] { "id", "name" },
                new [] { "1", "NULL" },
                null
            });

            using (var parser = new ParserMock(rows))
                using (var csv = new CsvReader(parser))
                {
                    csv.Configuration.RegisterClassMap <FooMap>();
                    var records = csv.GetRecords <Foo>().ToList();

                    Assert.AreEqual(1, records.Count);
                    Assert.AreEqual(1, records[0].Id);
                    Assert.IsNull(records[0].Name);
                }
        }
コード例 #3
0
        public void GetRecords_WithBooleanFalseValuesAttribute_NoHeader_CreatesRecords()
        {
            var config = new CsvConfiguration(CultureInfo.InvariantCulture)
            {
                HasHeaderRecord = false,
            };
            var parser = new ParserMock(config)
            {
                { "1", "Bar" },
            };

            using (var csv = new CsvReader(parser))
            {
                var records = csv.GetRecords <Foo>().ToList();

                Assert.Single(records);
                Assert.Equal(1, records[0].Id);
                Assert.False(records[0].Boolean);
            }
        }
コード例 #4
0
        public void Read_NoHeader_HasParameterAttribute_Reads()
        {
            var config = new CsvConfiguration(CultureInfo.InvariantCulture)
            {
                HasHeaderRecord = false,
            };
            var parser = new ParserMock(config)
            {
                { "1", "one" }
            };

            using (var csv = new CsvReader(parser))
            {
                var records = csv.GetRecords <FooParameterAttribute>().ToList();

                Assert.Single(records);
                Assert.Equal(1, records[0].Id);
                Assert.Equal("one", records[0].Name);
            }
        }
コード例 #5
0
        public void GetRecords_WithDefaultAttributes_NoHeader_CreatesRecords()
        {
            var rows = new Queue <string[]>(new List <string[]>
            {
                new [] { "1", "" },
                null
            });

            using (var parser = new ParserMock(rows))
                using (var csv = new CsvReader(parser))
                {
                    csv.Configuration.HasHeaderRecord = false;

                    var records = csv.GetRecords <Foo>().ToList();

                    Assert.AreEqual(1, records.Count);
                    Assert.AreEqual(1, records[0].Id);
                    Assert.AreEqual("Bar", records[0].Name);
                }
        }
コード例 #6
0
        public void GetRecords_WithEnumIgnoreCaseAttributes_NoHeader_CreatesRecords()
        {
            var config = new CsvConfiguration(CultureInfo.InvariantCulture)
            {
                HasHeaderRecord = false,
            };
            var parser = new ParserMock(config)
            {
                { "1", "one" },
            };

            using (var csv = new CsvReader(parser))
            {
                var records = csv.GetRecords <Foo>().ToList();

                Assert.Single(records);
                Assert.Equal(1, records[0].Id);
                Assert.Equal(Bar.One, records[0].Bar);
            }
        }
コード例 #7
0
        public void GetRecords_WithParameterMap_HasHeader_CreatesRecords()
        {
            var rows = new Queue <string[]>(new List <string[]>
            {
                new [] { "id", "amount" },
                new [] { "1", $"({amount})" },
                null
            });

            using (var parser = new ParserMock(rows))
                using (var csv = new CsvReader(parser))
                {
                    var map     = csv.Configuration.RegisterClassMap <FooMap>();
                    var records = csv.GetRecords <Foo>().ToList();

                    Assert.AreEqual(1, records.Count);
                    Assert.AreEqual(1, records[0].Id);
                    Assert.AreEqual(-amount, records[0].Amount);
                }
        }
コード例 #8
0
        public void GetRecords_WithDefaultAttributes_NoHeader_CreatesRecords()
        {
            var config = new CsvConfiguration(CultureInfo.InvariantCulture)
            {
                HasHeaderRecord = false,
            };
            var parser = new ParserMock(config)
            {
                { "1", "" },
            };

            using (var csv = new CsvReader(parser))
            {
                var records = csv.GetRecords <Foo>().ToList();

                Assert.AreEqual(1, records.Count);
                Assert.AreEqual(1, records[0].Id);
                Assert.AreEqual("Bar", records[0].Name);
            }
        }
コード例 #9
0
ファイル: ConstantTests.cs プロジェクト: xiaobudian/CsvHelper
        public void ConstantIsNullTest()
        {
            var rows = new Queue <string[]>();

            rows.Enqueue(new[] { "Id", "Name" });
            rows.Enqueue(new[] { "1", "one" });
            rows.Enqueue(new[] { "2", "two" });
            rows.Enqueue(null);
            var parser = new ParserMock(rows);

            var csv = new CsvReader(parser);

            csv.Configuration.RegisterClassMap <TestNullMap>();
            var records = csv.GetRecords <Test>().ToList();

            Assert.AreEqual(1, records[0].Id);
            Assert.IsNull(records[0].Name);
            Assert.AreEqual(2, records[1].Id);
            Assert.IsNull(records[1].Name);
        }
コード例 #10
0
        public void TryGetFieldInvalidIndexTest()
        {
            var data1 = new[] { "One", "Two" };
            var data2 = new[] { "one", "two" };
            var queue = new Queue <string[]>();

            queue.Enqueue(data1);
            queue.Enqueue(data2);
            queue.Enqueue(null);
            var parserMock = new ParserMock(queue);

            var reader = new CsvReader(parserMock);

            reader.Read();

            var got = reader.TryGetField(0, out int field);

            Assert.IsFalse(got);
            Assert.AreEqual(default(int), field);
        }
コード例 #11
0
        public void GetRecords_WithCultureInfoAttributes_NoHeader_CreatesRecords()
        {
            var config = new CsvConfiguration(CultureInfo.InvariantCulture)
            {
                HasHeaderRecord = false,
            };
            var parser = new ParserMock(config)
            {
                { "1", $"({amount})" },
            };

            using (var csv = new CsvReader(parser))
            {
                var records = csv.GetRecords <Foo>().ToList();

                Assert.Single(records);
                Assert.Equal(1, records[0].Id);
                Assert.Equal(-amount, records[0].Amount);
            }
        }
コード例 #12
0
ファイル: TryGetTests.cs プロジェクト: studentutu/CsvHelper
        public void TryGetFieldStrictTest()
        {
            var parserMock = new ParserMock
            {
                new[] { "One", "Two" },
                new[] { "1", "2" },
                null
            };

            var reader = new CsvReader(parserMock);

            reader.Read();
            reader.ReadHeader();
            reader.Read();

            var got = reader.TryGetField("One", out int field);

            Assert.True(got);
            Assert.Equal(1, field);
        }
コード例 #13
0
        public void HasHeaderRecordTest()
        {
            var parserMock = new ParserMock
            {
                { "One", "Two" },
                { "1", "2" },
            };

            var reader = new CsvReader(parserMock);

            reader.Read();
            reader.ReadHeader();
            reader.Read();

            // Check to see if the header record and first record are set properly.
            Assert.Equal(Convert.ToInt32("1"), reader.GetField <int>("One"));
            Assert.Equal(Convert.ToInt32("2"), reader.GetField <int>("Two"));
            Assert.Equal(Convert.ToInt32("1"), reader.GetField <int>(0));
            Assert.Equal(Convert.ToInt32("2"), reader.GetField <int>(1));
        }
コード例 #14
0
        public void RowTest()
        {
            var config = new CsvConfiguration(CultureInfo.InvariantCulture)
            {
                HasHeaderRecord = false,
            };
            var parserMock = new ParserMock(config)
            {
                { "1", "one" },
                { "2", "two" },
            };

            var csv = new CsvReader(parserMock);

            csv.Read();
            Assert.Equal(1, csv.Parser.Row);

            csv.Read();
            Assert.Equal(2, csv.Parser.Row);
        }
コード例 #15
0
        public void GetMissingFieldByNameTest()
        {
            var config = new CsvConfiguration(CultureInfo.InvariantCulture)
            {
                MissingFieldFound = null,
            };
            var data1      = new[] { "One", "Two" };
            var data2      = new[] { "1", "2" };
            var parserMock = new ParserMock(config);

            parserMock.Add(data1);
            parserMock.Add(data2);

            var reader = new CsvReader(parserMock);

            reader.Read();
            reader.ReadHeader();

            Assert.Null(reader.GetField <string>("blah"));
        }
コード例 #16
0
        public void ShouldSkipWithEmptyRows()
        {
            var rows = new Queue <string[]>();

            rows.Enqueue(new[] { "First,Second" });
            rows.Enqueue(new[] { "skipme," });
            rows.Enqueue(new[] { "" });
            rows.Enqueue(new[] { "1", "2" });

            var parser = new ParserMock(rows);

            var csv = new CsvReader(parser);

            csv.Configuration.ShouldSkipRecord = row => row[0].StartsWith("skipme") || row.All(string.IsNullOrWhiteSpace);

            csv.Read();
            csv.Read();
            Assert.AreEqual("1", csv.GetField(0));
            Assert.AreEqual("2", csv.GetField(1));
        }
コード例 #17
0
        public void GetOrdinalMissingTest()
        {
            var parser = new ParserMock
            {
                { "Id", "Name" },
                { "1", "one" },
                null,
            };

            using (var csv = new CsvReader(parser))
            {
                using (var dr = new CsvDataReader(csv))
                {
                    Assert.ThrowsException <IndexOutOfRangeException>(() =>
                    {
                        dr.GetOrdinal("Foo");
                    });
                }
            }
        }
コード例 #18
0
        public void GetRecords_WithParameterMap_NoHeader_CreatesRecords()
        {
            var rows = new Queue <string[]>(new List <string[]>
            {
                new [] { "1", "one" },
                null
            });

            using (var parser = new ParserMock(rows))
                using (var csv = new CsvReader(parser))
                {
                    csv.Configuration.HasHeaderRecord = false;
                    csv.Configuration.RegisterClassMap <FooMap>();

                    var records = csv.GetRecords <Foo>().ToList();

                    Assert.AreEqual(1, records.Count);
                    Assert.AreEqual(1, records[0].Id);
                    Assert.AreEqual("one", records[0].Name);
                }
        }
コード例 #19
0
        public void OnlyFieldsTest()
        {
            var queue = new Queue <string[]>();

            queue.Enqueue(new[] { "Name" });
            queue.Enqueue(new[] { "name" });
            queue.Enqueue(null);

            var parserMock = new ParserMock(queue);

            var reader = new CsvReader(parserMock);

            try
            {
                // This needs a class map because auto mapping only works with properties.
                reader.Configuration.RegisterClassMap <OnlyFieldsMap>();
                reader.GetRecords <OnlyFields>().ToList();
                Assert.Fail();
            }
            catch (CsvConfigurationException) {}
        }
コード例 #20
0
        public void TryGetFieldTest()
        {
            var data1 = new[] { "One", "Two" };
            var data2 = new[] { "1", "2" };
            var queue = new Queue <string[]>();

            queue.Enqueue(data1);
            queue.Enqueue(data2);
            queue.Enqueue(null);
            var parserMock = new ParserMock(queue);

            var reader = new CsvReader(parserMock);

            reader.Read();

            int field;
            var got = reader.TryGetField(0, out field);

            Assert.IsTrue(got);
            Assert.AreEqual(1, field);
        }
コード例 #21
0
        public void TrimHeadersTest()
        {
            var config = new CsvConfiguration(CultureInfo.InvariantCulture)
            {
                MissingFieldFound     = null,
                PrepareHeaderForMatch = args => args.Header.Trim(),
            };
            var parserMock = new ParserMock(config)
            {
                { " one ", " two three " },
                { "1", "2" },
            };
            var reader = new CsvReader(parserMock);

            reader.Read();
            reader.ReadHeader();
            reader.Read();
            Assert.Equal("1", reader.GetField("one"));
            Assert.Equal("2", reader.GetField("two three"));
            Assert.Null(reader.GetField("twothree"));
        }
コード例 #22
0
        public void SkipEmptyRowTest()
        {
            var config = new CsvConfiguration(CultureInfo.InvariantCulture)
            {
                ShouldSkipRecord = args => args.Row.Parser.Record.All(string.IsNullOrWhiteSpace),
            };
            var parser = new ParserMock(config)
            {
                { "First,Second" },
                { " " },
                { "1", "2" },
            };

            var csv = new CsvReader(parser);

            csv.Read();
            csv.ReadHeader();
            csv.Read();
            Assert.Equal("1", csv.GetField(0));
            Assert.Equal("2", csv.GetField(1));
        }
コード例 #23
0
        public void GettingFieldHeadersFailsWhenHeaderNotReadTest()
        {
            var rows = new Queue <string[]>();

            rows.Enqueue(new[] { "Id", "Name" });
            rows.Enqueue(new[] { "1", "One" });
            rows.Enqueue(new[] { "2", "two" });
            rows.Enqueue(null);
            var parser = new ParserMock(rows);

            var csv = new CsvReader(parser);

            try
            {
                var x = csv.FieldHeaders;
                Assert.Fail();
            }
            catch (CsvReaderException)
            {
            }
        }
コード例 #24
0
        public void Read_NoHeader_HasNameMap_Reads()
        {
            var config = new CsvConfiguration(CultureInfo.InvariantCulture)
            {
                HasHeaderRecord = false,
            };
            var parser = new ParserMock(config)
            {
                { "1", "one" }
            };

            using (var csv = new CsvReader(parser))
            {
                csv.Context.RegisterClassMap <FooMap>();
                var records = csv.GetRecords <Foo>().ToList();

                Assert.Single(records);
                Assert.Equal(1, records[0].Id);
                Assert.Equal("one", records[0].Name);
            }
        }
コード例 #25
0
        public void ReadHeaderResetsNamedIndexesTest()
        {
            var parser = new ParserMock
            {
                { "Id", "Name" },
                { "Name", "Id" },
            };
            var csv = new CsvReader(parser);

            csv.Read();
            csv.ReadHeader();

            Assert.Equal(0, csv.GetFieldIndex("Id"));
            Assert.Equal(1, csv.GetFieldIndex("Name"));

            csv.Read();
            csv.ReadHeader();

            Assert.Equal(1, csv.GetFieldIndex("Id"));
            Assert.Equal(0, csv.GetFieldIndex("Name"));
        }
コード例 #26
0
        public void GetOrdinalCaseInsensitiveTest()
        {
            var data = new List <string[]>
            {
                new[] { "Id", "Name" },
                new[] { "1", "one" },
                null,
            };
            var queue  = new Queue <string[]>(data);
            var parser = new ParserMock(queue);

            using (var csv = new CsvReader(parser))
            {
                using (var dr = new CsvDataReader(csv))
                {
                    var ordinal = dr.GetOrdinal("name");

                    Assert.AreEqual(1, ordinal);
                }
            }
        }
コード例 #27
0
        public void HasHeaderRecordTest()
        {
            var data1 = new[] { "One", "Two" };
            var data2 = new[] { "1", "2" };
            var queue = new Queue <string[]>();

            queue.Enqueue(data1);
            queue.Enqueue(data2);

            var parserMock = new ParserMock(queue);

            var reader = new CsvReader(parserMock);

            reader.Read();

            // Check to see if the header record and first record are set properly.
            Assert.AreEqual(Convert.ToInt32(data2[0]), reader.GetField <int>("One"));
            Assert.AreEqual(Convert.ToInt32(data2[1]), reader.GetField <int>("Two"));
            Assert.AreEqual(Convert.ToInt32(data2[0]), reader.GetField <int>(0));
            Assert.AreEqual(Convert.ToInt32(data2[1]), reader.GetField <int>(1));
        }
コード例 #28
0
        public void TryGetFieldIndexTest()
        {
            var parserMock = new ParserMock
            {
                { "One", "Two", "Two" },
                { "1", "2", "3" }
            };
            var reader = new CsvReader(parserMock);

            reader.Read();

            int field;
            var got = reader.TryGetField("Two", 0, out field);

            Assert.IsTrue(got);
            Assert.AreEqual(2, field);

            got = reader.TryGetField("Two", 1, out field);
            Assert.IsTrue(got);
            Assert.AreEqual(3, field);
        }
コード例 #29
0
        public void GetRecords_WithParameterMap_NoHeader_FieldMissing_CreatesRecords()
        {
            var config = new CsvConfiguration(CultureInfo.InvariantCulture)
            {
                HasHeaderRecord = false,
            };
            var parser = new ParserMock(config)
            {
                { "1" },
            };

            using (var csv = new CsvReader(parser))
            {
                var map     = csv.Context.RegisterClassMap <FooMap>();
                var records = csv.GetRecords <Foo>().ToList();

                Assert.Single(records);
                Assert.Equal(1, records[0].Id);
                Assert.Equal("Bar", records[0].Name);
            }
        }
コード例 #30
0
        public void ClassMap_AddParametersByIndex_CreatesRecords()
        {
            var rows = new Queue <string[]>(new List <string[]>
            {
                new [] { "Id", "Name" },
                new [] { "1", "one" },
                null
            });

            using (var parser = new ParserMock(rows))
                using (var csv = new CsvReader(parser))
                {
                    csv.Configuration.RegisterClassMap <FooMapByIndex>();

                    var records = csv.GetRecords <Foo>().ToList();

                    Assert.AreEqual(1, records.Count);
                    Assert.AreEqual(1, records[0].Id);
                    Assert.AreEqual("one", records[0].Name);
                }
        }