The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
# Copyright 1999-2001 Steven Knight.  All rights reserved.  This program
# is free software; you can redistribute it and/or modify it under the
# same terms as Perl itself.

######################### We start with some black magic to print on failure.

use Test;
BEGIN {
	$| = 1;
	eval "use Algorithm::DiffOld";
	$diffold = ! $@;
	plan tests => 24, onfail => sub { $? = 1 if $ENV{AEGIS_TEST} }
}
END {print "not ok 1\n" unless $loaded;}
use Test::Cmd;
$loaded = 1;
ok(1);

######################### End of black magic.

my($test, $ret, @lines, @regexes, @diff);

$ret = Test::Cmd->diff_exact(<<'_EOF_', <<'_EOF_', \@diff);
1
2
3
_EOF_
1
2
3
_EOF_
ok($ret);
ok(@diff == 0);

$ret = Test::Cmd->diff_exact(<<'_EOF_', <<'_EOF_', \@diff);
1
2
3
_EOF_
1
222
3
_EOF_
ok(! $ret);
ok(join('', @diff) eq $diffold ? <<'_EOF_' : <<'_EOF_');
2c2
< 222
---
> 2
_EOF_
Expected =====
1
2
3
Actual =====
1
222
3
_EOF_

$test = Test::Cmd->new;
ok($test);

$ret = $test->diff_exact("abcde\n", "a.*e\n", \@diff);
ok(! $ret);
ok(join('', @diff) eq $diffold ? <<'_EOF_' : <<'_EOF_');
1c1
< a.*e
---
> abcde
_EOF_
Expected =====
abcde
Actual =====
a.*e
_EOF_

$ret = $test->diff_exact("abcde\n", "abcde\n", \@diff);
ok($ret);
ok(! @diff);

$ret = $test->diff_exact(<<'_EOF_', <<'_EOF_', \@diff);
12345
abcde
_EOF_
1\d+5
a.*e
_EOF_
ok(! $ret);
ok(join('', @diff) eq $diffold ? <<'_EOF_' : <<'_EOF_');
1,2c1,2
< 1\d+5
< a.*e
---
> 12345
> abcde
_EOF_
Expected =====
1\d+5
a.*e
Actual =====
12345
abcde
_EOF_

$ret = $test->diff_exact(<<'_EOF_', <<'_EOF_', \@diff);
12345
abcde
_EOF_
12345
abcde
_EOF_
ok($ret);
ok(! @diff);

@lines = ( "vwxyz\n", "67890\n" );
@regexes = ( "v[^a-u]*z\n", "6\\S+0\n");

$ret = $test->diff_exact(\@lines, \@regexes, \@diff);
ok(! $ret);
ok(join('', @diff) eq $diffold ? <<'_EOF_' : <<'_EOF_');
1,2c1,2
< v[^a-u]*z
< 6\S+0
---
> vwxyz
> 67890
_EOF_
Expected =====
v[^a-u]*z
6\S+0
Actual =====
vwxyz
67890
_EOF_

$ret = $test->diff_exact(\@lines, \@lines, \@diff);
ok($ret);
ok(! @diff);

$ret = $test->diff_exact(<<'_EOF_', <<'_EOF_', \@diff);
1
a
b
2
3
c
4
5
_EOF_
1
2
x
3
4
y
z
5
_EOF_
ok(! $ret);
ok(join('', @diff) eq $diffold ? <<'_EOF_' : <<'_EOF_');
1a2,3
> a
> b
3d4
< x
4a6
> c
6,7d7
< y
< z
_EOF_
Expected =====
1
2
x
3
4
y
z
5
Actual =====
1
a
b
2
3
c
4
5
_EOF_

$ret = $test->diff_exact(<<'_EOF_', <<'_EOF_', \@diff);
1
2
a
3
4
b
c
5
_EOF_
1
x
y
2
3
z
4
5
_EOF_
ok(! $ret);
ok(join('', @diff) eq $diffold ? <<'_EOF_' : <<'_EOF_');
2,3d1
< x
< y
4a3
> a
6d4
< z
7a6,7
> b
> c
_EOF_
Expected =====
1
x
y
2
3
z
4
5
Actual =====
1
2
a
3
4
b
c
5
_EOF_

$ret = $test->diff_exact(<<'_EOF_', <<'_EOF_', \@diff);
a
b
c
e
h
j
l
m
n
p
_EOF_
b
c
d
e
f
j
k
l
m
r
s
t
_EOF_
ok(! $ret);
ok(join('', @diff) eq $diffold ? <<'_EOF_' : <<'_EOF_');
0a1
> a
3d3
< d
5c5
< f
---
> h
7d6
< k
10,12c9,10
< r
< s
< t
---
> n
> p
_EOF_
Expected =====
b
c
d
e
f
j
k
l
m
r
s
t
Actual =====
a
b
c
e
h
j
l
m
n
p
_EOF_