1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91
|
# This script should be runnable with 'make test'.
######################### We start with some black magic to print on failure.
BEGIN { $| = 1 }
END { print "not ok 1\n" unless $loaded }
use lib qw( ./t );
use Magic;
use Class::Contract;
$loaded = 1;
print "ok 1\n";
######################### End of black magic.
::ok('desc' => "dtor initialization right-most derived-first order",
'expect' => 1,
'code' => <<'CODE');
package Alpha;
use Class::Contract;
contract {
dtor;
impl {
$::order{ref(&self)||&self} .= 'A';
$::args{ref(&self)||&self}->{'A'} = [@_]
};
};
package Bravo;
use Class::Contract;
contract {
inherits 'Alpha';
dtor;
impl {
$::order{ref(&self)||&self} .= 'B';
$::args{ref(&self)||&self}->{'B'}=[@_]
};
};
package Charlie; use Class::Contract;
contract {
inherits 'Alpha';
dtor;
impl {
$::order{ref(&self)||&self} .= 'C';
$::args{ref(&self)||&self}->{'C'}=[@_]
};
};
package Delta;
use Class::Contract;
contract {
dtor;
impl {
$::order{ref(&self)||&self} .= 'D';
$::args{ref(&self)||&self}->{'D'} = [@_];
};
};
package Echo;
use Class::Contract;
contract {
attr 'foobar';
inherits 'Delta';
dtor;
impl {
$::order{ref(&self)||&self} .= 'E';
$::args{ref(&self)||&self}->{'E'} = [@_]
};
};
package Foxtrot;
use Class::Contract;
contract {
inherits qw( Bravo Charlie Echo );
dtor;
impl {
$::order{ref(&self)||&self} .= 'F';
$::args{ref(&self)||&self}->{'F'} = [@_]
};
};
package main;
(%::order, %::args) = ();
{ my $foo = Foxtrot->new; }
$::order{'Foxtrot'} eq 'FEDCBA' ? 1 : 0;
CODE
1;
__END__
|