HEX
Server: Apache/2.4.62 (Unix) OpenSSL/1.1.1k
System: Linux ns565604.ip-54-39-133.net 4.18.0-553.50.1.el8_10.x86_64 #1 SMP Tue Apr 15 08:09:22 EDT 2025 x86_64
User: greer489 (1034)
PHP: 8.3.19
Disabled: NONE
Upload Files
File: //usr/share/doc/perl-namespace-clean/t/11-multiclean-in-scope.t
use strict;
use warnings;

use Test::More tests => 13;

eval q{
  package Class1;
  sub cleaned1 {}
  use namespace::clean;
  1;
} or die $@;

ok !Class1->can('cleaned1'), 'basic clean';

eval q{
  package Class1;
  sub cleaned2 {}
  use namespace::clean;
  1;
} or die $@;

ok !Class1->can('cleaned2'), 'clean same class again';

eval q{
  package Class2;
  sub cleaned1 {}
  use namespace::clean;
  sub left1 {}
  no namespace::clean;
  sub cleaned2 {}
  use namespace::clean;
  1;
} or die $@;

ok !Class2->can('cleaned1'), 'basic clean before no';
ok +Class2->can('left1'),    'basic no clean';
ok !Class2->can('cleaned2'), 'basic clean after no';

eval q{
  package Class2;
  sub cleaned3 {}
  use namespace::clean;
  sub left2 {}
  no namespace::clean;
  sub cleaned4 {}
  use namespace::clean;
  1;
} or die $@;

ok !Class2->can('cleaned3'),  'clean again before no';
ok +Class2->can('left2'),     'clean again no clean';
ok !Class2->can('cleaned4'),  'clean again after no';

eval q{
  package Class3;
  sub cleaned1 {}
  use namespace::clean;
  sub cleaned2 {}
  no namespace::clean;
  {
    sub cleaned3 {}
    use namespace::clean;
  }
  BEGIN {
    package main;
    ok !Class3->can('cleaned3'), 'clean inner scope';
    {
      local $TODO = 'unable to differentiate scopes';
      ok +Class3->can('cleaned1'), 'clean inner scope leaves outer';
    }
    ok +Class3->can('cleaned2'), 'clean inner scope leaves outer no';
  }
  use namespace::clean;
  1;
} or die $@;

ok !Class3->can('cleaned1'), 'clean after scoped';
ok +Class3->can('cleaned2'), 'no clean after scoped';