public void GenerateToObject_WhenCalledWithVariableTableTypeAndPropertyMap_UsesPropertyMap()
        {
            IMapping mapping = new Mapping();

            Func<IDataRecord, Type> variableTableType = dataRecord => typeof( StringScore );

            mapping.VariableTableType<BaseScore>( variableTableType );
            Func<IDataRecord, string> action = dataRecord => "The Score Is: " + dataRecord.GetString( 2 );
            mapping.PropertyMap<StringScore, String>( x => x.ValueString, action );

            mapping.Table<BaseScore>( 0 );

            var classMapResult = new ClassMapResult
            {
                Mappings = (Mapping)mapping
            };

            var mockDataReader = new MockDataReader();

            var scores = mockDataReader.AddTable( "Id", "ResultId", "ValueString", "ResultType" );

            mockDataReader.AddRow( scores, 1, 1, "10", 2 );

            var func = MappingGenerator.Generate<List<BaseScore>>( new MockDataReader(), classMapResult );

            var dictionary = new Dictionary<Tuple<int, Type>, Func<IDataRecord, Dictionary<MappingEnum, object>, object>>();

            var result = func( mockDataReader, new Dictionary<MappingEnum, object>
            {
                {
                    MappingEnum.VariableTableType, new Dictionary<Type, object>
                    {
                        { typeof( BaseScore ), variableTableType }
                    }
                },
                {
                    MappingEnum.PropertyMap, new Dictionary<PropertyInfo, PropertyMap>
                    {
                        {
                            typeof( StringScore ).GetProperty( "ValueString" ), new PropertyMap( action )
                        }
                    }
                }
            }, dictionary );

            Assert.AreEqual( 1, result[ 0 ].Id );

            Assert.IsInstanceOf<StringScore>( result[ 0 ] );

            Assert.AreEqual( "The Score Is: 10", ( result[ 0 ] as StringScore ).ValueString );
        }
        public void GenerateToObject_WhenCalledWithPropertyMapColumnName_ReturnsCorrectData()
        {
            IMapping mapping = new Mapping();

            mapping.Table<TestClass>( 0 );
            mapping.PropertyMap<TestClass,string>( x => x.Name1, "Name" );

            var classMapResult = new ClassMapResult
            {
                Mappings = (Mapping)mapping
            };

            var mockDataReader = new MockDataReader();

            var scores = mockDataReader.AddTable( "Name" );

            string expectedName = "The name";
            mockDataReader.AddRow( scores, expectedName );

            var func = MappingGenerator.Generate<List<TestClass>>( new MockDataReader(), classMapResult );

            var dictionary = new Dictionary<Tuple<int, Type>, Func<IDataRecord, Dictionary<MappingEnum, object>, object>>();

            var result = func( mockDataReader, new Dictionary<MappingEnum, object>
            {
                {
                    MappingEnum.PropertyMap, new Dictionary<PropertyInfo, PropertyMap>
                    {
                        {
                            typeof( TestClass ).GetProperty( "Name1" ), new PropertyMap( "Name" )
                        }
                    }
                }
            }, dictionary );

            Assert.AreEqual( expectedName, result[ 0 ].Name1 );
        }