public void TestEmptyIterator()
        {
            TokenIterator tokenIterator = new TokenIterator(new List <Token>());

            Assert.IsFalse(tokenIterator.HasNext());
            Assert.AreEqual(0, tokenIterator.Count);
            int marker = tokenIterator.GetMarker();

            Assert.AreEqual(0, marker);
            Assert.AreEqual(0, tokenIterator.GetMarker());
        }
        public void TestBadMarker1()
        {
            TokenIterator tokenIterator = new TokenIterator(new List <Token>());

            // Markers don't work when you have no elements.
            tokenIterator.SetToMarker(tokenIterator.GetMarker());
        }
        public void TestIterator()
        {
            List <Token> tokens         = new List <Token>();
            Token        tokenReference = new Token(TokenType.DollarIdentifier, "a", 5, 2);

            tokens.Add(tokenReference);
            tokens.Add(new Token(TokenType.Word, "hi", 5, 3));
            tokens.Add(new Token(TokenType.AtIdentifier, "b", 12, 0));
            tokens.Add(new Token(TokenType.Word, "yEs", 14, 42));
            TokenIterator tokenIterator = new TokenIterator(tokens);

            Assert.IsTrue(tokenIterator.HasNext());
            Assert.AreEqual(4, tokenIterator.Count);

            // Compare references to make sure we're getting back what we add.
            Token token = tokenIterator.Next();

            Assert.AreEqual(tokenReference, token);

            token = tokenIterator.Next();
            Assert.AreEqual(TokenType.Word, token.Type);
            Assert.AreEqual("hi", token.Text, false);
            Assert.AreEqual(5, token.LineNumber);
            Assert.AreEqual(3, token.CharOffset);

            int marker = tokenIterator.GetMarker();

            Assert.AreEqual(2, marker);

            Assert.IsTrue(tokenIterator.HasNext());

            token = tokenIterator.Next();
            Assert.AreEqual(TokenType.AtIdentifier, token.Type);
            Assert.AreEqual("b", token.Text, false);
            Assert.AreEqual(12, token.LineNumber);
            Assert.AreEqual(0, token.CharOffset);

            Assert.IsTrue(tokenIterator.HasNext());

            token = tokenIterator.Next();
            Assert.AreEqual(TokenType.Word, token.Type);
            Assert.AreEqual("yEs", token.Text, false);
            Assert.AreEqual(14, token.LineNumber);
            Assert.AreEqual(42, token.CharOffset);

            Assert.IsFalse(tokenIterator.HasNext());

            // Return to the second token.
            tokenIterator.SetToMarker(marker);

            Assert.IsTrue(tokenIterator.HasNext());

            token = tokenIterator.Next();
            Assert.AreEqual(TokenType.AtIdentifier, token.Type);
            Assert.AreEqual("b", token.Text, false);
            Assert.AreEqual(12, token.LineNumber);
            Assert.AreEqual(0, token.CharOffset);
        }