]> git.vpit.fr Git - perl/modules/re-engine-Plugin.git/blobdiff - t/20-methods/mod.t
Order the test subdirectories
[perl/modules/re-engine-Plugin.git] / t / 20-methods / mod.t
diff --git a/t/20-methods/mod.t b/t/20-methods/mod.t
new file mode 100644 (file)
index 0000000..426182d
--- /dev/null
@@ -0,0 +1,76 @@
+=pod
+
+Test the C<mod> or C<modifiers> method
+
+=cut
+
+use strict;
+use feature ':5.10';
+use Test::More tests => 25;
+
+my @tests = (
+    sub { cmp_ok shift, 'eq', '', => 'no flags' },
+    sub { cmp_ok shift, 'eq', '', => '/c' },
+    sub { cmp_ok shift, 'eq', '' => '/g' },
+    sub { cmp_ok shift, 'eq', 'i' => '/i' },
+    sub { cmp_ok shift, 'eq', 'm' => '/m' },
+    sub { cmp_ok shift, 'eq', ''  => '/o' },
+    sub { cmp_ok shift, 'eq', 's' => '/s' },
+    sub { cmp_ok shift, 'eq', 'x' => '/x' },
+    sub { cmp_ok shift, 'eq', 'p' => '/p' },
+    sub { like $_[0], qr/$_/ => "/$_ in $_[0]" for unpack "(Z)*", "xi" },
+    sub { like $_[0], qr/$_/ => "/$_ in $_[0]" for unpack "(Z)*", "xs" },
+    sub {
+        for (unpack "(Z)*", "cgimsxp") {
+            /[cg]/ and next;
+            like $_[0], qr/$_/ => "/$_ in $_[0]"
+        }
+    },
+    sub { cmp_ok shift, 'eq', '', => '/e' },
+    sub {
+        for (unpack "(Z)*", "egimsxp") {
+            /[ge]/ and next;
+            like $_[0], qr/$_/ => "/$_ in $_[0]";
+        }
+    },
+
+    sub { cmp_ok shift, 'eq', ''  => '??' },
+    # Leave this as the last
+    ,sub { die "add more tests" }
+);
+
+use re::engine::Plugin (
+    exec => sub {
+        my ($re, $str) = @_;
+
+        my $t = shift @tests;
+
+        my %mod = $re->mod;
+
+        my $mod_str = join '', keys %mod;
+
+        $t->($mod_str);
+    }
+);
+
+# Provide a pattern that can match to avoid running into regexp
+# optimizations that won't call exec on C<"" =~ //>;
+
+"" =~ /x/;
+"" =~ /x/cg; # meaningless without /g
+"" =~ /x/g;
+"" =~ /x/i;
+"" =~ /x/m;
+"" =~ /x/o;
+"" =~ /x/s;
+"" =~ /x/x;
+"" =~ /x/p;
+"" =~ /x/xi;
+"" =~ /x/xs;
+"" =~ /x/cgimosxp;
+
+my $_ = "";
+
+$_ =~ s/1/2/e;
+$_ =~ s/1/2/egimosxp;
+$_ =~ ??;