Ejemplo n.º 1
0
        public void GetLinesFromOneOrMoreBlockTest()
        {
            int patternLength = 4;
            var pattern = new string('\0', patternLength);
            LineBuilder builder = new LineBuilder(pattern, null);
            string text = "a";
            var textBlock = new TextBlock(text);
            OneOrMoreBlock oneOrMoreBlock = new OneOrMoreBlock(textBlock);

            List<string> lines = builder.GetLinesFromOneOrMoreBlock(0, oneOrMoreBlock).ToList();

            Assert.AreEqual(patternLength, lines.Count);
            StringBuilder sb = new StringBuilder();
            for (int i = 0; i < patternLength; i++)
            {
                sb.Append(text);
                Assert.AreEqual(sb.ToString(), lines[i]);
            }

            TextBlock aBlock = new TextBlock("a");
            TextBlock bBlock = new TextBlock("b");
            OrGroupBlock orGroupBlock = new OrGroupBlock(new[] { aBlock, bBlock });
            oneOrMoreBlock = new OneOrMoreBlock(orGroupBlock);
            lines = builder.GetLinesFromOneOrMoreBlock(0, oneOrMoreBlock).ToList();
            Assert.AreEqual(30, lines.Count);
        }
Ejemplo n.º 2
0
        public void GetLinesTestWithEmptyInput()
        {
            int inputLength = 3;
            var input = new string('\0', inputLength);
            var builder = new LineBuilder(input, null);

            List<string> lines;

            // a+b+ - should be abb, aab
            var aBlock = new TextBlock("a");
            var bBlock = new TextBlock("b");
            var plusBlock1 = new OneOrMoreBlock(aBlock);
            var plusBlock2 = new OneOrMoreBlock(bBlock);

            var groupBlock = new AndGroupBlock(new RegexBlock[] { plusBlock1, plusBlock2 });

            var regex1 = new RegularExpression(groupBlock);

            lines = builder.GetLines(regex1).ToList();
            string[] expectedLines = new string[] { "abb", "aab" };
            CollectionAssert.AreEquivalent(expectedLines, lines);

            // a*b* - should be bbb, abb, aab, aaa
            var starBlock1 = new ZeroOrMoreBlock(aBlock);
            var starBlock2 = new ZeroOrMoreBlock(bBlock);

            groupBlock = new AndGroupBlock(new RegexBlock[] { starBlock1, starBlock2 });

            var regex2 = new RegularExpression(groupBlock);

            lines = builder.GetLines(regex2).ToList();
            expectedLines = new string[] { "bbb", "abb", "aab", "aaa" };
            CollectionAssert.AreEquivalent(expectedLines, lines);
        }
Ejemplo n.º 3
0
        public void GetPositionsFromOrGroupBlockTest()
        {
            int patternLength = 2;
            var pattern = new string('\0', patternLength);
            var builder = new Checker(pattern);

            var aBlock = new TextBlock("a");
            var bBlock = new TextBlock("bb");
            var cBlock = new TextBlock("ccc");
            var orGroupBlock = new OrGroupBlock(new RegexBlock[] { aBlock, bBlock, cBlock });
            var positions = builder.GetPositionsFromOrGroupBlock(0, orGroupBlock).ToList();

            CollectionAssert.AreEquivalent(new[] { 1, 2 }, positions);
        }
Ejemplo n.º 4
0
        public void GetLinesFromOrGroupBlockTest()
        {
            int patternLength = 2;
            var pattern = new string('\0', patternLength);
            LineBuilder builder = new LineBuilder(pattern, null);

            TextBlock aBlock = new TextBlock("a");
            TextBlock bBlock = new TextBlock("bb");
            TextBlock cBlock = new TextBlock("ccc");
            OrGroupBlock orGroupBlock = new OrGroupBlock(new[] { aBlock, bBlock, cBlock });
            List<string> lines = builder.GetLinesFromOrGroupBlock(0, orGroupBlock).ToList();

            string[] expectedLines = new string[] { "a", "bb"};
            CollectionAssert.AreEquivalent(expectedLines, lines);
        }
