コード例 #1
0
        public void MaterializeByteArray()
        {
            var modelMapper = CreateModelMapperForBar();
            DynamicMethodModelFactory factory = new DynamicMethodModelFactory(new DatabaseMapper(modelMapper));

            var rows = new List <Dictionary <string, object> >
            {
                new Dictionary <string, object>()
            };
            var image = new byte[] { 0x20, 0x20, 0x20 };

            rows[0].Add("Prop1", 2);
            rows[0].Add("Prop2", 1);
            rows[0].Add("Prop4", 111);
            rows[0].Add("Image", image);

            InMemoryDataReader data = new InMemoryDataReader(rows);

            data.Read();

            var fact = factory.GetFactory <Bar>(data);

            var bar = fact(data);

            bar.Image.Should().BeEquivalentTo(image);
        }
コード例 #2
0
        public void CallOnAfterMaterializeWhenModelImplementIMaterialize()
        {
            var modelMapper = CreateModelMapperForBar();
            DynamicMethodModelFactory factory = new DynamicMethodModelFactory(new DatabaseMapper(modelMapper));

            var rows = new List <Dictionary <string, object> >
            {
                new Dictionary <string, object>()
            };

            rows[0].Add("Prop1", 2);
            rows[0].Add("Prop2", 1);
            rows[0].Add("Prop4", 111);

            InMemoryDataReader data = new InMemoryDataReader(rows);

            data.Read();

            var fact = factory.GetFactory <Bar>(data);

            var bar = fact(data);

            bar.Prop3.Should().Be(6);
            bar.Prop4.Should().Be(111);
        }
コード例 #3
0
        public void MaterializeByteArrayInvalidCast()
        {
            var modelMapper = CreateModelMapperForBar();
            DynamicMethodModelFactory factory = new DynamicMethodModelFactory(new DatabaseMapper(modelMapper));

            var rows = new List <Dictionary <string, object> >
            {
                new Dictionary <string, object>()
            };
            var image = new byte[] { 0x20, 0x20, 0x20 };

            rows[0].Add("Prop1", 2);
            rows[0].Add("Prop2", 1);
            rows[0].Add("Prop4", image); // Bar.Prop4 => integer
            rows[0].Add("Image", image);

            InMemoryDataReader data = new InMemoryDataReader(rows);

            data.Read();

            var fact = factory.GetFactory <Bar>(data);
            Bar bar;

            Action act = () => bar = fact(data);

            act.Should().Throw <InvalidCastException>();
        }
コード例 #4
0
        public void TestRead()
        {
            using (IDataReader reader = new InMemoryDataReader(false, this.Data1))
            {
                Assert.IsTrue(reader.Read(), "Read 1");
                Assert.AreEqual("R1C2", reader.GetString(1));

                Assert.IsTrue(reader.Read(), "Read 2");
                Assert.AreEqual("R2C1", reader.GetString(0));

                Assert.IsTrue(reader.Read(), "Read 3");
                Assert.AreEqual("R3C3", reader.GetString(2));

                Assert.IsFalse(reader.Read(), "Read 4");
            }
        }
コード例 #5
0
 public void TestGetStringNull()
 {
     using (IDataReader reader = new InMemoryDataReader(false, this.Data4))
     {
         Assert.IsTrue(reader.Read(), "Read");
         reader.GetString(1);
     }
 }
コード例 #6
0
 public void TestGetBoolean()
 {
     using (IDataReader reader = new InMemoryDataReader(false, this.Data3))
     {
         Assert.IsTrue(reader.Read(), "Read");
         Assert.IsTrue(reader.GetBoolean(0));
         Assert.IsFalse(reader.GetBoolean(1));
     }
 }
コード例 #7
0
 public void TestNextResult()
 {
     using (IDataReader reader = new InMemoryDataReader(false, this.Data1, this.Data2))
     {
         Assert.AreEqual(3, reader.FieldCount, "Field count.");
         Assert.IsTrue(reader.NextResult(), "Next result");
         Assert.AreEqual(2, reader.FieldCount, "Field count has changed.");
         Assert.IsTrue(reader.Read(), "Read");
         Assert.AreEqual("TWO R1C2", reader.GetString(1), "Row 1 column 2.");
     }
 }
コード例 #8
0
        public void IgnoreNonExistingProperties()
        {
            DynamicMethodModelFactory factory = CreateFactory();
            var rows = CreateData();

            rows[0].Add("XXX", 3);
            using IDataReader data = new InMemoryDataReader(rows);
            data.Read();
            var fact = factory.GetFactory <Foo>(data);

            var foo = fact(data);
        }
コード例 #9
0
        public void TestGetValuesWithNull()
        {
            using (IDataReader reader = new InMemoryDataReader(false, this.Data4))
            {
                Assert.IsTrue(reader.Read(), "Read");

                object[] buffer = new object[3];
                Assert.AreEqual(2, reader.GetValues(buffer), "Number of values");
                var strings = buffer.Cast <string>().ToArray();
                Assert.AreEqual(new string[] { "R1C1", null, "R1C3" }, strings, "Data equal");
            }
        }
コード例 #10
0
        public void InjectServiceToProperty()
        {
            var service = new TestService();
            var factory = CreateFactory(CreateModelMapperWithInjection(service));

            var rows = CreateData();

            rows[0].Add("XXX", 3);
            using IDataReader data = new InMemoryDataReader(rows);
            data.Read();

            var fact = factory.GetFactory <Foo>(data);

            var foo = fact(data);

            foo.Service.Should().Be(service);

            data.Read();
            foo = fact(data);
            foo.Service.Should().Be(service);
        }
