Commit | Line | Data |
4aa3d405 |
1 | #!/usr/bin/perl |
2 | |
3 | use strict; |
4 | use warnings; |
5 | |
a28e50e4 |
6 | use Test::More; |
53a4d826 |
7 | use Test::Exception; |
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 | |
53a4d826 |
20 | ::lives_ok { __PACKAGE__->meta->make_immutable } |
4aa3d405 |
21 | 'no errors making a package immutable when it has default values that could break quoting'; |
22 | } |
23 | |
24 | my $foo = Foo->new; |
25 | is( $foo->foo, q{'}, |
26 | 'default value for foo attr' ); |
27 | is( $foo->bar, q{\\}, |
28 | 'default value for bar attr' ); |
29 | is( $foo->baz, q{"}, |
30 | 'default value for baz attr' ); |
31 | is( $foo->buz, q{"'\\}, |
32 | 'default value for buz attr' ); |
33 | is( $foo->faz, qq{\0}, |
34 | 'default value for faz attr' ); |
35 | |
36 | |
37 | # Lazy attrs were never broken, but it doesn't hurt to test that they |
38 | # won't be broken by any future changes. |
39 | { |
40 | |
41 | package Bar; |
42 | use Moose; |
43 | |
44 | has 'foo' => ( is => 'rw', default => q{'}, lazy => 1 ); |
45 | has 'bar' => ( is => 'rw', default => q{\\}, lazy => 1 ); |
46 | has 'baz' => ( is => 'rw', default => q{"}, lazy => 1 ); |
47 | has 'buz' => ( is => 'rw', default => q{"'\\}, lazy => 1 ); |
48 | has 'faz' => ( is => 'rw', default => qq{\0}, lazy => 1 ); |
49 | |
53a4d826 |
50 | ::lives_ok { __PACKAGE__->meta->make_immutable } |
4aa3d405 |
51 | 'no errors making a package immutable when it has lazy default values that could break quoting'; |
52 | } |
53 | |
54 | my $bar = Bar->new; |
55 | is( $bar->foo, q{'}, |
56 | 'default value for foo attr' ); |
57 | is( $bar->bar, q{\\}, |
58 | 'default value for bar attr' ); |
59 | is( $bar->baz, q{"}, |
60 | 'default value for baz attr' ); |
61 | is( $bar->buz, q{"'\\}, |
62 | 'default value for buz attr' ); |
63 | is( $bar->faz, qq{\0}, |
64 | 'default value for faz attr' ); |
a28e50e4 |
65 | |
66 | done_testing; |