public void Should_throw_for_accessor_for_anonymous_types()
        {
            const string expectedValue  = "Bar";
            dynamic      aDynamicObject = new { Foo = expectedValue };

            var accessBuilder      = new DynamicPropertyAccessExpressionBuilder(typeof(object), "Foo");
            var accessorExpression = accessBuilder.CreateMemberAccessExpression();

            Assert.Throws <Microsoft.CSharp.RuntimeBinder.RuntimeBinderException>(() => InvokeAccessorOn(aDynamicObject, accessBuilder, accessorExpression));
        }
        public void Should_create_accessor_for_property_with_complex_type()
        {
            const string expectedValue = "Bar";
            dynamic aDynamicObject = new ExpandoObject();
            aDynamicObject.Complex = new Customer { Name = expectedValue };

            var accessBuilder = new DynamicPropertyAccessExpressionBuilder(typeof(object), "Complex.Name");
            var accessorExpression = accessBuilder.CreateMemberAccessExpression();

            var result = InvokeAccessorOn(aDynamicObject, accessBuilder, accessorExpression);
            Assert.Equal(expectedValue, result);
        }
        public void Should_create_accessor_for_dynamic_object_indexer()
        {
            const string expectedValue = "Foo1";
            dynamic aDynamicObject = new[] { expectedValue, "Foo2", "Foo3" };

            var accessBuilder = new DynamicPropertyAccessExpressionBuilder(typeof(object), "[0]");
            var accessorExpression = accessBuilder.CreateMemberAccessExpression();

            var result = InvokeAccessorOn(aDynamicObject, accessBuilder, accessorExpression);

            Assert.Equal(expectedValue, (string)result);
        }
        public void Should_create_accessor_for_dynamic_object_indexer()
        {
            const string expectedValue  = "Foo1";
            dynamic      aDynamicObject = new[] { expectedValue, "Foo2", "Foo3" };

            var accessBuilder      = new DynamicPropertyAccessExpressionBuilder(typeof(object), "[0]");
            var accessorExpression = accessBuilder.CreateMemberAccessExpression();

            var result = InvokeAccessorOn(aDynamicObject, accessBuilder, accessorExpression);

            Assert.Equal(expectedValue, (string)result);
        }
        public void Should_create_accessor_which_when_executed_returns_property_value()
        {
            const string expectedValue = "Bar";
            dynamic aDynamicObject = new ExpandoObject();
            aDynamicObject.Foo = expectedValue;

            var accessBuilder = new DynamicPropertyAccessExpressionBuilder(typeof(object), "Foo");
            var accessorExpression = accessBuilder.CreateMemberAccessExpression();

            var result = InvokeAccessorOn(aDynamicObject, accessBuilder, accessorExpression);

            Assert.Equal(expectedValue, result);
        }
        public void Should_create_accessor_which_when_executed_returns_property_value()
        {
            const string expectedValue  = "Bar";
            dynamic      aDynamicObject = new ExpandoObject();

            aDynamicObject.Foo = expectedValue;

            var accessBuilder      = new DynamicPropertyAccessExpressionBuilder(typeof(object), "Foo");
            var accessorExpression = accessBuilder.CreateMemberAccessExpression();

            var result = InvokeAccessorOn(aDynamicObject, accessBuilder, accessorExpression);

            Assert.Equal(expectedValue, result);
        }
        public void Should_not_throw_if_accessed_property_value_is_null()
        {
            const object nullValue = null;

            dynamic aDynamicObject = new ExpandoObject();

            aDynamicObject.Foo = nullValue;

            var accessBuilder      = new DynamicPropertyAccessExpressionBuilder(typeof(object), "Foo");
            var accessorExpression = accessBuilder.CreateMemberAccessExpression();

            var result = InvokeAccessorOn(aDynamicObject, accessBuilder, accessorExpression);

            Assert.Null(result);
        }
        public void Should_create_accessor_for_property_with_complex_type()
        {
            const string expectedValue  = "Bar";
            dynamic      aDynamicObject = new ExpandoObject();

            aDynamicObject.Complex = new Customer {
                Name = expectedValue
            };

            var accessBuilder      = new DynamicPropertyAccessExpressionBuilder(typeof(object), "Complex.Name");
            var accessorExpression = accessBuilder.CreateMemberAccessExpression();

            var result = InvokeAccessorOn(aDynamicObject, accessBuilder, accessorExpression);

            Assert.Equal(expectedValue, result);
        }
        public void Should_throw_for_accessor_for_anonymous_types()
        {
            const string expectedValue = "Bar";
            dynamic aDynamicObject = new { Foo = expectedValue };

            var accessBuilder = new DynamicPropertyAccessExpressionBuilder(typeof(object), "Foo");
            var accessorExpression = accessBuilder.CreateMemberAccessExpression();

            Assert.Throws<Microsoft.CSharp.RuntimeBinder.RuntimeBinderException>(() => InvokeAccessorOn(aDynamicObject, accessBuilder, accessorExpression));
        }
        public void Should_not_throw_if_accessed_property_value_is_null()
        {
            const object nullValue = null;

            dynamic aDynamicObject = new ExpandoObject();
            aDynamicObject.Foo = nullValue;

            var accessBuilder = new DynamicPropertyAccessExpressionBuilder(typeof(object), "Foo");
            var accessorExpression = accessBuilder.CreateMemberAccessExpression();

            var result = InvokeAccessorOn(aDynamicObject, accessBuilder, accessorExpression);

            Assert.Null(result);
        }
 public void Should_create_accessor_for_dynamic_object_property()
 {
     var propertyAccessExpression = new DynamicPropertyAccessExpressionBuilder(typeof(object), "Foo");
     Assert.NotNull(propertyAccessExpression.CreateMemberAccessExpression());
 }
        public void Should_create_accessor_for_dynamic_object_property()
        {
            var propertyAccessExpression = new DynamicPropertyAccessExpressionBuilder(typeof(object), "Foo");

            Assert.NotNull(propertyAccessExpression.CreateMemberAccessExpression());
        }