|
Packit |
92cec9 |
use strict;
|
|
Packit |
92cec9 |
use warnings;
|
|
Packit |
92cec9 |
|
|
Packit |
92cec9 |
use Test::More 0.88;
|
|
Packit |
92cec9 |
use Test::Fatal;
|
|
Packit |
92cec9 |
use Test::Warnings qw( warning warnings );
|
|
Packit |
92cec9 |
|
|
Packit |
92cec9 |
{
|
|
Packit |
92cec9 |
## no critic (BuiltinFunctions::ProhibitStringyEval, ErrorHandling::RequireCheckingReturnValueOfEval)
|
|
Packit |
92cec9 |
like(
|
|
Packit |
92cec9 |
exception {
|
|
Packit |
92cec9 |
eval 'package Whatever; use Package::DeprecationManager;';
|
|
Packit |
92cec9 |
die $@ if $@;
|
|
Packit |
92cec9 |
},
|
|
Packit |
92cec9 |
qr/^\QYou must provide a hash reference -deprecations parameter when importing Package::DeprecationManager/,
|
|
Packit |
92cec9 |
'must provide a set of deprecations when using Package::DeprecationManager'
|
|
Packit |
92cec9 |
);
|
|
Packit |
92cec9 |
}
|
|
Packit |
92cec9 |
|
|
Packit |
92cec9 |
## no critic (Modules::ProhibitMultiplePackages)
|
|
Packit |
92cec9 |
|
|
Packit |
92cec9 |
{
|
|
Packit |
92cec9 |
package Foo;
|
|
Packit |
92cec9 |
|
|
Packit |
92cec9 |
use Package::DeprecationManager -deprecations => {
|
|
Packit |
92cec9 |
'Foo::foo' => '0.02',
|
|
Packit |
92cec9 |
'Foo::bar' => '0.03',
|
|
Packit |
92cec9 |
'Foo::baz' => '1.21',
|
|
Packit |
92cec9 |
'not a sub' => '1.23',
|
|
Packit |
92cec9 |
};
|
|
Packit |
92cec9 |
|
|
Packit |
92cec9 |
sub foo {
|
|
Packit |
92cec9 |
deprecated('foo is deprecated');
|
|
Packit |
92cec9 |
}
|
|
Packit |
92cec9 |
|
|
Packit |
92cec9 |
sub bar {
|
|
Packit |
92cec9 |
deprecated('bar is deprecated');
|
|
Packit |
92cec9 |
}
|
|
Packit |
92cec9 |
|
|
Packit |
92cec9 |
sub baz {
|
|
Packit |
92cec9 |
deprecated();
|
|
Packit |
92cec9 |
}
|
|
Packit |
92cec9 |
|
|
Packit |
92cec9 |
sub quux {
|
|
Packit |
92cec9 |
if ( $_[0] > 5 ) {
|
|
Packit |
92cec9 |
deprecated(
|
|
Packit |
92cec9 |
message => 'quux > 5 has been deprecated',
|
|
Packit |
92cec9 |
feature => 'not a sub',
|
|
Packit |
92cec9 |
);
|
|
Packit |
92cec9 |
}
|
|
Packit |
92cec9 |
}
|
|
Packit |
92cec9 |
|
|
Packit |
92cec9 |
sub varies {
|
|
Packit |
92cec9 |
deprecated("The varies sub varies: $_[0]");
|
|
Packit |
92cec9 |
}
|
|
Packit |
92cec9 |
|
|
Packit |
92cec9 |
}
|
|
Packit |
92cec9 |
|
|
Packit |
92cec9 |
{
|
|
Packit |
92cec9 |
package Bar;
|
|
Packit |
92cec9 |
|
|
Packit |
92cec9 |
Foo->import();
|
|
Packit |
92cec9 |
|
|
Packit |
92cec9 |
::like(
|
|
Packit |
92cec9 |
::warning { Foo::foo() },
|
|
Packit |
92cec9 |
qr/\Qfoo is deprecated/,
|
|
Packit |
92cec9 |
'deprecation warning for foo'
|
|
Packit |
92cec9 |
);
|
|
Packit |
92cec9 |
|
|
Packit |
92cec9 |
::like(
|
|
Packit |
92cec9 |
::warning { Foo::bar() },
|
|
Packit |
92cec9 |
qr/\Qbar is deprecated/,
|
|
Packit |
92cec9 |
'deprecation warning for bar'
|
|
Packit |
92cec9 |
);
|
|
Packit |
92cec9 |
|
|
Packit |
92cec9 |
::like(
|
|
Packit |
92cec9 |
::warning { Foo::baz() },
|
|
Packit |
92cec9 |
qr/\QFoo::baz has been deprecated since version 1.21/,
|
|
Packit |
92cec9 |
'deprecation warning for baz, and message is generated by Package::DeprecationManager'
|
|
Packit |
92cec9 |
);
|
|
Packit |
92cec9 |
|
|
Packit |
92cec9 |
::is_deeply(
|
|
Packit |
92cec9 |
[ ::warnings { Foo::foo() } ],
|
|
Packit |
92cec9 |
[],
|
|
Packit |
92cec9 |
'no warning on second call to foo'
|
|
Packit |
92cec9 |
);
|
|
Packit |
92cec9 |
|
|
Packit |
92cec9 |
::is_deeply(
|
|
Packit |
92cec9 |
[ ::warnings { Foo::bar() } ],
|
|
Packit |
92cec9 |
[],
|
|
Packit |
92cec9 |
'no warning on second call to bar'
|
|
Packit |
92cec9 |
);
|
|
Packit |
92cec9 |
|
|
Packit |
92cec9 |
::is_deeply(
|
|
Packit |
92cec9 |
[ ::warnings { Foo::baz() } ],
|
|
Packit |
92cec9 |
[],
|
|
Packit |
92cec9 |
'no warning on second call to baz'
|
|
Packit |
92cec9 |
);
|
|
Packit |
92cec9 |
|
|
Packit |
92cec9 |
::like(
|
|
Packit |
92cec9 |
::warning { Foo::varies(1) },
|
|
Packit |
92cec9 |
qr/\QThe varies sub varies: 1/,
|
|
Packit |
92cec9 |
'warning for varies sub'
|
|
Packit |
92cec9 |
);
|
|
Packit |
92cec9 |
|
|
Packit |
92cec9 |
::like(
|
|
Packit |
92cec9 |
::warning { Foo::varies(2) },
|
|
Packit |
92cec9 |
qr/\QThe varies sub varies: 2/,
|
|
Packit |
92cec9 |
'warning for varies sub with different error'
|
|
Packit |
92cec9 |
);
|
|
Packit |
92cec9 |
|
|
Packit |
92cec9 |
::is_deeply(
|
|
Packit |
92cec9 |
[ ::warnings { Foo::varies(1) } ],
|
|
Packit |
92cec9 |
[],
|
|
Packit |
92cec9 |
'no warning for varies sub with same message as first call'
|
|
Packit |
92cec9 |
);
|
|
Packit |
92cec9 |
}
|
|
Packit |
92cec9 |
|
|
Packit |
92cec9 |
{
|
|
Packit |
92cec9 |
package Baz;
|
|
Packit |
92cec9 |
|
|
Packit |
92cec9 |
Foo->import( -api_version => '0.01' );
|
|
Packit |
92cec9 |
|
|
Packit |
92cec9 |
::is_deeply(
|
|
Packit |
92cec9 |
[ ::warnings { Foo::foo() } ],
|
|
Packit |
92cec9 |
[],
|
|
Packit |
92cec9 |
'no warning for foo with api_version = 0.01'
|
|
Packit |
92cec9 |
);
|
|
Packit |
92cec9 |
|
|
Packit |
92cec9 |
::is_deeply(
|
|
Packit |
92cec9 |
[ ::warnings { Foo::bar() } ],
|
|
Packit |
92cec9 |
[],
|
|
Packit |
92cec9 |
'no warning for bar with api_version = 0.01'
|
|
Packit |
92cec9 |
);
|
|
Packit |
92cec9 |
|
|
Packit |
92cec9 |
::is_deeply(
|
|
Packit |
92cec9 |
[ ::warnings { Foo::baz() } ],
|
|
Packit |
92cec9 |
[],
|
|
Packit |
92cec9 |
'no warning for baz with api_version = 0.01'
|
|
Packit |
92cec9 |
);
|
|
Packit |
92cec9 |
}
|
|
Packit |
92cec9 |
|
|
Packit |
92cec9 |
{
|
|
Packit |
92cec9 |
package Quux;
|
|
Packit |
92cec9 |
|
|
Packit |
92cec9 |
Foo->import( -api_version => '1.17' );
|
|
Packit |
92cec9 |
|
|
Packit |
92cec9 |
::like(
|
|
Packit |
92cec9 |
::warning { Foo::foo() },
|
|
Packit |
92cec9 |
qr/\Qfoo is deprecated/,
|
|
Packit |
92cec9 |
'deprecation warning for foo with api_version = 1.17'
|
|
Packit |
92cec9 |
);
|
|
Packit |
92cec9 |
|
|
Packit |
92cec9 |
::like(
|
|
Packit |
92cec9 |
::warning { Foo::bar() },
|
|
Packit |
92cec9 |
qr/\Qbar is deprecated/,
|
|
Packit |
92cec9 |
'deprecation warning for bar with api_version = 1.17'
|
|
Packit |
92cec9 |
);
|
|
Packit |
92cec9 |
|
|
Packit |
92cec9 |
::is_deeply(
|
|
Packit |
92cec9 |
[ ::warnings { Foo::baz() } ],
|
|
Packit |
92cec9 |
[],
|
|
Packit |
92cec9 |
'no warning for baz with api_version = 1.17'
|
|
Packit |
92cec9 |
);
|
|
Packit |
92cec9 |
}
|
|
Packit |
92cec9 |
|
|
Packit |
92cec9 |
{
|
|
Packit |
92cec9 |
package Another;
|
|
Packit |
92cec9 |
|
|
Packit |
92cec9 |
Foo->import();
|
|
Packit |
92cec9 |
|
|
Packit |
92cec9 |
::is_deeply(
|
|
Packit |
92cec9 |
[ ::warnings { Foo::quux(1) } ],
|
|
Packit |
92cec9 |
[],
|
|
Packit |
92cec9 |
'no warning for quux(1)'
|
|
Packit |
92cec9 |
);
|
|
Packit |
92cec9 |
|
|
Packit |
92cec9 |
::like(
|
|
Packit |
92cec9 |
::warning { Foo::quux(10) },
|
|
Packit |
92cec9 |
qr/\Qquux > 5 has been deprecated/,
|
|
Packit |
92cec9 |
'got a warning for quux(10)'
|
|
Packit |
92cec9 |
);
|
|
Packit |
92cec9 |
}
|
|
Packit |
92cec9 |
|
|
Packit |
92cec9 |
{
|
|
Packit |
92cec9 |
package Dep;
|
|
Packit |
92cec9 |
|
|
Packit |
92cec9 |
use Package::DeprecationManager -deprecations => {
|
|
Packit |
92cec9 |
'Dep::foo' => '1.00',
|
|
Packit |
92cec9 |
},
|
|
Packit |
92cec9 |
-ignore => [ 'My::Package1', 'My::Package2' ];
|
|
Packit |
92cec9 |
|
|
Packit |
92cec9 |
sub foo {
|
|
Packit |
92cec9 |
deprecated('foo is deprecated');
|
|
Packit |
92cec9 |
}
|
|
Packit |
92cec9 |
}
|
|
Packit |
92cec9 |
|
|
Packit |
92cec9 |
{
|
|
Packit |
92cec9 |
package Dep2;
|
|
Packit |
92cec9 |
|
|
Packit |
92cec9 |
use Package::DeprecationManager -deprecations => {
|
|
Packit |
92cec9 |
'Dep2::bar' => '1.00',
|
|
Packit |
92cec9 |
},
|
|
Packit |
92cec9 |
-ignore => [qr/My::Package[12]/];
|
|
Packit |
92cec9 |
|
|
Packit |
92cec9 |
sub bar {
|
|
Packit |
92cec9 |
deprecated('bar is deprecated');
|
|
Packit |
92cec9 |
}
|
|
Packit |
92cec9 |
}
|
|
Packit |
92cec9 |
|
|
Packit |
92cec9 |
{
|
|
Packit |
92cec9 |
package My::Package1;
|
|
Packit |
92cec9 |
|
|
Packit |
92cec9 |
sub foo { Dep::foo() }
|
|
Packit |
92cec9 |
sub bar { Dep2::bar() }
|
|
Packit |
92cec9 |
}
|
|
Packit |
92cec9 |
|
|
Packit |
92cec9 |
{
|
|
Packit |
92cec9 |
package My::Package2;
|
|
Packit |
92cec9 |
|
|
Packit |
92cec9 |
sub foo { My::Package1::foo() }
|
|
Packit |
92cec9 |
sub bar { My::Package1::bar() }
|
|
Packit |
92cec9 |
}
|
|
Packit |
92cec9 |
|
|
Packit |
92cec9 |
{
|
|
Packit |
92cec9 |
package My::Baz;
|
|
Packit |
92cec9 |
|
|
Packit |
92cec9 |
::like(
|
|
Packit |
92cec9 |
::warning { My::Package2::foo() },
|
|
Packit |
92cec9 |
qr/^foo is deprecated at t.basic\.t line \d+\.?\s+My::Baz/,
|
|
Packit |
92cec9 |
'deprecation warning for call to My::Package2::foo() and mentions My::Baz but not My::Package[12]'
|
|
Packit |
92cec9 |
);
|
|
Packit |
92cec9 |
|
|
Packit |
92cec9 |
::is_deeply(
|
|
Packit |
92cec9 |
[ ::warnings { My::Package2::foo() } ],
|
|
Packit |
92cec9 |
[],
|
|
Packit |
92cec9 |
'no deprecation warning for second call to My::Package2::foo()'
|
|
Packit |
92cec9 |
);
|
|
Packit |
92cec9 |
|
|
Packit |
92cec9 |
::is_deeply(
|
|
Packit |
92cec9 |
[ ::warnings { My::Package1::foo() } ],
|
|
Packit |
92cec9 |
[],
|
|
Packit |
92cec9 |
'no deprecation warning for call to My::Package1::foo()'
|
|
Packit |
92cec9 |
);
|
|
Packit |
92cec9 |
|
|
Packit |
92cec9 |
::like(
|
|
Packit |
92cec9 |
::warning { My::Package2::bar() },
|
|
Packit |
92cec9 |
qr/^bar is deprecated at t.basic\.t line \d+\.?\s+My::Baz/,
|
|
Packit |
92cec9 |
'deprecation warning for call to My::Package2::foo() and mentions My::Baz but not My::Package[12]'
|
|
Packit |
92cec9 |
);
|
|
Packit |
92cec9 |
|
|
Packit |
92cec9 |
::is_deeply(
|
|
Packit |
92cec9 |
[ ::warnings { My::Package2::bar() } ],
|
|
Packit |
92cec9 |
[],
|
|
Packit |
92cec9 |
'no deprecation warning for second call to My::Package2::bar()'
|
|
Packit |
92cec9 |
);
|
|
Packit |
92cec9 |
}
|
|
Packit |
92cec9 |
|
|
Packit |
92cec9 |
{
|
|
Packit |
92cec9 |
package My::Quux;
|
|
Packit |
92cec9 |
|
|
Packit |
92cec9 |
::like(
|
|
Packit |
92cec9 |
::warning { My::Package1::foo() },
|
|
Packit |
92cec9 |
qr/^foo is deprecated at t.basic\.t line \d+\.?\s+My::Quux/,
|
|
Packit |
92cec9 |
'deprecation warning for call to My::Package1::foo() and mentions My::Quux but not My::Package[12]'
|
|
Packit |
92cec9 |
);
|
|
Packit |
92cec9 |
|
|
Packit |
92cec9 |
::is_deeply(
|
|
Packit |
92cec9 |
[ ::warnings { My::Package1::foo() } ],
|
|
Packit |
92cec9 |
[],
|
|
Packit |
92cec9 |
'no deprecation warning for second call to My::Package1::foo()'
|
|
Packit |
92cec9 |
);
|
|
Packit |
92cec9 |
}
|
|
Packit |
92cec9 |
|
|
Packit |
92cec9 |
done_testing();
|