Blame t/08_readmember_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
use Archive::Zip qw( :ERROR_CODES :CONSTANTS );
Packit 0bf95d
use Archive::Zip::MemberRead;
Packit 0bf95d
use File::Spec;
Packit 0bf95d
Packit 0bf95d
use Test::More;
Packit 0bf95d
Packit 0bf95d
my $nl;
Packit 0bf95d
BEGIN {
Packit 0bf95d
	plan(tests => 13);
Packit 0bf95d
	$nl = $^O eq 'MSWin32' ? "\r\n" : "\n";
Packit 0bf95d
}
Packit 0bf95d
use lib 't';
Packit 0bf95d
use common;
Packit 0bf95d
Packit 0bf95d
# normalize newlines for the platform we are running on
Packit 0bf95d
sub norm_nl($) { local $_ = shift; s/\r?\n/$nl/g; return $_; }
Packit 0bf95d
Packit 0bf95d
SCOPE: {
Packit 0bf95d
    my $filename = File::Spec->catfile(TESTDIR, "member_read_xml_like1.zip");
Packit 0bf95d
    my $zip = new Archive::Zip;
Packit 0bf95d
Packit 0bf95d
    # TEST
Packit 0bf95d
    isa_ok($zip, "Archive::Zip", "Testing that \$zip is an Archive::Zip");
Packit 0bf95d
Packit 0bf95d
    my $data = norm_nl(<<"EOF");
Packit 0bf95d
One Line
Packit 0bf95d
Two Lines
Packit 0bf95d
</tag>
Packit 0bf95d
Three Lines
Packit 0bf95d
Four Lines
Packit 0bf95d
Five Lines
Packit 0bf95d
</tag>
Packit 0bf95d
Quant
Packit 0bf95d
Bant
Packit 0bf95d
</tag>
Packit 0bf95d
Zapta
Packit 0bf95d
EOF
Packit 0bf95d
Packit 0bf95d
    $zip->addString($data, "string.txt");
Packit 0bf95d
    $zip->writeToFileNamed($filename);
Packit 0bf95d
Packit 0bf95d
    {
Packit 0bf95d
        # Testing for normal line-based reading.
Packit 0bf95d
        my $member = $zip->memberNamed("string.txt");
Packit 0bf95d
        my $fh     = $member->readFileHandle();
Packit 0bf95d
Packit 0bf95d
        # TEST
Packit 0bf95d
        ok($fh, "Filehandle is valid");
Packit 0bf95d
Packit 0bf95d
        # TEST
Packit 0bf95d
        is($fh->getline(), "One Line",
Packit 0bf95d
            "Testing the first line in a normal read.");
Packit 0bf95d
Packit 0bf95d
        # TEST
Packit 0bf95d
        is($fh->getline(), "Two Lines",
Packit 0bf95d
            "Testing the second line in a normal read.");
Packit 0bf95d
    }
Packit 0bf95d
Packit 0bf95d
    {
Packit 0bf95d
        # Testing for setting the input record separator of the Perl
Packit 0bf95d
        # global variable.
Packit 0bf95d
Packit 0bf95d
        local $/ = "</tag>\n";
Packit 0bf95d
Packit 0bf95d
        my $member = $zip->memberNamed("string.txt");
Packit 0bf95d
        my $fh     = $member->readFileHandle();
Packit 0bf95d
Packit 0bf95d
        # TEST
Packit 0bf95d
        ok($fh, "Filehandle is valid");
Packit 0bf95d
Packit 0bf95d
        # TEST
Packit 0bf95d
        is(
Packit 0bf95d
            $fh->getline(),
Packit 0bf95d
            norm_nl("One Line\nTwo Lines\n"),
Packit 0bf95d
            "Testing the first \"line\" when \$/ is set."
Packit 0bf95d
        );
Packit 0bf95d
Packit 0bf95d
        # TEST
Packit 0bf95d
        is(
Packit 0bf95d
            $fh->getline(),
Packit 0bf95d
            norm_nl("Three Lines\nFour Lines\nFive Lines\n"),
Packit 0bf95d
            "Testing the second \"line\" when \$/ is set."
Packit 0bf95d
        );
Packit 0bf95d
    }
Packit 0bf95d
Packit 0bf95d
    {
Packit 0bf95d
        # Testing for setting input_record_separator in the filehandle.
Packit 0bf95d
Packit 0bf95d
        my $member = $zip->memberNamed("string.txt");
Packit 0bf95d
        my $fh     = $member->readFileHandle();
Packit 0bf95d
Packit 0bf95d
        # TEST
Packit 0bf95d
        ok($fh, "Filehandle is valid");
Packit 0bf95d
Packit 0bf95d
        $fh->input_record_separator("</tag>\n");
Packit 0bf95d
Packit 0bf95d
        # TEST
Packit 0bf95d
        is(
Packit 0bf95d
            $fh->getline(),
Packit 0bf95d
            norm_nl("One Line\nTwo Lines\n"),
Packit 0bf95d
            "Testing the first line when input_record_separator is set."
Packit 0bf95d
        );
Packit 0bf95d
Packit 0bf95d
        # TEST
Packit 0bf95d
        is(
Packit 0bf95d
            $fh->getline(),
Packit 0bf95d
            norm_nl("Three Lines\nFour Lines\nFive Lines\n"),
Packit 0bf95d
            "Testing the second line when input_record_separator is set."
Packit 0bf95d
        );
Packit 0bf95d
    }
Packit 0bf95d
    {
Packit 0bf95d
        # Test setting both input_record_separator in the filehandle
Packit 0bf95d
        # and in Perl.
Packit 0bf95d
Packit 0bf95d
        local $/ = "
Packit 0bf95d
Packit 0bf95d
        my $member = $zip->memberNamed("string.txt");
Packit 0bf95d
        my $fh     = $member->readFileHandle();
Packit 0bf95d
Packit 0bf95d
        # TEST
Packit 0bf95d
        ok($fh, "Filehandle is valid");
Packit 0bf95d
Packit 0bf95d
        $fh->input_record_separator(" ");
Packit 0bf95d
Packit 0bf95d
        # TEST
Packit 0bf95d
        is($fh->getline(), "One",
Packit 0bf95d
            "Testing the first \"line\" in a both set read");
Packit 0bf95d
Packit 0bf95d
        # TEST
Packit 0bf95d
        is($fh->getline(), norm_nl("Line\nTwo"),
Packit 0bf95d
            "Testing the second \"line\" in a both set read.");
Packit 0bf95d
    }
Packit 0bf95d
}