public void MovingBetweenTokens()
{
var query = new TagQuery();
TagQueryToken token;
query.SetQuery("/first/second/third/fourth/fifth/sixth");
Assert.AreEqual(6, query.Count());
Assert.AreEqual(6, query.TokensLeft());
token = query.Previous();
Assert.IsNull(token);
Assert.AreEqual(6, query.TokensLeft());
token = query.Next();
Assert.AreEqual("first", token.Name);
Assert.AreEqual(5, query.TokensLeft());
token = query.Next();
Assert.AreEqual("second", token.Name);
Assert.AreEqual(4, query.TokensLeft());
token = query.Next();
Assert.AreEqual("third", token.Name);
Assert.AreEqual(3, query.TokensLeft());
token = query.Previous();
Assert.AreEqual("second", token.Name);
Assert.AreEqual(4, query.TokensLeft());
token = query.Next();
Assert.AreEqual("third", token.Name);
Assert.AreEqual(3, query.TokensLeft());
token = query.Peek();
Assert.AreEqual("fourth", token.Name);
Assert.AreEqual(3, query.TokensLeft());
token = query.Next();
Assert.AreEqual("fourth", token.Name);
Assert.AreEqual(2, query.TokensLeft());
token = query.Next();
Assert.AreEqual("fifth", token.Name);
Assert.AreEqual(1, query.TokensLeft());
token = query.Next();
Assert.AreEqual("sixth", token.Name);
Assert.AreEqual(0, query.TokensLeft());
token = query.Next();
Assert.IsNull(token);
Assert.AreEqual(0, query.TokensLeft());
token = query.Previous();
Assert.AreEqual("fifth", token.Name);
Assert.AreEqual(1, query.TokensLeft());
query.MoveFirst();
Assert.AreEqual(6, query.TokensLeft());
token = query.Next();
Assert.AreEqual("first", token.Name);
Assert.AreEqual(5, query.TokensLeft());
}