#!/usr/bin/perl -w
use strict;
use Test::More tests => 19;
use VCS::Lite;
my $save_output = $ENV{VCS_LITE_KEEP_OUTPUT};
my $el1 = VCS::Lite->new('data/mariner.txt');
#01
isa_ok($el1,'VCS::Lite','Return from new, passed filespec');
my $el2 = VCS::Lite->new('data/marinerx.txt');
my $dt1 = VCS::Lite::Delta->new('data/marinerx.dif',undef,'mariner.txt','marinerx.txt');
#02
isa_ok($dt1,'VCS::Lite::Delta','New delta');
my $el3 = $el1->patch($dt1);
#03
isa_ok($el3,'VCS::Lite','Return from patch method');
my $out2 = $el2->text;
my $out3 = $el3->text;
if ($save_output) {
open (my $dfh, '>', 'patch1.out')
or die "Failed to write output: $!";
print $dfh $out3;
}
#04
is($out2, $out3, 'Patched file is the same as marinerx');
my $dt2 = VCS::Lite::Delta->new('data/marinerx.udif',undef,'mariner.txt','marinerx.txt');
#05
isa_ok($dt2,'VCS::Lite::Delta','New delta');
my $el4 = $el1->patch($dt2);
#06
isa_ok($el4,'VCS::Lite','Patch applied');
my $out4 = $el4->text;
#07
is($out2, $out4, 'Patched file is the same as marinerx');
my $el1c = VCS::Lite->new('data/mariner.txt', {chomp => 1});
my $el2c = VCS::Lite->new('data/marinerx.txt', {chomp => 1});
my $dt1c = VCS::Lite::Delta->new('data/marinerx.dif',{chomp => 1},
'mariner.txt','marinerx.txt');
#08
isa_ok($dt1c,'VCS::Lite::Delta','New delta (chomped)');
my $el3c = $el1c->patch($dt1c);
#09
isa_ok($el3c,'VCS::Lite','Return from patch method (chomped)');
$out2 = $el2c->text;
$out3 = $el3c->text;
if ($save_output) {
open (my $dfh, '>', 'patch1c.out')
or die "Failed to write output: $!";
print $dfh $out3;
}
#10
is($out2, $out3, 'Patched file is the same as marinerx');
my $dt2c = VCS::Lite::Delta->new('data/marinerx.udif',{chomp => 1},
'mariner.txt','marinerx.txt');
#11
isa_ok($dt2c,'VCS::Lite::Delta','New delta');
my $el4c = $el1c->patch($dt2c);
#12
isa_ok($el4c,'VCS::Lite','Patch applied');
$out4 = $el4c->text;
#13
is($out2, $out4, 'Patched file is the same as marinerx (chomped)');
my $udiff = $dt2->udiff;
#14
ok($udiff, "udiff returns text");
if ($save_output) {
open (my $dfh, '>', 'patch2.out')
or die "Failed to write output: $!";
print $dfh $udiff;
}
my $results = do { local (@ARGV, $/) = 'data/marinerx.udif'; <> }; # slurp entire file
$results =~ s/^\+\+\+.*\n//s;
$results =~ s/^---.*\n//s;
$udiff =~ s/^\+\+\+.*\n//s;
$udiff =~ s/^---.*\n//s;
#15
is($udiff,$results,'udiff output matches original udiff');
$udiff = $dt2c->udiff;
#16
ok($udiff, "udiff returns text (chomped)");
if ($save_output) {
open (my $dfh, '>', 'patch2c.out')
or die "Failed to write output: $!";
print $dfh $udiff;
}
$udiff =~ s/^\+\+\+.*\n//s;
$udiff =~ s/^---.*\n//s;
#17
is($udiff,$results,'udiff output matches original udiff');
my $el5 = VCS::Lite->new('data/snarka.txt');
my $el6 = VCS::Lite->new('data/snarkb.txt');
my $dt3 = VCS::Lite::Delta->new('data/snarkab.dif',undef,'snarka.txt','snarkb.txt');
my $el7 = $el5->patch($dt3);
my $out6 = $el6->text;
my $out7 = $el7->text;
#16
is($out6, $out7, 'Patched file is the same as snarkb (diff)');
my $dt4 = VCS::Lite::Delta->new('data/snarkab.udif',undef,'snarka.txt','snarkb.txt');
my $el8 = $el5->patch($dt4);
$out7 = $el7->text;
my $out8 = $el8->text;
#17
is($out6, $out8, 'Patched file is the same as snarkb (udiff)');