summaryrefslogtreecommitdiff
path: root/ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/Configuration/ClassMapBuilderTests.cs
diff options
context:
space:
mode:
Diffstat (limited to 'ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/Configuration/ClassMapBuilderTests.cs')
-rw-r--r--ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/Configuration/ClassMapBuilderTests.cs335
1 files changed, 335 insertions, 0 deletions
diff --git a/ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/Configuration/ClassMapBuilderTests.cs b/ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/Configuration/ClassMapBuilderTests.cs
new file mode 100644
index 0000000..f1921ee
--- /dev/null
+++ b/ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/Configuration/ClassMapBuilderTests.cs
@@ -0,0 +1,335 @@
+// Copyright 2009-2022 Josh Close
+// This file is a part of CsvHelper and is dual licensed under MS-PL and Apache 2.0.
+// See LICENSE.txt for details or visit http://www.opensource.org/licenses/ms-pl.html for MS-PL and http://opensource.org/licenses/Apache-2.0 for Apache 2.0.
+// https://github.com/JoshClose/CsvHelper
+using System;
+using System.Linq;
+using System.Linq.Expressions;
+using CsvHelper.Configuration;
+using CsvHelper.TypeConversion;
+using Xunit;
+
+namespace CsvHelper.Tests.Configuration
+{
+
+ public class ClassMapBuilderTests
+ {
+ private static readonly Factory csvFactory = new Factory();
+ private static ConvertFromString<FakeInnerClass> ConvertExpression => args => new FakeInnerClass { E = args.Row.GetField(4) };
+ private static readonly ClassMap<FakeClass> map = csvFactory.CreateClassMapBuilder<FakeClass>()
+ /*
+ .Map( m => m.A ).Constant( "a" )
+ .Map( m => m.A ).ConvertUsing( row => row.GetField( 0 ) )
+ .Map( m => m.A ).Default( "a" )
+ .Map( m => m.A ).Index( 0 )
+ .Map( m => m.A ).Index( 0 ).Validate( field => true )
+ .Map( m => m.A ).Index( 0 ).Default( "a" )
+ .Map( m => m.A ).Index( 0 ).Default( "a" ).Validate( field => true )
+ .Map( m => m.A ).Index( 0 ).Name( "a" )
+ .Map( m => m.A ).Index( 0 ).Name( "a" ).Validate( field => true )
+ .Map( m => m.A ).Index( 0 ).TypeConverter<StringConverter>()
+ .Map( m => m.A ).Index( 0 ).TypeConverter<StringConverter>().Validate( field => true )
+ .Map( m => m.A ).Name( "a" )
+ .Map( m => m.A ).Name( "a" ).Validate( field => true )
+ .Map( m => m.A ).Name( "a" ).Default( "a" )
+ .Map( m => m.A ).Name( "a" ).Default( "a" ).Validate( field => true )
+ .Map( m => m.A ).Name( "a" ).NameIndex( 0 )
+ .Map( m => m.A ).Name( "a" ).NameIndex( 0 ).Validate( field => true )
+ .Map( m => m.A ).Name( "a" ).NameIndex( 0 ).Default( "a" )
+ .Map( m => m.A ).Name( "a" ).NameIndex( 0 ).Default( "a" ).Validate( field => true )
+ .Map( m => m.A ).Name( "a" ).NameIndex( 0 ).TypeConverter<StringConverter>()
+ .Map( m => m.A ).Name( "a" ).NameIndex( 0 ).TypeConverter<StringConverter>().Validate( field => true )
+ .Map( m => m.A ).Name( "a" ).TypeConverter<StringConverter>()
+ .Map( m => m.A ).Name( "a" ).TypeConverter<StringConverter>().Validate( field => true )
+ .Map( m => m.A ).TypeConverter<StringConverter>()
+ .Map( m => m.A ).TypeConverter<StringConverter>().Validate( field => true )
+ .Map( m => m.A ).TypeConverter<StringConverter>().Default( "a" )
+ .Map( m => m.A ).TypeConverter<StringConverter>().Default( "a" ).Validate( field => true )
+ */
+
+ .Map(m => m.A).Name("A1").NameIndex(2).Default("WEW")
+ .Map(m => m.B).Name("B2").Default(2)
+ .Map(m => m.C).Index(2).TypeConverter(new DateTimeConverter())
+ .Map(m => m.D).Name("D4").TypeConverter<DoubleConverter>().Default(4d)
+ .Map(m => m.E).ConvertUsing(ConvertExpression)
+ .Map(m => m.Optional).Optional()
+ .Build();
+
+ [Fact]
+ public void ClassMapBuilderAddsPropertyMapsCorrectly()
+ {
+ Assert.Equal(6, map.MemberMaps.Count);//IMappable
+ }
+
+ [Fact]
+ public void ClassMapBuilderAddsOptionalCorrectly()
+ {
+ Assert.True(map.MemberMaps[5].Data.IsOptional);
+ }
+
+ [Fact]
+ public void ClassMapBuilderAddsTypeConvertersCorrectly()
+ {
+ Assert.Equal(typeof(DateTimeConverter), map.MemberMaps[2].Data.TypeConverter.GetType());//2
+ Assert.Equal(typeof(DoubleConverter), map.MemberMaps[3].Data.TypeConverter.GetType());//2
+ }
+
+ [Fact]
+ public void ClassMapBuilderAddsIndexesCorrectly()
+ {
+ Assert.Equal(2, map.MemberMaps[2].Data.Index); //3
+ }
+
+ [Fact]
+ public void ClassMapBuilderAddsNamesCorrectly()
+ {
+ Assert.Equal("D4", map.MemberMaps[3].Data.Names.Single()); //4
+ }
+
+ [Fact]
+ public void ClassMapBuilderAddsNameIndexesCorrectly()
+ {
+ Assert.Equal(2, map.MemberMaps[0].Data.NameIndex); //5
+ }
+
+ //this one is kind of hacky, but i'm not sure how else to test it more robustly since the function gets converted to an expression inside the CsvClassMap
+ [Fact]
+ public void ClassMapBuilderAddsConvertUsingFunctionCorrectly()
+ {
+ var fakeRow = new BuilderRowFake();
+ var args = new ConvertFromStringArgs(fakeRow);
+ Assert.Equal(ConvertExpression(args).E, (map.MemberMaps[4].Data.ReadingConvertExpression as Expression<ConvertFromString<FakeInnerClass>>).Compile()(args).E); //6
+ }
+
+ [Fact]
+ public void ClassMapBuilderAddsDefaultsCorrectly()
+ {
+ Assert.Equal("WEW", map.MemberMaps[0].Data.Default);//7
+ Assert.Equal(4d, map.MemberMaps[3].Data.Default);//7
+ }
+
+ private class BuilderRowFake : IReaderRow
+ {
+ public IReaderConfiguration Configuration { get; }
+ public string[] FieldHeaders { get; }
+ public string[] CurrentRecord { get; }
+ public int Row { get; }
+
+ public CsvContext Context => throw new NotImplementedException();
+
+ public int CurrentIndex => throw new NotImplementedException();
+
+ public string[] HeaderRecord => throw new NotImplementedException();
+
+ public IParser Parser => throw new NotImplementedException();
+
+ public int ColumnCount => throw new NotImplementedException();
+
+ string IReaderRow.this[int index] => throw new NotImplementedException();
+
+ string IReaderRow.this[string name] => throw new NotImplementedException();
+
+ string IReaderRow.this[string name, int index] => throw new NotImplementedException();
+
+ public string GetField(int index)
+ {
+ return index.ToString();
+ }
+
+ public string GetField(string name)
+ {
+ throw new NotImplementedException();
+ }
+
+ public string GetField(string name, int index)
+ {
+ throw new NotImplementedException();
+ }
+
+ public object GetField(Type type, int index)
+ {
+ throw new NotImplementedException();
+ }
+
+ public object GetField(Type type, string name)
+ {
+ throw new NotImplementedException();
+ }
+
+ public object GetField(Type type, string name, int index)
+ {
+ throw new NotImplementedException();
+ }
+
+ public object GetField(Type type, int index, ITypeConverter converter)
+ {
+ throw new NotImplementedException();
+ }
+
+ public object GetField(Type type, string name, ITypeConverter converter)
+ {
+ throw new NotImplementedException();
+ }
+
+ public object GetField(Type type, string name, int index, ITypeConverter converter)
+ {
+ throw new NotImplementedException();
+ }
+
+ public T GetField<T>(int index)
+ {
+ throw new NotImplementedException();
+ }
+
+ public T GetField<T>(string name)
+ {
+ throw new NotImplementedException();
+ }
+
+ public T GetField<T>(string name, int index)
+ {
+ throw new NotImplementedException();
+ }
+
+ public T GetField<T>(int index, ITypeConverter converter)
+ {
+ throw new NotImplementedException();
+ }
+
+ public T GetField<T>(string name, ITypeConverter converter)
+ {
+ throw new NotImplementedException();
+ }
+
+ public T GetField<T>(string name, int index, ITypeConverter converter)
+ {
+ throw new NotImplementedException();
+ }
+
+ public T GetField<T, TConverter>(int index) where TConverter : ITypeConverter
+ {
+ throw new NotImplementedException();
+ }
+
+ public T GetField<T, TConverter>(string name) where TConverter : ITypeConverter
+ {
+ throw new NotImplementedException();
+ }
+
+ public T GetField<T, TConverter>(string name, int index) where TConverter : ITypeConverter
+ {
+ throw new NotImplementedException();
+ }
+
+ public bool TryGetField(Type type, int index, out object field)
+ {
+ throw new NotImplementedException();
+ }
+
+ public bool TryGetField(Type type, string name, out object field)
+ {
+ throw new NotImplementedException();
+ }
+
+ public bool TryGetField(Type type, string name, int index, out object field)
+ {
+ throw new NotImplementedException();
+ }
+
+ public bool TryGetField(Type type, int index, ITypeConverter converter, out object field)
+ {
+ throw new NotImplementedException();
+ }
+
+ public bool TryGetField(Type type, string name, ITypeConverter converter, out object field)
+ {
+ throw new NotImplementedException();
+ }
+
+ public bool TryGetField(Type type, string name, int index, ITypeConverter converter, out object field)
+ {
+ throw new NotImplementedException();
+ }
+
+ public bool TryGetField<T>(int index, out T field)
+ {
+ throw new NotImplementedException();
+ }
+
+ public bool TryGetField<T>(string name, out T field)
+ {
+ throw new NotImplementedException();
+ }
+
+ public bool TryGetField<T>(string name, int index, out T field)
+ {
+ throw new NotImplementedException();
+ }
+
+ public bool TryGetField<T>(int index, ITypeConverter converter, out T field)
+ {
+ throw new NotImplementedException();
+ }
+
+ public bool TryGetField<T>(string name, ITypeConverter converter, out T field)
+ {
+ throw new NotImplementedException();
+ }
+
+ public bool TryGetField<T>(string name, int index, ITypeConverter converter, out T field)
+ {
+ throw new NotImplementedException();
+ }
+
+ public bool TryGetField<T, TConverter>(int index, out T field) where TConverter : ITypeConverter
+ {
+ throw new NotImplementedException();
+ }
+
+ public bool TryGetField<T, TConverter>(string name, out T field) where TConverter : ITypeConverter
+ {
+ throw new NotImplementedException();
+ }
+
+ public bool TryGetField<T, TConverter>(string name, int index, out T field) where TConverter : ITypeConverter
+ {
+ throw new NotImplementedException();
+ }
+
+ public bool IsRecordEmpty()
+ {
+ throw new NotImplementedException();
+ }
+
+ public T GetRecord<T>()
+ {
+ throw new NotImplementedException();
+ }
+
+ public object GetRecord(Type type)
+ {
+ throw new NotImplementedException();
+ }
+
+ public T GetRecord<T>(T anonymousTypeDefinition)
+ {
+ throw new NotImplementedException();
+ }
+ }
+
+ private class FakeClass
+ {
+ public string A { get; set; }
+ public int B { get; set; }
+ public DateTime C { get; set; }
+ public double D { get; set; }
+ public FakeInnerClass E { get; set; }
+ public string Optional { get; set; }
+ }
+
+ private class FakeInnerClass
+ {
+ public string E { get; set; }
+ }
+ }
+}