public void Ctor_NullCellValuesReader_ThrowsArgumentNullException() { var elementPipeline = new ValuePipeline <string>(); CreateElementsFactory <string> createElementsFactory = elements => elements; Assert.Throws <ArgumentNullException>("cellValuesReader", () => new ManyToOneEnumerableMap <string>(null, elementPipeline, createElementsFactory)); }
public void Ctor_NullPipeline_ThrowsArgumentNullException() { var cellValuesReader = new MultipleColumnNamesValueReader("Column"); CreateElementsFactory <string> createElementsFactory = elements => elements; Assert.Throws <ArgumentNullException>("elementPipeline", () => new ManyToOneEnumerableMap <string>(cellValuesReader, null, createElementsFactory)); }
public void WithColumnIndex_NegativeColumnIndex_ThrowsArgumentOutOfRangeException() { var cellValuesReader = new MultipleColumnNamesValueReader("Column"); var elementPipeline = new ValuePipeline <string>(); CreateElementsFactory <string> createElementsFactory = elements => elements; var propertyMap = new ManyToOneEnumerableMap <string>(cellValuesReader, elementPipeline, createElementsFactory); Assert.Throws <ArgumentOutOfRangeException>("columnIndex", () => propertyMap.WithColumnIndex(-1)); }
public void CellValuesReader_SetNull_ThrowsArgumentNullException() { var cellValuesReader = new MultipleColumnNamesValueReader("Column"); var elementPipeline = new ValuePipeline <string>(); CreateElementsFactory <string> createElementsFactory = elements => elements; var propertyMap = new ManyToOneEnumerableMap <string>(cellValuesReader, elementPipeline, createElementsFactory); Assert.Throws <ArgumentNullException>("value", () => propertyMap.CellValuesReader = null); }
public void WithColumnIndices_EmptyColumnIndices_ThrowsArgumentException() { var cellValuesReader = new MultipleColumnNamesValueReader("Column"); var elementPipeline = new ValuePipeline <string>(); CreateElementsFactory <string> createElementsFactory = elements => elements; var propertyMap = new ManyToOneEnumerableMap <string>(cellValuesReader, elementPipeline, createElementsFactory).WithColumnNames("ColumnNames"); Assert.Throws <ArgumentException>("columnIndices", () => propertyMap.WithColumnIndices(new int[0])); Assert.Throws <ArgumentException>("columnIndices", () => propertyMap.WithColumnIndices(new List <int>())); }
public void Ctor_IMultipleCellValuesReader_IValuePipeline_CreateElementsFactory() { var cellValuesReader = new MultipleColumnNamesValueReader("Column"); var elementPipeline = new ValuePipeline <string>(); CreateElementsFactory <string> createElementsFactory = elements => elements; var propertyMap = new ManyToOneEnumerableMap <string>(cellValuesReader, elementPipeline, createElementsFactory); Assert.False(propertyMap.Optional); Assert.NotNull(propertyMap.ElementPipeline); }
public void WithSeparators_EmptySeparators_ThrowsArgumentException() { var cellValuesReader = new StringSplitCellValueReader(new ColumnNameValueReader("Column")); var elementPipeline = new ValuePipeline <string>(); CreateElementsFactory <string> createElementsFactory = elements => elements; var propertyMap = new ManyToOneEnumerableMap <string>(cellValuesReader, elementPipeline, createElementsFactory); Assert.Throws <ArgumentException>("value", () => propertyMap.WithSeparators(new char[0])); Assert.Throws <ArgumentException>("value", () => propertyMap.WithSeparators(new List <char>())); Assert.Throws <ArgumentException>("value", () => propertyMap.WithSeparators(new string[0])); Assert.Throws <ArgumentException>("value", () => propertyMap.WithSeparators(new List <string>())); }
public void WithSeperators_MultiMap_ThrowsExcelMappingException() { var cellValuesReader = new MultipleColumnNamesValueReader("Column"); var elementPipeline = new ValuePipeline <string>(); CreateElementsFactory <string> createElementsFactory = elements => elements; var propertyMap = new ManyToOneEnumerableMap <string>(cellValuesReader, elementPipeline, createElementsFactory).WithColumnNames("ColumnNames"); Assert.Throws <ExcelMappingException>(() => propertyMap.WithSeparators(new char[0])); Assert.Throws <ExcelMappingException>(() => propertyMap.WithSeparators(new List <char>())); Assert.Throws <ExcelMappingException>(() => propertyMap.WithSeparators(new string[0])); Assert.Throws <ExcelMappingException>(() => propertyMap.WithSeparators(new List <string>())); }
public void MakeOptional_HasMapper_ReturnsExpected() { var cellValuesReader = new MultipleColumnNamesValueReader("Column"); var elementPipeline = new ValuePipeline <string>(); CreateElementsFactory <string> createElementsFactory = elements => elements; var propertyMap = new ManyToOneEnumerableMap <string>(cellValuesReader, elementPipeline, createElementsFactory); Assert.False(propertyMap.Optional); Assert.Same(propertyMap, propertyMap.MakeOptional()); Assert.True(propertyMap.Optional); Assert.Same(cellValuesReader, propertyMap.CellValuesReader); }
public void WithSeparators_IEnumerableString_Success(IEnumerable <string> separators) { var cellValuesReader = new StringSplitCellValueReader(new ColumnNameValueReader("Column")); var elementPipeline = new ValuePipeline <string>(); CreateElementsFactory <string> createElementsFactory = elements => elements; var propertyMap = new ManyToOneEnumerableMap <string>(cellValuesReader, elementPipeline, createElementsFactory); Assert.Same(propertyMap, propertyMap.WithSeparators(separators)); StringSplitCellValueReader valueReader = Assert.IsType <StringSplitCellValueReader>(propertyMap.CellValuesReader); Assert.Equal(separators, valueReader.Separators); }
public void WithColumnName_SplitValidColumnName_Success() { var cellValuesReader = new CharSplitCellValueReader(new ColumnNameValueReader("Column")); var elementPipeline = new ValuePipeline <string>(); CreateElementsFactory <string> createElementsFactory = elements => elements; var propertyMap = new ManyToOneEnumerableMap <string>(cellValuesReader, elementPipeline, createElementsFactory); Assert.Same(propertyMap, propertyMap.WithColumnName("ColumnName")); CharSplitCellValueReader valueReader = Assert.IsType <CharSplitCellValueReader>(propertyMap.CellValuesReader); ColumnNameValueReader innerReader = Assert.IsType <ColumnNameValueReader>(valueReader.CellReader); Assert.Equal("ColumnName", innerReader.ColumnName); }
public void WithColumnIndices_ParamsInt_Success() { var columnIndices = new int[] { 0, 1 }; var cellValuesReader = new MultipleColumnNamesValueReader("Column"); var elementPipeline = new ValuePipeline <string>(); CreateElementsFactory <string> createElementsFactory = elements => elements; var propertyMap = new ManyToOneEnumerableMap <string>(cellValuesReader, elementPipeline, createElementsFactory).WithColumnNames("ColumnNames"); Assert.Same(propertyMap, propertyMap.WithColumnIndices(columnIndices)); MultipleColumnIndicesValueReader reader = Assert.IsType <MultipleColumnIndicesValueReader>(propertyMap.CellValuesReader); Assert.Same(columnIndices, reader.ColumnIndices); }
public void WithColumnIndex_MultiColumnIndex_Success(int columnIndex) { var cellValuesReader = new MultipleColumnNamesValueReader("Column"); var elementPipeline = new ValuePipeline <string>(); CreateElementsFactory <string> createElementsFactory = elements => elements; var propertyMap = new ManyToOneEnumerableMap <string>(cellValuesReader, elementPipeline, createElementsFactory).WithColumnNames("ColumnName"); Assert.Same(propertyMap, propertyMap.WithColumnIndex(columnIndex)); CharSplitCellValueReader valueReader = Assert.IsType <CharSplitCellValueReader>(propertyMap.CellValuesReader); ColumnIndexValueReader innerReader = Assert.IsType <ColumnIndexValueReader>(valueReader.CellReader); Assert.Equal(columnIndex, innerReader.ColumnIndex); }
public void WithSeparators_ParamsChar_Success(IEnumerable <char> separators) { char[] separatorsArray = separators.ToArray(); var cellValuesReader = new StringSplitCellValueReader(new ColumnNameValueReader("Column")); var elementPipeline = new ValuePipeline <string>(); CreateElementsFactory <string> createElementsFactory = elements => elements; var propertyMap = new ManyToOneEnumerableMap <string>(cellValuesReader, elementPipeline, createElementsFactory); Assert.Same(propertyMap, propertyMap.WithSeparators(separatorsArray)); CharSplitCellValueReader valueReader = Assert.IsType <CharSplitCellValueReader>(propertyMap.CellValuesReader); Assert.Same(separatorsArray, valueReader.Separators); }
public void WithElementMap_ValidMap_Success() { var cellValuesReader = new MultipleColumnNamesValueReader("Column"); var elementPipeline = new ValuePipeline <string>(); CreateElementsFactory <string> createElementsFactory = elements => elements; var propertyMap = new ManyToOneEnumerableMap <string>(cellValuesReader, elementPipeline, createElementsFactory); var newElementPipeline = new ValuePipeline <string>(); Assert.Same(propertyMap, propertyMap.WithElementMap(e => { Assert.Same(e, propertyMap.ElementPipeline); return(newElementPipeline); })); Assert.Same(newElementPipeline, propertyMap.ElementPipeline); }
public void CellValuesReader_SetValid_GetReturnsExpected(IMultipleCellValuesReader value) { var cellValuesReader = new MultipleColumnNamesValueReader("Column"); var elementPipeline = new ValuePipeline <string>(); CreateElementsFactory <string> createElementsFactory = elements => elements; var propertyMap = new ManyToOneEnumerableMap <string>(cellValuesReader, elementPipeline, createElementsFactory) { CellValuesReader = value }; Assert.Same(value, propertyMap.CellValuesReader); // Set same. propertyMap.CellValuesReader = value; Assert.Same(value, propertyMap.CellValuesReader); }
public void WithColumnNames_IEnumerableString_Success() { var columnNames = new List <string> { "ColumnName1", "ColumnName2" }; var cellValuesReader = new MultipleColumnNamesValueReader("Column"); var elementPipeline = new ValuePipeline <string>(); CreateElementsFactory <string> createElementsFactory = elements => elements; var propertyMap = new ManyToOneEnumerableMap <string>(cellValuesReader, elementPipeline, createElementsFactory).WithColumnNames("ColumnNames"); Assert.Same(propertyMap, propertyMap.WithColumnNames((IEnumerable <string>)columnNames)); MultipleColumnNamesValueReader valueReader = Assert.IsType <MultipleColumnNamesValueReader>(propertyMap.CellValuesReader); Assert.Equal(columnNames, valueReader.ColumnNames); }
public void Optional_Set_GetReturnsExpected(bool value) { var cellValuesReader = new MultipleColumnNamesValueReader("Column"); var elementPipeline = new ValuePipeline <string>(); CreateElementsFactory <string> createElementsFactory = elements => elements; var propertyMap = new ManyToOneEnumerableMap <string>(cellValuesReader, elementPipeline, createElementsFactory) { Optional = value }; Assert.Equal(value, propertyMap.Optional); // Set same. propertyMap.Optional = value; Assert.Equal(value, propertyMap.Optional); // Set different. propertyMap.Optional = !value; Assert.Equal(!value, propertyMap.Optional); }
private static bool TryGetCreateElementsFactory <T>(Type memberType, out CreateElementsFactory <T> result) { if (memberType.IsArray) { result = elements => elements.ToArray(); return(true); } else if (memberType.IsImmutableEnumerableType()) { MethodInfo createRangeMethod = memberType.GetImmutableEnumerableCreateRangeMethod(typeof(T)); result = elements => { return((IEnumerable <T>)createRangeMethod.Invoke(null, new object[] { elements })); }; return(true); } else if (memberType.GetTypeInfo().IsInterface) { // Add values by creating a list and assigning to the property. if (memberType.GetTypeInfo().IsAssignableFrom(typeof(List <T>).GetTypeInfo())) { result = elements => elements; return(true); } } else if (memberType.ImplementsInterface(typeof(ICollection <T>))) { result = elements => { ICollection <T> value = (ICollection <T>)Activator.CreateInstance(memberType); foreach (T element in elements) { value.Add(element); } return(value); }; return(true); } // Check if the type has .ctor(IEnumerable<T>) such as Queue or Stack. ConstructorInfo ctor = memberType.GetConstructor(new Type[] { typeof(IEnumerable <T>) }); if (ctor != null) { result = element => { return((IEnumerable <T>)Activator.CreateInstance(memberType, new object[] { element })); }; return(true); } // Check if the type has Add(T) such as BlockingCollection. MethodInfo addMethod = memberType.GetMethod("Add", new Type[] { typeof(T) }); if (addMethod != null) { result = elements => { IEnumerable <T> value = (IEnumerable <T>)Activator.CreateInstance(memberType); foreach (T element in elements) { addMethod.Invoke(value, new object[] { element }); } return(value); }; return(true); } result = default; return(false); }