public void TestKeywordMatcher() { KeywordMatcher matcher = new KeywordMatcher("invalid", TokenType.INVALID, Delimiters, false); StringTokenizer data = new StringTokenizer("+=+//= invalid=invalidinvalid$="); SourcePosition streamPos = new SourcePosition(0, 0, 0); // Match a basic delimiter keyword Assert.AreEqual(Delimiters.Find(m => m.Keyword == "+=").MatchNext(data, ref streamPos, Log).Type, TokenType.AddAssign); Assert.AreEqual(data.CurrentItem, "+"); data.Advance(); // Assert that the matched token contains the value Assert.AreEqual(Delimiters.Find(m => m.Keyword == "/").MatchNext(data, ref streamPos, Log).Value, "/"); Assert.AreEqual(data.CurrentItem, "/"); data.Advance(3); // Match against a keyword rather than short operator as well as delimiter Assert.IsNotNull(matcher.MatchNext(data, ref streamPos, Log)); Assert.AreEqual(data.CurrentItem, "="); data.Advance(); // Assert that non-delimiters will prevent a match Assert.IsNull(matcher.MatchNext(data, ref streamPos, Log)); Assert.AreEqual(data.CurrentItem, "i"); data.Advance(14); // Ensure EOF with keywords Assert.IsNotNull(Delimiters.Find(m => m.Keyword == "$=").MatchNext(data, ref streamPos, Log)); Assert.IsTrue(data.AtEnd()); }