Beispiel #1
0
        /// <summary>
        /// Get <see cref="PropertyInfo"/> of a expression body
        /// </summary>
        /// <param name="exp">Expression to be checked</param>
        /// <typeparam name="T"></typeparam>
        /// <typeparam name="TValue"></typeparam>
        /// <returns></returns>
        public static PropertyInfo GetPropertyInfo <T, TValue>(this Expression <Func <T, TValue> > exp)
        {
            var visitor      = new PropertyExpressionVisitor();
            var propertyInfo = visitor.GetExpression(exp);

            return(propertyInfo !);
        }
Beispiel #2
0
        public void Should_access_no_level_property()
        {
            Expression <Func <A, A> > propertyExpression = (A a) => a;

            PropertyExpressionVisitor visitor = new PropertyExpressionVisitor <A>(null);

            NodeSelector selector = visitor.CreateSelector(propertyExpression.Body);

            selector.ConsoleWriteLine();

            Assert.IsInstanceOf <TypeNodeSelector <A> >(selector);
            Assert.IsNull(selector.Next);
        }
Beispiel #3
0
        public void Should_access_no_level_property()
        {
            Expression<Func<A, A>> propertyExpression = (A a) => a;

            PropertyExpressionVisitor visitor = new PropertyExpressionVisitor<A>(null);

            NodeSelector selector = visitor.CreateSelector(propertyExpression.Body);

            selector.ConsoleWriteLine();

            Assert.IsInstanceOf<TypeNodeSelector<A>>(selector);
            Assert.IsNull(selector.Next);
        }
        public void Should_access_first_level_property()
        {
            Expression <Func <A, B> > propertyExpression = (A a) => a.TheB;

            PropertyExpressionVisitor visitor = new PropertyExpressionVisitor <A>(_configurator);

            NodeSelector selector = visitor.CreateSelector(propertyExpression.Body);

            selector.ConsoleWriteLine();

            Assert.IsInstanceOf <TypeNodeSelector <A> >(selector);
            Assert.IsInstanceOf <PropertyNodeSelector <A, B, B> >(selector.Next);
            Assert.IsNull(selector.Next.Next);
        }
        public void Should_access_first_level_property()
        {
            Expression<Func<A, B>> propertyExpression = (A a) => a.TheB;

            PropertyExpressionVisitor visitor = new PropertyExpressionVisitor<A>(_configurator);

            NodeSelector selector = visitor.CreateSelector(propertyExpression.Body);

            selector.ConsoleWriteLine();

            Assert.IsInstanceOf<TypeNodeSelector<A>>(selector);
            Assert.IsInstanceOf<PropertyNodeSelector<A, B,B>>(selector.Next);
            Assert.IsNull(selector.Next.Next);
        }
Beispiel #6
0
        public void Should_get_list_getters()
        {
            Expression <Func <A, double> > propertyExpression = (A a) => a.Amounts[1];

            var visitor = new PropertyExpressionVisitor <A>(null);

            NodeSelector selector = visitor.CreateSelector(propertyExpression.Body);

            selector.ConsoleWriteLine();

            Assert.IsInstanceOf <TypeNodeSelector <A> >(selector);
            Assert.IsInstanceOf <PropertyNodeSelector <A, IList <double> > >(selector.Next);
            Assert.IsInstanceOf <ListNodeSelector <Token <A, IList <double> >, double> >(selector.Next.Next);
            Assert.IsNull(selector.Next.Next.Next);
        }
Beispiel #7
0
        public void Should_access_third_level_property()
        {
            Expression <Func <A, string> > propertyExpression = (A a) => a.TheB.TheC.Value;

            var visitor = new PropertyExpressionVisitor <A>(null);

            NodeSelector selector = visitor.CreateSelector(propertyExpression.Body);

            selector.ConsoleWriteLine();

            Assert.IsInstanceOf <TypeNodeSelector <A> >(selector);
            Assert.IsInstanceOf <PropertyNodeSelector <A, B> >(selector.Next);
            Assert.IsInstanceOf <PropertyNodeSelector <A, B, C> >(selector.Next.Next);
            Assert.IsInstanceOf <PropertyNodeSelector <Token <A, B>, C, string> >(selector.Next.Next.Next);
            Assert.IsNull(selector.Next.Next.Next.Next);
        }
