Navigation Menu

Skip to content

Instantly share code, notes, and snippets.

@samcv
Created March 24, 2017 06:09
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save samcv/5a98a3febea695adb30b549c0f1046cb to your computer and use it in GitHub Desktop.
Save samcv/5a98a3febea695adb30b549c0f1046cb to your computer and use it in GitHub Desktop.
use v6;
use Test;
plan 38;
=begin description
Testing the C<:ignorecase> regex modifier - more tests are always welcome
There are still a few things missing, like lower case <-> title case <-> upper
case tests
Note that the meaning of C<:i> does B<not> descend into subrules.
=end description
# tests for inline modifiers
# L<S05/Modifiers/and Unicode-level modifiers can be>
ok("abcDEFghi" ~~ m/abc (:i def) ghi/, 'Match');
ok(!( "abcDEFGHI" ~~ m/abc (:i def) ghi/ ), 'Mismatch');
#L<S05/Modifiers/"The :i">
my regex mixedcase { Hello };
# without :i
ok "Hello" ~~ m/<&mixedcase>/, "match mixed case (subrule)";
ok 'Hello' ~~ m/Hello/, "match mixed case (direct)";
ok "hello" !~~ m/<&mixedcase>/, "do not match lowercase (subrule)";
ok "hello" !~~ m/Hello/, "do not match lowercase (direct)";
ok "hello" !~~ m:i/<&mixedcase>/, "no match with :i if matched by subrule";
ok "hello" ~~ m:i/Hello/, "match with :i (direct)";
ok "hello" !~~ m:ignorecase/<&mixedcase>/, "no match with :ignorecase + subrule";
ok "hello" ~~ m:ignorecase/Hello/, "match with :ignorecase (direct)";
ok('Δ' ~~ m:i/δ/, ':i with greek chars');
# The German ß (&szlig;) maps to uppercase SS:
#?rakudo.jvm 2 todo 'ignorecase and SS/&szlig; RT #121377'
# RT #121377'
ok('ß' ~~ m:i/SS/, "ß matches SS with :ignorecase");
ok('SS' ~~ m:i/ß/, "SS matches ß with :ignorecase");
#RT #76750
ok('a' ~~ m/:i 'A'/, ':i descends into quotes');
# RT #76500
{
my $matcher = 'aA';
nok 'aa' ~~ / $matcher/, 'interpolation: no match without :i';
ok 'aa' ~~ /:i $matcher/, 'interpolation: match with :i';
}
ok 'a' ~~ /:i A|B /, ':i and LTM sanity';
ok 'a' ~~ /:i < A B > /, ':i and quote words';
ok 'A4' ~~ /:i a[3|4|5] | b[3|4] /, 'alternation sanity';
#RT #114362
{
ok "BLAR" ~~ /:ignorecase [blar | blubb]/, ":ignorecase works with |";
ok "BluBb" ~~ /:ignorecase [blar || blubb]/, ":ignorecase works with |";
}
# RT #114692
{
try EVAL '"ABC" ~~ /:iabc/';
ok $!, "need whitespace after modifier";
}
# RT #77410
{
ok "m" ~~ /:i <[M]>/, "ignore case of character classes";
nok "m" ~~ /<[M]>/, "ignore case of character classes";
nok "n" ~~ /:i <[M]>/, "ignore case of character classes";
}
# RT #126793
{
#?rakudo.jvm 1 todo "ligatures don't casefold on JVM"
ok 'st' ~~ /:i st/, ":i haystack 'st' needle 'st'";
#?rakudo 10 todo "ligatures in the haystack of case insensensitive regex don't work"
for 1..10 {
my $haystack = ('a'..'z').pick($_).join ~ 'st';
ok $haystack ~~ /:i st/, ":i haystack: '$haystack' needle: 'st'";
}
}
nok (88.chr ~ 875.chr ~ 8413.chr) ~~ /:i x /, 'case insensitive regex works for haystacks which have synthetic graphemes';
ok (88.chr ~ 875.chr ~ 8413.chr ~ 'x') ~~ /:i x /, 'case insensitive regex works for haystacks which have synthetic graphemes';
# vim: syn=perl6 sw=4 ts=4 expandtab
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment