use strict;
use warnings;
-use Test::More tests => 10;
+use Test::More;
use Test::Exception;
-
{
package Foo::Role;
sub foo {'Baz::Class2::foo'}
}
+
+{
+ package Quux::Role;
+ use Moose::Role;
+
+ requires qw( meth1 meth2 meth3 meth4 );
+}
+
+# RT #41119
+{
+
+ package Quux::Class;
+ use Moose;
+
+ ::throws_ok { with('Quux::Role') }
+ qr/\Q'Quux::Role' requires the methods 'meth1', 'meth2', 'meth3', and 'meth4' to be implemented by 'Quux::Class'/,
+ 'exception mentions all the missing required methods at once';
+}
+
+{
+ package Quux::Class2;
+ use Moose;
+
+ sub meth1 { }
+
+ ::throws_ok { with('Quux::Role') }
+ qr/'Quux::Role' requires the methods 'meth2', 'meth3', and 'meth4' to be implemented by 'Quux::Class2'/,
+ 'exception mentions all the missing required methods at once, but not the one that exists';
+}
+
+{
+ package Quux::Class3;
+ use Moose;
+
+ has 'meth1' => ( is => 'ro' );
+ has 'meth2' => ( is => 'ro' );
+
+ ::throws_ok { with('Quux::Role') }
+ qr/'Quux::Role' requires the methods 'meth3' and 'meth4' to be implemented by 'Quux::Class3'/,
+ 'exception mentions all the missing methods at once, but not the accessors';
+}
+
+{
+ package Quux::Class4;
+ use Moose;
+
+ sub meth1 { }
+ has 'meth2' => ( is => 'ro' );
+
+ ::throws_ok { with('Quux::Role') }
+ qr/'Quux::Role' requires the methods 'meth3' and 'meth4' to be implemented by 'Quux::Class4'/,
+ 'exception mentions all the require methods that are accessors at once, as well as missing methods, but not the one that exists';
+}
+
+done_testing;