isa_c3.t revision 1.1.1.3
1#!perl -w
2
3BEGIN {
4    chdir 't' if -d 't';
5    @INC = '../lib';
6    require "./test.pl";
7}
8
9use strict;
10
11plan 'no_plan';
12
13# package klonk doesn't have a stash.
14
15package kapow;
16use mro 'c3';
17
18# No parents
19
20package urkkk;
21use mro 'c3';
22
23# 1 parent
24@urkkk::ISA = 'klonk';
25
26package kayo;
27use mro 'c3';
28
29# 2 parents
30@urkkk::ISA = ('klonk', 'kapow');
31
32package thwacke;
33use mro 'c3';
34
35# No parents, has @ISA
36@thwacke::ISA = ();
37
38package zzzzzwap;
39use mro 'c3';
40
41@zzzzzwap::ISA = ('thwacke', 'kapow');
42
43package whamm;
44use mro 'c3';
45
46@whamm::ISA = ('kapow', 'thwacke');
47
48package main;
49
50my %expect =
51    (
52     klonk => [qw(klonk)],
53     urkkk => [qw(urkkk klonk kapow)],
54     kapow => [qw(kapow)],
55     kayo => [qw(kayo)],
56     thwacke => [qw(thwacke)],
57     zzzzzwap => [qw(zzzzzwap thwacke kapow)],
58     whamm => [qw(whamm kapow thwacke)],
59    );
60
61foreach my $package (qw(klonk urkkk kapow kayo thwacke zzzzzwap whamm)) {
62    my $ref = bless [], $package;
63    my $isa = $expect{$package};
64    is("@{mro::get_linear_isa($package)}", "@$isa", "\@ISA for $package");
65
66    foreach my $class ($package, @$isa, 'UNIVERSAL') {
67	object_ok($ref, $class, $package);
68    }
69}
70
71package _119433 {
72    use mro 'c3';
73    no warnings 'uninitialized';
74    $#_119433::ISA++;
75    ::pass "no crash when ISA contains nonexistent elements";
76}
77