IronRuby.Tests.Tests.RegexTransform1 C# (CSharp) Method

RegexTransform1() private method

private RegexTransform1 ( ) : void
return void
        public void RegexTransform1() {
            TestCorrectPatternTranslation(@"", @"");

            // escapes
            TestCorrectPatternTranslation(@"\\", @"\\");
            TestCorrectPatternTranslation(@"\_", @"_");
            TestCorrectPatternTranslation(@"abc\0\01\011", "abc\\0\\01\\011");
            TestCorrectPatternTranslation(@"\n\t\r\f\v\a\e\b\A\B\Z\z", "\\\n\\\t\\\r\f\v\a\u001B\\b\\A\\B\\Z\\z");
            TestCorrectPatternTranslation(@"[\n\t\r\f\v\a\e\b\A\B\Z\z]", "[\\\n\\\t\\\r\f\v\a\u001B\bABZz]");
            TestCorrectPatternTranslation(@"\G", RubyRegexOptions.NONE, @"\G", true);
            
            // meta-characters
            TestCorrectPatternTranslation(@"\xd", "\\\u000d");
            TestCorrectPatternTranslation(@"\xdz", "\\\u000dz");
            TestCorrectPatternTranslation(@"\*", @"\*");
            TestCorrectPatternTranslation(@"\[", @"\[");
            TestCorrectPatternTranslation(@"\#", @"\#");
            TestCorrectPatternTranslation(@"\0", @"\0");
            TestCorrectPatternTranslation(@"\x09\x0a\x0d\x20\u0009\u000a\u000d\u0020\u{9 a d 20}",
                                           "\\\u0009\\\u000a\\\u000d\\\u0020\\\u0009\\\u000a\\\u000d\\\u0020\\\u0009\\\u000a\\\u000d\\\u0020");
            TestCorrectPatternTranslation(@"[a\-z]", @"[a\-z]");

            // Unicode escapes
            TestCorrectPatternTranslation(@"\u002a", @"\*");
            TestCorrectPatternTranslation(@"\u005b", @"\[");
            TestCorrectPatternTranslation(@"\u{005b}", @"\[");
            TestCorrectPatternTranslation(@"\u{5b 2a}", @"\[\*");

            // Posix categories
            TestCorrectPatternTranslation(@"[x[:alnum:]y]", @"[x\p{L}\p{N}\p{M}y]");
            TestCorrectPatternTranslation(@"[a[^:alnum:]b]", @"[a\P{L}b-[\p{N}\p{M}-[ab]]]");
            TestCorrectPatternTranslation(@"[[:alpha:]]", @"[\p{L}\p{M}]");
            TestCorrectPatternTranslation(@"[[^:alpha:]]", @"[\P{L}-[\p{M}]]");
            TestCorrectPatternTranslation(@"[[:ascii:]]", @"[\p{IsBasicLatin}]");
            TestCorrectPatternTranslation(@"[[^:ascii:]]", @"[\P{IsBasicLatin}]");
            TestCorrectPatternTranslation(@"[[:blank:]]", "[\\p{Zs}\t]");
            TestCorrectPatternTranslation(@"[[^:blank:]]", "[\\P{Zs}-[\t]]");
            TestCorrectPatternTranslation(@"[[:cntrl:]]", @"[\p{Cc}]");
            TestCorrectPatternTranslation(@"[[^:cntrl:]]", @"[\P{Cc}]");
            TestCorrectPatternTranslation(@"[[:digit:]]", @"[\p{Nd}]");
            TestCorrectPatternTranslation(@"[[^:digit:]]", @"[\P{Nd}]");
            TestCorrectPatternTranslation(@"[[:lower:]]", @"[\p{Ll}]");
            TestCorrectPatternTranslation(@"[[^:lower:]]", @"[\P{Ll}]");
            TestCorrectPatternTranslation(@"[[:punct:]]", @"[\p{P}]");
            TestCorrectPatternTranslation(@"[[^:punct:]]", @"[\P{P}]");
            TestCorrectPatternTranslation(@"[[:space:]]", "[\\p{Z}\u0085\u0009-\u000d]");
            TestCorrectPatternTranslation(@"[[^:space:]]", "[\\P{Z}-[\u0085\u0009-\u000d]]");
            TestCorrectPatternTranslation(@"[[:upper:]]", @"[\p{Lu}]");
            TestCorrectPatternTranslation(@"[[^:upper:]]", @"[\P{Lu}]");
            TestCorrectPatternTranslation(@"[[:xdigit:]]", "[a-fA-F0-9]");
            TestCorrectPatternTranslation(@"[[^:xdigit:]]", "[\0-\uffff-[a-fA-F0-9]]");

            // Unicode categories
            TestCorrectPatternTranslation(@"\p{L}", @"[\p{L}]");
            TestCorrectPatternTranslation(@"\p{Alnum}", @"[\p{L}\p{N}\p{M}]");
            TestCorrectPatternTranslation(@"\P{Alnum}*", @"[\P{L}-[\p{N}\p{M}]]*");
            TestCorrectPatternTranslation(@"\P{^Alnum}", @"[\p{L}\p{N}\p{M}]");
            TestCorrectPatternTranslation(@"[a\p{Alnum}b]", @"[a\p{L}\p{N}\p{M}b]");
            TestCorrectPatternTranslation(@"[^\p{Alnum}]", "[\0-\uffff-[\\p{L}\\p{N}\\p{M}]]");
            TestCorrectPatternTranslation(@"[\P{Alnum}]", @"[\P{L}-[\p{N}\p{M}]]");
            TestCorrectPatternTranslation(@"\P{^Alnum}", @"[\p{L}\p{N}\p{M}]");
            TestCorrectPatternTranslation(@"\p{^Alnum}", @"[\P{L}-[\p{N}\p{M}]]");
            TestCorrectPatternTranslation(@"\p{Alnum}", @"[\p{L}\p{N}\p{M}]");
            TestCorrectPatternTranslation(@"\P{Alnum}", @"[\P{L}-[\p{N}\p{M}]]");
            TestCorrectPatternTranslation(@"\p{Alpha}", @"[\p{L}\p{M}]");
            TestCorrectPatternTranslation(@"\P{Alpha}", @"[\P{L}-[\p{M}]]");
            TestCorrectPatternTranslation(@"\p{ASCII}", "[\\p{IsBasicLatin}]");
            TestCorrectPatternTranslation(@"\P{ASCII}", "[\\P{IsBasicLatin}]");
            TestCorrectPatternTranslation(@"\p{Blank}", "[\\p{Zs}\t]");
            TestCorrectPatternTranslation(@"\P{Blank}", "[\\P{Zs}-[\t]]");
            TestCorrectPatternTranslation(@"\p{Cntrl}", @"[\p{Cc}]");
            TestCorrectPatternTranslation(@"\P{Cntrl}", @"[\P{Cc}]");
            TestCorrectPatternTranslation(@"\p{Digit}", @"[\p{Nd}]");
            TestCorrectPatternTranslation(@"\P{Digit}", @"[\P{Nd}]");
            TestCorrectPatternTranslation(@"\p{Lower}", @"[\p{Ll}]");
            TestCorrectPatternTranslation(@"\P{Lower}", @"[\P{Ll}]");
            TestCorrectPatternTranslation(@"\p{Punct}", @"[\p{P}]");
            TestCorrectPatternTranslation(@"\P{Punct}", @"[\P{P}]");
            TestCorrectPatternTranslation(@"\p{Space}", "[\\p{Z}\u0085\u0009-\u000d]");
            TestCorrectPatternTranslation(@"\P{Space}", "[\\P{Z}-[\u0085\u0009-\u000d]]");
            TestCorrectPatternTranslation(@"\p{Upper}", @"[\p{Lu}]");
            TestCorrectPatternTranslation(@"\P{Upper}", @"[\P{Lu}]");
            TestCorrectPatternTranslation(@"\p{XDigit}", "[a-fA-F0-9]");
            TestCorrectPatternTranslation(@"\P{XDigit}", "[\0-\uffff-[a-fA-F0-9]]");
       
            // possessive quantifiers
            TestCorrectPatternTranslation(@"xyza*+", @"xyz(?>a*)");
            TestCorrectPatternTranslation(@"x[a-b]*+", @"x(?>[a-b]*)");
            TestCorrectPatternTranslation(@"x[a-b]*+*+", @"x(?>(?>[a-b]*)*)");
            TestCorrectPatternTranslation(@"x[a-b]{1,2}+", @"x(?:[a-b]{1,2})+");
            TestCorrectPatternTranslation(@"x{1,2,*+", @"x{1,2(?>,*)");
            TestCorrectPatternTranslation(@"x{1,2*+", @"x{1,(?>2*)");
            TestCorrectPatternTranslation(@"x{1,*+", @"x{1(?>,*)");
            TestCorrectPatternTranslation(@"x{,*+", @"x{(?>,*)");
            TestCorrectPatternTranslation(@"x{1*+", @"x{(?>1*)");
            TestCorrectPatternTranslation(@"x{*+", @"x(?>{*)");

            // ranges
            TestCorrectPatternTranslation("[a-z]", "[a-z]");
            TestCorrectPatternTranslation(@"[\u{40}-z]", "[\u0040-z]");
            TestCorrectPatternTranslation(@"[\u{40}-\u{60}]", "[\u0040-\u0060]");
            TestCorrectPatternTranslation(@"[\x40-\x60]", "[\u0040-\u0060]");
            TestCorrectPatternTranslation(@"[\001-\7]", "[\u0001-\u0007]");
            TestCorrectPatternTranslation(@"[\u{2a}-\u{2b}]", "[\\*-\\+]");
            TestCorrectPatternTranslation(@"[x-]", @"[x\-]");
            TestCorrectPatternTranslation(@"[---]", @"[\--\-]");
            TestCorrectPatternTranslation(@"[\u{1 2 40}-\u{60 3 4}]", "[\u0001\u0002\u0040-\u0060\u0003\u0004]");
            TestCorrectPatternTranslation(@"[\u{1 2 40}-\u0060]", "[\u0001\u0002\u0040-\u0060]");
            TestCorrectPatternTranslation(@"[\u{1 2 40}-z]", "[\u0001\u0002\u0040-z]");
            TestCorrectPatternTranslation(@"[\x3f-\u{40 1 2}]", "[\\\u003f-\u0040\u0001\u0002]");
            TestCorrectPatternTranslation(@"[\w-]", @"[\w\-]");
            TestCorrectPatternTranslation(@"[\p{Alnum}-]", @"[\p{L}\p{N}\p{M}\-]");

            // character set operations
            TestCorrectPatternTranslation("[a-z&&d-e]", "[a-z-[\0-\uffff-[d-e]]]");
            TestCorrectPatternTranslation("[a-z&&[d-e&&e-f]]", "[a-z-[\0-\uffff-[d-e-[\0-\uffff-[e-f]]]]]");
            TestCorrectPatternTranslation("[a-z&&^[b[^c]]]", "[a-z-[c-[b^]]]");
            TestCorrectPatternTranslation("[a-z&&[^b[^c]]]", "[a-z-[\0-\uffff-[c-[b]]]]");
            TestCorrectPatternTranslation("[[^a-z][e-f][^b-q]]", "[\0-\uffff-[a-z-[\0-\uffff-[b-q-[e-f]]]]]");
            TestCorrectPatternTranslation("[&&d-e]", "[a-[a]]");
            TestCorrectPatternTranslation("[a-z&&[d-e&&e-f]x&&^[b[^c]]]", "[a-z-[\0-\uffff-[d-ex-[\0-\uffff-[e-fx-[c-[b^]]]]]]]");
            TestCorrectPatternTranslation("[^[a-b][c-d][^e-f]&&[a-z&&[^d-e]]]", "[\0-\uffff-[a-z-[d-ee-f-[a-bc-d-[d-e]]]]]");

            // groups
            TestCorrectPatternTranslation("((((a))))", "((((a))))");
            TestCorrectPatternTranslation("(?<name>a)", "(?<name>a)");
            TestCorrectPatternTranslation("(?:a)", "(?:a)");
            TestCorrectPatternTranslation("(?:a)", "(?:a)");
            TestCorrectPatternTranslation("(?mix-mix)", "(?six-six)");
            TestCorrectPatternTranslation("(?mix-mix:)", "(?six-six:)");
            TestCorrectPatternTranslation("(?mix-mix:a)", "(?six-six:a)");
            TestCorrectPatternTranslation("(?-mix:a)", "(?-six:a)");
            TestCorrectPatternTranslation("(?m:a)", "(?s:a)");
            TestCorrectPatternTranslation("(?mi:a)", "(?si:a)");
            TestCorrectPatternTranslation("(?m)", "(?s)");
            TestCorrectPatternTranslation("(?<name2>)(?<name1-name2>a)", "(?<name2>)(?<name1-name2>a)");
            TestCorrectPatternTranslation("(?'name2')(?'name1-name2'a)", "(?'name2')(?'name1-name2'a)");
            TestCorrectPatternTranslation("(?=)", "(?=)");
            TestCorrectPatternTranslation("(?=x)", "(?=x)");
            TestCorrectPatternTranslation("(?<=)", "(?<=)");
            TestCorrectPatternTranslation("(?<=x)", "(?<=x)");
            TestCorrectPatternTranslation("(?<!)", "(?<!)");
            TestCorrectPatternTranslation("(?<!x)", "(?<!x)");
            TestCorrectPatternTranslation("(?>)", "(?>)");
            TestCorrectPatternTranslation("(?>x)", "(?>x)");
            TestCorrectPatternTranslation("(?>(?=(?<!f)(o)(o))(?<bar>))", "(?>(?=(?<!f)(o)(o))(?<bar>))");
            
            // backreferences:
            TestCorrectPatternTranslation(@"(x) (?'name') \k<1> \k<name> \k'1' \k<name>", @"(x) (?'name') \k<1> \k<name> \k'1' \k<name>");

            // error: TestCorrectPatternTranslation("(?<a)b>c)", "(?<a)b>c)");
        }
Tests