public void TestBuildWithCorrectPrecedence()
        {
            var operatorWithLowPriority = MockRepository.GenerateStub<IBinaryOperator>();
            var operatorWithHighPriority = MockRepository.GenerateStub<IBinaryOperator>();

            operatorWithLowPriority.Expect(o => o.Precedence).Return(1);
            operatorWithHighPriority.Expect(o => o.Precedence).Return(2);

            var tokens = new List<Token>
                             {
                                 new Token(1),
                                 new Token(operatorWithLowPriority),
                                 new Token(2),
                                 new Token(operatorWithHighPriority),
                                 new Token(3),
                             };
            var builder = new ExpressionTreeBuilder();

            var tree = builder.Build(tokens);

            Assert.AreEqual(tree.Token, tokens[1]);
            var children = tree.Children.ToList();
            Assert.AreEqual(children[0].Token, tokens[0]);
            Assert.AreEqual(children[1].Token, tokens[3]);
            var rightGrandchildren = children[1].Children.ToList();
            Assert.AreEqual(rightGrandchildren[0].Token, tokens[2]);
            Assert.AreEqual(rightGrandchildren[1].Token, tokens[4]);
        }
        public void TestBuildWithBrackets()
        {
            var tokens = new List<Token>
                             {
                                 new Token(1),
                                 new Token(MockRepository.GenerateStub<IBinaryOperator>()),
                                 new Token(Bracket.Opening),
                                 new Token(2),
                                 new Token(MockRepository.GenerateStub<IBinaryOperator>()),
                                 new Token(3),
                                 new Token(Bracket.Closing),
                             };

            var builder = new ExpressionTreeBuilder();

            var tree = builder.Build(tokens);

            Assert.AreEqual(tree.Token, tokens[1]);
            var children = tree.Children.ToList();
            Assert.AreEqual(children[0].Token, tokens[0]);
            Assert.AreEqual(children[1].Token, tokens[4]);
            var rightGrandchildren = children[1].Children.ToList();
            Assert.AreEqual(rightGrandchildren[0].Token, tokens[3]);
            Assert.AreEqual(rightGrandchildren[1].Token, tokens[5]);
        }
        public void TestBuildTree()
        {
            var tokens = new List<Token>
                             {
                                 new Token(1),
                                 new Token(MockRepository.GenerateStub<IBinaryOperator>()),
                                 new Token(2)
                             };
            var builder = new ExpressionTreeBuilder();

            var tree = builder.Build(tokens);

            Assert.AreEqual(tree.Token, tokens[1]);
            var children = tree.Children.ToList();
            Assert.AreEqual(children[0].Token, tokens[0]);
            Assert.AreEqual(children[1].Token, tokens[2]);
        }
        public void TestRaiseExceptionWithUnmatchedBrackets()
        {
            var tokens = new List<Token>
                             {
                                 new Token(Bracket.Opening),
                                 new Token(2),
                                 new Token(MockRepository.GenerateStub<IBinaryOperator>()),
                                 new Token(3),
                                 new Token(Bracket.Opening),
                             };

            var builder = new ExpressionTreeBuilder();

            var tree = builder.Build(tokens);
        }
        public void TestRaiseExceptionWithEmptyBrackets()
        {
            var tokens = new List<Token>
                             {
                                 new Token(Bracket.Opening),
                                 new Token(Bracket.Closing),
                             };

            var builder = new ExpressionTreeBuilder();

            var tree = builder.Build(tokens);
        }