示例#1
0
        public void CombinedGroupsMatchTest()
        {
            // Arrange
            var text          = "asd13579thIs";
            var regex         = new Regex(@"(?:[a-z]+?)(?<odd>13579)(?i:THIS)(\d+)?");
            var expectedMatch = regex.Match(text);

            var regexGenerator = new RegexGenerator(RegexLanguage.DotNet)
                                 .AddGroup("[a-z]+?", false)
                                 .AddGroup("13579", true, "odd")
                                 .AddGroup("THIS", false, options: "i") // capturing group option does not matter.
                                 .AddGroup(@"\d+", true, min: 0, max: 1);

            // Act
            var generatedRegex = regexGenerator.Create();
            var actualMatch    = generatedRegex.Match(text);

            // Assert
            Assert.True(expectedMatch.Success);
            Assert.True(actualMatch.Success);
            Assert.Equal(expectedMatch.Value, actualMatch.Value);
            Assert.Equal(expectedMatch.Groups.Count, actualMatch.Groups.Count);
            for (var i = 0; i < expectedMatch.Groups.Count; i++)
            {
                Assert.Equal(expectedMatch.Groups[i].Name, actualMatch.Groups[i].Name);
                Assert.Equal(expectedMatch.Groups[i].Value, actualMatch.Groups[i].Value);
            }
        }
示例#2
0
        public void TestMethod1()
        {
            var rg = new RegexGenerator();

            rg.Add("a");
            rg.Add("b");
            rg.Add("c");
            Assert.AreEqual("[abc]", rg.Generate(RegexOperator.DEFAULT));
        }
示例#3
0
        public void TestMethod3()
        {
            var rg = new RegexGenerator();

            rg.Add("ab");
            rg.Add("ac");
            rg.Add("z");
            Assert.AreEqual("(z|a[bc])", rg.Generate(RegexOperator.DEFAULT));
        }
        public void AddNonCapturingGroupTest()
        {
            // Arrange
            var regexGenerator = new RegexGenerator();

            // Act
            regexGenerator.AddGroup(@"a", capturing: false);

            // Assert
            Assert.Equal(@"(?:a)", regexGenerator.ToString());
        }
        public void AddNamedCapturingGroupTest()
        {
            // Arrange
            var regexGenerator = new RegexGenerator();

            // Act
            regexGenerator.AddGroup(@"a", name: "a");

            // Assert
            Assert.Equal(@"(?<a>a)", regexGenerator.ToString());
        }
        public void AddConditionalTest()
        {
            // Arrange
            var regexGenerator = new RegexGenerator();

            // Act
            regexGenerator.AddConditional(@"a", "b", "c");

            // Assert
            Assert.Equal(@"(?(?=a)b|c)", regexGenerator.ToString());
        }
        public void AddNodeQuantifierTest(RegexQuantifierOption quantifierOption)
        {
            // Arrange
            var regexGenerator = new RegexGenerator();

            // Act
            regexGenerator.Add(@"a", min: 1, max: 10, quantifierOption: quantifierOption);

            // Assert
            Assert.Equal($@"a{{1,10}}{regexGenerator.RegexLanguageStrategy.Stringifier.ToQuantifierOptionString(quantifierOption)}", regexGenerator.ToString());
        }
        public void AddUnicodeCategoryByStringTest()
        {
            // Arrange
            var regexGenerator = new RegexGenerator();

            // Act
            regexGenerator.AddUnicodeCategory("L");

            // Assert
            Assert.Equal(@"\p{L}", regexGenerator.ToString());
        }
        public void AddNegativeLookbehindAssertionTest()
        {
            // Arrange
            var regexGenerator = new RegexGenerator();

            // Act
            regexGenerator.AddNegativeLookbehindAssertion(@"a");

            // Assert
            Assert.Equal(@"(?<!a)", regexGenerator.ToString());
        }
        public void AddNodeTest()
        {
            // Arrange
            var regexGenerator = new RegexGenerator();

            // Act
            regexGenerator.Add(@"a");

            // Assert
            Assert.Equal(@"a", regexGenerator.ToString());
        }
        public void AddAtomicGroupTest()
        {
            // Arrange
            var regexGenerator = new RegexGenerator();

            // Act
            regexGenerator.AddAtomicGroup(@"a");

            // Assert
            Assert.Equal(@"(?>a)", regexGenerator.ToString());
        }
        public void AddPositiveLookaheadAssertionTest()
        {
            // Arrange
            var regexGenerator = new RegexGenerator();

            // Act
            regexGenerator.AddPositiveLookaheadAssertion(@"a");

            // Assert
            Assert.Equal(@"(?=a)", regexGenerator.ToString());
        }
        public void SimpleAddNestedNodeTest()
        {
            // Arrange
            var regexGenerator = new RegexGenerator();
            var node           = new RegexNode(@"a");

            // Act
            regexGenerator.AddGroup(node);

            // Assert
            Assert.Equal(@"(a)", regexGenerator.ToString());
        }
