public void OneOrMore_should_not_match(string text) { // arrange var buffer = text.ToSinglyLinked(); // act var(isMatch, start, end) = OneOrMore(Space())(buffer); // assert isMatch.ShouldBeFalse(); start.ShouldBe(end); }
public void OneOrMore_should_match(string text) { // arrange var buffer = text.ToSinglyLinked(); // act var(isMatch, start, end) = OneOrMore(Space())(buffer); // assert isMatch.ShouldBeTrue(); start.Head.ShouldBe(' '); end.ShouldBeNull(); }
private static ParseResult Match_Namespace(InputStream input) { var ids = new List <string>(); ParseResult result = OneOrMore( WithAction(Sequence(Match_Id, Match_Dot), r => ids.Add(new SequenceResult(r)[0].MatchedString)))(input); if (result.Matched) { var ns = string.Join(".", ids.ToArray()); return(new ParseResult(result.MatchedString, ns)); } return(result); }
public override void VisitLeave(OneOrMore expression) { IsMatchPredicate local = _matchStack.Pop(); _matchStack.Push( delegate(IInputIterator iterator) { Int32 cnt = 0; Int32 savePosition = iterator.Index; while (local(iterator)) { cnt++; if (savePosition == iterator.Index) { //InfiniteLoopDetectedException break; } savePosition = iterator.Index; } iterator.Index = savePosition; return(cnt > 0); } ); }
public void WhenNoCharacterIsConsumedShouldReturnInitialText() { var a = new OneOrMore(new Character('a')); IMatch actual = a.Match("bc"); Assert.Equal("bc", actual.RemainingText()); }
public Number() { var minus = new Character('-'); var zero = new Character('0'); var digit = new Range('0', '9'); var digits = new OneOrMore(digit); var point = new Sequence(new Character('.'), digits); var natural = new Choice( zero, digits); var integer = new Sequence( new Optional(minus), natural); var exponent = new Sequence( new Any("eE"), new Optional(new Any("+-")), digits); var fractional = new Sequence( point, new Optional(exponent)); pattern = new Sequence( integer, new Optional(fractional), new Optional(exponent)); }
public void For_aabac_Should_Return_True() { var a = new OneOrMore(new Character('a')); IMatch actual = a.Match("aabac"); Assert.True(actual.Succes()); }
public void Should_Return_False_When_No_Character_Is_Consumed() { var a = new OneOrMore(new Character('a')); IMatch actual = a.Match("bc"); Assert.False(actual.Succes()); }
public void Should_Consume_More_Characters_From_String() { var a = new OneOrMore(new Character('a')); IMatch actual = a.Match("aaabc"); Assert.True(actual.Succes()); }
public void FirstNumberMatchesRangeOfDigits() { OneOrMore pattern = new OneOrMore(new Range('0', '9')); Assert.True(pattern.Match("12345ab123").Success()); Assert.True(pattern.Match("12345ab123").RemainingText() == "ab123"); }
public void FirstCharacterMatchesCharacter() { OneOrMore pattern = new OneOrMore(new Character('a')); Assert.True(pattern.Match("abc").Success()); Assert.True(pattern.Match("abc").RemainingText() == "bc"); }
public void FirstCharacterAndSpaceMatchCharacter() { OneOrMore pattern = new OneOrMore(new Character('a')); Assert.True(pattern.Match("a ").Success()); Assert.True(pattern.Match("a ").RemainingText() == " "); }
public void EmptyStringMatchesCharacter() { OneOrMore pattern = new OneOrMore(new Character('a')); Assert.False(pattern.Match("").Success()); Assert.True(pattern.Match("").RemainingText() == ""); }
public void MultipleFirstCharacterMatchManyTextPattern() { OneOrMore pattern = new OneOrMore(new Text("abc")); Assert.True(pattern.Match("abcabcd").Success()); Assert.True(pattern.Match("abcabcd").RemainingText() == "d"); }
public void NumberAndCharacterMatchesRangeOfDigits() { OneOrMore pattern = new OneOrMore(new Range('0', '9')); Assert.True(pattern.Match("123ab").Success()); Assert.True(pattern.Match("123ab").RemainingText() == "ab"); }
public void PatterDontMatch() { OneOrMore x = new OneOrMore(new Range('0', '9')); Assert.False(x.Match("ab").Success()); Assert.Equal("ab", x.Match("0ab").RemainingText()); }
public void LettersMatchRangeOfDigits() { OneOrMore pattern = new OneOrMore(new Range('0', '9')); Assert.False(pattern.Match("bc").Success()); Assert.True(pattern.Match("bc").RemainingText() == "bc"); }
public void Should_Consume_More_Characters_From_String_With_RemainingTest_bc() { var a = new OneOrMore(new Character('a')); IMatch actual = a.Match("aaabc"); Assert.Equal("bc", actual.RemainingText()); }
public void NullDoesNotMatchRangeOfDigits() { OneOrMore pattern = new OneOrMore(new Range('0', '9')); Assert.False(pattern.Match(null).Success()); Assert.True(pattern.Match(null).RemainingText() == null); }
public void When_No_Character_Is_Consumed_Should_Return_Initial_Text() { var a = new OneOrMore(new Character('a')); IMatch actual = a.Match("bc"); Assert.Equal("bc", actual.RemainingText()); }
public void ShouldConsumeMoreCharactersFromStringWithRemainingTestbc() { var a = new OneOrMore(new Character('a')); IMatch actual = a.Match("aaabc"); Assert.Equal("bc", actual.RemainingText()); }
public void For_aabac_Should_Return_bac() { var a = new OneOrMore(new Character('a')); IMatch actual = a.Match("aabac"); Assert.Equal("bac", actual.RemainingText()); }
public void ShouldReturnFalseWhenNoCharacterIsConsumed() { var a = new OneOrMore(new Character('a')); IMatch actual = a.Match("bc"); Assert.False(actual.Succes()); }
public void ShouldConsumeTheFirstCharacterFromString() { var a = new OneOrMore(new Character('a')); IMatch actual = a.Match("abc"); Assert.True(actual.Succes()); }
public RequestLine() { var token = new OneOrMore(new Choice( new Character('!'), new Range('#', '\''), new Range('*', '+'), new Range('-', '.'), new Range('^', '`'), new Range('0', '9'), new Range('a', 'z'), new Range('A', 'Z'), new Character('|'), new Character('~'))); var digits = new OneOrMore(new Range('0', '9')); var extensionMethod = token; var method = new Choice( new Text("OPTIONAL"), new Text("GET"), new Text("HEAD"), new Text("POST"), new Text("PUT"), new Text("DELETE"), new Text("CONNECT"), new Text("TRACE")); var slash = new Character('/'); var period = new Character('.'); var space = new Character(' '); var lineEnd = new Text("\r\n"); var httpVersion = new Sequance(new Text("HTTP"), slash, digits, period, digits); this.pattern = new Sequance(method, space, new RequestURI(), space, httpVersion, lineEnd); }
public IMatch Match(string myString) { var unreserved = new Choice(new Choice(new Range('a', 'z'), new Range('A', 'Z')), new Range('0', '9'), new Any("-._~")); var subDelims = new Any("!$&'()*+,;="); var reg = new OneOrMore(new Choice(unreserved, subDelims)); return(reg.Match(myString)); }
public void ReturnsFalseAndEmptyForEmptyString() { var a = new OneOrMore( new Range('0', '9')); Assert.False(a.Match("").Success()); Assert.Equal("", a.Match("").RemainingText()); }
public void AllPatternMatch() { OneOrMore x = new OneOrMore(new Range('0', '9')); var match = x.Match("123"); Assert.True(match.Success()); Assert.Equal("", match.RemainingText()); }
public void ReturnsTrueAndRemainingForTwoMatchesString() { var a = new OneOrMore( new Range('0', '9')); Assert.True(a.Match("12a").Success()); Assert.Equal("a", a.Match("12a").RemainingText()); }
public void ReturnsFalseAndTextForNoMatchesString() { var a = new OneOrMore( new Range('0', '9')); Assert.False(a.Match("bc").Success()); Assert.Equal("bc", a.Match("bc").RemainingText()); }
public void ShouldConvertToGrammarString() { var expr = new OneOrMore(new LiteralTerminal("a")); Assert.Equal("'a'+", expr.ToString()); }