summaryrefslogtreecommitdiff
path: root/t/exceptions/moose-exporter.t
blob: 785217644f5370460c42ce872c61d877dfd25360 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
use strict;
use warnings;

use Test::More;
use Test::Fatal;

{
    my $exception = exception {
        package MooseX::NoAlso;
        use Moose ();

        Moose::Exporter->setup_import_methods(
            also => ['NoSuchThing']
        );
    };

    like(
        $exception,
        qr/\QPackage in also (NoSuchThing) does not seem to use Moose::Exporter (is it loaded?)/,
        'a package which does not use Moose::Exporter in also dies with an error');

    isa_ok(
        $exception,
        'Moose::Exception::PackageDoesNotUseMooseExporter',
        'a package which does not use Moose::Exporter in also dies with an error');

    is(
        $exception->package,
        "NoSuchThing",
        'a package which does not use Moose::Exporter in also dies with an error');
}

{
    my $exception = exception {
        {
            package MooseX::CircularAlso;
            use Moose;

            Moose::Exporter->setup_import_methods(
                also => [ 'Moose', 'MooseX::CircularAlso' ],
            );
        }
    };

    like(
        $exception,
        qr/\QCircular reference in 'also' parameter to Moose::Exporter between MooseX::CircularAlso and MooseX::CircularAlso/,
        'a circular reference in also dies with an error');

    isa_ok(
        $exception,
        'Moose::Exception::CircularReferenceInAlso',
        'a circular reference in also dies with an error');

    is(
        $exception->also_parameter,
        "MooseX::CircularAlso",
        'a circular reference in also dies with an error');
}

{
    {
        package My::SimpleTrait;
        use Moose::Role;

        sub simple { return 5 }
    }

    use Moose::Util::TypeConstraints;
    my $exception = exception {
            Moose::Util::TypeConstraints->import(
                -traits => 'My::SimpleTrait' );
    };

    like(
        $exception,
        qr/\QCannot provide traits when Moose::Util::TypeConstraints does not have an init_meta() method/,
        'cannot provide -traits to an exporting module that does not init_meta');

    isa_ok(
        $exception,
        "Moose::Exception::ClassDoesNotHaveInitMeta",
        'cannot provide -traits to an exporting module that does not init_meta');

    is(
        $exception->class_name,
        "Moose::Util::TypeConstraints",
        'cannot provide -traits to an exporting module that does not init_meta');
}

{
    my $exception = exception {
        {
            package MooseX::BadTraits;
            use Moose ();

            Moose::Exporter->setup_import_methods(
                trait_aliases => [{hello => 1}]
            );
        }
    };

    like(
        $exception,
        qr/HASH references are not valid arguments to the 'trait_aliases' option/,
        "a HASH ref is given to trait_aliases");

    isa_ok(
        $exception,
        "Moose::Exception::InvalidArgumentsToTraitAliases",
        "a HASH ref is given to trait_aliases");

    is(
        $exception->package_name,
        "MooseX::BadTraits",
        "a HASH ref is given to trait_aliases");
}

done_testing;