5 use Test::More tests => 31;
7 BEGIN { use_ok('File::chdir') }
12 File::Spec->catdir(File::Spec->rootdir, @_);
15 my @cwd = grep length, File::Spec->splitdir(Cwd::abs_path);
17 ok( tied @CWD, '@CWD is fit to be tied' );
19 # First, let's try unlocalized push @CWD.
22 is( getcwd, _catdir(@cwd,'t'), 'unlocalized push @CWD works' );
23 ok( eq_array(\@CWD, [@cwd, 't']), ' @CWD set' );
24 is( $CWD, _catdir(@cwd,'t'), ' $CWD set' );
27 is( getcwd, _catdir(@cwd,'t'), 'unlocalized @CWD unneffected by blocks' );
28 ok( eq_array(\@CWD, [@cwd, 't']), ' @CWD still set' );
35 my $popped_dir = pop @CWD;
36 my @new_cwd = @cwd[0..$#cwd-1];
38 is( getcwd, _catdir(@new_cwd), 'unlocalized pop @CWD works' );
39 is( $popped_dir, $cwd[-1], ' returns popped dir' );
40 ok( eq_array(\@CWD, \@new_cwd), ' @CWD set' );
41 is( $CWD, _catdir(@new_cwd), ' $CWD set' );
44 is( getcwd, _catdir(@cwd[0..$#cwd-1]),
45 'unlocalized @CWD unneffected by blocks' );
46 ok( eq_array(\@CWD, [@cwd[0..$#cwd-1]]), ' @CWD still set' );
54 my @spliced_dirs = splice @CWD, -2;
55 my @new_cwd = @cwd[0..$#cwd-2];
57 is( getcwd, _catdir(@new_cwd), 'unlocalized splice @CWD works' );
58 is( @spliced_dirs, 2, ' returns right # of dirs' );
59 ok( eq_array(\@spliced_dirs, [@cwd[-2,-1]]), " and they're correct" );
60 ok( eq_array(\@CWD, \@new_cwd), ' @CWD set' );
61 is( $CWD, _catdir(@new_cwd), ' $CWD set' );
64 is( getcwd, _catdir(@cwd[0..$#cwd-2]),
65 'unlocalized @CWD unneffected by blocks' );
66 ok( eq_array(\@CWD, [@cwd[0..$#cwd-2]]), ' @CWD still set' );
71 # Now an unlocalized assignment
74 is( getcwd, _catdir(@cwd,'t'), 'unlocalized @CWD works' );
75 ok( eq_array(\@CWD, [@cwd, 't']), ' @CWD set' );
76 is( $CWD, _catdir(@cwd,'t'), ' $CWD set' );
79 is( getcwd, _catdir(@cwd,'t'), 'unlocalized @CWD unneffected by blocks' );
80 ok( eq_array(\@CWD, [@cwd, 't']), ' @CWD still set' );
86 ok( !$@, '$#CWD assignment is a no-op' );
89 # localized assignment
91 # localizing tied arrays doesn't work, perl bug. :(
92 # this is a work around.
95 is( getcwd, _catdir(@cwd,'t'), 'localized @CWD works' );
96 ok( eq_array(\@CWD, [@cwd, 't']), ' @CWD set' );
97 is( $CWD, _catdir(@cwd,'t'), ' $CWD set' );
100 is( getcwd, _catdir(@cwd), 'localized @CWD resets cwd' );
101 ok( eq_array(\@CWD, \@cwd), ' @CWD reset' );