Ejemplo n.º 1
0
        public void should_split_string_up_to_given_part_count()
        {
            var re     = new PcreRegex(@"\s+");
            var result = re.Split("foo bar   baz  abc", 2).ToList();

            Assert.That(result, Is.EqualTo(new[] { "foo", "bar", "baz  abc" }));
        }
Ejemplo n.º 2
0
        public void should_check_subject_utf_validity()
        {
            var re = new PcreRegex(@"A");
            var ex = Assert.Throws <PcreMatchException>(() => re.Match("A\uD800B"));

            Assert.That(ex.Message, Contains.Substring("invalid low surrogate"));
        }
Ejemplo n.º 3
0
        public void should_return_pattern_and_options()
        {
            var re = new PcreRegex(@"foo\s+bar", PcreOptions.IgnoreCase);

            Assert.That(re.PaternInfo.PatternString, Is.EqualTo(@"foo\s+bar"));
            Assert.That(re.PaternInfo.Options, Is.EqualTo(PcreOptions.IgnoreCase));
        }
Ejemplo n.º 4
0
        public void should_match_starting_at_end_of_string()
        {
            var re      = new PcreRegex(@"(?<=a)");
            var matches = re.Matches("xxa", 3).ToList();

            Assert.That(matches, Has.Count.EqualTo(1));
        }
Ejemplo n.º 5
0
        public void should_execute_passing_callout()
        {
            const string pattern = @"(a)(*MARK:foo)(x)?(?C42)(bc)";
            var          re      = new PcreRegex(pattern);

            var calls = 0;

            var match = re.Match("abc", data =>
            {
                Assert.That(data.Number, Is.EqualTo(42));
                Assert.That(data.CurrentOffset, Is.EqualTo(1));
                Assert.That(data.PatternPosition, Is.EqualTo(pattern.IndexOf("(?C42)", StringComparison.Ordinal) + 6));
                Assert.That(data.StartOffset, Is.EqualTo(0));
                Assert.That(data.LastCapture, Is.EqualTo(1));
                Assert.That(data.MaxCapture, Is.EqualTo(2));
                Assert.That(data.NextPatternItemLength, Is.EqualTo(4));

                Assert.That(data.Match.Value, Is.EqualTo("a"));
                Assert.That(data.Match[1].Value, Is.EqualTo("a"));
                Assert.That(data.Match[2].Success, Is.False);
                Assert.That(data.Match[2].Value, Is.SameAs(String.Empty));
                Assert.That(data.Match[3].Success, Is.False);
                Assert.That(data.Match[3].Value, Is.SameAs(String.Empty));

                Assert.That(data.Match.Mark, Is.EqualTo("foo"));

                ++calls;
                return(PcreCalloutResult.Pass);
            });

            Assert.That(match, Is.Not.Null);
            Assert.That(match.Success, Is.True);
            Assert.That(calls, Is.EqualTo(1));
        }
Ejemplo n.º 6
0
        public void should_insert_nothing_if_no_group_matched()
        {
            var re     = new PcreRegex(@"a+(b+)?");
            var result = re.Replace("foo aabb bar baz", "<$+>");

            Assert.That(result, Is.EqualTo("foo <bb> b<>r b<>z"));
        }
Ejemplo n.º 7
0
        public void should_insert_nothing_if_there_are_no_groups()
        {
            var re     = new PcreRegex(@"a+");
            var result = re.Replace("foo bar", "<$+>");

            Assert.That(result, Is.EqualTo("foo b<>r"));
        }
Ejemplo n.º 8
0
        public void should_split_string()
        {
            var re     = new PcreRegex(@"\s+");
            var result = re.Split("foo bar   baz").ToList();

            Assert.That(result, Is.EqualTo(new[] { "foo", "bar", "baz" }));
        }
Ejemplo n.º 9
0
        public void should_split_on_empty_pattern()
        {
            var re     = new PcreRegex(@"");
            var result = re.Split("foo").ToList();

            Assert.That(result, Is.EqualTo(new[] { "", "f", "o", "o", "" }));
        }
