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_disabled() works as expected.

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

use Test::More qw(no_plan);

use_ok('warnings::everywhere');

# At first, no warning categories are disabled
is_deeply([warnings::everywhere::categories_disabled()],
    [], 'No warnings are disabled at first');
ok(warnings::everywhere::_is_bit_set($warnings::Bits{all}),
    'The all bit is set');

# We can disable uninitialized warnings
ok(warnings::everywhere::disable_warning_category('uninitialized'),
    'We can disable uninitialized warnings');
ok(!warnings::everywhere::_is_bit_set($warnings::Bits{all}),
    'The all bit is now unset');

is_deeply([warnings::everywhere::categories_disabled()],
    ['uninitialized'], 'This is now in our list of disabled categories');

# We can re-enable an unrelated warning; that changes nothing.
ok(warnings::everywhere::enable_warning_category('reserved'),
    'We can pointlessly enable reserved warnings');
is_deeply([warnings::everywhere::categories_disabled()],
    ['uninitialized'], 'Uninitialized warnings are still disabled');

# We can re-enable it
ok(warnings::everywhere::enable_warning_category('uninitialized'),
    'We can re-enable uninitialized warnings');

is_deeply([warnings::everywhere::categories_disabled()],
    [], 'No warnings are disabled any more');
ok(warnings::everywhere::_is_bit_set($warnings::Bits{all}),
    'The all bit is set once more')
    or diag(warnings::everywhere::_dump_mask($warnings::Bits{all}));