private Expression <Func <IMockDatabase, TReturn> > ModifySqlParametersArgumentInExpression <TReturn>(Expression <Func <IMockDatabase, TReturn> > expression) { var visitor = new MatchAnonymousObjectExpressionVisitor(); var newExpression = (Expression <Func <IMockDatabase, TReturn> >)visitor.Visit(expression); return(newExpression); }
public bool CommandMatchesExpression(MockDbCommand command) { var visitor = new MatchAnonymousObjectExpressionVisitor(); var comparisonVisitor = (MethodCallExpression)visitor.Visit(methodCallExpression); var call = comparisonVisitor.Method.GetParameters() .Zip(comparisonVisitor.Arguments, (methodArg, callArg) => new { methodArg, callArg }) .ToDictionary(a => a.methodArg, a => a.callArg); var expectedParameters = command.GetParameterLookup(); var parameterValues = from arg in call let match = ResolveToMatch(arg.Value as MethodCallExpression) let paramValue = expectedParameters.ContainsKey(arg.Key.Name) ? expectedParameters[arg.Key.Name] : null select new { arg, matches = match.Matches(paramValue) }; return(parameterValues.All(a => a.matches)); }