コード例 #1
0
        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));
        }
コード例 #2
0
        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));
        }
コード例 #3
0
        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));
        }
コード例 #4
0
        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);
        }
コード例 #5
0
        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>()));
        }
コード例 #6
0
        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);
        }
コード例 #7
0
        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>()));
        }
コード例 #8
0
        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>()));
        }
コード例 #9
0
        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);
        }
コード例 #10
0
        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);
        }
コード例 #11
0
        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);
        }
コード例 #12
0
        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);
        }
コード例 #13
0
        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);
        }
コード例 #14
0
        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);
        }
コード例 #15
0
        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);
        }
コード例 #16
0
        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);
        }
コード例 #17
0
        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);
        }
コード例 #18
0
        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);
        }
コード例 #19
0
        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);
        }