Beginning of dzilization
[gitmo/Moose.git] / t / 300_immutable / 012_default_values.t
1 #!/usr/bin/perl
2
3 use strict;
4 use warnings;
5
6 use Test::More;
7 use Test::Fatal;
8
9 {
10
11     package Foo;
12     use Moose;
13
14     has 'foo' => ( is => 'rw', default => q{'} );
15     has 'bar' => ( is => 'rw', default => q{\\} );
16     has 'baz' => ( is => 'rw', default => q{"} );
17     has 'buz' => ( is => 'rw', default => q{"'\\} );
18     has 'faz' => ( is => 'rw', default => qq{\0} );
19
20     ::is( ::exception {  __PACKAGE__->meta->make_immutable }, undef, 'no errors making a package immutable when it has default values that could break quoting' );
21 }
22
23 my $foo = Foo->new;
24 is( $foo->foo, q{'},
25     'default value for foo attr' );
26 is( $foo->bar, q{\\},
27     'default value for bar attr' );
28 is( $foo->baz, q{"},
29     'default value for baz attr' );
30 is( $foo->buz, q{"'\\},
31     'default value for buz attr' );
32 is( $foo->faz, qq{\0},
33     'default value for faz attr' );
34
35
36 # Lazy attrs were never broken, but it doesn't hurt to test that they
37 # won't be broken by any future changes.
38 {
39
40     package Bar;
41     use Moose;
42
43     has 'foo' => ( is => 'rw', default => q{'}, lazy => 1 );
44     has 'bar' => ( is => 'rw', default => q{\\}, lazy => 1 );
45     has 'baz' => ( is => 'rw', default => q{"}, lazy => 1 );
46     has 'buz' => ( is => 'rw', default => q{"'\\}, lazy => 1 );
47     has 'faz' => ( is => 'rw', default => qq{\0}, lazy => 1 );
48
49     ::is( ::exception {  __PACKAGE__->meta->make_immutable }, undef, 'no errors making a package immutable when it has lazy default values that could break quoting' );
50 }
51
52 my $bar = Bar->new;
53 is( $bar->foo, q{'},
54     'default value for foo attr' );
55 is( $bar->bar, q{\\},
56     'default value for bar attr' );
57 is( $bar->baz, q{"},
58     'default value for baz attr' );
59 is( $bar->buz, q{"'\\},
60     'default value for buz attr' );
61 is( $bar->faz, qq{\0},
62     'default value for faz attr' );
63
64 done_testing;