Blame t/09_output_record_sep.t

Packit 0bf95d
#!/usr/bin/perl
Packit 0bf95d
Packit 0bf95d
use strict;
Packit 0bf95d
Packit 0bf95d
BEGIN {
Packit 0bf95d
    $|  = 1;
Packit 0bf95d
    $^W = 1;
Packit 0bf95d
}
Packit 0bf95d
Packit 0bf95d
use Test::More tests => 6;
Packit 0bf95d
use File::Spec       ();
Packit 0bf95d
use File::Spec::Unix ();
Packit 0bf95d
use Archive::Zip qw( :ERROR_CODES );
Packit 0bf95d
Packit 0bf95d
my $expected_fn =
Packit 0bf95d
  File::Spec->catfile(File::Spec->curdir, "t", "badjpeg", "expected.jpg");
Packit 0bf95d
my $expected_zip =
Packit 0bf95d
  File::Spec::Unix->catfile(File::Spec::Unix->curdir, "t", "badjpeg",
Packit 0bf95d
    "expected.jpg",);
Packit 0bf95d
Packit 0bf95d
my $got_fn     = "got.jpg";
Packit 0bf95d
my $archive_fn = "out.zip";
Packit 0bf95d
my ($before, $after);
Packit 0bf95d
Packit 0bf95d
sub slurp_file {
Packit 0bf95d
    my $filename = shift;
Packit 0bf95d
    open my $fh, "<$filename"
Packit 0bf95d
      or die 'Can not open file';
Packit 0bf95d
    my $contents;
Packit 0bf95d
    binmode($fh);
Packit 0bf95d
  SCOPE: {
Packit 0bf95d
        local $/;
Packit 0bf95d
        $contents = <$fh>;
Packit 0bf95d
    }
Packit 0bf95d
    close $fh;
Packit 0bf95d
    return $contents;
Packit 0bf95d
}
Packit 0bf95d
Packit 0bf95d
sub binary_is {
Packit 0bf95d
    my ($got, $expected, $msg) = @_;
Packit 0bf95d
    local $Test::Builder::Level = $Test::Builder::Level + 1;
Packit 0bf95d
    my $verdict = ($got eq $expected);
Packit 0bf95d
    ok($verdict, $msg);
Packit 0bf95d
    if (!$verdict) {
Packit 0bf95d
        my $len;
Packit 0bf95d
        if (length($got) > length($expected)) {
Packit 0bf95d
            $len = length($expected);
Packit 0bf95d
            diag("got is longer than expected");
Packit 0bf95d
        } elsif (length($got) < length($expected)) {
Packit 0bf95d
            $len = length($got);
Packit 0bf95d
            diag("expected is longer than got");
Packit 0bf95d
        } else {
Packit 0bf95d
            $len = length($got);
Packit 0bf95d
        }
Packit 0bf95d
Packit 0bf95d
      BYTE_LOOP:
Packit 0bf95d
        for my $byte_idx (0 .. ($len - 1)) {
Packit 0bf95d
            my $got_byte      = substr($got,      $byte_idx, 1);
Packit 0bf95d
            my $expected_byte = substr($expected, $byte_idx, 1);
Packit 0bf95d
            if ($got_byte ne $expected_byte) {
Packit 0bf95d
                diag(
Packit 0bf95d
                    sprintf(
Packit 0bf95d
                        "Byte %i differ: got == 0x%.2x, expected == 0x%.2x",
Packit 0bf95d
                        $byte_idx, ord($got_byte), ord($expected_byte)));
Packit 0bf95d
                last BYTE_LOOP;
Packit 0bf95d
            }
Packit 0bf95d
        }
Packit 0bf95d
    }
Packit 0bf95d
}
Packit 0bf95d
Packit 0bf95d
sub run_tests {
Packit 0bf95d
    my $id     = shift;
Packit 0bf95d
    my $msg_it = sub {
Packit 0bf95d
        my $msg_raw = shift;
Packit 0bf95d
        return "$id - $msg_raw";
Packit 0bf95d
    };
Packit 0bf95d
Packit 0bf95d
    # Read the contents of the good file into the variable.
Packit 0bf95d
    $before = slurp_file($expected_fn);
Packit 0bf95d
Packit 0bf95d
    # Zip the file.
Packit 0bf95d
  SCOPE: {
Packit 0bf95d
        my $zip = Archive::Zip->new();
Packit 0bf95d
        $zip->addFile($expected_fn);
Packit 0bf95d
        $zip->extractMember($expected_zip, $got_fn);
Packit 0bf95d
        $after = slurp_file($got_fn);
Packit 0bf95d
Packit 0bf95d
        unlink $got_fn;
Packit 0bf95d
Packit 0bf95d
        # TEST:$n=$n+1
Packit 0bf95d
        binary_is($after, $before,
Packit 0bf95d
            $msg_it->("Content of file after extraction"),
Packit 0bf95d
        );
Packit 0bf95d
Packit 0bf95d
        my $status = $zip->writeToFileNamed($archive_fn);
Packit 0bf95d
Packit 0bf95d
        # TEST:$n=$n+1
Packit 0bf95d
        cmp_ok($status, '==', AZ_OK, $msg_it->('Zip was written fine'));
Packit 0bf95d
    }
Packit 0bf95d
Packit 0bf95d
    # Read back the file from the archive.
Packit 0bf95d
  SCOPE: {
Packit 0bf95d
        my $zip2;
Packit 0bf95d
        $zip2 = Archive::Zip->new($archive_fn);
Packit 0bf95d
Packit 0bf95d
        $zip2->extractMember($expected_zip, $got_fn);
Packit 0bf95d
Packit 0bf95d
        $after = slurp_file($got_fn);
Packit 0bf95d
Packit 0bf95d
        unlink $got_fn;
Packit 0bf95d
        unlink $archive_fn;
Packit 0bf95d
Packit 0bf95d
        # TEST:$n=$n+1
Packit 0bf95d
        binary_is($after, $before,
Packit 0bf95d
            $msg_it->('Read back the file from the archive'),
Packit 0bf95d
        );
Packit 0bf95d
    }
Packit 0bf95d
}
Packit 0bf95d
Packit 0bf95d
# Run the tests once with $\ undef.
Packit 0bf95d
run_tests("Normal");
Packit 0bf95d
Packit 0bf95d
# Run them once while setting $\.
Packit 0bf95d
SCOPE: {
Packit 0bf95d
    local $\ = "\n";
Packit 0bf95d
    run_tests(q{$\ is \n});
Packit 0bf95d
}