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); }
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); }
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); }
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); }
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"); }
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"); }
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()); }
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); }
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"); }
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); }
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); }
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); }
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); }
protected virtual object VisitTextBlock(TextBlock block) { return block; }
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(); }
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()); }
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()); }
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()); }
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; }
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()); }
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()); }
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"); }
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); }
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>()); }
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"); }
protected override object VisitTextBlock(TextBlock block) { string text = block.Text; if (CanUseText(_position, text)) return new[] { _position + text.Length }; return _errorResult; }
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); }