示例#14
0
        public void SimplePatternGenerationTest()
        {
            // Arrange
            var expectedPattern = @"\d";
            var regexGenerator  = new RegexGenerator(RegexLanguage.DotNet)
                                  .Add(expectedPattern);

            // Act
            var actualPattern = regexGenerator.ToString();

            // Assert
            Assert.Equal(expectedPattern, actualPattern);
        }
示例#15
0
        public void SimpleCapturingGroupWithoutNamePatternGenerationTest()
        {
            // Arrange
            var expectedPattern = @"(abcde)";
            var regexGenerator  = new RegexGenerator(RegexLanguage.DotNet)
                                  .AddGroup(@"abcde", true);

            // Act
            var actualPattern = regexGenerator.ToString();

            // Assert
            Assert.Equal(expectedPattern, actualPattern);
        }
示例#16
0
        public void SimpleUnicodeCategoryByStringPatternGenerationTest()
        {
            // Arrange
            var expectedPattern = @"\p{Lo}+";

            var regexGenerator = new RegexGenerator(RegexLanguage.DotNet)
                                 .AddUnicodeCategory("Lo", min: 1);

            // Act
            var actualPattern = regexGenerator.ToString();

            // Assert
            Assert.Equal(expectedPattern, actualPattern);
        }
示例#17
0
        public void SimpleNegativeLookbehindPatternGenerationTest()
        {
            // Arrange
            var expectedPattern = @"(?<!abc)";

            var regexGenerator = new RegexGenerator(RegexLanguage.DotNet)
                                 .AddNegativeLookbehindAssertion("abc");

            // Act
            var actualPattern = regexGenerator.ToString();

            // Assert
            Assert.Equal(expectedPattern, actualPattern);
        }
        public void SimpleNonCapturingGroupPatternGenerationTest()
        {
            // Arrange
            var pattern         = @"(?:abcde)";
            var expectedPattern = $"/{pattern}/";
            var regexGenerator  = new RegexGenerator(RegexLanguage.ECMAScript)
                                  .AddGroup("abcde", false);

            // Act
            var actualPattern = regexGenerator.ToString();

            // Assert
            Assert.Equal(expectedPattern, actualPattern);
        }
示例#19
0
        public void SimpleConditionalPatternGenerationTest()
        {
            // Arrange
            var expectedPattern = @"(?(?=yes)yess|no)";

            var regexGenerator = new RegexGenerator(RegexLanguage.DotNet)
                                 .AddConditional("yes", "yess", "no");

            // Act
            var actualPattern = regexGenerator.ToString();

            // Assert
            Assert.Equal(expectedPattern, actualPattern);
        }
示例#20
0
    static void Main(string[] args)
    {
        var test = new List <String> {
            "a2c", "123"
        };

        var logic = new RegexGenerator();

        var regex = logic.GetRegex(test);

        Console.WriteLine(regex);

        Console.ReadLine();
    }
示例#21
0
        public void SimpleCapturingGroupWithAngleBracketedNamePatternGenerationTest()
        {
            // Arrange
            var expectedPattern = @"(?<word>abcde)";
            var regexGenerator  = new RegexGenerator(RegexLanguage.DotNet)
                                  .AddGroup(@"abcde", name: "word");
            // Important!
            //(regexGenerator.RegexLanguageStrategy.Stringifier as DotNetRegexStringifier).NamedCaptureGroupBracketOption = NamedCaptureGroupBracketOption.AngleBracket;

            // Act
            var actualPattern = regexGenerator.ToString();

            // Assert
            Assert.Equal(expectedPattern, actualPattern);
        }
