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. |
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 | |
b10dde3a |
49 | ::is( ::exception { __PACKAGE__->meta->make_immutable }, undef, 'no errors making a package immutable when it has lazy default values that could break quoting' ); |
4aa3d405 |
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' ); |
a28e50e4 |
63 | |
64 | done_testing; |