Allow packages to be cleaned multiple times
[p5sagit/namespace-clean.git] / t / 11-multiclean-in-scope.t
CommitLineData
a6b490ab 1use strict;
2use warnings;
3
4use Test::More tests => 13;
5
6eval q{
7 package Class1;
8 sub cleaned1 {}
9 use namespace::clean;
10 1;
11} or die $@;
12
13ok !Class1->can('cleaned1'), 'basic clean';
14
15eval q{
16 package Class1;
17 sub cleaned2 {}
18 use namespace::clean;
19 1;
20} or die $@;
21
22ok !Class1->can('cleaned2'), 'clean same class again';
23
24eval 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
35ok !Class2->can('cleaned1'), 'basic clean before no';
36ok +Class2->can('left1'), 'basic no clean';
37ok !Class2->can('cleaned2'), 'basic clean after no';
38
39eval 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
50ok !Class2->can('cleaned3'), 'clean again before no';
51ok +Class2->can('left2'), 'clean again no clean';
52ok !Class2->can('cleaned4'), 'clean again after no';
53
54eval 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
77ok !Class3->can('cleaned1'), 'clean after scoped';
78ok +Class3->can('cleaned2'), 'no clean after scoped';