More tests for -ignore
[gitmo/Package-DeprecationManager.git] / t / basic.t
CommitLineData
dc4fc8c7 1use strict;
2use warnings;
3
4use Test::Exception;
5use Test::More;
6use Test::Warn;
7
8{
9 throws_ok {
10 eval 'package Foo; use Package::DeprecationManager;';
11 die $@ if $@;
12 }
13 qr/^\QYou must provide a hash reference -deprecations parameter when importing Package::DeprecationManager/,
14 'must provide a set of deprecations when using Package::DeprecationManager';
15}
16
17{
18 package Foo;
19
20 use Package::DeprecationManager -deprecations => {
bce3492c 21 'Foo::foo' => '0.02',
22 'Foo::bar' => '0.03',
23 'Foo::baz' => '1.21',
24 'not a sub' => '1.23',
dc4fc8c7 25 };
26
27 sub foo {
28 deprecated('foo is deprecated');
29 }
30
31 sub bar {
32 deprecated('bar is deprecated');
33 }
34
35 sub baz {
36 deprecated();
37 }
bce3492c 38
39 sub quux {
40 if ( $_[0] > 5 ) {
41 deprecated(
42 message => 'quux > 5 has been deprecated',
43 feature => 'not a sub',
44 );
45 }
46 }
c9ed2327 47
48 sub varies {
49 deprecated("The varies sub varies: $_[0]");
50 }
51
dc4fc8c7 52}
53
54{
55 package Bar;
56
57 Foo->import();
58
59 ::warning_is{ Foo::foo() }
60 { carped => 'foo is deprecated' },
61 'deprecation warning for foo';
62
63 ::warning_is{ Foo::bar() }
64 { carped => 'bar is deprecated' },
65 'deprecation warning for bar';
66
67 ::warning_is{ Foo::baz() }
68 { carped => 'Foo::baz has been deprecated since version 1.21' },
69 'deprecation warning for baz, and message is generated by Package::DeprecationManager';
70
71 ::warning_is{ Foo::foo() } q{}, 'no warning on second call to foo';
72
73 ::warning_is{ Foo::bar() } q{}, 'no warning on second call to bar';
74
75 ::warning_is{ Foo::baz() } q{}, 'no warning on second call to baz';
c9ed2327 76
77 ::warning_is{ Foo::varies(1) }
78 { carped => "The varies sub varies: 1" },
79 'warning for varies sub';
80
81 ::warning_is{ Foo::varies(2) }
82 { carped => "The varies sub varies: 2" },
83 'warning for varies sub with different error';
84
85 ::warning_is{ Foo::varies(1) }
86 q{},
87 'no warning for varies sub with same message as first call';
dc4fc8c7 88}
89
90{
91 package Baz;
92
93 Foo->import( -api_version => '0.01' );
94
95 ::warning_is{ Foo::foo() }
96 q{},
97 'no warning for foo with api_version = 0.01';
98
99 ::warning_is{ Foo::bar() }
100 q{},
101 'no warning for bar with api_version = 0.01';
102
103 ::warning_is{ Foo::baz() }
104 q{},
105 'no warning for baz with api_version = 0.01';
106}
107
dc4fc8c7 108{
109 package Quux;
110
111 Foo->import( -api_version => '1.17' );
112
113 ::warning_is{ Foo::foo() }
114 { carped => 'foo is deprecated' },
115 'deprecation warning for foo with api_version = 1.17';
116
117 ::warning_is{ Foo::bar() }
118 { carped => 'bar is deprecated' },
119 'deprecation warning for bar with api_version = 1.17';
120
121 ::warning_is{ Foo::baz() }
122 q{},
123 'no warning for baz with api_version = 1.17';
124}
125
bce3492c 126{
127 package Another;
128
129 Foo->import();
130
131 ::warning_is{ Foo::quux(1) }
132 q{},
133 'no warning for quux(1)';
134
135 ::warning_is{ Foo::quux(10) }
136 { carped => 'quux > 5 has been deprecated' },
137 'got a warning for quux(10)';
138}
139
d26afdef 140
141{
142 package Dep;
143
144 use Package::DeprecationManager -deprecations => {
145 'foo' => '1.00',
146 },
37bcd4f7 147 -ignore => [ 'My::Package1', 'My::Package2' ];
d26afdef 148
149 sub foo {
150 deprecated('foo is deprecated');
151 }
152}
153
154{
37bcd4f7 155 package Dep2;
156
157 use Package::DeprecationManager -deprecations => {
158 'bar' => '1.00',
159 },
160 -ignore => [ 'My::Package2' ];
161
162 sub bar {
163 deprecated('bar is deprecated');
164 }
165}
166
167{
168 package My::Package1;
d26afdef 169
170 sub foo { Dep::foo() }
37bcd4f7 171 sub bar { Dep2::bar() }
d26afdef 172}
173
174{
37bcd4f7 175 package My::Package2;
d26afdef 176
37bcd4f7 177 sub foo { My::Package1::foo() }
178 sub bar { My::Package1::bar() }
d26afdef 179}
180
181{
182 package My::Baz;
183
37bcd4f7 184 ::warning_like{ My::Package2::foo() }
d26afdef 185 qr/^foo is deprecated at t.basic\.t line \d+/,
37bcd4f7 186 'deprecation warning for call to My::Package2::foo()';
187
188 ::warning_like{ My::Package1::bar() }
189 qr/^bar is deprecated at t.basic\.t line \d+/,
190 'deprecation warning for call to My::Package1::bar()';
d26afdef 191}
192
193{
194 package My::Baz;
195
196 Dep->import( -api_version => '0.8' );
197
37bcd4f7 198 ::warning_is{ My::Package2::foo() }
d26afdef 199 q{},
37bcd4f7 200 'no warning when calling My::Package2::foo()';
d26afdef 201}
202
dc4fc8c7 203done_testing();