The London Perl and Raku Workshop takes place on 26th Oct 2024. If your company depends on Perl, please consider sponsoring and/or attending.
#!/usr/bin/perl
# 04-links.t 
# Copyright (c) 2006 Jonathan Rockway <jrockway@cpan.org>

use Directory::Scratch;
use Test::More;
use strict;
use warnings;
plan skip_all => "links don't work under Win32" if $^O eq 'MSWin32';
plan tests => 14;

my $t = Directory::Scratch->new;
my $file1 = $t->touch('test', "this is a test");
my $dir   = $t->mkdir('foo');
my $file2 = $t->touch('foo/test', "this is also a test");

ok($file1);
ok($dir);
ok($file2);

ok($t->link('test', 'new_test'));
ok($t->link('foo', 'new_foo'));
ok($t->link('foo/test', 'new_foo_test'));
ok($t->link('new_foo/test', 'newer_test'));

is($t->read('test'), "this is a test");

is($t->read('foo/test'), "this is also a test");
is($t->read('newer_test'), "this is also a test");
is($t->read('new_foo/test'), "this is also a test");

ok($t->touch('bar'));
eval {
    $t->link('test', 'bar');
};
ok($@, 'cannot link over an existing file');

eval {
    $t->link('test', 'test');
};
ok($@, 'cannot link over self');