Commit | Line | Data |
95f1ef68 |
1 | #!/usr/bin/perl |
2 | |
3 | use strict; |
4 | use warnings; |
5 | |
6 | use Test::More 'no_plan';; |
7 | |
8 | { |
9 | package Foo; |
10 | use Moose; |
11 | |
12 | has foo => ( is => "ro" ); |
13 | |
14 | package Bar; |
15 | use metaclass ( |
16 | metaclass => "Moose::Meta::Class", |
bf6fa6b3 |
17 | error_class => "Moose::Error::Croak", |
95f1ef68 |
18 | ); |
19 | use Moose; |
20 | |
21 | has foo => ( is => "ro" ); |
22 | |
bf6fa6b3 |
23 | |
95f1ef68 |
24 | package Baz::Error; |
25 | use Moose; |
26 | |
27 | has message => ( isa => "Str", is => "ro" ); |
28 | has attr => ( isa => "Moose::Meta::Attribute", is => "ro" ); |
29 | has method => ( isa => "Moose::Meta::Method", is => "ro" ); |
30 | has metaclass => ( isa => "Moose::Meta::Class", is => "ro" ); |
31 | has data => ( is => "ro" ); |
32 | has line => ( isa => "Int", is => "ro" ); |
33 | has file => ( isa => "Str", is => "ro" ); |
bf6fa6b3 |
34 | |
35 | package Baz; |
36 | use metaclass ( |
37 | metaclass => "Moose::Meta::Class", |
38 | error_class => "Baz::Error", |
39 | ); |
40 | use Moose; |
41 | |
42 | has foo => ( is => "ro" ); |
95f1ef68 |
43 | } |
44 | |
45 | my $line; |
46 | sub blah { $line = __LINE__; shift->foo(4) } |
47 | |
48 | sub create_error { |
49 | eval { blah(shift) }; |
50 | ok( my $e = $@, "got some error" ); |
51 | return { |
52 | file => __FILE__, |
53 | line => $line, |
54 | error => $e, |
55 | } |
56 | } |
57 | |
58 | { |
59 | my $e = create_error(Foo->new); |
60 | ok( !ref($e->{error}), "error is a string" ); |
61 | like( $e->{error}, qr/line $e->{line}\n.*\n/s, "confess" ); |
62 | } |
63 | |
64 | { |
65 | my $e = create_error(Bar->new); |
66 | ok( !ref($e->{error}), "error is a string" ); |
67 | like( $e->{error}, qr/line $e->{line}$/s, "croak" ); |
68 | } |
69 | |
70 | { |
71 | my $e = create_error(my $baz = Baz->new); |
72 | isa_ok( $e->{error}, "Baz::Error" ); |
73 | unlike( $e->{error}->message, qr/line $e->{line}/s, "no line info, just a message" ); |
74 | isa_ok( $e->{error}->metaclass, "Moose::Meta::Class", "metaclass" ); |
75 | is( $e->{error}->metaclass, Baz->meta, "metaclass value" ); |
76 | isa_ok( $e->{error}->attr, "Moose::Meta::Attribute", "attr" ); |
77 | is( $e->{error}->attr, Baz->meta->get_attribute("foo"), "attr value" ); |
78 | isa_ok( $e->{error}->method, "Moose::Meta::Method", "method" ); |
79 | is( $e->{error}->method, Baz->meta->get_method("foo"), "method value" ); |
80 | is( $e->{error}->line, $e->{line}, "line attr" ); |
81 | is( $e->{error}->file, $e->{file}, "file attr" ); |
82 | is_deeply( $e->{error}->data, [ $baz, 4 ], "captured args" ); |
83 | } |