public void SetUp() { _methodInfoBasedNodeTypeRegistry = new MethodInfoBasedNodeTypeRegistry(); _methodInfoBasedNodeTypeRegistry.Register(WhereExpressionNode.GetSupportedMethods(), typeof(WhereExpressionNode)); _methodInfoBasedNodeTypeRegistry.Register(SelectExpressionNode.GetSupportedMethods(), typeof(SelectExpressionNode)); _methodInfoBasedNodeTypeRegistry.Register(TakeExpressionNode.GetSupportedMethods(), typeof(TakeExpressionNode)); _methodInfoBasedNodeTypeRegistry.Register(CountExpressionNode.GetSupportedMethods(), typeof(CountExpressionNode)); _methodInfoBasedNodeTypeRegistry.Register(JoinExpressionNode.GetSupportedMethods(), typeof(JoinExpressionNode)); _parser = new MethodCallExpressionParser(_methodInfoBasedNodeTypeRegistry); _source = ExpressionNodeObjectMother.CreateMainSource(); }
public void Parse_WithSubQuery_UsesNodeTypeRegistry() { var emptyNodeTypeRegistry = new MethodInfoBasedNodeTypeRegistry(); emptyNodeTypeRegistry.Register(SelectExpressionNode.GetSupportedMethods(), typeof(SelectExpressionNode)); var parser = new MethodCallExpressionParser(emptyNodeTypeRegistry); var expression = (MethodCallExpression)ExpressionHelper.MakeExpression <IQueryable <Cook>, IQueryable <int> > ( q => q.Select(s => s.Assistants.Count())); var result = parser.Parse("t", _source, expression.Arguments.Skip(1), expression); Assert.That(result, Is.InstanceOf(typeof(SelectExpressionNode))); Assert.That(((SelectExpressionNode)result).Selector, Is.Not.TypeOf(typeof(SubQueryExpression)), "The given nodeTypeRegistry does not know any query methods, so no SubQueryExpression is generated."); }
public void Parser() { IMethodCallTranslator translator = new StringMethodCallTranslator(); var mock = new Mock <IServiceResolver <IMethodCallTranslator> >(); mock.Setup(m => m.Resolve(It.IsAny <Type>())) .Returns(translator); IExpressionParserStrategy parser = new MethodCallExpressionParser(mock.Object); var collection = new QueryParameterCollection(); Func <SimpleModel, bool> s = (b) => b.Name.Contains("A"); ParameterExpression param = Expression.Parameter(typeof(SimpleModel), "s"); Expression property = Expression.Property(param, "Name"); Expression left = Expression.Call(property, typeof(string).GetMethod("Contains"), Expression.Constant("A")); parser.Parser(left, ExpressionType.And, ref collection); Assert.IsTrue(collection.Count > 0); Assert.AreEqual(collection[0].ToString(), ""); }