#!/usr/bin/perl -w
# Test ~ expansion from command line arguments.
use strict;
use lib 't/lib';
use Test::More tests => 9;
use ExtUtils::Helpers 'detildefy';
SKIP: {
my $env_name = $^O eq 'MSWin32' ? 'USERPROFILE' : 'HOME';
my $home = $ENV{$env_name};
if ($^O eq 'VMS') {
# Convert the path to UNIX format, trim off the trailing slash
$home = VMS::Filespec::unixify($home);
$home =~ s#/$##;
}
unless (defined $home) {
my @info = eval { getpwuid $> };
skip "No home directory for tilde-expansion tests", 8 if $@ or !defined $info[7];
$home = $info[7];
}
is( detildefy('~'), $home);
is( detildefy('~/fooxzy'), "$home/fooxzy");
is( detildefy('~/ fooxzy'), "$home/ fooxzy");
is( detildefy('~/fo o'), "$home/fo o");
is( detildefy('fooxzy~'), 'fooxzy~');
# Test when HOME is different from getpwuid(), as in sudo.
{
local $ENV{HOME} = '/wibble/whomp';
local $ENV{USERPROFILE} = $ENV{HOME};
is( detildefy('~'), "/wibble/whomp");
}
skip "On OS/2 EMX all users are equal", 2 if $^O eq 'os2';
is( detildefy('~~'), '~~' );
is( detildefy('~ fooxzy'), '~ fooxzy' );
}
# Again, with named users
SKIP: {
my @info = eval { getpwuid $> };
skip "No home directory for tilde-expansion tests", 1 if $@ or !defined $info[7] or !defined $info[0];
my ($me, $home) = @info[0,7];
my $expected = "$home/fooxzy";
if ($^O eq 'VMS') {
# Convert the path to UNIX format and trim off the trailing slash
$home = VMS::Filespec::unixify($home);
$home =~ s#/$##;
$expected = $home . '/../[^/]+' . '/fooxzy';
}
like( detildefy("~$me/fooxzy"), qr(\Q$expected\E)i );
}