public void Ctor_NullPipeline_ThrowsArgumentNullException() { var cellValuesReader = new MultipleColumnNamesValueReader("Column"); CreateDictionaryFactory <string> createDictionaryFactory = elements => new Dictionary <string, string>(); Assert.Throws <ArgumentNullException>("valuePipeline", () => new ManyToOneDictionaryMap <string>(cellValuesReader, null, createDictionaryFactory)); }
public void Ctor_NullCellValuesReader_ThrowsArgumentNullException() { var valuePipeline = new ValuePipeline <string>(); CreateDictionaryFactory <string> createDictionaryFactory = elements => new Dictionary <string, string>(); Assert.Throws <ArgumentNullException>("cellValuesReader", () => new ManyToOneDictionaryMap <string>(null, valuePipeline, createDictionaryFactory)); }
public void CellValuesReader_SetNull_ThrowsArgumentNullException() { var cellValuesReader = new MultipleColumnNamesValueReader("Column"); var valuePipeline = new ValuePipeline <string>(); CreateDictionaryFactory <string> createDictionaryFactory = elements => new Dictionary <string, string>(); var propertyMap = new ManyToOneDictionaryMap <string>(cellValuesReader, valuePipeline, createDictionaryFactory); Assert.Throws <ArgumentNullException>("value", () => propertyMap.CellValuesReader = null); }
public void Ctor_MemberInfo_IMultipleCellValuesReader_IValuePipeline_CreateDictionaryFactory() { var cellValuesReader = new MultipleColumnNamesValueReader("Column"); var valuePipeline = new ValuePipeline <string>(); CreateDictionaryFactory <string> createDictionaryFactory = elements => new Dictionary <string, string>(); var propertyMap = new ManyToOneDictionaryMap <string>(cellValuesReader, valuePipeline, createDictionaryFactory); Assert.NotNull(propertyMap.ValuePipeline); }
public void WithColumnNames_EmptyColumnNames_ThrowsArgumentException() { var cellValuesReader = new MultipleColumnNamesValueReader("Column"); var valuePipeline = new ValuePipeline <string>(); CreateDictionaryFactory <string> createDictionaryFactory = elements => new Dictionary <string, string>(); var propertyMap = new ManyToOneDictionaryMap <string>(cellValuesReader, valuePipeline, createDictionaryFactory).WithColumnNames("ColumnNames"); Assert.Throws <ArgumentException>("columnNames", () => propertyMap.WithColumnNames(new string[0])); Assert.Throws <ArgumentException>("columnNames", () => propertyMap.WithColumnNames(new List <string>())); }
public void WithColumnNames_ParamsString_Success() { var columnNames = new string[] { "ColumnName1", "ColumnName2" }; var cellValuesReader = new MultipleColumnNamesValueReader("Column"); var valuePipeline = new ValuePipeline <string>(); CreateDictionaryFactory <string> createDictionaryFactory = elements => new Dictionary <string, string>(); var propertyMap = new ManyToOneDictionaryMap <string>(cellValuesReader, valuePipeline, createDictionaryFactory).WithColumnNames("ColumnNames"); Assert.Same(propertyMap, propertyMap.WithColumnNames(columnNames)); MultipleColumnNamesValueReader valueReader = Assert.IsType <MultipleColumnNamesValueReader>(propertyMap.CellValuesReader); Assert.Same(columnNames, valueReader.ColumnNames); }
public void WithValueMap_ValidMap_Success() { var cellValuesReader = new MultipleColumnNamesValueReader("Column"); var valuePipeline = new ValuePipeline <string>(); CreateDictionaryFactory <string> createDictionaryFactory = elements => new Dictionary <string, string>(); var propertyMap = new ManyToOneDictionaryMap <string>(cellValuesReader, valuePipeline, createDictionaryFactory); var newValuePipeline = new ValuePipeline <string>(); Assert.Same(propertyMap, propertyMap.WithValueMap(e => { Assert.Same(e, propertyMap.ValuePipeline); return(newValuePipeline); })); Assert.Same(newValuePipeline, propertyMap.ValuePipeline); }
public void CellValuesReader_SetValid_GetReturnsExpected(IMultipleCellValuesReader value) { var cellValuesReader = new MultipleColumnNamesValueReader("Column"); var valuePipeline = new ValuePipeline <string>(); CreateDictionaryFactory <string> createDictionaryFactory = elements => new Dictionary <string, string>(); var propertyMap = new ManyToOneDictionaryMap <string>(cellValuesReader, valuePipeline, createDictionaryFactory) { CellValuesReader = value }; Assert.Same(value, propertyMap.CellValuesReader); // Set same. propertyMap.CellValuesReader = value; Assert.Same(value, propertyMap.CellValuesReader); }
private static bool TryGetCreateDictionaryFactory <TKey, TValue>(Type memberType, out CreateDictionaryFactory <TValue> result) { if (memberType.IsImmutableDictionaryType()) { MethodInfo createRangeMethod = memberType.GetImmutableDictionaryCreateRangeMethod(typeof(TValue)); result = elements => { return((IDictionary <string, TValue>)createRangeMethod.Invoke(null, new object[] { elements })); }; return(true); } if (memberType.GetTypeInfo().IsInterface) { if (memberType.GetTypeInfo().IsAssignableFrom(typeof(Dictionary <TKey, TValue>).GetTypeInfo())) { result = elements => { var dictionary = new Dictionary <string, TValue>(); foreach (KeyValuePair <string, TValue> keyValuePair in elements) { dictionary.Add(keyValuePair.Key, keyValuePair.Value); } return(dictionary); }; return(true); } } else if (memberType.ImplementsInterface(typeof(IDictionary <TKey, TValue>))) { result = elements => { IDictionary <string, TValue> dictionary = (IDictionary <string, TValue>)Activator.CreateInstance(memberType); foreach (KeyValuePair <string, TValue> keyValuePair in elements) { dictionary.Add(keyValuePair); } return(dictionary); }; return(true); } result = default; return(false); }
/// <summary> /// Constructs a map reads one or more values from one or more cells and maps these values as element /// contained by the property or field. /// </summary> /// <param name="valuePipeline">The map that maps the value of a single cell to an object of the element type of the property or field.</param> public ManyToOneDictionaryMap(IMultipleCellValuesReader cellValuesReader, IValuePipeline <T> valuePipeline, CreateDictionaryFactory <T> createDictionaryFactory) { CellValuesReader = cellValuesReader ?? throw new ArgumentNullException(nameof(cellValuesReader)); ValuePipeline = valuePipeline ?? throw new ArgumentNullException(nameof(valuePipeline)); CreateDictionaryFactory = createDictionaryFactory ?? throw new ArgumentNullException(nameof(createDictionaryFactory)); }