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