summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJesse Luehrs <doy@tozt.net>2011-04-05 21:56:08 -0500
committerJesse Luehrs <doy@tozt.net>2011-04-05 21:56:08 -0500
commit728e904fa63ff6fe503e21eba35f1e8c04c57591 (patch)
tree96f89d0e744e15e34225ab84ec9b40c77d1c230a
parentfc9b385dd96a0ae305986290eaf4ecb41a0e9015 (diff)
downloadclass-refresh-728e904fa63ff6fe503e21eba35f1e8c04c57591.tar.gz
class-refresh-728e904fa63ff6fe503e21eba35f1e8c04c57591.zip
test for reloading subclasses
-rw-r--r--t/data/moose-subclasses/after/Foo.pm13
-rw-r--r--t/data/moose-subclasses/before/Foo.pm13
-rw-r--r--t/data/moose-subclasses/before/Foo/Sub.pm15
-rw-r--r--t/moose-subclasses.t57
4 files changed, 98 insertions, 0 deletions
diff --git a/t/data/moose-subclasses/after/Foo.pm b/t/data/moose-subclasses/after/Foo.pm
new file mode 100644
index 0000000..9e15e00
--- /dev/null
+++ b/t/data/moose-subclasses/after/Foo.pm
@@ -0,0 +1,13 @@
+package Foo;
+use Moose;
+
+$::superclass_reloads++;
+
+has bar => (is => 'ro');
+
+sub other_meth { }
+
+__PACKAGE__->meta->make_immutable;
+no Moose;
+
+1;
diff --git a/t/data/moose-subclasses/before/Foo.pm b/t/data/moose-subclasses/before/Foo.pm
new file mode 100644
index 0000000..ea3f28b
--- /dev/null
+++ b/t/data/moose-subclasses/before/Foo.pm
@@ -0,0 +1,13 @@
+package Foo;
+use Moose;
+
+$::superclass_reloads++;
+
+has foo => (is => 'ro');
+
+sub meth { }
+
+__PACKAGE__->meta->make_immutable;
+no Moose;
+
+1;
diff --git a/t/data/moose-subclasses/before/Foo/Sub.pm b/t/data/moose-subclasses/before/Foo/Sub.pm
new file mode 100644
index 0000000..757d57c
--- /dev/null
+++ b/t/data/moose-subclasses/before/Foo/Sub.pm
@@ -0,0 +1,15 @@
+package Foo::Sub;
+use Moose;
+
+$::subclass_reloads++;
+
+extends 'Foo';
+
+has baz => (is => 'ro');
+
+sub meth { }
+
+__PACKAGE__->meta->make_immutable;
+no Moose;
+
+1;
diff --git a/t/moose-subclasses.t b/t/moose-subclasses.t
new file mode 100644
index 0000000..bdbdedb
--- /dev/null
+++ b/t/moose-subclasses.t
@@ -0,0 +1,57 @@
+#!/usr/bin/env perl
+use strict;
+use warnings;
+use Test::More;
+use Test::Requires 'Moose';
+use lib 't/lib';
+use Test::Class::Refresh;
+
+use Class::Refresh;
+
+my $dir = prepare_temp_dir_for('moose-subclasses');
+push @INC, $dir->dirname;
+
+our ($superclass_reloads, $subclass_reloads) = (0, 0);
+
+require Foo;
+require Foo::Sub;
+
+Class::Refresh->refresh;
+
+is($superclass_reloads, 1, "superclass loaded");
+is($subclass_reloads, 1, "subclass loaded");
+
+is_deeply([sort map { $_->name } Foo->meta->get_all_attributes],
+ ['foo'],
+ "correct starting attr list");
+can_ok('Foo', 'meth');
+ok(!Foo->can('other_meth'), "!Foo->can('other_meth')");
+
+is_deeply([sort map { $_->name } Foo::Sub->meta->get_all_attributes],
+ ['baz', 'foo'],
+ "correct starting attr list");
+can_ok('Foo::Sub', 'meth');
+ok(!Foo::Sub->can('other_meth'), "!Foo::Sub->can('other_meth')");
+
+
+sleep 2;
+update_temp_dir_for('moose-subclasses', $dir);
+
+Class::Refresh->refresh;
+
+is($superclass_reloads, 2, "superclass reloaded");
+is($subclass_reloads, 2, "subclass reloaded");
+
+is_deeply([sort map { $_->name } Foo->meta->get_all_attributes],
+ ['bar'],
+ "correct new attr list");
+ok(!Foo->can('meth'), "!Foo->can('meth')");
+can_ok('Foo', 'other_meth');
+
+is_deeply([sort map { $_->name } Foo::Sub->meta->get_all_attributes],
+ ['bar', 'baz'],
+ "correct new attr list");
+can_ok('Foo::Sub', 'meth');
+can_ok('Foo::Sub', 'other_meth');
+
+done_testing;