Allow packages to be cleaned multiple times
[p5sagit/namespace-clean.git] / t / 11-multiclean-in-scope.t
1 use strict;
2 use warnings;
3
4 use Test::More tests => 13;
5
6 eval q{
7   package Class1;
8   sub cleaned1 {}
9   use namespace::clean;
10   1;
11 } or die $@;
12
13 ok !Class1->can('cleaned1'), 'basic clean';
14
15 eval q{
16   package Class1;
17   sub cleaned2 {}
18   use namespace::clean;
19   1;
20 } or die $@;
21
22 ok !Class1->can('cleaned2'), 'clean same class again';
23
24 eval q{
25   package Class2;
26   sub cleaned1 {}
27   use namespace::clean;
28   sub left1 {}
29   no namespace::clean;
30   sub cleaned2 {}
31   use namespace::clean;
32   1;
33 } or die $@;
34
35 ok !Class2->can('cleaned1'), 'basic clean before no';
36 ok +Class2->can('left1'),    'basic no clean';
37 ok !Class2->can('cleaned2'), 'basic clean after no';
38
39 eval q{
40   package Class2;
41   sub cleaned3 {}
42   use namespace::clean;
43   sub left2 {}
44   no namespace::clean;
45   sub cleaned4 {}
46   use namespace::clean;
47   1;
48 } or die $@;
49
50 ok !Class2->can('cleaned3'),  'clean again before no';
51 ok +Class2->can('left2'),     'clean again no clean';
52 ok !Class2->can('cleaned4'),  'clean again after no';
53
54 eval q{
55   package Class3;
56   sub cleaned1 {}
57   use namespace::clean;
58   sub cleaned2 {}
59   no namespace::clean;
60   {
61     sub cleaned3 {}
62     use namespace::clean;
63   }
64   BEGIN {
65     package main;
66     ok !Class3->can('cleaned3'), 'clean inner scope';
67     {
68       local $TODO = 'unable to differentiate scopes';
69       ok +Class3->can('cleaned1'), 'clean inner scope leaves outer';
70     }
71     ok +Class3->can('cleaned2'), 'clean inner scope leaves outer no';
72   }
73   use namespace::clean;
74   1;
75 } or die $@;
76
77 ok !Class3->can('cleaned1'), 'clean after scoped';
78 ok +Class3->can('cleaned2'), 'no clean after scoped';