public void EatTest()
        {
            var snapshot = Mock.Of<ISnapshot>();
            var operand = Mock.Of<ICSharpExpression>();
            var typeOperand = Mock.Of<ITypeUsage>();
            var asExpression = Mock.Of<IAsExpression>(t => t.Operand == operand && t.TypeOperand == typeOperand);

            var eater = new Mock<IEater>();
            eater.Setup(t => t.Eat(snapshot, asExpression.Operand)).Returns(ExpressionKind.None).Verifiable();

            var typeEater = new Mock<ITypeEater>();
            typeEater.Setup(t => t.EatCastType(snapshot, typeOperand)).Returns(ExpressionKind.Mock).Verifiable();

            var kindHelper = new Mock<ExpressionKindHelper>();
            kindHelper.Setup(t => t.ValueOfKindAsTypeOfKind(ExpressionKind.None, ExpressionKind.Mock))
                .Returns(ExpressionKind.Result)
                .Verifiable();

            var asExpressionEater = new AsExpressionEater(eater.Object, typeEater.Object, kindHelper.Object);

            // Act
            var kind = asExpressionEater.Eat(snapshot, asExpression);

            // Assert
            Assert.AreEqual(kind, ExpressionKind.Result);
            typeEater.VerifyAll();
            kindHelper.VerifyAll();
            eater.VerifyAll();
        }
        public void EatTest()
        {
            var snapshot     = Mock.Of <ISnapshot>();
            var operand      = Mock.Of <ICSharpExpression>();
            var typeOperand  = Mock.Of <ITypeUsage>();
            var asExpression = Mock.Of <IAsExpression>(t => t.Operand == operand && t.TypeOperand == typeOperand);

            var eater = new Mock <IEater>();

            eater.Setup(t => t.Eat(snapshot, asExpression.Operand)).Returns(ExpressionKind.None).Verifiable();

            var typeEater = new Mock <ITypeEater>();

            typeEater.Setup(t => t.EatCastType(snapshot, typeOperand)).Returns(ExpressionKind.Mock).Verifiable();

            var kindHelper = new Mock <ExpressionKindHelper>();

            kindHelper.Setup(t => t.ValueOfKindAsTypeOfKind(ExpressionKind.None, ExpressionKind.Mock))
            .Returns(ExpressionKind.Result)
            .Verifiable();

            var asExpressionEater = new AsExpressionEater(eater.Object, typeEater.Object, kindHelper.Object);

            // Act
            var kind = asExpressionEater.Eat(snapshot, asExpression);

            // Assert
            Assert.AreEqual(kind, ExpressionKind.Result);
            typeEater.VerifyAll();
            kindHelper.VerifyAll();
            eater.VerifyAll();
        }