public void TestEvaluate()
        {
            var mockExpression = Mock.Of <IExpression>(e => e.Evaluate(It.IsAny <IDictionary <string, object> >()) == (object)1);

            var expression = new ParenthesisedExpression(mockExpression);

            Assert.AreEqual(1, expression.Evaluate(null));
        }
예제 #2
0
        internal Expression ParseParenthesised() // E -> (E) E'
        {
            if (this.input.Read() is OpenParenthesisToken)
            {
                var internalTokens = new List <Token>();
                int parenthesisNum = 1;
                while (true)
                {
                    var t = this.input.Read();
                    if (t == null)
                    {
                        throw new ArgumentException("Parenthesis not closed.");
                    }
                    else if (t is CloseParenthesisToken)
                    {
                        if (--parenthesisNum <= 0)
                        {
                            break;
                        }
                    }
                    else if (t is OpenParenthesisToken)
                    {
                        ++parenthesisNum;
                    }

                    internalTokens.Add(t);
                }

                Expression ex = Parse(internalTokens);
                if (ex != null)
                {
                    Expression res = new ParenthesisedExpression()
                    {
                        Oprand = ex
                    };
                    return(this.ParseExPrime(res));
                }
                else
                {
                    throw new ArgumentException("Failed parse Parenthesised Expression");
                }
            }
            else
            {
                this.input.Unread();
                return(null);
            }
        }
        public void TestNullEvaluate()
        {
            var expression = new ParenthesisedExpression(null);

            Assert.AreEqual(1, expression.Evaluate(null));
        }