Ejemplo n.º 10
0
        public void should_not_include_captured_groups_in_result_if_not_specified()
        {
            var re     = new PcreRegex(@"<(\d)?(.+?)>");
            var result = re.Split("foo<bar>baz<42>a").ToList();

            Assert.That(result, Is.EqualTo(new[] { "foo", "baz", "a" }));
        }
Ejemplo n.º 11
0
        public void should_include_empty_groups_in_result()
        {
            var re     = new PcreRegex(@"<(\d?)(.+?)>");
            var result = re.Split("foo<bar>baz<42>a", PcreSplitOptions.IncludeGroupValues).ToList();

            Assert.That(result, Is.EqualTo(new[] { "foo", "", "bar", "baz", "4", "2", "a" }));
        }
Ejemplo n.º 12
0
        public void should_not_split_when_given_count_is_zero()
        {
            var re     = new PcreRegex(@"\s+");
            var result = re.Split("foo bar baz", 0).ToList();

            Assert.That(result, Is.EqualTo(new[] { "foo bar baz" }));
        }
Ejemplo n.º 13
0
        public void should_split_string_starting_at_given_index_and_up_to_given_part_count()
        {
            var re     = new PcreRegex(@"\s+");
            var result = re.Split("foo bar   baz  abc def", 2, 6).ToList();

            Assert.That(result, Is.EqualTo(new[] { "foo bar", "baz", "abc def" }));
        }
Ejemplo n.º 14
0
        public void should_split_string_starting_at_given_index()
        {
            var re     = new PcreRegex(@"\s+");
            var result = re.Split("foo bar   baz  abc def", -1, 12).ToList();

            Assert.That(result, Is.EqualTo(new[] { "foo bar   baz", "abc", "def" }));
        }
Ejemplo n.º 15
0
        public void should_insert_subject()
        {
            var re     = new PcreRegex(@"a+(b+)", PcreOptions.IgnoreCase);
            var result = re.Replace("foo aabb bar aaabbab baz", "<$_>");

            Assert.That(result, Is.EqualTo("foo <foo aabb bar aaabbab baz> bar <foo aabb bar aaabbab baz><foo aabb bar aaabbab baz> baz"));
        }
Ejemplo n.º 16
0
        public void should_report_callout_exception_ref()
        {
            var re = new PcreRegex(@"a(?C1)");

            var resultCount = 0;

            Assert.Throws <PcreCalloutException>(() =>
            {
                re.Matches("aaa".AsSpan(), 0, callout =>
                {
                    if (callout.StartOffset >= 2)
                    {
                        throw new InvalidOperationException("Simulated exception");
                    }

                    return(PcreCalloutResult.Pass);
                }).ToList(i =>
                {
                    ++resultCount;
                    return(true);
                });
            });

            Assert.That(resultCount, Is.EqualTo(2));
        }
Ejemplo n.º 17
0
        public void should_insert_last_matched_group()
        {
            var re     = new PcreRegex(@"a+(b+)(c+)?", PcreOptions.IgnoreCase);
            var result = re.Replace("foo aabb bar aaabbabcc baz", "<$+>");

            Assert.That(result, Is.EqualTo("foo <bb> bar <bb><cc> baz"));
        }
Ejemplo n.º 18
0
        public void should_only_replace_given_count()
        {
            var re     = new PcreRegex(@"a+", PcreOptions.IgnoreCase);
            var result = re.Replace("foo aabb bar aaabbab baz", "X", 2);

            Assert.That(result, Is.EqualTo("foo Xbb bXr aaabbab baz"));
        }
Ejemplo n.º 19
0
        public void should_replace_matches_with_callback()
        {
            var re     = new PcreRegex(@"a+", PcreOptions.IgnoreCase);
            var result = re.Replace("foo aaa bar aAAa baz", match => match.Length.ToString(CultureInfo.InvariantCulture));

            Assert.That(result, Is.EqualTo("foo 3 b1r 4 b1z"));
        }