Beispiel #8
0
        public void Should_get_indexers()
        {
            Expression <Func <A, int> > propertyExpression = (A a) => a.TheB.Values[1];

            var visitor = new PropertyExpressionVisitor <A>(null);

            NodeSelector selector = visitor.CreateSelector(propertyExpression.Body);

            selector.ConsoleWriteLine();

            Assert.IsInstanceOf <TypeNodeSelector <A> >(selector);
            Assert.IsInstanceOf <PropertyNodeSelector <A, B> >(selector.Next);
            Assert.IsInstanceOf <PropertyNodeSelector <A, B, int[]> >(selector.Next.Next);
            Assert.IsInstanceOf <ArrayNodeSelector <Token <Token <A, B>, int[]>, int> >(selector.Next.Next.Next);
            Assert.IsNull(selector.Next.Next.Next.Next);
        }
        public void Should_access_fourth_level_property()
        {
            Expression <Func <A, int> > propertyExpression = (A a) => a.TheB.TheC.Value.Length;

            var visitor = new PropertyExpressionVisitor <A>(_configurator);

            NodeSelector selector = visitor.CreateSelector(propertyExpression.Body);

            selector.ConsoleWriteLine();

            Assert.IsInstanceOf <TypeNodeSelector <A> >(selector);
            Assert.IsInstanceOf <PropertyNodeSelector <A, B, B> >(selector.Next);
            Assert.IsInstanceOf <PropertyNodeSelector <A, B, C, C> >(selector.Next.Next);
            Assert.IsInstanceOf <PropertyNodeSelector <Token <A, B>, C, string, string> >(selector.Next.Next.Next);
            Assert.IsInstanceOf <PropertyNodeSelector <Token <Token <A, B>, C>, string, int, int> >(
                selector.Next.Next.Next.Next);
            Assert.IsNull(selector.Next.Next.Next.Next.Next);
        }
Beispiel #10
0
        public void Should_access_fourth_level_property()
        {
            Expression<Func<A, int>> propertyExpression = (A a) => a.TheB.TheC.Value.Length;

            var visitor = new PropertyExpressionVisitor<A>(null);

            NodeSelector selector = visitor.CreateSelector(propertyExpression.Body);

            selector.ConsoleWriteLine();

            Assert.IsInstanceOf<TypeNodeSelector<A>>(selector);
            Assert.IsInstanceOf<PropertyNodeSelector<A, B>>(selector.Next);
            Assert.IsInstanceOf<PropertyNodeSelector<A, B, C>>(selector.Next.Next);
            Assert.IsInstanceOf<PropertyNodeSelector<Token<A, B>, C, string>>(selector.Next.Next.Next);
            Assert.IsInstanceOf<PropertyNodeSelector<Token<Token<A, B>, C>, string, int>>(
                selector.Next.Next.Next.Next);
            Assert.IsNull(selector.Next.Next.Next.Next.Next);
        }
Beispiel #11
0
        public void Should_get_list_getters()
        {
            Expression<Func<A, double>> propertyExpression = (A a) => a.Amounts[1];

            var visitor = new PropertyExpressionVisitor<A>(null);

            NodeSelector selector = visitor.CreateSelector(propertyExpression.Body);

            selector.ConsoleWriteLine();

            Assert.IsInstanceOf<TypeNodeSelector<A>>(selector);
            Assert.IsInstanceOf<PropertyNodeSelector<A, IList<double>>>(selector.Next);
            Assert.IsInstanceOf<ListNodeSelector<Token<A, IList<double>>, double>>(selector.Next.Next);
            Assert.IsNull(selector.Next.Next.Next);
        }
Beispiel #12
0
        public void Should_get_indexers()
        {
            Expression<Func<A, int>> propertyExpression = (A a) => a.TheB.Values[1];

            var visitor = new PropertyExpressionVisitor<A>(null);

            NodeSelector selector = visitor.CreateSelector(propertyExpression.Body);

            selector.ConsoleWriteLine();

            Assert.IsInstanceOf<TypeNodeSelector<A>>(selector);
            Assert.IsInstanceOf<PropertyNodeSelector<A, B>>(selector.Next);
            Assert.IsInstanceOf<PropertyNodeSelector<A, B, int[]>>(selector.Next.Next);
            Assert.IsInstanceOf<ArrayNodeSelector<Token<Token<A, B>, int[]>, int>>(selector.Next.Next.Next);
            Assert.IsNull(selector.Next.Next.Next.Next);
        }