Blame t/06_update.t

Packit 0bf95d
#!/usr/bin/perl
Packit 0bf95d
Packit 0bf95d
# Test Archive::Zip updating
Packit 0bf95d
Packit 0bf95d
use strict;
Packit 0bf95d
Packit 0bf95d
BEGIN {
Packit 0bf95d
    $|  = 1;
Packit 0bf95d
    $^W = 1;
Packit 0bf95d
}
Packit 0bf95d
use File::Spec ();
Packit 0bf95d
use IO::File   ();
Packit 0bf95d
use File::Find ();
Packit 0bf95d
use Archive::Zip qw( :ERROR_CODES :CONSTANTS );
Packit 0bf95d
Packit 0bf95d
use Test::More tests => 12;
Packit 0bf95d
use lib 't';
Packit 0bf95d
use common;
Packit 0bf95d
Packit 0bf95d
my ($testFileVolume, $testFileDirs, $testFileName) = File::Spec->splitpath($0);
Packit 0bf95d
Packit 0bf95d
my $zip = Archive::Zip->new();
Packit 0bf95d
my $testDir = File::Spec->catpath($testFileVolume, $testFileDirs, '');
Packit 0bf95d
Packit 0bf95d
my $numberOfMembers = 0;
Packit 0bf95d
my @memberNames;
Packit 0bf95d
Packit 0bf95d
sub countMembers {
Packit 0bf95d
    unless ($_ eq '.') { push(@memberNames, $_); $numberOfMembers++; }
Packit 0bf95d
}
Packit 0bf95d
File::Find::find(\&countMembers, $testDir);
Packit 0bf95d
is($numberOfMembers > 1, 1, 'not enough members to test');
Packit 0bf95d
Packit 0bf95d
# an initial updateTree() should act like an addTree()
Packit 0bf95d
is($zip->updateTree($testDir), AZ_OK, 'initial updateTree failed');
Packit 0bf95d
is(scalar($zip->members()),
Packit 0bf95d
    $numberOfMembers, 'wrong number of members after create');
Packit 0bf95d
Packit 0bf95d
my $firstFile   = $memberNames[0];
Packit 0bf95d
my $firstMember = ($zip->members())[0];
Packit 0bf95d
Packit 0bf95d
is($firstFile, $firstMember->fileName(), 'member name wrong');
Packit 0bf95d
Packit 0bf95d
# add a file to the directory
Packit 0bf95d
$testFileName = File::Spec->catpath($testFileVolume, $testFileDirs, 'xxxxxx');
Packit 0bf95d
my $fh = IO::File->new($testFileName, 'w');
Packit 0bf95d
$fh->print('xxxx');
Packit 0bf95d
undef($fh);
Packit 0bf95d
is(-f $testFileName, 1, "creating $testFileName failed");
Packit 0bf95d
Packit 0bf95d
# Then update it. It should be added.
Packit 0bf95d
is($zip->updateTree($testDir), AZ_OK, 'updateTree failed');
Packit 0bf95d
is(
Packit 0bf95d
    scalar($zip->members()),
Packit 0bf95d
    $numberOfMembers + 1,
Packit 0bf95d
    'wrong number of members after update'
Packit 0bf95d
);
Packit 0bf95d
Packit 0bf95d
# Delete the file.
Packit 0bf95d
unlink($testFileName);
Packit 0bf95d
is(-f $testFileName, undef, "deleting $testFileName failed");
Packit 0bf95d
Packit 0bf95d
# updating without the mirror option should keep the members
Packit 0bf95d
is($zip->updateTree($testDir), AZ_OK, 'updateTree failed');
Packit 0bf95d
is(
Packit 0bf95d
    scalar($zip->members()),
Packit 0bf95d
    $numberOfMembers + 1,
Packit 0bf95d
    'wrong number of members after update'
Packit 0bf95d
);
Packit 0bf95d
Packit 0bf95d
# now try again with the mirror option; should delete the last file.
Packit 0bf95d
is($zip->updateTree($testDir, undef, undef, 1), AZ_OK, 'updateTree failed');
Packit 0bf95d
is(scalar($zip->members()),
Packit 0bf95d
    $numberOfMembers, 'wrong number of members after mirror');