also handle undef inputs
[p5sagit/Safe-Isa.git] / t / safe_isa.t
CommitLineData
e6995dc6 1use strict;
2use warnings FATAL => 'all';
5e41c170 3use Test::More tests => 28;
e6995dc6 4
5{ package Foo; sub new { bless({}, $_[0]) } }
6{ package Bar; our @ISA = qw(Foo); sub bar { 1 } }
7
8my $foo = Foo->new;
9my $bar = Bar->new;
10my $blam = [ 42 ];
5e41c170 11my $class = 'Bar';
12my $blam2 = '';
0b257d22 13my $undef;
e6995dc6 14
15# basic isa usage -
16
17ok($foo->isa('Foo'), 'foo isa Foo');
18ok($bar->isa('Foo'), 'bar isa Foo');
5e41c170 19ok($class->isa('Foo'), 'class name isa Foo');
20ok(!eval { $blam->isa('Foo'); 1 }, 'blam goes blam with isa');
21ok(!eval { $blam2->isa('Foo'); 1 }, 'blam2 goes blam with isa');
0b257d22 22ok(!eval { $undef->isa('Foo'); 1 }, 'undef goes blam with isa');
e6995dc6 23
24ok(!$foo->can('bar'), 'foo !can bar');
25ok($bar->can('bar'), 'bar can bar');
5e41c170 26ok($class->can('bar'), 'our class name can bar');
27ok(!eval { $blam->can('bar'); 1 }, 'blam goes blam with can');
28ok(!eval { $blam2->can('bar'); 1 }, 'blam2 goes blam with can');
0b257d22 29ok(!eval { $undef->can('bar'); 1 }, 'undef goes blam with can');
e6995dc6 30
31use Safe::Isa;
32
33ok($foo->$_isa('Foo'), 'foo $_isa Foo');
34ok($bar->$_isa('Foo'), 'bar $_isa Foo');
5e41c170 35ok($class->$_isa('Foo'), 'class name $_isa Foo');
36ok(eval { $blam->$_isa('Foo'); 1 }, 'no boom today with isa');
37ok(eval { $blam2->$_isa('Foo'); 1 }, 'no boom today with isa');
0b257d22 38ok(eval { $undef->$_isa('Foo'); 1 }, 'no boom today with isa');
e6995dc6 39
40ok(!$foo->$_can('bar'), 'foo !$_can bar');
41ok($bar->$_can('bar'), 'bar $_can bar');
5e41c170 42ok($class->$_can('bar'), 'class name $_can bar');
43ok(eval { $blam->$_can('bar'); 1 }, 'no boom today with can');
44ok(eval { $blam2->$_can('bar'); 1 }, 'no boom today with can');
0b257d22 45ok(eval { $undef->$_can('bar'); 1 }, 'no boom today with can');
e6995dc6 46
47ok($foo->$_call_if_object(isa => 'Foo'), 'foo $_call_if_object(isa => Foo)');
48ok($bar->$_call_if_object(isa => 'Foo'), 'bar $_call_if_object(isa => Foo)');
5e41c170 49ok(eval { $blam->$_call_if_object(isa => 'Foo'); 1 }, 'no boom today with _call_if_object');
50
51ok($foo->$_call_if_object_or_classname(isa => 'Foo'), 'foo $_call_if_object_or_classname(isa => Foo)');
52ok($bar->$_call_if_object_or_classname(isa => 'Foo'), 'bar $_call_if_object_or_classname(isa => Foo)');
53ok($class->$_call_if_object_or_classname(isa => 'Foo'), 'class name $_call_if_object_or_classname(isa => Foo)');
54ok(eval { $blam->$_call_if_object_or_classname(isa => 'Foo'); 1 }, 'no boom today with _call_if_object_or_classname');
55ok(eval { $blam2->$_call_if_object_or_classname(isa => 'Foo'); 1 }, 'no boom today with _call_if_object_or_classname');
0b257d22 56ok(eval { $undef->$_call_if_object_or_classname(isa => 'Foo'); 1 }, 'no boom today with _call_if_object_or_classname');