Alt-CWB-ambs

 view release on metacpan or  search on metacpan

t/11_cwb_file.t  view on Meta::CPAN

test_read_write_file(".txt", 1); # 2-argument form
SKIP: {
  skip "compress program not installed", 2 unless $have_Z;
  test_read_write_file(".Z", 0); # 1-argument form, T14
  test_read_write_file(".Z", 1); # 2-argument form
}
SKIP: {
  skip "gzip program not installed", 2 unless $have_gz;
  test_read_write_file(".gz", 0); # 1-argument form, T16
  test_read_write_file(".gz", 1); # 2-argument form
}
SKIP: {
  skip "bzip2 program not installed", 2 unless $have_bz2;
  test_read_write_file(".bz2", 0); # 1-argument form, T18
  test_read_write_file(".bz2", 1); # 2-argument form
}

## test that reading non-existent compressed file fails immediately
eval { CWB::OpenFile("data/files/does_not_exist.gz") };
like($@, qr/does not exist/, "error condition when opening non-existent .gz file"); # T21

## check if specified tool is available in user's path
sub is_available {
  my $cmd = shift;
  my $ok = system "$cmd 2>/dev/null | grep ok >/dev/null";
  return $ok == 0;
}

## try to read a known compressed or uncompressed file
sub test_read_file {
  my $mode = (@_ > 2) ? shift : "";
  my $filename = shift;
  my $name = shift;;
  my $fh;
  if ($mode) {
    $fh = CWB::OpenFile($mode, $filename);
  }
  else {
    $fh = CWB::OpenFile($filename);
  }
  my $ok = 0;
  if ($fh) {
    my $line = <$fh>;
    if ($line) {
      $ok = ($line =~ /^ok\.$/) ? 1 : 0;
    }
    else {
      diag("couldn't read from file '$filename'");
    }
    $fh->close;
  }
  else {
    diag("couldn't open file '$filename'");
  }
  ok($ok, $name);
}

## try to write & read compressed and uncompressed files
sub test_read_write_file {
  my ($ext, $two_arg) = @_;
  $tempfile = "/tmp/test_CWB_$$.$ext"; # set global variable for END{} cleanup
  my $name = "write/read .$ext file (".(($two_arg) ? 1 : 2)."-argument form)";
  my $fh = undef;
  my $ok = 0;
  if ($two_arg) {
    $fh = CWB::OpenFile ">", $tempfile;
  }
  else {
    $fh = CWB::OpenFile "> $tempfile";
  }
  if ($fh) {
    my @data = (1, 42, 7, -1001);
    map {print $fh "$_\n"} @data;
    $fh->close;
    if (-s $tempfile >= 10) {
      if ($two_arg) {
	$fh = CWB::OpenFile "<", $tempfile;
      }
      else {
	$fh = CWB::OpenFile $tempfile;
      }
      if ($fh) {
	my @lines = <$fh>;
	$fh->close;
	if (@lines == @data and not grep {$lines[$_] != $data[$_]."\n"} (0 .. $#data)) {
	  $ok = 1;
	}
	else {
	  diag("file data corrupt in '$tempfile'");
	}
      }
      else {
	diag("couldn't open file '$tempfile' for reading");
      }
    }
    else {
      diag("writing '$tempfile' failed (file too small)");
    }
  }
  else {
    diag("couldn't open file '$tempfile' for writing");
  }
  unlink $tempfile;
  ok($ok, $name);
}



( run in 1.300 second using v1.01-cache-2.11-cpan-d01c6094234 )