more tests for metaclass traits with required attributes
[gitmo/Moose.git] / t / 050_metaclasses / 019_create_anon_with_required_attr.t
CommitLineData
310ba883 1#!/usr/bin/perl
2
6b48e9a3 3# this functionality may be pushing toward parametric roles/classes
4# it's off in a corner and may not be that important
5
310ba883 6use strict;
7use warnings;
8
6b48e9a3 9use Test::More tests => 15;
310ba883 10use Test::Exception;
11
12{
13 package HasFoo;
14 use Moose::Role;
15 has 'foo' => (
16 is => 'ro',
17 isa => 'Str',
18 required => 1,
19 );
20
21}
22
23{
24 package My::Metaclass;
25 use Moose;
26 extends 'Moose::Meta::Class';
27 with 'HasFoo';
28}
29
30package main;
31
32my $anon;
33lives_ok {
34 $anon = My::Metaclass->create_anon_class( foo => 'this' );
6b48e9a3 35} 'create anon class with required attr';
310ba883 36isa_ok( $anon, 'My::Metaclass' );
37cmp_ok( $anon->foo, 'eq', 'this', 'foo is this' );
6b48e9a3 38dies_ok {
39 $anon = My::Metaclass->create_anon_class();
40} 'failed to create anon class without required attr';
41
42my $meta;
43lives_ok {
44 $meta
45 = My::Metaclass->initialize( 'Class::Name1' => ( foo => 'that' ) );
46} 'initialize a class with required attr';
47isa_ok( $meta, 'My::Metaclass' );
48cmp_ok( $meta->foo, 'eq', 'that', 'foo is that' );
49cmp_ok( $meta->name, 'eq', 'Class::Name1', 'for the correct class' );
50dies_ok {
51 $meta
52 = My::Metaclass->initialize( 'Class::Name2' );
53} 'failed to initialize a class without required attr';
54
55lives_ok {
56 eval qq{
57 package Class::Name3;
58 use metaclass 'My::Metaclass' => (
59 foo => 'another',
60 );
61 use Moose;
62 };
63 die $@ if $@;
64} 'use metaclass with required attr';
65$meta = Class::Name3->meta;
66isa_ok( $meta, 'My::Metaclass' );
67cmp_ok( $meta->foo, 'eq', 'another', 'foo is another' );
68cmp_ok( $meta->name, 'eq', 'Class::Name3', 'for the correct class' );
69dies_ok {
70 eval qq{
71 package Class::Name4;
72 use metaclass 'My::Metaclass';
73 use Moose;
74 };
75 die $@ if $@;
76} 'failed to use metaclass without required attr';
77
78
79# how do we pass a required attribute to -traits?
80dies_ok {
81 eval qq{
82 package Class::Name5;
83 use Moose -traits => 'HasFoo';
84 };
85 die $@ if $@;
86} 'failed to use trait without required attr';
310ba883 87