summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJesse Luehrs <doy@tozt.net>2011-04-05 23:23:19 -0500
committerJesse Luehrs <doy@tozt.net>2011-04-05 23:23:19 -0500
commitbab6c4f5a20428975a4ed12234eeee3ce414e7d2 (patch)
tree58cefbee9881167f126df8f7122087e1e8c790be
parentd423fc0312e9b169c47f1032122c2f3862d88bba (diff)
downloadclass-refresh-bab6c4f5a20428975a4ed12234eeee3ce414e7d2.tar.gz
class-refresh-bab6c4f5a20428975a4ed12234eeee3ce414e7d2.zip
todo test for refreshing based on metaclass reloads
-rw-r--r--t/data/moose-metaclasses/after/Foo/Meta/Class.pm13
-rw-r--r--t/data/moose-metaclasses/before/Bar.pm10
-rw-r--r--t/data/moose-metaclasses/before/Foo.pm14
-rw-r--r--t/data/moose-metaclasses/before/Foo/Meta/Class.pm13
-rw-r--r--t/moose-metaclasses.t55
5 files changed, 105 insertions, 0 deletions
diff --git a/t/data/moose-metaclasses/after/Foo/Meta/Class.pm b/t/data/moose-metaclasses/after/Foo/Meta/Class.pm
new file mode 100644
index 0000000..0262953
--- /dev/null
+++ b/t/data/moose-metaclasses/after/Foo/Meta/Class.pm
@@ -0,0 +1,13 @@
+package Foo::Meta::Class;
+use Moose::Role;
+
+$::reloaded{foo_meta_class}++;
+
+has meta_attr2 => (
+ is => 'ro',
+ isa => 'Str',
+);
+
+no Moose::Role;
+
+1;
diff --git a/t/data/moose-metaclasses/before/Bar.pm b/t/data/moose-metaclasses/before/Bar.pm
new file mode 100644
index 0000000..86f82e3
--- /dev/null
+++ b/t/data/moose-metaclasses/before/Bar.pm
@@ -0,0 +1,10 @@
+package Bar;
+use Moose;
+
+$::reloaded{bar}++;
+
+
+__PACKAGE__->meta->make_immutable;
+no Moose;
+
+1;
diff --git a/t/data/moose-metaclasses/before/Foo.pm b/t/data/moose-metaclasses/before/Foo.pm
new file mode 100644
index 0000000..69788e9
--- /dev/null
+++ b/t/data/moose-metaclasses/before/Foo.pm
@@ -0,0 +1,14 @@
+package Foo;
+use Moose;
+
+$::reloaded{foo}++;
+
+Moose::Util::MetaRole::apply_metaroles(
+ for => __PACKAGE__,
+ class_metaroles => { class => ['Foo::Meta::Class'] },
+);
+
+__PACKAGE__->meta->make_immutable;
+no Moose;
+
+1;
diff --git a/t/data/moose-metaclasses/before/Foo/Meta/Class.pm b/t/data/moose-metaclasses/before/Foo/Meta/Class.pm
new file mode 100644
index 0000000..c5cfeb5
--- /dev/null
+++ b/t/data/moose-metaclasses/before/Foo/Meta/Class.pm
@@ -0,0 +1,13 @@
+package Foo::Meta::Class;
+use Moose::Role;
+
+$::reloaded{foo_meta_class}++;
+
+has meta_attr => (
+ is => 'ro',
+ isa => 'Str',
+);
+
+no Moose::Role;
+
+1;
diff --git a/t/moose-metaclasses.t b/t/moose-metaclasses.t
new file mode 100644
index 0000000..28a0777
--- /dev/null
+++ b/t/moose-metaclasses.t
@@ -0,0 +1,55 @@
+#!/usr/bin/env perl
+use strict;
+use warnings;
+use Test::More;
+use Test::Requires 'Moose';
+use Test::Moose;
+use lib 't/lib';
+use Test::Class::Refresh;
+
+use Class::Refresh;
+
+my $dir = prepare_temp_dir_for('moose-metaclasses');
+push @INC, $dir->dirname;
+
+our %reloaded;
+
+require Foo;
+require Bar;
+
+Class::Refresh->refresh;
+
+my $metaclass = Scalar::Util::blessed(Foo->meta);
+
+does_ok(Foo->meta, 'Foo::Meta::Class');
+ok(!Moose::Util::does_role(Bar->meta, 'Foo::Meta::Class'),
+ "!Bar->meta->does('Foo::Meta::Class')");
+ok(Foo->meta->meta->find_attribute_by_name('meta_attr'),
+ "has meta attribute");
+ok(!Foo->meta->meta->find_attribute_by_name('meta_attr2'),
+ "doesn't have other meta attribute");
+is_deeply(\%reloaded,
+ { foo => 1, foo_meta_class => 1, bar => 1 },
+ "everything loaded");
+
+
+sleep 2;
+update_temp_dir_for('moose-metaclasses', $dir);
+
+Class::Refresh->refresh;
+
+does_ok(Foo->meta, 'Foo::Meta::Class');
+ok(!Moose::Util::does_role(Bar->meta, 'Foo::Meta::Class'),
+ "!Bar->meta->does('Foo::Meta::Class')");
+{ local $TODO = "moose needs a way to clear out its anon class cache";
+ok(!Foo->meta->meta->find_attribute_by_name('meta_attr'),
+ "doesn't have meta attribute");
+ok(Foo->meta->meta->find_attribute_by_name('meta_attr2'),
+ "has other meta attribute");
+isnt(Scalar::Util::blessed(Foo->meta), $metaclass, "Foo got a new metaclass");
+}
+is_deeply(\%reloaded,
+ { foo => 2, foo_meta_class => 2, bar => 1 },
+ "everything loaded");
+
+done_testing;