Ejemplo n.º 1
0
        public void Grab_UnresolvedRuleRef_ThrowsException()
        {
            var ruleRef = new RuleRef <string>();
            var index   = new TokenStreamIndex(new TokenStream(StaticLexer.FromWords()), 0);

            ruleRef.Invoking(r => index.OperationsMock().Evaluate(r)).Should().Throw <InvalidOperationException>();
        }
Ejemplo n.º 2
0
        private void AssertLookahead(IRule rule, TokenStreamIndex index, bool expectedSuccess)
        {
            var opsMock = index.OperationsMock().Evaluate(rule);

            opsMock.Result.IsSuccess.Should().Be(expectedSuccess);
            opsMock.Result.Index.Index.Should().Be(0);
            if (expectedSuccess && rule is And)
            {
                opsMock.ConcatTokens().Should().Be("A");
            }
        }
Ejemplo n.º 3
0
        public void RuleRef_GrabWithRule_GrabsTargetRule()
        {
            var mockRule = new MockRule(nameof(MockRule));
            var ruleRef  = new RuleRef <string>(mockRule);

            var index = new TokenStreamIndex(new TokenStream(StaticLexer.FromWords()), 0);

            index.OperationsMock().Evaluate(ruleRef);

            mockRule.DidGrab.Should().BeTrue();
        }
Ejemplo n.º 4
0
        public void AbbaSequence_GivenParseTextAndStart_BehavesCorrectly(string text, int start, string expectedMatch)
        {
            var stream = new TokenStream(new CharacterLexer(text));
            var index  = new TokenStreamIndex(stream, start);
            var rule   = CreateAbbaRule();

            var opsMock = index.OperationsMock().Evaluate(rule);

            opsMock.Result.IsSuccess.Should().Be(expectedMatch.Length == 4);
            opsMock.Result.Index.Index.Should().Be(opsMock.Result.IsSuccess ? start + expectedMatch.Length : start);
            opsMock.ConcatTokens().Should().Be(expectedMatch);
        }
Ejemplo n.º 5
0
        public void ARepeated3to5_GivenParseTextAndStart_BehavesCorrectly(string text, bool expectedSuccess, string expectedMatch)
        {
            var stream = new TokenStream(new CharacterLexer(text));
            var index  = new TokenStreamIndex(stream, 0);
            var rule   = CreateARepeatedRule(3, 5);

            var opsMock = index.OperationsMock().Evaluate(rule);

            opsMock.Result.IsSuccess.Should().Be(expectedSuccess);
            opsMock.Result.Index.Index.Should().Be(expectedSuccess ? expectedMatch.Length : 0);
            opsMock.ConcatTokens().Should().Be(expectedMatch);
        }
Ejemplo n.º 6
0
        public void ARepeated_GivenArbitraryNumberOfAs_BehavesCorrectly(int count, string text)
        {
            var stream = new TokenStream(new CharacterLexer(text));
            var index  = new TokenStreamIndex(stream, 0);
            var rule   = CreateARepeatedRule();

            var opsMock = index.OperationsMock().Evaluate(rule);

            opsMock.Result.IsSuccess.Should().BeTrue();
            opsMock.Result.Index.Index.Should().Be(count);
            opsMock.Tokens.Count.Should().Be(count);
            opsMock.Tokens.All(t => t.Value == "A").Should().BeTrue();
        }
Ejemplo n.º 7
0
        public void AnyTerminal_WithAnyCharacter_Succeeds(string text)
        {
            var stream = new TokenStream(new CharacterLexer(text));
            var rule   = new AnyTerminal("TEST");
            TokenStreamIndex   index;
            RuleOperationsMock opsMock;

            for (int i = 0; i < text.Length; i++)
            {
                index   = new TokenStreamIndex(stream, i);
                opsMock = index.OperationsMock().Evaluate(rule);

                opsMock.Result.IsSuccess.Should().BeTrue();
                opsMock.Result.Index.Index.Should().Be(i + 1);
                opsMock.ConcatTokens().Should().Be(text.Substring(i, 1));
            }

            index   = new TokenStreamIndex(stream, text.Length);
            opsMock = index.OperationsMock().Evaluate(rule);

            opsMock.Result.IsSuccess.Should().BeFalse();
            opsMock.Result.Index.Index.Should().Be(index.Index);
            opsMock.ConcatTokens().Should().Be(String.Empty);
        }