File-XDG
view release on metacpan or search on metacpan
t/file_xdg.t view on Meta::CPAN
use strict;
use warnings;
use Test::More;
use File::XDG;
use File::Temp;
use File::Spec;
use Config;
use Path::Class qw( dir );
use Path::Tiny qw( path );
use File::Path qw(make_path);
use if $^O eq 'MSWin32', 'Win32';
our $base = $^O ne 'MSWin32'
? $ENV{HOME} || [getpwuid($>)]->[7]
: Win32::GetFolderPath(Win32::CSIDL_LOCAL_APPDATA(), 1);
subtest 'env' => sub {
local %ENV = %ENV;
$ENV{XDG_CONFIG_HOME} = '/home/user/.config';
$ENV{XDG_DATA_HOME} = '/home/user/.local/share';
$ENV{XDG_CACHE_HOME} = '/home/user/.cache';
$ENV{XDG_DATA_DIRS} = "/usr/local/share$Config{path_sep}/usr/share";
$ENV{XDG_CONFIG_DIRS} = "/etc/xdg$Config{path_sep}/foo/bar";
local $base = "/home/user";
my $xdg = File::XDG->new(name => 'test');
is($xdg->config_home, dir($base, '.config/test'), 'user-specific app configuration');
is($xdg->data_home, dir($base, '.local/share/test'), 'user-specific app data');
is($xdg->cache_home, dir($base, '.cache/test'), 'user-specific app cache');
is($xdg->data_dirs, "/usr/local/share$Config{path_sep}/usr/share", 'system-wide data directories');
is($xdg->config_dirs, "/etc/xdg$Config{path_sep}/foo/bar", 'system-wide configuration directories');
is_deeply( [$xdg->data_dirs_list], [dir('/usr/local/share'),dir('/usr/share')], 'system-wide data directories as a list');
is_deeply( [$xdg->config_dirs_list], [dir('/etc/xdg'),dir('/foo/bar')], 'system-wide configuration directories as a list');
};
subtest 'noenv' => sub {
local %ENV = %ENV;
delete $ENV{$_} for qw( XDG_DATA_HOME XDG_CONFIG_HOME XDG_CACHE_HOME XDG_DATA_DIRS XDG_CONFIG_DIRS );
my $xdg = File::XDG->new(name => 'test');
{
is($xdg->config_home, dir($base, '.config/test'), 'user-specific app configuration');
is($xdg->data_home, dir($base, '.local/share/test'), 'user-specific app data');
is($xdg->cache_home, dir($base, '.cache/test'), 'user-specific app cache');
if($^O eq 'MSWin32')
{
is($xdg->data_dirs, '', 'system-wide data directories');
is($xdg->config_dirs, '', 'system-wide configuration directories');
is_deeply( [$xdg->data_dirs_list], [], 'system-wide data directories as a list');
is_deeply( [$xdg->config_dirs_list], [], 'system-wide configuration directories as a list');
}
else
{
is($xdg->data_dirs, '/usr/local/share:/usr/share', 'system-wide data directories');
is($xdg->config_dirs, '/etc/xdg', 'system-wide configuration directories');
is_deeply( [$xdg->data_dirs_list], ['/usr/local/share','/usr/share'], 'system-wide data directories as a list');
is_deeply( [$xdg->config_dirs_list], ['/etc/xdg'], 'system-wide configuration directories as a list');
}
}
};
subtest 'exe_dir' => sub {
my $home = File::Temp->newdir;
local $ENV{HOME} = $home;
local *Win32::GetFolderPath = sub { return $home };
my $xdg = File::XDG->new( name => 'foo' );
is($xdg->exe_dir, undef);
mkdir "$ENV{HOME}/.local" or die;
( run in 3.341 seconds using v1.01-cache-2.11-cpan-d8267643d1d )