public void Should_choose_parameter_less_version_of_function() { Assert.DoesNotThrow(() => { var result = SyntaxTreeExpression.Function(typeof(string), "ToString"); }); }
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"))) } }); }
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); }
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"); }
public void Should_parse_function_from_submodel() { var result = HandlebarsExpressionParser.Parse(CreateScopes(typeof(Model)), "Function()"); result.ShouldDeepEqual(SyntaxTreeExpression.Function(typeof(Model), "Function")); }