示例#22
0
        public void SimpleAtomicGroupPatternGenerationTest()
        {
            // Arrange
            var expectedPattern = @"(?>(\w)\1+).\b";

            var regexGenerator = new RegexGenerator(RegexLanguage.DotNet)
                                 .AddAtomicGroup(@"(\w)\1+")
                                 .Add(@".\b");

            // Act
            var actualPattern = regexGenerator.ToString();

            // Assert
            Assert.Equal(expectedPattern, actualPattern);
        }
        public void SimpleNegativeLookaheadPatternGenerationTest()
        {
            // Arrange
            var pattern         = @"(?!abc)";
            var expectedPattern = $"/{pattern}/";

            var regexGenerator = new RegexGenerator(RegexLanguage.ECMAScript)
                                 .AddNegativeLookaheadAssertion("abc");

            // Act
            var actualPattern = regexGenerator.ToString();

            // Assert
            Assert.Equal(expectedPattern, actualPattern);
        }
        public void CompositeAddNestedNodeTest()
        {
            // Arrange
            var regexGenerator = new RegexGenerator();
            var node1          = new RegexNode(@"[abc]");
            var nested1        = new RegexGroupNode(node1, capturing: false, min: 1, max: null, quantifierOption: RegexQuantifierOption.Lazy);
            var node2          = new RegexConditionalNode(@"a", "b", "c");
            var nested2        = new RegexGroupNode(node2, capturing: true, name: "a");

            // Act
            regexGenerator.AddNegativeLookbehindAssertion(nested1)
            .AddGroup(nested2);

            // Assert
            Assert.Equal(@"(?<!(?:[abc])+?)(?<a>(?(?=a)b|c))", regexGenerator.ToString());
        }
示例#25
0
        public void CombinedGroupsPatternGenerationTest()
        {
            // Arrange
            var expectedPattern = @"(?:[a-z]+?)(?<odd>13579)(?i:THIS)(\d+)?";

            var regexGenerator = new RegexGenerator(RegexLanguage.DotNet)
                                 .AddGroup("[a-z]+?", false)
                                 .AddGroup("13579", true, "odd")
                                 .AddGroup("THIS", false, options: "i") // capturing group option does not matter.
                                 .AddGroup(@"\d+", true, min: 0, max: 1);

            // Act
            var actualPattern = regexGenerator.ToString();

            // Assert
            Assert.Equal(expectedPattern, actualPattern);
        }
示例#26
0
        public void UnicodeCategoryByFlagPatternGenerationsTest()
        {
            for (RegexUnicodeCategoryFlag flag = RegexUnicodeCategoryFlag.Lo; flag < RegexUnicodeCategoryFlag.Z; flag = (RegexUnicodeCategoryFlag)((int)flag << 1))
            {
                // Arrange
                var expectedPattern = $@"\p{{{flag}}}+";

                var regexGenerator = new RegexGenerator(RegexLanguage.DotNet)
                                     .AddUnicodeCategory(flag, min: 1);

                // Act
                var actualPattern = regexGenerator.ToString();

                // Assert
                Assert.Equal(expectedPattern, actualPattern);
            }
        }
        public void SimpleConditionalPatternGenerationTest()
        {
            // Arrange
            var expectedPattern = @"(?(?=yes)yess|no)";

            Assert.Throws <ConditionalNotSupportedException>(() =>
            {
                var regexGenerator = new RegexGenerator(RegexLanguage.ECMAScript)
                                     .AddConditional("yes", "yess", "no");

                // Act
                var actualPattern = regexGenerator.ToString();

                // Assert
                Assert.Equal(expectedPattern, actualPattern);
            });
        }
        public void SimpleNegativeLookbehindPatternGenerationTest()
        {
            // Arrange
            var pattern         = @"(?<!abc)";
            var expectedPattern = $"/{pattern}/";

            Assert.Throws <NegativeLookbehindAssertionNotSupportedException>(() =>
            {
                var regexGenerator = new RegexGenerator(RegexLanguage.ECMAScript)
                                     .AddNegativeLookbehindAssertion("abc");

                // Act
                var actualPattern = regexGenerator.ToString();

                // Assert
                Assert.Equal(expectedPattern, actualPattern);
            });
        }
        public void SimpleUnicodeCategoryByStringPatternGenerationTest()
        {
            // Arrange
            var pattern         = @"\p{Lo}+";
            var expectedPattern = $"/{pattern}/";

            Assert.Throws <UnicodeCategoryNotSupportedException>(() =>
            {
                var regexGenerator = new RegexGenerator(RegexLanguage.ECMAScript)
                                     .AddUnicodeCategory("Lo", min: 1);

                // Act
                var actualPattern = regexGenerator.ToString();

                // Assert
                Assert.Equal(expectedPattern, actualPattern);
            });
        }
示例#30
0
        public void SimpleCapturingGroupWithoutNameMatchTest()
        {
            // Arrange
            var text          = "abcde";
            var regex         = new Regex(@"(abcde)");
            var expectedMatch = regex.Match(text);

            var regexGenerator = new RegexGenerator(RegexLanguage.DotNet)
                                 .AddGroup(@"abcde", true);

            // Act
            var generatedRegex = regexGenerator.Create();
            var actualMatch    = generatedRegex.Match(text);

            // Assert
            Assert.True(expectedMatch.Success);
            Assert.True(actualMatch.Success);
            Assert.Equal(expectedMatch.Value, actualMatch.Value);
        }