Пример #1
0
 public void Should_choose_parameter_less_version_of_function()
 {
     Assert.DoesNotThrow(() =>
     {
         var result = SyntaxTreeExpression.Function(typeof(string), "ToString");
     });
 }
Пример #2
0
 public static object[] CaseInsensitiveTests()
 {
     return(new object[] {
         new object[] { "UserName", SyntaxTreeExpression.Property(typeof(CaseTestModel), "UserName") },
         new object[] { "userName", SyntaxTreeExpression.Field(typeof(CaseTestModel), "userName") },
         new object[] { "username", SyntaxTreeExpression.Property(typeof(CaseTestModel), "UserName") },
         new object[] { "USERNAME", SyntaxTreeExpression.Property(typeof(CaseTestModel), "UserName") },
         new object[] { "FOO", SyntaxTreeExpression.Field(typeof(CaseTestModel), "foo") },
         new object[] { "function()", SyntaxTreeExpression.Function(typeof(CaseTestModel), "Function") },
         new object[] { "submodel.subproperty", SyntaxTreeExpression.SubModel(SyntaxTreeExpression.Property(typeof(CaseTestModel), "SubModel"), SyntaxTreeExpression.Property(typeof(SubModel), "SubProperty")) },
         new object[] { "submodel.subsubmodel.subsubfield", SyntaxTreeExpression.SubModel(SyntaxTreeExpression.Property(typeof(CaseTestModel), "SubModel"), SyntaxTreeExpression.SubModel(SyntaxTreeExpression.Field(typeof(SubModel), "SubSubModel"), SyntaxTreeExpression.Field(typeof(SubSubModel), "SubSubField"))) }
     });
 }
Пример #3
0
        private static ExpressionNode ParseAgainstModel(Type modelType, string expression, ExpressionScope expressionScope, int recursionLevel, IMemberLocator memberLocator, SourceLocation location)
        {
            var dotIndex = expression.IndexOf('.');

            if (dotIndex >= 0)
            {
                var subModel = ParseAgainstModel(modelType, expression.Substring(0, dotIndex), expressionScope, recursionLevel, memberLocator, location.SetLength(dotIndex));
                return(SyntaxTreeExpression.SubModel(
                           subModel,
                           ParseAgainstModel(subModel.ResultType, expression.Substring(dotIndex + 1), ExpressionScope.CurrentModelOnStack, 0, memberLocator, location.MoveIndex(dotIndex + 1)),
                           location
                           ));
            }

            if (expression.EndsWith("()"))
            {
                var func = memberLocator.FindMember(modelType, expression.Substring(0, expression.Length - 2), MemberTypes.Method);
                if (func != null)
                {
                    return(SyntaxTreeExpression.Function(modelType, func.Name, location, expressionScope));
                }
            }

            var prop = memberLocator.FindMember(modelType, expression, MemberTypes.Property | MemberTypes.Field);

            if (prop != null)
            {
                switch (prop.MemberType)
                {
                case MemberTypes.Property: return(SyntaxTreeExpression.Property(modelType, prop.Name, location, expressionScope, recursionLevel));

                case MemberTypes.Field: return(SyntaxTreeExpression.Field(modelType, prop.Name, location, expressionScope, recursionLevel));
                }
            }

            if (IsLateBoundAcceptingType(modelType))
            {
                return(SyntaxTreeExpression.LateBound(expression, location, memberLocator, false, expressionScope, recursionLevel));
            }

            throw new VeilParserException(String.Format("Unable to parse model expression '{0}' againt model '{1}'", expression, modelType.Name), location);
        }
Пример #4
0
        private static ExpressionNode ParseAgainstModel(Type modelType, string expression, ExpressionScope expressionScope)
        {
            var dotIndex = expression.IndexOf('.');

            if (dotIndex >= 0)
            {
                var subModel = HandlebarsExpressionParser.ParseAgainstModel(modelType, expression.Substring(0, dotIndex), expressionScope);
                return(SyntaxTreeExpression.SubModel(
                           subModel,
                           HandlebarsExpressionParser.ParseAgainstModel(subModel.ResultType, expression.Substring(dotIndex + 1), ExpressionScope.CurrentModelOnStack)
                           ));
            }

            if (expression.EndsWith("()"))
            {
                var func = FindMember(modelType, expression.Substring(0, expression.Length - 2), MemberTypes.Method);
                if (func != null)
                {
                    return(SyntaxTreeExpression.Function(modelType, func.Name, expressionScope));
                }
            }

            var prop = FindMember(modelType, expression, MemberTypes.Property | MemberTypes.Field);

            if (prop != null)
            {
                switch (prop.MemberType)
                {
                case MemberTypes.Property: return(SyntaxTreeExpression.Property(modelType, prop.Name, expressionScope));

                case MemberTypes.Field: return(SyntaxTreeExpression.Field(modelType, prop.Name, expressionScope));
                }
            }

            if (IsLateBoundAcceptingType(modelType))
            {
                return(SyntaxTreeExpression.LateBound(expression, false, expressionScope));
            }

            throw new VeilParserException(String.Format("Unable to parse model expression '{0}' against model '{1}'", expression, modelType.Name));
        }
 public void Should_choose_parameter_less_version_of_function()
 {
     var result = SyntaxTreeExpression.Function(typeof(string), "ToString");
 }
Пример #6
0
        public void Should_parse_function_from_submodel()
        {
            var result = HandlebarsExpressionParser.Parse(CreateScopes(typeof(Model)), "Function()");

            result.ShouldDeepEqual(SyntaxTreeExpression.Function(typeof(Model), "Function"));
        }