Add a test file for method modifiers
Shawn M Moore [Wed, 11 Jun 2008 11:03:14 +0000 (11:03 +0000)]
t/027-modifiers.t [new file with mode: 0644]

diff --git a/t/027-modifiers.t b/t/027-modifiers.t
new file mode 100644 (file)
index 0000000..a12da33
--- /dev/null
@@ -0,0 +1,110 @@
+#!perl -T
+use strict;
+use warnings;
+use Test::More tests => 1;
+
+my @seen;
+my @expected = ("before 4",
+                  "before 3",
+                    "around 4 before",
+                      "around 3 before",
+                        "before 2",
+                          "before 1",
+                            "around 2 before",
+                              "around 1 before",
+                                "orig",
+                              "around 1 after",
+                            "around 2 after",
+                          "after 1",
+                        "after 2",
+                      "around 3 after",
+                    "around 4 after",
+                  "after 3",
+                "after 4",
+               );
+
+my $child = Grandchild->new; $child->orig;
+
+is_deeply(\@seen, \@expected, "multiple afters called in the right order");
+
+BEGIN {
+    package Parent;
+    use Mouse;
+
+    sub orig {
+        push @seen, "orig";
+    }
+}
+
+BEGIN {
+    package Child;
+    use Mouse;
+    extends 'Parent';
+
+    before orig => sub {
+        push @seen, "before 1";
+    };
+
+    before orig => sub {
+        push @seen, "before 2";
+    };
+
+    around orig => sub {
+        my $orig = shift;
+        push @seen, "around 1 before";
+        $orig->();
+        push @seen, "around 1 after";
+    };
+
+    around orig => sub {
+        my $orig = shift;
+        push @seen, "around 2 before";
+        $orig->();
+        push @seen, "around 2 after";
+    };
+
+    after orig => sub {
+        push @seen, "after 1";
+    };
+
+    after orig => sub {
+        push @seen, "after 2";
+    };
+}
+
+BEGIN {
+    package Grandchild;
+    use Mouse;
+    extends 'Child';
+
+    before orig => sub {
+        push @seen, "before 3";
+    };
+
+    before orig => sub {
+        push @seen, "before 4";
+    };
+
+    around orig => sub {
+        my $orig = shift;
+        push @seen, "around 3 before";
+        $orig->();
+        push @seen, "around 3 after";
+    };
+
+    around orig => sub {
+        my $orig = shift;
+        push @seen, "around 4 before";
+        $orig->();
+        push @seen, "around 4 after";
+    };
+
+    after orig => sub {
+        push @seen, "after 3";
+    };
+
+    after orig => sub {
+        push @seen, "after 4";
+    };
+}
+