use strict;
use Test::More tests => 4;
BEGIN {
package My::Test::Format;
@My::Test::Format::ISA = ('Text::WordDiff::Base');
sub file_header { $_[0]->filename_a . ' <=> ' .$_[0]->filename_b }
sub hunk_header { ' hunk_header' }
sub same_items { ' same_items ' . shift->foo }
sub insert_items { ' insert_items' }
sub delete_items { ' delete_items' }
sub hunk_footer { ' hunk_footer' }
sub file_footer { ' ' . $_[0]->mtime_a . ' <=> ' .$_[0]->mtime_b }
sub filename_a { shift->{FILENAME_A} }
sub filename_b { shift->{FILENAME_B} }
sub mtime_a { shift->{MTIME_A} }
sub mtime_b { shift->{MTIME_B} }
sub foo { shift->{FOO} }
}
BEGIN {
use_ok 'Text::WordDiff' or die;
}
ok defined &word_diff, 'word_diff() should be exported';
my $time_a = time;
my $time_b = $time_a + 1;
my $localtime_a = localtime $time_a;
my $localtime_b = localtime $time_b;
my %opts = (
STYLE => 'Text::WordDiff::Base',
FILENAME_A => 'foo',
FILENAME_B => 'bar',
MTIME_A => $time_a,
MTIME_B => $time_b,
FOO => 'fooo',
);
my $header = "--- foo\t$localtime_a\n"
. "+++ bar\t$localtime_b\n";
is word_diff(\'this is this', \'this is that', \%opts), $header,
'The base format class should output the header only';
$opts{STYLE} = 'My::Test::Format';
my $result = 'foo <=> bar hunk_header same_items fooo hunk_footer hunk_header'
. " delete_items insert_items hunk_footer $time_a <=> $time_b";
is word_diff( \'this is this', \'this is that', \%opts), $result,
'Each formatting method should be called';