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