Ejemplo n.º 5
0
        public void ParseTest10()
        {
            var parser = new RegexParser();
            string pattern = ".*a.*";

            // Expected regular expression
            var anyCharacterBlock = new AnyCharacterBlock();
            var zeroOrOneBlock = new ZeroOrMoreBlock(anyCharacterBlock);
            var textBlock = new TextBlock("a");
            var groupBlock = new AndGroupBlock(new RegexBlock[] { zeroOrOneBlock, textBlock, zeroOrOneBlock });

            var expected = new RegularExpression(groupBlock);

            var actual = parser.Parse(pattern);
            Assert.IsTrue(expected.Equals(actual), "Pattern was parsed incorrectly");
        }
Ejemplo n.º 6
0
        public void ParseTest1()
        {
            var parser = new RegexParser();
            string pattern = "a+b+";

            // Expected regular expression
            var aBlock = new TextBlock("a");
            var bBlock = new TextBlock("b");

            var groupBlock = new AndGroupBlock(new RegexBlock[] { new OneOrMoreBlock(aBlock), new OneOrMoreBlock(bBlock) });

            var expected = new RegularExpression(groupBlock);

            var actual = parser.Parse(pattern);
            actual.ShouldBeEquivalentTo(expected,  options => options.IncludingAllRuntimeProperties(), "Pattern has been parsed incorrectly");
        }
Ejemplo n.º 7
0
        public void ParseTest10()
        {
            var parser = new RegexParser();
            string pattern = ".*a.*";

            // Expected regular expression
            var anyCharacterBlock = new AnyCharacterBlock();
            var zeroOrOneBlock = new ZeroOrMoreBlock(anyCharacterBlock);
            var textBlock = new TextBlock("a");
            var groupBlock = new AndGroupBlock(new RegexBlock[] { zeroOrOneBlock, textBlock, zeroOrOneBlock });

            var expected = new RegularExpression(groupBlock);

            var actual = parser.Parse(pattern);
            actual.ShouldBeEquivalentTo(expected, options => options.IncludingAllRuntimeProperties());
        }
Ejemplo n.º 8
0
        public void GePostionsFromZeroOrMoreBlockTest()
        {
            var pattern = "a\0\0\0";
            var builder = new Checker(pattern);
            var textBlock = new TextBlock("a");
            var zeroOrMoreBlock = new ZeroOrMoreBlock(textBlock);

            var positions = builder.GetPositionsFromZeroOrMoreBlock(0, zeroOrMoreBlock).ToList();
            CollectionAssert.AreEquivalent(Enumerable.Range(0, 5).ToArray(), positions);

            var aBlock = new TextBlock("a");
            var bBlock = new TextBlock("b");
            var orGroupBlock = new OrGroupBlock(new[] { aBlock, bBlock });
            zeroOrMoreBlock = new ZeroOrMoreBlock(orGroupBlock);
            positions = builder.GetPositionsFromZeroOrMoreBlock(0, zeroOrMoreBlock).ToList();
            Assert.AreEqual(16, positions.Count);
        }
Ejemplo n.º 9
0
        public void ParseTest1()
        {
            var parser = new RegexParser();
            string pattern = "a+b+";

            // Expected regular expression
            var aBlock = new TextBlock("a");
            var bBlock = new TextBlock("b");
            var plusBlock1 = new OneOrMoreBlock(aBlock);
            var plusBlock2 = new OneOrMoreBlock(bBlock);

            var groupBlock = new AndGroupBlock(new RegexBlock[] { plusBlock1, plusBlock2 });

            var expected = new RegularExpression(groupBlock);

            var actual = parser.Parse(pattern);
            Assert.IsTrue(expected.Equals(actual), "Pattern was parsed incorrectly");
        }
Ejemplo n.º 10
0
        public void GetPositionsFromAndGroupBlockTest()
        {
            int patternLength = 4;
            var pattern = new string('\0', patternLength);
            var builder = new Checker(pattern);

            // (a|aa)(b|bb)
            var aBlock = new TextBlock("a");
            var aaBlock = new TextBlock("aa");
            var bBlock = new TextBlock("b");
            var bbBlock = new TextBlock("bb");
            var orGroupBlock1 = new OrGroupBlock(new RegexBlock[] { aBlock, aaBlock });
            var orGroupBlock2 = new OrGroupBlock(new RegexBlock [] { bBlock, bbBlock });
            var andGroupBlock = new AndGroupBlock(new[] { orGroupBlock1, orGroupBlock2 });

            var positions = builder.GetPositionsFromAndGroupBlock(0, andGroupBlock).ToList();

            CollectionAssert.AreEquivalent(new[] { 2, 3, 3, 4 }, positions);
        }
