public void ShouldReadAndSeek() { ICharReader reader; ILexer lexer; Rule letter, word; TokenMatch tokenMatch; reader = new MockedCharReader("abcde"); word = new Rule("Word", Parse.Characters("abcdef")); letter = new Rule("Letter", Parse.CharacterRange('a', 'z')); lexer = new Lexer(word, letter); tokenMatch = lexer.Read(reader); Assert.AreEqual("Letter", tokenMatch.Token.Class); Assert.AreEqual("a", tokenMatch.Token.Value); tokenMatch = lexer.Read(reader); Assert.AreEqual("Letter", tokenMatch.Token.Class); Assert.AreEqual("b", tokenMatch.Token.Value); tokenMatch = lexer.Read(reader); Assert.AreEqual("Letter", tokenMatch.Token.Class); Assert.AreEqual("c", tokenMatch.Token.Value); tokenMatch = lexer.Read(reader); Assert.AreEqual("Letter", tokenMatch.Token.Class); Assert.AreEqual("d", tokenMatch.Token.Value); tokenMatch = lexer.Read(reader); Assert.AreEqual("Letter", tokenMatch.Token.Class); Assert.AreEqual("e", tokenMatch.Token.Value); }
public void ShouldConvertToString() { IPredicate predicate; predicate = Parse.Characters("abcd"); Assert.AreEqual("(abcd)", predicate.ToString()); }
public void ShouldFailToTryReadWhenInvalidCharAtFirstPosition() { ICharReader reader; ILexer lexer; Rule word; TokenMatch tokenMatch; word = new Rule("Word", Parse.Characters("token")); reader = new MockedCharReader("token"); lexer = new Lexer(word); tokenMatch = lexer.TryRead(reader); Assert.IsTrue(tokenMatch.Success); Assert.AreEqual("Word", tokenMatch.Token.Class); Assert.AreEqual("token", tokenMatch.Token.Value); reader = new MockedCharReader(",oken"); lexer = new Lexer(word); tokenMatch = lexer.TryRead(reader); Assert.IsFalse(tokenMatch.Success); Assert.IsNull(tokenMatch.Token.Class); Assert.AreEqual(",", tokenMatch.Token.Value); }
public void ShouldCreateSequencePredicate() { ISequence predicate; predicate = Parse.Characters('a', 'b'); Assert.IsNotNull(predicate); Assert.AreEqual(2, predicate.Items.Count()); Assert.IsInstanceOfType(predicate.Items.ElementAt(0), typeof(Character)); Assert.IsInstanceOfType(predicate.Items.ElementAt(1), typeof(Character)); predicate = Parse.Characters("ab"); Assert.IsNotNull(predicate); Assert.AreEqual(2, predicate.Items.Count()); Assert.IsInstanceOfType(predicate.Items.ElementAt(0), typeof(Character)); Assert.IsInstanceOfType(predicate.Items.ElementAt(1), typeof(Character)); }
public void ShouldCreateOrPredicateAddingAnyCharacter() { IOr predicate; predicate = Parse.Character('a').OrAnyCharacter(); Assert.IsNotNull(predicate); Assert.AreEqual(2, predicate.Items.Count()); Assert.IsInstanceOfType(predicate.Items.ElementAt(0), typeof(Character)); Assert.IsInstanceOfType(predicate.Items.ElementAt(1), typeof(AnyCharacter)); predicate = Parse.Characters("ab").OrAnyCharacter(); Assert.IsNotNull(predicate); Assert.AreEqual(2, predicate.Items.Count()); Assert.IsInstanceOfType(predicate.Items.ElementAt(0), typeof(Sequence)); Assert.IsInstanceOfType(predicate.Items.ElementAt(1), typeof(AnyCharacter)); }
public void ShouldCreateSequencePredicateAddingExceptCharacterRange() { ISequence predicate; predicate = Parse.Character('a').ThenExceptCharacterRange('b', 'z'); Assert.IsNotNull(predicate); Assert.AreEqual(2, predicate.Items.Count()); Assert.IsInstanceOfType(predicate.Items.ElementAt(0), typeof(Character)); Assert.IsInstanceOfType(predicate.Items.ElementAt(1), typeof(ExceptCharacterRange)); predicate = Parse.Characters("ab").ThenExceptCharacterRange('c', 'z'); Assert.IsNotNull(predicate); Assert.AreEqual(3, predicate.Items.Count()); Assert.IsInstanceOfType(predicate.Items.ElementAt(0), typeof(Character)); Assert.IsInstanceOfType(predicate.Items.ElementAt(1), typeof(Character)); Assert.IsInstanceOfType(predicate.Items.ElementAt(2), typeof(ExceptCharacterRange)); }
public void ShouldFailToReadAndThrowEndOfStreamException() { ICharReader reader; ILexer lexer; Rule word; TokenMatch tokenMatch; word = new Rule("Word", Parse.Characters("token")); reader = new MockedCharReader("token"); lexer = new Lexer(word); tokenMatch = lexer.Read(reader); Assert.IsTrue(tokenMatch.Success); Assert.AreEqual("Word", tokenMatch.Token.Class); Assert.AreEqual("token", tokenMatch.Token.Value); reader = new MockedCharReader("toke"); lexer = new Lexer(word); Assert.ThrowsException <EndOfStreamException>(() => tokenMatch = lexer.Read(reader)); }