class.t   [plain text]


use strict;
use warnings;

use t::std;

{
	my $bless_a = bless {}, "A::Class";
	my $bless_b = bless {}, "B::Class";
	my $nobless = {};

	check_test(
		sub {
			cmp_deeply([$bless_a], [noclass($bless_b)]);
		},
		{
			actual_ok => 1,
			diag => "",
		},
		"no class eq"
	);

	check_test(
		sub {
			cmp_deeply([$bless_a], [noclass($nobless)]);
		},
		{
			actual_ok => 1,
			diag => "",
		},
		"no class eq unblessed"
	);

	check_test(
		sub {
			cmp_deeply([$bless_a], [$bless_b]);
		},
		{
			actual_ok => 0,
			diag => <<EOM,
Compared blessed(\$data->[0])
   got : 'A::Class'
expect : 'B::Class'
EOM
		},
		"class not eq"
	);

	check_test(
		sub {
			cmp_deeply([$bless_a], [$nobless]);
		},
		{
			actual_ok => 0,
			diag => <<EOM,
Compared blessed(\$data->[0])
   got : 'A::Class'
expect : undef
EOM
		},
		"class not eq unblessed"
	);

	my $bless_c = bless [$bless_a], "C::Class";

	check_test(
		sub {
			cmp_deeply(
				$bless_c,
				bless([noclass($nobless)], "C::Class")
			);
		},
		{
			actual_ok => 1,
			diag => "",
		},
		"class eq on/off"
	);

	my $bless_d = bless [$bless_c], "D::Class";

	check_test(
		sub {
			cmp_deeply(
				$bless_d,
				bless([noclass(bless([useclass(bless({}, "NotA::Class"))], "NotC::Class"))], "D::Class"),
			);
		},
		{
			actual_ok => 0,
			diag => <<EOM,
Compared blessed(\$data->[0]->[0])
   got : 'A::Class'
expect : 'NotA::Class'
EOM
		},
		"class eq on/off/on"
	);
}