diff options
author | Jesse Luehrs <doy@tozt.net> | 2010-05-20 16:05:00 -0500 |
---|---|---|
committer | Jesse Luehrs <doy@tozt.net> | 2010-05-20 16:05:59 -0500 |
commit | 9522bf6fed9c7eb8da5cd6684b609e84964fb0ac (patch) | |
tree | 44ca1092fee41881d55cce97e04baac83dc2e131 /t | |
parent | 6c5baf303da194c2388fd5efb2ab7f69767e80a4 (diff) | |
download | moosex-nonmoose-9522bf6fed9c7eb8da5cd6684b609e84964fb0ac.tar.gz moosex-nonmoose-9522bf6fed9c7eb8da5cd6684b609e84964fb0ac.zip |
handle broken constructors that don't like to be subclassed (jhallock)
Diffstat (limited to 't')
-rw-r--r-- | t/101-buggy-constructors.t | 98 |
1 files changed, 98 insertions, 0 deletions
diff --git a/t/101-buggy-constructors.t b/t/101-buggy-constructors.t new file mode 100644 index 0000000..066498d --- /dev/null +++ b/t/101-buggy-constructors.t @@ -0,0 +1,98 @@ +#!/usr/bin/env perl +use strict; +use warnings; +use Test::More; +use Test::Exception; +use Test::Moose; + +{ + package Foo; + + sub new { bless {}, shift } +} + +{ + package Foo::Sub; + use Moose; + use MooseX::NonMoose; + + extends 'Foo'; +} + +with_immutable { + my $foo; + lives_ok { + $foo = Foo::Sub->new; + } "subclassing nonmoose classes with correct constructors works"; + isa_ok($foo, 'Foo'); + isa_ok($foo, 'Foo::Sub'); +} 'Foo::Sub'; + +{ + package BadFoo; + + sub new { bless {} } +} + +{ + package BadFoo::Sub; + use Moose; + use MooseX::NonMoose; + + extends 'BadFoo'; +} + +with_immutable { + my $foo; + lives_ok { + $foo = BadFoo::Sub->new; + } "subclassing nonmoose classes with incorrect constructors works"; + isa_ok($foo, 'BadFoo'); + isa_ok($foo, 'BadFoo::Sub'); +} 'BadFoo::Sub'; + +{ + package BadFoo2; + + sub new { {} } +} + +{ + package BadFoo2::Sub; + use Moose; + use MooseX::NonMoose; + + extends 'BadFoo2'; +} + +with_immutable { + my $foo; + throws_ok { + $foo = BadFoo2::Sub->new; + } qr/\QThe constructor for BadFoo2 did not return a blessed instance/, + "subclassing nonmoose classes with incorrect constructors dies properly"; +} 'BadFoo2::Sub'; + +{ + package BadFoo3; + + sub new { bless {}, 'Something::Else::Entirely' } +} + +{ + package BadFoo3::Sub; + use Moose; + use MooseX::NonMoose; + + extends 'BadFoo3'; +} + +with_immutable { + my $foo; + throws_ok { + $foo = BadFoo3::Sub->new; + } qr/\QThe constructor for BadFoo3 returned an object whose class is not a parent of BadFoo3::Sub/, + "subclassing nonmoose classes with incorrect constructors dies properly"; +} 'BadFoo3::Sub'; + +done_testing; |