File: validate_role.t

package info (click to toggle)
libtest-moose-more-perl 0.024-1
  • links: PTS, VCS
  • area: main
  • in suites: jessie, jessie-kfreebsd
  • size: 312 kB
  • ctags: 25
  • sloc: perl: 303; makefile: 2
file content (115 lines) | stat: -rw-r--r-- 3,582 bytes parent folder | download
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
use strict;
use warnings;

{ package TestRole::One;      use Moose::Role;                       }
{ package TestRole::Two;      use Moose::Role;                       }
{ package TestRole::Invalid;  use Moose::Role; with 'TestRole::Two'; }
{ package TestClass::NonMoosey;                                      }

{
    package TestRole;
    use Moose::Role;

    with 'TestRole::One';

    has foo => (is => 'ro');

    has baz => (traits => ['TestRole::Two'], is => 'ro');

    sub method1 { }

    requires 'blargh';

    has bar => (

        traits  => ['Array'],
        isa     => 'ArrayRef',
        is      => 'ro',
        lazy    => 1,
        builder => '_build_bar',

        handles => {

            has_bar  => 'count',
            num_bars => 'count',
        }
    );
}

use Test::Builder::Tester; # tests => 1;
use Test::More;
use Test::Moose::More;

use TAP::SimpleOutput 'counters';

note 'validate w/valid role';
{
    my ($_ok, $_nok) = counters();
    test_out $_ok->('TestRole has a metaclass');
    test_out $_ok->('TestRole is a Moose role');
    test_out $_ok->('TestRole requires method blargh');
    test_out $_ok->('TestRole does TestRole');
    test_out $_ok->('TestRole does not do TestRole::Two');
    test_out $_ok->("TestRole has method $_")
        for qw{ method1 };
    test_out $_ok->('TestRole has an attribute named bar');
    validate_role 'TestRole' => (
        attributes => [ 'bar'                     ],
        does       => [ 'TestRole'                ],
        does_not   => [ 'TestRole::Two'           ],
        # XXX cannot check for accessor methods in a role at the moment
        #methods    => [ qw{ foo method1 has_bar } ],
        methods    => [ qw{ method1 } ],
        required_methods => [ qw{ blargh } ],
    );
    test_test 'validate_role works correctly for valid roles';
}

note 'validate w/non-moose package';
{
    my ($_ok, $_nok) = counters();
    test_out $_nok->('TestClass::NonMoosey has a metaclass');
    test_fail 1;
    validate_role 'TestClass::NonMoosey' => (
        does    => [ 'TestRole' ],
        methods => [ qw{ foo method1 has_bar } ],
    );
    test_test 'validate_role works correctly for non-moose classes';
}

note 'validate invalid role';
{
    my ($_ok, $_nok) = counters();

    test_out $_ok->('TestRole::Invalid has a metaclass');
    test_out $_ok->('TestRole::Invalid is a Moose role');
    test_out $_nok->('TestRole::Invalid does TestRole');
    test_fail 6;
    test_out $_nok->('TestRole::Invalid does not do TestRole::Two');
    test_fail 4;
    do { test_out $_nok->("TestRole::Invalid has method $_"); test_fail 3 }
        for qw{ foo method1 has_bar };

    validate_role 'TestRole::Invalid' => (
        does     => [ 'TestRole'                ],
        does_not => [ 'TestRole::Two'           ],
        methods  => [ qw{ foo method1 has_bar } ],
    );
    test_test 'validate_role works correctly for invalid roles';
}

note 'validate w/attribute validation';
{
    my ($_ok, $_nok, $_skip) = counters();
    test_out $_ok->('TestRole has a metaclass');
    test_out $_ok->('TestRole is a Moose role');
    test_out $_ok->('TestRole has an attribute named bar');
    test_out $_ok->('TestRole has an attribute named baz');
    test_out $_skip->(q{Cannot examine attribute metaclass in roles});
    test_out $_ok->('TestRole has an attribute named foo');
    validate_role 'TestRole' => (
        attributes => [ 'bar', baz => { does => [ 'TestRole::Two' ] }, 'foo' ],
    );
    test_test 'validate_role works correctly for attribute meta checking';
}
done_testing;