Ejemplo n.º 11
0
        public void GetLinesFromAndGroupBlockTest()
        {
            int patternLength = 4;
            var pattern = new string('\0', patternLength);
            LineBuilder builder = new LineBuilder(pattern, null);

            // (a|aa)(b|bb)

            TextBlock aBlock = new TextBlock("a");
            TextBlock aaBlock = new TextBlock("aa");
            TextBlock bBlock = new TextBlock("b");
            TextBlock bbBlock = new TextBlock("bb");
            OrGroupBlock orGroupBlock1 = new OrGroupBlock(new[] { aBlock, aaBlock });
            OrGroupBlock orGroupBlock2 = new OrGroupBlock(new[] { bBlock, bbBlock });
            AndGroupBlock andGroupBlock = new AndGroupBlock(new[] { orGroupBlock1, orGroupBlock2 });
            List<string> lines = builder.GetLinesFromAndGroupBlock(0, andGroupBlock).ToList();

            string[] expectedLines = new string[] { "ab", "abb", "aab", "aabb" };
            CollectionAssert.AreEquivalent(expectedLines, lines);
        }
Ejemplo n.º 12
0
        public void GetPositionsFromOneOrMoreBlockTest()
        {
            int patternLength = 4;
            var pattern = new string('\0', patternLength);
            var builder = new Checker(pattern);
            var textBlock = new TextBlock("a");
            var oneOrMoreBlock = new OneOrMoreBlock(textBlock);

            // a+
            var positions = builder.GetPositionsFromOneOrMoreBlock(0, oneOrMoreBlock).ToList();

            CollectionAssert.AreEquivalent(Enumerable.Range(1, patternLength).ToArray(), positions);

            // (a|b)+
            var aBlock = new TextBlock("a");
            var bBlock = new TextBlock("b");
            var orGroupBlock = new OrGroupBlock(new[] { aBlock, bBlock });
            oneOrMoreBlock = new OneOrMoreBlock(orGroupBlock);
            positions = builder.GetPositionsFromOneOrMoreBlock(0, oneOrMoreBlock).ToList();
            Assert.AreEqual(30, positions.Count);
        }
Ejemplo n.º 13
0
        public void TestRealWorldExpression1()
        {
            int inputLength = 10;
            var input = new string('\0', inputLength);
            var builder = new LineBuilder(input, null);

            List<string> lines;

            var block1 = new TextBlock("o");
            var block2 = new TextBlock("rhh");
            var block3 = new TextBlock("mm");

            var orGroupBlock = new OrGroupBlock(new RegexBlock[] { block1, block2, block3 });
            var starBlock = new ZeroOrMoreBlock(orGroupBlock);
            var andGroupBlock = new OrGroupBlock(new RegexBlock[] { starBlock });
            var regex = new RegularExpression(andGroupBlock);

            lines = builder.GetLines(regex).ToList();

            // Check against regular expression
            string regexPattern = "(o|rhh|mm)*";
            CheckGeneratedLines(lines, regexPattern);
        }
Ejemplo n.º 14
0
 protected virtual object VisitTextBlock(TextBlock block)
 {
     return block;
 }
Ejemplo n.º 15
0
        public void GetPositionsFromTextBlockTest()
        {
            var textBlock1 = new TextBlock("a");
            var visitor1 = new CheckerRegexVisitor(0, "\0", null);

            var positions1 = visitor1.GetPositions(textBlock1);
            positions1.Should().BeEquivalentTo(new[] { 1 });

            var visitor2 = new CheckerRegexVisitor(1, "\0", null);
            var positions2 = visitor2.GetPositions(textBlock1);
            positions2.Should().BeEmpty();

            // Text block longer than symbols that remain unfilled.
            var textBlock2 = new TextBlock("aa");

            var visitor3 = new CheckerRegexVisitor(0, "\0", null);
            var positions3 = visitor3.GetPositions(textBlock2);
            positions3.Should().BeEmpty();

            var visitor4 = new CheckerRegexVisitor(0, "aa", null);
            var positions4 = visitor4.GetPositions(textBlock2);
            positions4.Should().BeEquivalentTo(new[] { 2 });

            var textBlock3 = new TextBlock("ab");
            var visitor5 = new CheckerRegexVisitor(0, "aa", null);
            var positions5 = visitor5.GetPositions(textBlock3);
            positions5.Should().BeEmpty();
        }
