summaryrefslogtreecommitdiffstats
path: root/t/lib/Test/Class/Refresh.pm
diff options
context:
space:
mode:
Diffstat (limited to 't/lib/Test/Class/Refresh.pm')
-rw-r--r--t/lib/Test/Class/Refresh.pm60
1 files changed, 60 insertions, 0 deletions
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;