xref: /openbsd/gnu/usr.bin/perl/t/mro/isa_c3.t (revision 5759b3d2)
1b39c5158Smillert#!perl -w
2b39c5158Smillert
3b39c5158SmillertBEGIN {
4b39c5158Smillert    chdir 't' if -d 't';
5b39c5158Smillert    require "./test.pl";
6*5759b3d2Safresh1    set_up_inc('../lib');
7b39c5158Smillert}
8b39c5158Smillert
9b39c5158Smillertuse strict;
10b39c5158Smillert
11b39c5158Smillertplan 'no_plan';
12b39c5158Smillert
13b39c5158Smillert# package klonk doesn't have a stash.
14b39c5158Smillert
15b39c5158Smillertpackage kapow;
16b39c5158Smillertuse mro 'c3';
17b39c5158Smillert
18b39c5158Smillert# No parents
19b39c5158Smillert
20b39c5158Smillertpackage urkkk;
21b39c5158Smillertuse mro 'c3';
22b39c5158Smillert
23b39c5158Smillert# 1 parent
24b39c5158Smillert@urkkk::ISA = 'klonk';
25b39c5158Smillert
26b39c5158Smillertpackage kayo;
27b39c5158Smillertuse mro 'c3';
28b39c5158Smillert
29b39c5158Smillert# 2 parents
30b39c5158Smillert@urkkk::ISA = ('klonk', 'kapow');
31b39c5158Smillert
32b39c5158Smillertpackage thwacke;
33b39c5158Smillertuse mro 'c3';
34b39c5158Smillert
35b39c5158Smillert# No parents, has @ISA
36b39c5158Smillert@thwacke::ISA = ();
37b39c5158Smillert
38b39c5158Smillertpackage zzzzzwap;
39b39c5158Smillertuse mro 'c3';
40b39c5158Smillert
41b39c5158Smillert@zzzzzwap::ISA = ('thwacke', 'kapow');
42b39c5158Smillert
43b39c5158Smillertpackage whamm;
44b39c5158Smillertuse mro 'c3';
45b39c5158Smillert
46b39c5158Smillert@whamm::ISA = ('kapow', 'thwacke');
47b39c5158Smillert
48b39c5158Smillertpackage main;
49b39c5158Smillert
50b39c5158Smillertmy %expect =
51b39c5158Smillert    (
52b39c5158Smillert     klonk => [qw(klonk)],
53b39c5158Smillert     urkkk => [qw(urkkk klonk kapow)],
54b39c5158Smillert     kapow => [qw(kapow)],
55b39c5158Smillert     kayo => [qw(kayo)],
56b39c5158Smillert     thwacke => [qw(thwacke)],
57b39c5158Smillert     zzzzzwap => [qw(zzzzzwap thwacke kapow)],
58b39c5158Smillert     whamm => [qw(whamm kapow thwacke)],
59b39c5158Smillert    );
60b39c5158Smillert
61b39c5158Smillertforeach my $package (qw(klonk urkkk kapow kayo thwacke zzzzzwap whamm)) {
62b39c5158Smillert    my $ref = bless [], $package;
63b39c5158Smillert    my $isa = $expect{$package};
64b39c5158Smillert    is("@{mro::get_linear_isa($package)}", "@$isa", "\@ISA for $package");
65b39c5158Smillert
66b39c5158Smillert    foreach my $class ($package, @$isa, 'UNIVERSAL') {
67898184e3Ssthen	object_ok($ref, $class, $package);
68b39c5158Smillert    }
69b39c5158Smillert}
706fb12b70Safresh1
716fb12b70Safresh1package _119433 {
726fb12b70Safresh1    use mro 'c3';
736fb12b70Safresh1    no warnings 'uninitialized';
746fb12b70Safresh1    $#_119433::ISA++;
756fb12b70Safresh1    ::pass "no crash when ISA contains nonexistent elements";
766fb12b70Safresh1}
77