public void Evaluation_Throws_Exception_On_Variable_Encounter() { var variableExpression = new Variable() { Name = "a" }; var visitor = new EvaluatingExpressionVisitor(); Action a = () => visitor.Evaluate(variableExpression, null); a.ShouldThrow <InvalidOperationException>(); }
public void EvaluateReplacesExpressionsWithConstantExpressions() { Expression <Func <DateTime> > call = () => DateTime.Now.Subtract(TimeSpan.FromHours(5)); var nodeToEvaluate = FlatteningExpressionVisitor.Flatten(call).OfType <MethodCallExpression>().Single(s => s.Method.Name == "FromHours"); var evaluation = EvaluatingExpressionVisitor.Evaluate(call, new HashSet <Expression>(new[] { nodeToEvaluate })); var constantNodes = FlatteningExpressionVisitor.Flatten(evaluation).OfType <ConstantExpression>().ToArray(); Assert.Equal(1, constantNodes.Length); Assert.Equal(TimeSpan.FromHours(5), constantNodes.Single().Value); }