Ejemplo n.º 20
0
        public void should_not_replace_when_count_is_zero()
        {
            var re     = new PcreRegex(@"a+", PcreOptions.IgnoreCase);
            var result = re.Replace("foo aabb bar aaabbab baz", "X", 0);

            Assert.That(result, Is.EqualTo("foo aabb bar aaabbab baz"));
        }
Ejemplo n.º 21
0
        public void should_match_from_index()
        {
            var re      = new PcreRegex(@"a");
            var matches = re.Matches("foo bar baz", 6).ToList();

            Assert.That(matches, Has.Count.EqualTo(1));
        }
Ejemplo n.º 22
0
        public void should_start_at_given_index_and_replace_count()
        {
            var re     = new PcreRegex(@"a+", PcreOptions.IgnoreCase);
            var result = re.Replace("foo aabb bar aaabbab baz", "X", 2, 8);

            Assert.That(result, Is.EqualTo("foo aabb bXr Xbbab baz"));
        }
Ejemplo n.º 23
0
        /// <summary>
        /// Мапирует релиз сайта album-info в музыкальный релиз
        /// </summary>
        /// <param name="release">Релиз сайта album-info</param>
        /// <returns>Музыкальный релиз</returns>
        private DbMusic MapAlbumInfoReleaseToMusic(AlbumInfoRelease release)
        {
            var music = new DbMusic();

            var releaseName = PcreRegex.Match(release.Name, Helper.ReleaseNamePattern).Value;
            var releaseType = PcreRegex.Matches(release.Name, Helper.ReleaseTypePattern)
                              .Select(m => m.Value).LastOrDefault();
            var releaseArtist = release.Name.Substring(0, release.Name.IndexOf(" - ", StringComparison.Ordinal));
            var releaseGenres = PcreRegex.Matches(release.Genre, Helper.ReleaseGenrePattern).Select(m => m.Value);
            var dateFormat    = release.Date.Length > 4 ? Helper.LongDateFormat : Helper.ShortDateFormat;
            var provider      = CultureInfo.CreateSpecificCulture(Const.CultureInfoText);
            var releaseDate   = DateTime.ParseExact(release.Date, dateFormat, provider);

            SaveMusician(music, releaseArtist);
            SaveGenre(music, releaseGenres);

            music.Title           = string.IsNullOrEmpty(releaseName) ? Helper.UnknownName : releaseName;
            music.ReleaseDate     = releaseDate;
            music.Type            = releaseType;
            music.Artist          = string.IsNullOrEmpty(releaseArtist) ? Helper.UnknownArtist : releaseArtist;
            music.PosterImagePath = release.CoverPath;
            music.PosterImageUrl  = release.ImageFullUrl;

            return(music);
        }
Ejemplo n.º 24
0
        public void should_replace_matches_with_pattern()
        {
            var re     = new PcreRegex(@"a+(b+)", PcreOptions.IgnoreCase);
            var result = re.Replace("foo aabb bar aaabbab baz", "<$0><$1><$&>");

            Assert.That(result, Is.EqualTo("foo <aabb><bb><aabb> bar <aaabb><bb><aaabb><ab><b><ab> baz"));
        }
Ejemplo n.º 25
0
        public void should_support_multiple_groups()
        {
            var re    = new PcreRegex(@"a+(b+)(c+)?(d+)e+");
            var match = re.Match("xxxaaabbddeeezzz");

            Assert.That(match, Is.Not.Null);
            Assert.That(match.Success, Is.True);
            Assert.That(match.CaptureCount, Is.EqualTo(3));
            Assert.That(match.Value, Is.EqualTo("aaabbddeee"));
            Assert.That(match.Index, Is.EqualTo(3));
            Assert.That(match.Length, Is.EqualTo(10));

            Assert.That(match[1], Is.Not.Null);
            Assert.That(match[1].Success, Is.True);
            Assert.That(match[1].Value, Is.EqualTo("bb"));
            Assert.That(match[1].Index, Is.EqualTo(6));
            Assert.That(match[1].Length, Is.EqualTo(2));

            Assert.That(match[2], Is.Not.Null);
            Assert.That(match[2].Success, Is.False);
            Assert.That(match[2].Value, Is.SameAs(string.Empty));
            Assert.That(match[2].Index, Is.EqualTo(-1));
            Assert.That(match[2].Length, Is.EqualTo(0));

            Assert.That(match[3], Is.Not.Null);
            Assert.That(match[3].Success, Is.True);
            Assert.That(match[3].Value, Is.EqualTo("dd"));
            Assert.That(match[3].Index, Is.EqualTo(8));
            Assert.That(match[3].Length, Is.EqualTo(2));
        }
