rename 'error' error parameter to 'last_error'
[gitmo/Moose.git] / t / 050_metaclasses / 018_throw_error.t
CommitLineData
95f1ef68 1#!/usr/bin/perl
2
3use strict;
4use warnings;
5
6use 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
45my $line;
46sub blah { $line = __LINE__; shift->foo(4) }
47
48sub 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}