summaryrefslogtreecommitdiffstats
path: root/t
diff options
context:
space:
mode:
authorJesse Luehrs <doy@tozt.net>2011-04-05 20:57:36 -0500
committerJesse Luehrs <doy@tozt.net>2011-04-05 20:57:36 -0500
commitafab14beccad1c7d6cbbfe8ac4db893c96fab70a (patch)
treef6025f00e740be6c2a13ee03b12d4b10b75e564a /t
parent3c2f699f502bd4c55847078261eaee032a8e90ce (diff)
downloadclass-refresh-afab14beccad1c7d6cbbfe8ac4db893c96fab70a.tar.gz
class-refresh-afab14beccad1c7d6cbbfe8ac4db893c96fab70a.zip
initial implementation
Diffstat (limited to 't')
-rw-r--r--t/01-basic.t44
-rw-r--r--t/data/01/after/Foo.pm10
-rw-r--r--t/data/01/after/Foo/Immutable.pm11
-rw-r--r--t/data/01/before/Foo.pm10
-rw-r--r--t/data/01/before/Foo/Immutable.pm11
-rw-r--r--t/lib/Test/Class/Refresh.pm60
6 files changed, 146 insertions, 0 deletions
diff --git a/t/01-basic.t b/t/01-basic.t
new file mode 100644
index 0000000..ce650f3
--- /dev/null
+++ b/t/01-basic.t
@@ -0,0 +1,44 @@
+#!/usr/bin/env perl
+use strict;
+use warnings;
+use Test::More;
+use lib 't/lib';
+use Test::Class::Refresh;
+
+use Class::Refresh;
+
+my $dir = prepare_temp_dir_for('01');
+push @INC, $dir->dirname;
+
+require Foo;
+require Foo::Immutable;
+
+Class::Refresh->refresh;
+
+is_deeply([Foo->meta->get_attribute_list], ['foo'],
+ "correct starting attr list");
+can_ok('Foo', 'meth');
+ok(!Foo->can('other_meth'), "!Foo->can('other_meth')");
+
+is_deeply([Foo::Immutable->meta->get_attribute_list], ['foo'],
+ "correct starting attr list");
+can_ok('Foo::Immutable', 'meth');
+ok(!Foo::Immutable->can('other_meth'), "!Foo::Immutable->can('other_meth')");
+
+
+sleep 2;
+update_temp_dir_for('01', $dir);
+
+Class::Refresh->refresh;
+
+is_deeply([Foo->meta->get_attribute_list], ['bar'],
+ "correct refreshed attr list");
+can_ok('Foo', 'other_meth');
+ok(!Foo->can('meth'), "!Foo->can('meth')");
+
+is_deeply([Foo::Immutable->meta->get_attribute_list], ['bar'],
+ "correct refreshed attr list");
+can_ok('Foo::Immutable', 'other_meth');
+ok(!Foo::Immutable->can('meth'), "!Foo::Immutable->can('meth')");
+
+done_testing;
diff --git a/t/data/01/after/Foo.pm b/t/data/01/after/Foo.pm
new file mode 100644
index 0000000..716b5c8
--- /dev/null
+++ b/t/data/01/after/Foo.pm
@@ -0,0 +1,10 @@
+package Foo;
+use Moose;
+
+has bar => (is => 'ro');
+
+sub other_meth { }
+
+no Moose;
+
+1;
diff --git a/t/data/01/after/Foo/Immutable.pm b/t/data/01/after/Foo/Immutable.pm
new file mode 100644
index 0000000..9fad73d
--- /dev/null
+++ b/t/data/01/after/Foo/Immutable.pm
@@ -0,0 +1,11 @@
+package Foo::Immutable;
+use Moose;
+
+has bar => (is => 'ro');
+
+sub other_meth { }
+
+__PACKAGE__->meta->make_immutable;
+no Moose;
+
+1;
diff --git a/t/data/01/before/Foo.pm b/t/data/01/before/Foo.pm
new file mode 100644
index 0000000..a63046a
--- /dev/null
+++ b/t/data/01/before/Foo.pm
@@ -0,0 +1,10 @@
+package Foo;
+use Moose;
+
+has foo => (is => 'ro');
+
+sub meth { }
+
+no Moose;
+
+1;
diff --git a/t/data/01/before/Foo/Immutable.pm b/t/data/01/before/Foo/Immutable.pm
new file mode 100644
index 0000000..df3fb53
--- /dev/null
+++ b/t/data/01/before/Foo/Immutable.pm
@@ -0,0 +1,11 @@
+package Foo::Immutable;
+use Moose;
+
+has foo => (is => 'ro');
+
+sub meth { }
+
+__PACKAGE__->meta->make_immutable;
+no Moose;
+
+1;
diff --git a/t/lib/Test/Class/Refresh.pm b/t/lib/Test/Class/Refresh.pm
new file mode 100644
index 0000000..9259492
--- /dev/null
+++ b/t/lib/Test/Class/Refresh.pm
@@ -0,0 +1,60 @@
+package Test::Class::Refresh;
+use strict;
+use warnings;
+
+use File::Copy;
+use File::Find;
+use File::Temp;
+
+use Sub::Exporter -setup => {
+ exports => ['prepare_temp_dir_for', 'update_temp_dir_for'],
+ groups => { default => ['prepare_temp_dir_for', 'update_temp_dir_for'] },
+};
+
+sub rcopy {
+ my ($from_dir, $to_dir) = @_;
+
+ find(
+ {
+ no_chdir => 1,
+ wanted => sub {
+ my $from = $File::Find::name;
+ (my $base = $from) =~ s/^$from_dir//;
+ return unless length $base;
+ my $to = $to_dir . $base;
+ if (-d) {
+ if (!-d $to) {
+ mkdir $to or die "Couldn't create dir $to: $!";
+ }
+ }
+ else {
+ copy($from, $to) or die "Couldn't copy $from to $to: $!";
+ utime(undef, undef, $to)
+ or die "Couldn't set modification time for $to: $!";
+ }
+ },
+ },
+ $from_dir
+ );
+}
+
+sub prepare_temp_dir_for {
+ my ($test_id) = @_;
+
+ my $from_dir = 't/data/' . $test_id . '/before';
+ my $to_dir = File::Temp->newdir;
+
+ rcopy($from_dir, $to_dir);
+
+ return $to_dir;
+}
+
+sub update_temp_dir_for {
+ my ($test_id, $to_dir) = @_;
+
+ my $from_dir = 't/data/' . $test_id . '/after';
+
+ rcopy($from_dir, $to_dir);
+}
+
+1;