Ejemplo n.º 26
0
        public void should_replace_named_groups()
        {
            var re     = new PcreRegex(@"a+(?<grp>b+)", PcreOptions.IgnoreCase);
            var result = re.Replace("foo aabb bar aaabbab baz", "<${grp}>");

            Assert.That(result, Is.EqualTo("foo <bb> bar <bb><b> baz"));
        }
Ejemplo n.º 27
0
        public void should_handle_named_groups()
        {
            var re = new PcreRegex(@"a+(?<bees>b+)(c+)(?<dees>d+)e+");

            var match = re.Match("xxxaaabbcccddeeezzz");

            Assert.That(match, Is.Not.Null);
            Assert.That(match.Success, Is.True);
            Assert.That(match.CaptureCount, Is.EqualTo(3));
            Assert.That(match.Value, Is.EqualTo("aaabbcccddeee"));
            Assert.That(match.Index, Is.EqualTo(3));
            Assert.That(match.Length, Is.EqualTo(13));

            Assert.That(match["bees"], Is.Not.Null);
            Assert.That(match["bees"].Value, Is.EqualTo("bb"));
            Assert.That(match["bees"].Index, Is.EqualTo(6));
            Assert.That(match["bees"].Length, Is.EqualTo(2));

            Assert.That(match.Groups["bees"], Is.SameAs(match["bees"]));

            Assert.That(match[2], Is.Not.Null);
            Assert.That(match[2].Value, Is.EqualTo("ccc"));
            Assert.That(match[2].Index, Is.EqualTo(8));
            Assert.That(match[2].Length, Is.EqualTo(3));

            Assert.That(match["dees"], Is.Not.Null);
            Assert.That(match["dees"].Value, Is.EqualTo("dd"));
            Assert.That(match["dees"].Index, Is.EqualTo(11));
            Assert.That(match["dees"].Length, Is.EqualTo(2));
        }
Ejemplo n.º 28
0
        public void should_insert_dollar()
        {
            var re     = new PcreRegex(@"a+(b+)", PcreOptions.IgnoreCase);
            var result = re.Replace("foo aabb bar aaabbab baz", "$$-$");

            Assert.That(result, Is.EqualTo("foo $-$ bar $-$$-$ baz"));
        }
Ejemplo n.º 29
0
        public void should_match_with_dfa()
        {
            var re     = new PcreRegex(@"<.*>");
            var result = re.Dfa.Match("This is <something> <something else> <something further> no more");

            Assert.That(result, Is.Not.Null);
            Assert.That(result.Success, Is.True);

            Assert.That(result.Count, Is.EqualTo(3));
            Assert.That(result.Index, Is.EqualTo(8));

            Assert.That(result.LongestMatch, Is.Not.Null);
            Assert.That(result.LongestMatch.Value, Is.EqualTo("<something> <something else> <something further>"));

            Assert.That(result.LongestMatch, Is.SameAs(result[0]));
            Assert.That(result.ShortestMatch, Is.SameAs(result[2]));

            Assert.That(result.ShortestMatch, Is.Not.Null);
            Assert.That(result.ShortestMatch.Value, Is.EqualTo("<something>"));

            Assert.That(result[1], Is.Not.Null);
            Assert.That(result[1].Value, Is.EqualTo("<something> <something else>"));

            Assert.That(result[3], Is.Null);
        }
Ejemplo n.º 30
0
        public void should_split_string_at_start_and_end()
        {
            var re     = new PcreRegex(@"\s+");
            var result = re.Split("  foo bar   baz ").ToList();

            Assert.That(result, Is.EqualTo(new[] { string.Empty, "foo", "bar", "baz", string.Empty }));
        }