Commit | Line | Data |
4aa3d405 |
1 | #!/usr/bin/perl |
2 | |
3 | use strict; |
4 | use warnings; |
5 | |
a28e50e4 |
6 | use Test::More; |
b10dde3a |
7 | use Test::Fatal; |
4aa3d405 |
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 | |
b10dde3a |
20 | ::is( ::exception { __PACKAGE__->meta->make_immutable }, undef, 'no errors making a package immutable when it has default values that could break quoting' ); |
4aa3d405 |
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. |
545c6012 |
38 | # Also make sure that attributes stay lazy even after being immutable |
39 | |
4aa3d405 |
40 | { |
41 | |
42 | package Bar; |
43 | use Moose; |
44 | |
45 | has 'foo' => ( is => 'rw', default => q{'}, lazy => 1 ); |
46 | has 'bar' => ( is => 'rw', default => q{\\}, lazy => 1 ); |
47 | has 'baz' => ( is => 'rw', default => q{"}, lazy => 1 ); |
48 | has 'buz' => ( is => 'rw', default => q{"'\\}, lazy => 1 ); |
49 | has 'faz' => ( is => 'rw', default => qq{\0}, lazy => 1 ); |
50 | |
545c6012 |
51 | { |
52 | my $bar = Bar->new; |
53 | ::ok(!$bar->meta->get_attribute($_)->has_value($bar), |
54 | "Attribute $_ has no value") |
55 | for qw(foo bar baz buz faz); |
56 | } |
57 | |
b10dde3a |
58 | ::is( ::exception { __PACKAGE__->meta->make_immutable }, undef, 'no errors making a package immutable when it has lazy default values that could break quoting' ); |
545c6012 |
59 | |
60 | { |
61 | my $bar = Bar->new; |
62 | ::ok(!$bar->meta->get_attribute($_)->has_value($bar), |
63 | "Attribute $_ has no value (immutable)") |
64 | for(qw(foo bar baz buz faz)); |
65 | } |
66 | |
4aa3d405 |
67 | } |
68 | |
69 | my $bar = Bar->new; |
70 | is( $bar->foo, q{'}, |
71 | 'default value for foo attr' ); |
72 | is( $bar->bar, q{\\}, |
73 | 'default value for bar attr' ); |
74 | is( $bar->baz, q{"}, |
75 | 'default value for baz attr' ); |
76 | is( $bar->buz, q{"'\\}, |
77 | 'default value for buz attr' ); |
78 | is( $bar->faz, qq{\0}, |
79 | 'default value for faz attr' ); |
a28e50e4 |
80 | |
81 | done_testing; |