Ejemplo n.º 16
0
        public void ParseTest6()
        {
            var parser = new RegexParser();
            string pattern = "(a|b)";

            // Expected regular expression
            var aBlock = new TextBlock("a");
            var bBlock = new TextBlock("b");

            var orGroupBlock = new OrGroupBlock(new RegexBlock[] { aBlock, bBlock });

            var expected = new RegularExpression(orGroupBlock);

            var actual = parser.Parse(pattern);
            actual.ShouldBeEquivalentTo(expected, options => options.IncludingAllRuntimeProperties());
        }
Ejemplo n.º 17
0
        public void ParseTest4()
        {
            var parser = new RegexParser();
            string pattern = "(a+)*";

            // Expected regular expression
            var aBlock = new TextBlock("a");

            var plusBlock = new OneOrMoreBlock(aBlock);
            var andGroupBlock = new AndGroupBlock(new[] { plusBlock });
            var starBlock = new ZeroOrMoreBlock(andGroupBlock);
            var andGroupBlock2 = new AndGroupBlock(new[] { starBlock });
            var expected = new RegularExpression(andGroupBlock2);

            var actual = parser.Parse(pattern);
            actual.ShouldBeEquivalentTo(expected, options => options.IncludingAllRuntimeProperties());
        }
Ejemplo n.º 18
0
        public void ParseTest3()
        {
            var parser = new RegexParser();
            string pattern = "(ab|bc)+";

            // Expected regular expression
            var abBlock = new TextBlock("ab");
            var bcBlock = new TextBlock("bc");

            var orGroupBlock = new OrGroupBlock(new RegexBlock[] { abBlock, bcBlock });
            var plusBlock = new OneOrMoreBlock(orGroupBlock);
            var andGroupBlock = new AndGroupBlock(new[] { plusBlock });
            var expected = new RegularExpression(andGroupBlock);

            var actual = parser.Parse(pattern);
            actual.ShouldBeEquivalentTo(expected, options => options.IncludingAllRuntimeProperties());
        }
Ejemplo n.º 19
0
 private static char ExtractCharacter(ref TextBlock textBlock)
 {
     var text = textBlock.Text;
     var c = text.Last();
     var newText = text.Remove(text.Length - 1, 1);
     textBlock = new TextBlock(newText);
     return c;
 }
Ejemplo n.º 20
0
        public void ParseTest2()
        {
            var parser = new RegexParser();
            string pattern = "a*b*";

            // Expected regular expression
            var aBlock = new TextBlock("a");
            var bBlock = new TextBlock("b");

            var starBlock1 = new ZeroOrMoreBlock(aBlock);
            var starBlock2 = new ZeroOrMoreBlock(bBlock);

            var groupBlock = new AndGroupBlock(new RegexBlock[] { starBlock1, starBlock2 });

            var expected = new RegularExpression(groupBlock);

            var actual = parser.Parse(pattern);
            actual.ShouldBeEquivalentTo(expected, options => options.IncludingAllRuntimeProperties());
        }
Ejemplo n.º 21
0
        public void ParseTest14()
        {
            var parser = new RegexParser();
            string pattern = @"[^c]*[^r]*iii.*";

            // Expected regular expression
            var textBlock = new TextBlock("iii");

            var groupBlock =
                new AndGroupBlock(
                    new RegexBlock[]
                        {
                            new ZeroOrMoreBlock(new ExclusiveSetBlock("c")), new ZeroOrMoreBlock(new ExclusiveSetBlock("r")), textBlock,
                            new ZeroOrMoreBlock(new AnyCharacterBlock())
                        });

            var expected = new RegularExpression(groupBlock);

            var actual = parser.Parse(pattern);
            actual.ShouldBeEquivalentTo(expected, options => options.IncludingAllRuntimeProperties());
        }
