Document latest bug fix
[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{
ab25e388 9
95f1ef68 10 package Foo;
11 use Moose;
12
ab25e388 13 has foo => ( is => "ro" );
95f1ef68 14
15 package Bar;
16 use metaclass (
ab25e388 17 metaclass => "Moose::Meta::Class",
bf6fa6b3 18 error_class => "Moose::Error::Croak",
95f1ef68 19 );
20 use Moose;
21
ab25e388 22 has foo => ( is => "ro" );
95f1ef68 23
24 package Baz::Error;
25 use Moose;
26
ab25e388 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" );
34 has last_error => ( isa => "Any", is => "ro" );
bf6fa6b3 35
36 package Baz;
37 use metaclass (
ab25e388 38 metaclass => "Moose::Meta::Class",
bf6fa6b3 39 error_class => "Baz::Error",
40 );
41 use Moose;
42
ab25e388 43 has foo => ( is => "ro" );
95f1ef68 44}
45
46my $line;
47sub blah { $line = __LINE__; shift->foo(4) }
48
49sub create_error {
ab25e388 50 eval {
51 eval { die "Blah" };
52 blah(shift);
53 };
95f1ef68 54 ok( my $e = $@, "got some error" );
55 return {
ab25e388 56 file => __FILE__,
57 line => $line,
95f1ef68 58 error => $e,
ab25e388 59 };
95f1ef68 60}
61
62{
ab25e388 63 my $e = create_error( Foo->new );
64 ok( !ref( $e->{error} ), "error is a string" );
95f1ef68 65 like( $e->{error}, qr/line $e->{line}\n.*\n/s, "confess" );
66}
67
68{
ab25e388 69 my $e = create_error( Bar->new );
70 ok( !ref( $e->{error} ), "error is a string" );
95f1ef68 71 like( $e->{error}, qr/line $e->{line}$/s, "croak" );
72}
73
74{
ab25e388 75 my $e = create_error( my $baz = Baz->new );
95f1ef68 76 isa_ok( $e->{error}, "Baz::Error" );
ab25e388 77 unlike( $e->{error}->message, qr/line $e->{line}/s,
78 "no line info, just a message" );
95f1ef68 79 isa_ok( $e->{error}->metaclass, "Moose::Meta::Class", "metaclass" );
80 is( $e->{error}->metaclass, Baz->meta, "metaclass value" );
81 isa_ok( $e->{error}->attr, "Moose::Meta::Attribute", "attr" );
82 is( $e->{error}->attr, Baz->meta->get_attribute("foo"), "attr value" );
83 isa_ok( $e->{error}->method, "Moose::Meta::Method", "method" );
84 is( $e->{error}->method, Baz->meta->get_method("foo"), "method value" );
ab25e388 85 is( $e->{error}->line, $e->{line}, "line attr" );
86 is( $e->{error}->file, $e->{file}, "file attr" );
95f1ef68 87 is_deeply( $e->{error}->data, [ $baz, 4 ], "captured args" );
30ef61cd 88 like( $e->{error}->last_error, qr/Blah/, "last error preserved" );
95f1ef68 89}