# Before `make install' is performed this script should be runnable with # `make test'. After `make install' it should work as `perl Data-Range-Compare-Stream.t' ######################### use strict; use warnings; use IO::File; use Test::More tests => 46 + 7; BEGIN { use_ok('Data::Range::Compare::Stream::Iterator::File') }; ######################### # most tests require this file to exist! my $exists; my $filename; my $custom_file=-r 'custom_file.src' ? 'custom_file.src' : 't/custom_file.src' ? 't/custom_file.src' : undef; # guess file locations foreach my $location (qw(file_test.src t/file_test.src)) { $exists=-r $location; $filename=$location; last if $exists; } # Insert your test code below, the Test::More module is use()ed here so read # its man page ( perldoc Test::More ) for help writing this test script. # # Basic Constructor tests { my $bad_args=Data::Range::Compare::Stream::Iterator::File->new; ok($bad_args->in_error,'no file should show an error state') or diag(Dumper($bad_args)); } SKIP: { skip 'Cannot read from file_test.src',12 unless $exists; my $s=new Data::Range::Compare::Stream::Iterator::File(filename=>$filename); ok($s,'instance should exist!'); ok(!$s->in_error,'Instance should not be in error!'); ok($s->has_next,'instance should have next'); cmp_ok($s->get_next.'','eq',''.'1 - 2','first row should be: 1 - 2'); ok($s->has_next,'instance should have row 2'); cmp_ok($s->get_next.'','eq',''.'3 - 4','first row should be: 3 - 4'); ok($s->has_next,'instance should have row 3'); cmp_ok($s->get_next.'','eq',''.'5 - 6','first row should be: 7 - 8'); ok($s->has_next,'instance should have row 3'); cmp_ok($s->get_next.'','eq',''.'7 - 8','first row should be: 1 - 2'); ok(!$s->has_next,'instance should have no more rows!'); undef $s; } SKIP: { skip 'Cannot read from file_test.src',16 unless $exists; my $fh=IO::File->new($filename); skip 'Cannot read from file_test.src',16 unless $fh; my $s=new Data::Range::Compare::Stream::Iterator::File(fh=>$fh); ok(!$s->in_error,'Instance should not be in error!'); ok($s->has_next,'instance should have next'); cmp_ok($s->get_pos,'==',0,'current position check'); cmp_ok($s->get_next.'','eq',''.'1 - 2','first row should be: 1 - 2'); cmp_ok($s->get_pos,'==',1,'current position check'); cmp_ok($s->get_size,'==',4,'get_size check'); ok($s->has_next,'instance should have row 2'); cmp_ok($s->get_next.'','eq',''.'3 - 4','first row should be: 3 - 4'); cmp_ok($s->get_pos,'==',2,'current position check'); ok($s->has_next,'instance should have row 3'); cmp_ok($s->get_next.'','eq',''.'5 - 6','first row should be: 7 - 8'); cmp_ok($s->get_pos,'==',3,'current position check'); ok($s->has_next,'instance should have row 3'); cmp_ok($s->get_next.'','eq',''.'7 - 8','first row should be: 1 - 2'); cmp_ok($s->get_pos,'==',4,'current position check'); ok(!$s->has_next,'instance should have no more rows!'); } SKIP: { skip 'cannot read from custom file',17 unless $custom_file; { package MyTestPkg; use strict; use base qw(Data::Range::Compare::Stream); use constant NEW_FROM_CLASS=>'MyTestPkg'; 1; } my $parse_line=sub { my ($line)=@_; my @data=split /\s+/,$line; return [@data[1,2],$line]; }; my $result_to_line=sub { my ($result)=@_; return $result->data; }; my $s=new Data::Range::Compare::Stream::Iterator::File(NEW_FROM=>'MyTestPkg',result_to_line=>$result_to_line,parse_line=>$parse_line,filename=>$custom_file); ok($s,'object should exist'); { ok($s->has_next,'has_next check'); my $result=$s->get_next; isa_ok($result,'MyTestPkg','NEW_FROM test'); my $string=$result->to_string; cmp_ok($string,'eq','0 - 2','result check'); $string=$result->data; cmp_ok($string,'eq',"COL_1 0 2\n",'raw data check'); $string=$s->result_to_line($result); cmp_ok($string,'eq',"COL_1 0 2\n",'raw data check'); } { ok($s->has_next,'has_next check'); my $result=$s->get_next; isa_ok($result,'MyTestPkg','NEW_FROM test'); my $string=$result->to_string; cmp_ok($string,'eq','0 - 1','result check'); $string=$result->data; cmp_ok($string,'eq',"COL_2 0 1\n",'raw data check'); $string=$s->result_to_line($result); cmp_ok($string,'eq',"COL_2 0 1\n",'raw data check'); } { ok($s->has_next,'has_next check'); my $result=$s->get_next; isa_ok($result,'MyTestPkg','NEW_FROM test'); my $string=$result->to_string; cmp_ok($string,'eq','3 - 4','result check'); $string=$result->data; cmp_ok($string,'eq',"COL_3 3 4\n",'raw data check'); $string=$s->result_to_line($result); cmp_ok($string,'eq',"COL_3 3 4\n",'raw data check'); } ok(!$s->has_next,'has_next check'); } SKIP: { skip 'Cannot read from file_test.src',7 unless $custom_file; my $check=0; { package MyFilePkg; use base qw(Data::Range::Compare::Stream::Iterator::File); sub DESTROY { my ($self)=@_; ++$check if defined($self->{fh}); $self->SUPER::DESTROY; ++$check unless defined($self->{fh}); } 1; } cmp_ok($check,'==',0,'check status'); { my $s=new MyFilePkg(filename=>$custom_file); ok(defined($s->get_fh),'should fetch the file handle without error'); ok($s->created_fh,'get created file handle state'); undef $s; } cmp_ok($check,'==',2,'check status'); $check=0; { my $fh=IO::File->new($custom_file,'r'); my $s=new MyFilePkg(fh=>$fh); ok(!$s->created_fh,'get created file handle state'); ok(defined($s->get_fh),'should fetch the file handle without error'); undef $s; } cmp_ok($check,'==',1,'check status'); }