use strict;
use warnings;
use Test::More 'tests' => 10;
package t::ErrorParent::Child; {
eval "use Object::InsideOut qw(t::ErrorParent);";
Test::More::ok($@, 'Correctly fails on syntax error in parent');
}
package t::Child; {
eval "use Object::InsideOut qw(t::Missing);";
Test::More::ok($@, 'Correctly fails on missing parent');
}
package t::Missing::Child; {
eval "use Object::InsideOut qw(t::Missing);";
Test::More::ok($@, 'Correctly fails on missing parent');
}
package t::Child2; {
eval 'use Object::InsideOut qw(t::EmptyParent);';
Test::More::ok($@, 'Correctly fails on empty parent');
}
package t::EmptyParent::Child; {
eval 'use Object::InsideOut qw(t::EmptyParent);';
Test::More::ok($@, 'Correctly fails on empty parent');
}
package t::IntEmptyParent;
package t::IntChild; {
eval 'use Object::InsideOut qw(t::IntEmptyParent);';
Test::More::ok($@, 'Correctly fails on empty parent');
}
package t::IntEmptyParent::Child; {
eval 'use Object::InsideOut qw(t::IntEmptyParent);';
Test::More::ok($@, 'Correctly fails on empty parent');
}
# Test where parent is defined in an external file (e.g., t/Parent.pm) which
# hasn't be loaded yet, and the name of the child class starts with the the
# name of the parent class. For example:
# t::Parent
# t::Parent::Child
package t::Parent::Child; {
use Object::InsideOut qw(t::Parent);
}
package main;
MAIN:
{
my $child = t::Parent::Child->new();
isa_ok($child, 't::Parent::Child');
isa_ok($child, 't::Parent');
eval { $child->parent_func() };
ok(!$@, 'child->parent_func()');
}
exit(0);
# EOF