public void VisitExtension_ReducedExpressionIsVisited ()
    {
      RelinqExpressionVisitor visitor = new TestThrowingConstantExpressionVisitor();
      var constantExpression = Expression.Constant (0);
      var expression = new ReducibleExtensionExpression (constantExpression);

      var result = visitor.Visit (expression);

      Assert.That (result, Is.Not.SameAs (constantExpression));
      Assert.That (((ConstantExpression) result).Value, Is.EqualTo("ConstantExpression was visited"));
    }
    public void VisitExtension_NonReducibleExpression ()
    {
      RelinqExpressionVisitor visitor = new TestThrowingConstantExpressionVisitor ();

#if !NET_3_5
      var nonReducibleExpression = MockRepository.GenerateStub<Expression>();
#else
      var nonReducibleExpression = MockRepository.GenerateStub<ExtensionExpression> (typeof (int));
#endif
      nonReducibleExpression
          .Stub (stub => ExtensionExpressionTestHelper.CallAccept (stub, Arg<RelinqExpressionVisitor>.Is.Anything))
          .WhenCalled (mi => PrivateInvoke.InvokeNonPublicMethod (mi.Arguments[0], "VisitExtension", nonReducibleExpression))
          .Return (nonReducibleExpression);
      nonReducibleExpression.Stub (stub => stub.CanReduce).Return (false);
      nonReducibleExpression.Stub (stub => stub.ToString ()).Return ("Test");
      
      visitor.Visit (nonReducibleExpression);
    }