#! /usr/bin/perl -w
use strict;
use Data::Dumper;
# $Id: syncer_copy.t 766 2004-10-17 18:28:22Z abeltje $
my $findbin;
use File::Basename;
BEGIN { $findbin = dirname $0; }
use lib $findbin;
use TestLib;
use File::Spec;
use Test::More;
my $cdir = 'origdir';
my $ddir = 'perl-current';
# Set up some sort of source-tree
require File::Copy;
SETUP: {
chdir 't' or plan skip_all => "Cannot chdir 't': $!";
# Make sure they are all gone
rmtree( $cdir );
rmtree( $ddir );
mkdir $cdir, 0744 or plan skip_all => "Cannot create test-tree: $!";
# Copy all *.t files to the new dir
my $count = 0;
foreach my $test ( glob '*.t' ) {
$count += File::Copy::copy( $test,
File::Spec->catfile( $cdir, $test ) );
}
$ENV{SMOKE_VERBOSE} and diag "Copied files ($cdir): $count";
# Copy the subdir 'win32' also
my $subdir = File::Spec->catdir( $cdir, 'win32' );
mkdir $subdir, 0744 or plan skip_all => "Cannot create '$subdir': $!";
local *DIR;
opendir DIR, 'win32' or plan skip_all => "Cannot opendir 'win32': $!";
$count = 0;
while ( my $file = readdir DIR ) {
-f File::Spec->catfile('win32', $file ) or next;
$count += File::Copy::copy( File::Spec->catfile( 'win32', $file ),
File::Spec->catfile( $subdir, $file ) );
}
closedir DIR;
$ENV{SMOKE_VERBOSE} and diag "Copied files ($subdir): $count";
# Create a '.patch'
local *DOTPATCH;
my $dot_patch = File::Spec->catfile( $cdir, '.patch' );
open DOTPATCH, "> $dot_patch" or
plan skip_all => "Cannot create '.patch': $!";
print DOTPATCH "20000\n";
close DOTPATCH or plan skip_all => "Cannot write '.patch': $!";
# Create a 'MANIFEST'
my @MANIFEST = map manify_path( $_ ) => ( 'MANIFEST', get_dir( $cdir ) );
local *MANIFEST;
my $manifest = File::Spec->catfile( $cdir, 'MANIFEST' );
open MANIFEST, "> $manifest" or
plan skip_all => "Cannot create 'MANIFEST': $!";
print MANIFEST "$_\n" for @MANIFEST;
close MANIFEST or plan skip_all => "Cannot write 'MANIFEST': $!";
chdir File::Spec->updir;
}
plan tests => 8;
use_ok( 'Test::Smoke::Syncer' );
require_ok( 'Test::Smoke::SourceTree' );
chdir 't';
SKIP: {
my $syncer = Test::Smoke::Syncer->new( copy => { v => $ENV{SMOKE_VERBOSE},
ddir => $ddir,
cdir => $cdir,
} );
isa_ok( $syncer, 'Test::Smoke::Syncer' );
isa_ok( $syncer, 'Test::Smoke::Syncer::Copy' );
$ENV{SMOKE_DEBUG} and diag Dumper $syncer;
my $patch = $syncer->sync;
is( $patch, 20000, "Patchlevel after copy: $patch" );
my %orig = map { $_ => 1 } get_dir( $cdir );
my %dest = map { $_ => 1 } get_dir( $ddir );
is_deeply( \%orig, \%dest, "directories compare ok" );
# same thing really
foreach my $key ( keys %orig ) {
$orig{ $key } = $dest{ $key } = 0 if exists $dest{ $key };
}
my $ocnt = grep $orig{ $_ } => keys %orig;
is( $ocnt, 0, "All files seem to be copied" );
my $dcnt = grep $dest{ $_ } => keys %dest;
is( $dcnt, 0, "No other files have been added" );
}
END {
unless ( $ENV{SMOKE_DEBUG} ) {
rmtree( $ddir );
rmtree( $cdir );
}
chdir File::Spec->updir;
}