示例#1
0
        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));
        }
示例#2
0
        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));
        }
示例#3
0
        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);
        }
示例#4
0
        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);
        }
示例#5
0
        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>()));
        }
示例#6
0
        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);
        }
示例#7
0
        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);
        }
示例#8
0
        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);
        }
示例#9
0
        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);
        }
示例#10
0
 /// <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));
 }