Ejemplo n.º 22
0
        public void ParseTest3()
        {
            var parser = new RegexParser();
            string pattern = "(ab|bc)+";

            // Expected regular expression
            var abBlock = new TextBlock("ab");
            var bcBlock = new TextBlock("bc");

            var orGroupBlock = new OrGroupBlock(new RegexBlock[] { abBlock, bcBlock });
            var plusBlock = new OneOrMoreBlock(orGroupBlock);
            var andGroupBlock = new AndGroupBlock(new[] { plusBlock });
            var expected = new RegularExpression(andGroupBlock);

            var actual = parser.Parse(pattern);
            Assert.IsTrue(expected.Equals(actual), "Pattern was parsed incorrectly");
        }
Ejemplo n.º 23
0
        public void GetPositionsFromZeroOrOneBlockTest()
        {
            int patternLength = 3;
            var pattern = new string('\0', patternLength);
            var builder = new Checker(pattern);
            var textBlock = new TextBlock("a");
            var zeroOrOneBlock = new ZeroOrOneBlock(textBlock);

            var positions = builder.GetPositionsFromZeroOrOneBlock(0, zeroOrOneBlock).ToList();

            CollectionAssert.AreEquivalent(new[] { 0, 1 }, positions);
        }
Ejemplo n.º 24
0
        public void ParseTest4()
        {
            var parser = new RegexParser();
            string pattern = "(a+)*";

            // Expected regular expression
            var aBlock = new TextBlock("a");

            var plusBlock = new OneOrMoreBlock(aBlock);
            var andGroupBlock = new AndGroupBlock(new[] { plusBlock });
            var starBlock = new ZeroOrMoreBlock(andGroupBlock);
            var andGroupBlock2 = new AndGroupBlock(new[] { starBlock });
            var expected = new RegularExpression(andGroupBlock2);

            var actual = parser.Parse(pattern);
            Assert.IsTrue(expected.Equals(actual), "Pattern was parsed incorrectly");
        }
        public void GetLinesFromTextBlockTest()
        {
            var visitor1 = new BuilderRegexVisitor(0, "\0", null, null);
            var textBlock = new TextBlock("a");

            CheckVisitorResult(visitor1, textBlock, new[] { "a" });

            var visitor2 = new BuilderRegexVisitor(1, "\0", null, null);
            CheckVisitorResult(visitor2, textBlock, Enumerable.Empty<string>());

            // Text block longer than symbols that remain unfilled.
            textBlock = new TextBlock("aa");

            var visitor3 = new BuilderRegexVisitor(0, "\0", null, null);
            CheckVisitorResult(visitor3, textBlock, Enumerable.Empty<string>());

            var input = "aa";
            var visitor4 = new BuilderRegexVisitor(0, input, null, null);
            CheckVisitorResult(visitor4, textBlock, new[] { "aa" });

            var visitor5 = new BuilderRegexVisitor(0, input, null, null);
            textBlock = new TextBlock("ab");

            CheckVisitorResult(visitor5, textBlock, Enumerable.Empty<string>());
        }
Ejemplo n.º 26
0
        public void ParseTest6()
        {
            var parser = new RegexParser();
            string pattern = "(a|b)";

            // Expected regular expression
            var aBlock = new TextBlock("a");
            var bBlock = new TextBlock("b");

            var orGroupBlock = new OrGroupBlock(new RegexBlock[] { aBlock, bBlock });

            var expected = new RegularExpression(orGroupBlock);

            var actual = parser.Parse(pattern);
            Assert.IsTrue(expected.Equals(actual), "Pattern was parsed incorrectly");
        }
Ejemplo n.º 27
0
 protected override object VisitTextBlock(TextBlock block)
 {
     string text = block.Text;
     if (CanUseText(_position, text))
         return new[] { _position + text.Length };
     return _errorResult;
 }
Ejemplo n.º 28
0
        public void GetLinesFromZeroOrOneBlockTest()
        {
            int patternLength = 3;
            var pattern = new string('\0', patternLength);
            LineBuilder builder = new LineBuilder(pattern, null);
            string text = "a";
            var textBlock = new TextBlock(text);
            var zeroOrOneBlock = new ZeroOrOneBlock(textBlock);

            List<string> lines = builder.GetLinesFromZeroOrOneBlock(0, zeroOrOneBlock).ToList();

            string[] expectedLines = new[] { "", "a" };
            CollectionAssert.AreEquivalent(expectedLines, lines);
        }