コード例 #11
0
        public void IgnoreNonMapFields()
        {
            DynamicMethodModelFactory factory = CreateFactory();
            var rows = CreateData();

            rows[0].Add("Bar", 3);
            using IDataReader data = new InMemoryDataReader(rows);
            data.Read();
            var fact = factory.GetFactory <Foo>(data);

            var foo = fact(data);

            foo.Bar.Should().Be(0);
        }
コード例 #12
0
        public void CreateFactoryWhichConvertNullableType()
        {
            DynamicMethodModelFactory factory = CreateFactory();
            var rows = CreateData();
            InMemoryDataReader data = new InMemoryDataReader(rows);

            data.Read();

            var fact = factory.GetFactory <Foo>(data);

            var foo = fact(data);

            foo.Age.Should().Be(18.5);
        }
コード例 #13
0
        public void CreateFactoryWhichKnowFillingObjectsWithEnums()
        {
            DynamicMethodModelFactory factory = CreateFactory();
            var rows = CreateData();

            rows[0].Add("PropertyEnum", 3);
            using IDataReader data = new InMemoryDataReader(rows);
            data.Read();
            var fact = factory.GetFactory <Foo>(data);

            var foo = fact(data);

            foo.PropertyEnum.Should().Be(TestEnum.Value3);
        }
コード例 #14
0
        public void CreateFactoryWhichUseConverter()
        {
            DynamicMethodModelFactory factory = CreateFactory();
            var rows = CreateData();

            rows[0].Add("PropertyEnumConv", "V2");
            using IDataReader data = new InMemoryDataReader(rows);
            data.Read();

            var fact = factory.GetFactory <Foo>(data);

            var foo = fact(data);

            foo.PropertyEnumConv.Should().Be(TestEnum.Value2);
        }
コード例 #15
0
        public void CreateFactoryWhichUseStandardTypeConverter()
        {
            DynamicMethodModelFactory factory = CreateFactory();
            var rows = CreateData();
            InMemoryDataReader data = new InMemoryDataReader(rows);

            data.Read();

            data.CurrentTypes[0]  = typeof(double);
            data.CurrentValues[0] = 25.45;

            var fact = factory.GetFactory <Foo>(data);

            var foo = fact(data);

            foo.Id.Should().Be(25);
        }
コード例 #16
0
        public void NonNullableTypeMaterializeToNullable()
        {
            DynamicMethodModelFactory factory = CreateFactory();
            var rows = CreateData();

            rows[0].Add("PropertyDateTimeNullable", new DateTime(2005, 1, 5));

            using InMemoryDataReader data = new InMemoryDataReader(rows);
            data.Read();

            data.CurrentTypes[7] = typeof(DateTime);

            var fact = factory.GetFactory <Foo>(data);

            var foo = fact(data);

            foo.PropertyDateTimeNullable.Should().Be(new DateTime(2005, 1, 5));
        }
コード例 #17
0
        public void CreateFactoryWhichKnowFillingObjectsWithPrimitiveTypes()
        {
            DynamicMethodModelFactory factory = CreateFactory();
            IDataReader data = new InMemoryDataReader(CreateData());

            data.Read();

            var fact = factory.GetFactory <Foo>(data);

            var foo = fact(data);

            foo.Id.Should().Be(1);
            foo.PropertyString.Should().Be("Hello");
            foo.PropertyDouble.Should().Be(45.78);
            foo.PropertyDecimal.Should().Be(785.78M);
            foo.PropertyDateTime.Should().Be(new DateTime(1980, 7, 24));
            foo.Is.Should().BeTrue();
            foo.PropertyGuid.Should().Be(new Guid("ddc995d7-4dda-41ca-abab-7f45e651784a"));
        }
コード例 #18
0
        public void CreateFactoryWhichKnowFillingObjectsWithNullValues()
        {
            DynamicMethodModelFactory factory = CreateFactory();
            var rows = CreateData();
            InMemoryDataReader data = new InMemoryDataReader(rows);

            data.Read();

            data.CurrentValues[1] = DBNull.Value;
            data.CurrentValues[2] = DBNull.Value;
            data.CurrentValues[6] = DBNull.Value;

            var fact = factory.GetFactory <Foo>(data);

            var foo = fact(data);

            foo.PropertyString.Should().BeNull();
            foo.PropertyDouble.Should().Be(0);
            foo.PropertyGuid.Should().BeEmpty();
        }
コード例 #19
0
        public void CreateFactoryWhichKnowFillingObjectsWithPrimitiveTypes()
        {
            DynamicMethodModelFactory factory = CreateFactory();

            using IDataReader data = new InMemoryDataReader(CreateData());
            data.Read();

            var fact = factory.GetFactory <Foo>(data);

            var foo = fact(data);

            foo.Id.Should().Be(1);
            foo.PropertyString.Should().Be("Hello");
            foo.PropertyDouble.Should().Be(45.78);
            foo.PropertyDecimal.Should().Be(785.78M);
            foo.PropertyDateTime.Should().Be(new DateTime(1980, 7, 24));
            foo.DateTimeOffset.Should().Be(new DateTimeOffset(1985, 9, 20, 10, 11, 22, 123, TimeSpan.FromHours(5)));
            foo.DateTimeOffsetNullable.Should().Be(new DateTimeOffset(1985, 9, 20, 10, 11, 22, 123, TimeSpan.FromHours(5)));
            foo.Float.Should().Be(12.8F);
            foo.FloatNullable.Should().Be(45.89F);
            foo.Is.Should().BeTrue();
            foo.PropertyGuid.Should().Be(new Guid("ddc995d7-4dda-41ca-abab-7f45e651784a"));
        }