summaryrefslogtreecommitdiffstats
path: root/t/basic.t
diff options
context:
space:
mode:
Diffstat (limited to 't/basic.t')
-rw-r--r--t/basic.t60
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;