The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
#!/usr/bin/env perl
# Check categories_enabled() works as expected.

use strict;
use warnings;
no warnings qw(uninitialized);

use Test::More qw(no_plan);

use_ok('warnings::everywhere');

# At first, all warning categories are enabled.
my @all_warnings = grep { $_ ne 'all' } sort keys %warnings::Offsets;
is_deeply([warnings::everywhere::categories_enabled()],
    \@all_warnings, 'All warnings are enabled at first');

# We can disable misc warnings.
ok(warnings::everywhere::disable_warning_category('misc'),
    'We can disable misc warnings');

is_deeply(
    [warnings::everywhere::categories_enabled()],
    [grep { $_ ne 'misc' } @all_warnings],
    'All but misc warnings are enabled'
);

# Re-enabling a warning that's already enabled does nothing.
ok(
    warnings::everywhere::enable_warning_category('printf'),
    'We can pointlessly re-enable printf warnings'
);
is_deeply(
    [warnings::everywhere::categories_enabled()],
    [grep { $_ ne 'misc' } @all_warnings],
    'That changed nothing'
);

# We can re-enable them.
ok(warnings::everywhere::enable_warning_category('misc'),
    'We can re-enable misc warnings');

is_deeply([warnings::everywhere::categories_enabled()],
    \@all_warnings, 'All warnings are enabled again');