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 )