The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
#!perl
use strict;
use Test::More (tests => 54);
use vars qw( $AR $HR @ARGold @HRGold @ArraysGold @LArraysGold @Arrays);
require "t/TestLabelled.pm";
use strict;

use_ok q(Data::Dumper::EasyOO);
my $ezdd = Data::Dumper::EasyOO->new();

is($ezdd->(t1=>2,t3=>4), <<'EORef', "auto-label on array of 4 ints");
$t1 = 2;
$t3 = 4;
EORef

is($ezdd->('one',2,'three',4), <<'EORef', "auto-label on 4 elem array");
$one = 2;
$three = 4;
EORef

SKIP: {
    skip '- list-of-refs \(1..4) unsupported in this perl',1 if $] < 5.008;
    is($ezdd->(\(1..4)), <<'EORef', "no labels on array of refs");
$VAR1 = \1;
$VAR2 = \2;
$VAR3 = \3;
$VAR4 = \4;
EORef
}

# uses a single object repeatedly, invokes with label => $data syntax
pass "test auto-labelling with combos of Terse(T), Indent(I)";

for my $t (0..1) {
    pass "following with Terse($t)";
    $ezdd->Terse($t);

    for my $i (0..3) {
	$ezdd->Indent($i);

	is ($ezdd->("indent$i" => $AR), $ARGold[$t][$i]
	    , "labeled AR, with Indent($i)" );
	is ($ezdd->("indent$i" => $HR), $HRGold[$t][$i]
	    , "labeled HR, with Indent($i)" );
    }
}

pass "two labeled data items, with combos of Terse(T), Indent(I)";

for my $t (0..1) {
    pass "following with Terse($t)";
    $ezdd->Terse($t);

    for my $i (0..3) {
	$ezdd->Indent($i);

	is ($ezdd->("indent$i" => $AR, "indent$i" => $HR)
	    , "$ARGold[$t][$i]" . "$HRGold[$t][$i]"
	    , "labeled AR and HR, with Indent($i)" );
    }
}

$ezdd->Set(Terse=>0,Indent=>2); # restore behavior matching DD default

pass "test un-labelling";	# exposed a bug!

for my $i (0..$#Arrays) {
    is ($ezdd->("item$i" => $Arrays[$i]), $LArraysGold[$i], "labeled-data[$i]");
    is ($ezdd->($Arrays[$i]),		  $ArraysGold[$i], "unlabeled-data[$i]");
}

pass "test programmer intended labelling, right and wrong";

for my $i (0..$#Arrays-1) {
    my $j = $i+1;
    is ($ezdd->("item$i" => $Arrays[$i], "item$j" => $Arrays[$j])
	, $LArraysGold[$i].$LArraysGold[$j],
	, "labeled-data[$i] and labeled-data[$j]");

    isnt ($ezdd->("item$i" => $Arrays[$i], $Arrays[$j])
	    , $LArraysGold[$i].$LArraysGold[$j],
	    , "labeled-data[$i] and un-labeled-data[$j]");
}

__END__