Blame t/basic.t

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();