public void CheckRRSubtreeStreamBehaviourWhileEmpty1()
        {
            string description = "RewriteRuleSubtreeStream test";
            RewriteRuleSubtreeStream subtreeTest =
                new RewriteRuleSubtreeStream(CreateTreeAdaptor(), description);

            Assert.IsFalse(subtreeTest.HasNext(), "HasNext() has to give back false here.");
            Assert.AreEqual(description.ToString(), subtreeTest.Description,
                            "Description strings should be equal.");
            Assert.AreEqual(0, subtreeTest.Size(), "The number of elements should be zero.");
            subtreeTest.Reset();
            Assert.IsTrue(true, "Reset() shouldn't make any problems here.");
            Assert.AreEqual(0, subtreeTest.Size(),
                            "The number of elements should be still zero.");
            subtreeTest.NextNode();
        }
        public void CheckRRSubtreeStreamBehaviourWithElements()
        {
            RewriteRuleSubtreeStream subtreeTest =
                new RewriteRuleSubtreeStream(CreateTreeAdaptor(),
                                             "RewriteRuleSubtreeStream test");

            IToken token1 = CreateToken(1, "test token without any real context");
            ITree  tree1  = CreateTree(token1);

            // Test Add()
            subtreeTest.Add(tree1);
            Assert.AreEqual(1, subtreeTest.Size(), "subtreeTest should have the size 1 (1).");
            Assert.IsTrue(subtreeTest.HasNext(), "HasNext() should be true here (1).");

            // Test NextNode()
            Assert.AreEqual(tree1, (ITree)subtreeTest.NextNode(),
                            "The returned tree should be equal to the given tree (1).");
            Assert.AreEqual(1, subtreeTest.Size(), "subtreeTest should have the size 1 (2).");
            Assert.IsFalse(subtreeTest.HasNext(), "HasNext() should be false here (1).");
            subtreeTest.Reset();
            Assert.AreEqual(1, subtreeTest.Size(), "subtreeTest should have the size 1 (3).");
            Assert.IsTrue(subtreeTest.HasNext(), "HasNext() should be true here (2).");

            // Test NextTree()
            CommonTree returnedTree = (CommonTree)subtreeTest.NextTree();

            Assert.AreEqual(token1, returnedTree.Token,
                            "The returned token should be equal to the given token (3).");
            Assert.AreEqual(1, subtreeTest.Size(), "subtreeTest should have the size 1 (4).");
            Assert.IsFalse(subtreeTest.HasNext(), "HasNext() should be false here (2).");
            subtreeTest.Reset();
            Assert.AreEqual(1, subtreeTest.Size(), "subtreeTest should have the size 1 (5).");
            Assert.IsTrue(subtreeTest.HasNext(), "HasNext() should be true here (3).");

            // Test, what happens with two elements
            IToken token2 = CreateToken(2, "test token without any real context");
            ITree  tree2  = CreateTree(token2);

            subtreeTest.Add(tree2);
            Assert.AreEqual(2, subtreeTest.Size(), "subtreeTest should have the size 2 (1).");
            Assert.IsTrue(subtreeTest.HasNext(), "HasNext() should be true here (4).");
            returnedTree = (CommonTree)subtreeTest.NextTree();
            Assert.AreEqual(token1, returnedTree.Token,
                            "The returned token should be equal to the given token (4).");
            Assert.AreEqual(2, subtreeTest.Size(), "subtreeTest should have the size 2 (2).");
            Assert.IsTrue(subtreeTest.HasNext(), "HasNext() should be true here (5).");
            returnedTree = (CommonTree)subtreeTest.NextTree();
            Assert.AreEqual(token2, returnedTree.Token,
                            "The returned token should be equal to the given token (5).");
            Assert.IsFalse(subtreeTest.HasNext(), "HasNext() should be false here (3).");

            // Test exception
            subtreeTest.NextTree();
        }