]> git.vpit.fr Git - perl/modules/re-engine-Plugin.git/blobdiff - t/scope.t
Store the exec callback into the private object
[perl/modules/re-engine-Plugin.git] / t / scope.t
diff --git a/t/scope.t b/t/scope.t
new file mode 100644 (file)
index 0000000..5ce6716
--- /dev/null
+++ b/t/scope.t
@@ -0,0 +1,49 @@
+#!perl
+
+use strict;
+use warnings;
+
+use Test::More tests => 6 * 2;
+
+my @comp = (0, 0);
+my @exec = (0, 0);
+
+my $rx;
+
+{
+ use re::engine::Plugin comp => sub { ++$comp[0] },
+                        exec => sub { ++$exec[0]; 0 };
+
+ eval '$rx = qr/foo/';
+ is "@comp", '1 0', 'is compiled with the first engine';
+ is "@exec", '0 0', 'not executed yet';
+}
+
+"abc" =~ /$rx/;
+is "@comp", '1 0', 'was compiled with the first engine';
+is "@exec", '1 0', 'is executed with the first engine';
+
+{
+ use re::engine::Plugin comp => sub { ++$comp[1] },
+                        exec => sub { ++$exec[1]; 0 };
+
+ "def" =~ /$rx/;
+ is "@comp", '1 0', 'was still compiled with the first engine';
+ is "@exec", '2 0', 'is executed with the first engine again';
+
+ eval '$rx = qr/bar/';
+ is "@comp", '1 1', 'is compiled with the second engine';
+ is "@exec", '2 0', 'not executed since last time';
+}
+
+"ghi" =~ /$rx/;
+is "@comp", '1 1', 'was compiled with the second engine';
+is "@exec", '2 1', 'is executed with the second engine';
+
+{
+ use re 'debug';
+
+ "jkl" =~ /$rx/;
+ is "@comp", '1 1', 'was still compiled with the second engine';
+ is "@exec", '2 2', 'is executed with the second engine again (and not with "re \'debug\'")';
+}