diff options
Diffstat (limited to 't/basic.t')
-rw-r--r-- | t/basic.t | 60 |
1 files changed, 60 insertions, 0 deletions
diff --git a/t/basic.t b/t/basic.t new file mode 100644 index 0000000..85b0047 --- /dev/null +++ b/t/basic.t @@ -0,0 +1,60 @@ +#!/usr/bin/env perl +use strict; +use warnings; +use Test::More; +use Test::Fatal; + +{ + package Foo; + use Moose; + use MooseX::ABC; + + requires 'bar', 'baz'; +} + +{ + package Foo::Sub1; + use Moose; + ::is(::exception { extends 'Foo' }, undef, + "extending works when the requires are fulfilled"); + sub bar { } + sub baz { } +} + +{ + package Foo::Sub2; + use Moose; + ::like( + ::exception { extends 'Foo' }, + qr/Foo requires Foo::Sub2 to implement baz/, + "extending fails with the correct error when requires are not fulfilled" + ); + sub bar { } +} + +{ + package Foo::Sub::Sub; + use Moose; + ::is(::exception { extends 'Foo::Sub1' }, undef, + "extending twice works"); +} + +{ + my $foosub; + is(exception { $foosub = Foo::Sub1->new }, undef, + "instantiating concrete subclasses works"); + isa_ok($foosub, 'Foo', 'inheritance is correct'); +} + +{ + my $foosubsub; + is(exception { $foosubsub = Foo::Sub::Sub->new }, undef, + "instantiating deeper concrete subclasses works"); + isa_ok($foosubsub, 'Foo', 'inheritance is correct'); + isa_ok($foosubsub, 'Foo::Sub1', 'inheritance is correct'); +} + +like(exception { Foo->new }, qr/Foo is abstract, it cannot be instantiated/, + "instantiating abstract classes fails"); + +done_testing; |