From afab14beccad1c7d6cbbfe8ac4db893c96fab70a Mon Sep 17 00:00:00 2001 From: Jesse Luehrs Date: Tue, 5 Apr 2011 20:57:36 -0500 Subject: initial implementation --- t/lib/Test/Class/Refresh.pm | 60 +++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 60 insertions(+) create mode 100644 t/lib/Test/Class/Refresh.pm (limited to 't/lib') 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; -- cgit v1.2.3-54-g00ecf