From bab6c4f5a20428975a4ed12234eeee3ce414e7d2 Mon Sep 17 00:00:00 2001 From: Jesse Luehrs Date: Tue, 5 Apr 2011 23:23:19 -0500 Subject: todo test for refreshing based on metaclass reloads --- t/data/moose-metaclasses/after/Foo/Meta/Class.pm | 13 ++++++ t/data/moose-metaclasses/before/Bar.pm | 10 +++++ t/data/moose-metaclasses/before/Foo.pm | 14 ++++++ t/data/moose-metaclasses/before/Foo/Meta/Class.pm | 13 ++++++ t/moose-metaclasses.t | 55 +++++++++++++++++++++++ 5 files changed, 105 insertions(+) create mode 100644 t/data/moose-metaclasses/after/Foo/Meta/Class.pm create mode 100644 t/data/moose-metaclasses/before/Bar.pm create mode 100644 t/data/moose-metaclasses/before/Foo.pm create mode 100644 t/data/moose-metaclasses/before/Foo/Meta/Class.pm create mode 100644 t/moose-metaclasses.t (limited to 't') 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; -- cgit v1.2.3-54-g00ecf