The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
use strict;
use Test::More tests => 17;
use File::Spec;

use_ok('File::BaseDir', qw/:lookup xdg_data_files xdg_config_files/);

# Initalize test data:

# t/
# `-- data/		$dir[1]
#     |-- dir/		$dir[2]
#     |   `-- test	$file[1]
#     `-- test		$file[0]

my @dir = ('t', map File::Spec->catdir(@$_),
	[qw/t data/], [qw/t data dir/] );
my @file = (map File::Spec->catfile(@$_),
	[qw/t data test/], [qw/t data dir test/] );
mkdir $dir[1] or die $! unless -d $dir[1];
mkdir $dir[2] or die $! unless -d $dir[2];
open TEST, ">$file[0]" or die $!;
print TEST "test 1 2 3\n";
close TEST;
eval { chmod 0644, $file[0] }; # reset previous run
open TEST, ">$file[1]" or die $!;
print TEST "test 1 2 3\n";
close TEST;

$ENV{XDG_CONFIG_HOME} = 'foo';
$ENV{XDG_CONFIG_DIRS} = 'bar';
$ENV{XDG_DATA_HOME} = '.';
$ENV{XDG_DATA_DIRS} = join ':', @dir;

is(data_home(qw/t data test/), $file[0], 'data_home');
is(data_files(qw/data test/), $file[0], 'data_files');
is_deeply([data_files(qw/test/)], \@file, 'data_files - list');
is(data_dirs(qw/data dir/), $dir[2], 'data_dirs');
is_deeply([data_dirs(qw/data dir/)], [$dir[2]], 'data_dirs - list');

ok(!data_files(qw/data dir/), 'data_files does not match dir');
ok(!data_dirs(qw/data test/), 'data_dirs does not match file');

is_deeply([xdg_data_files(qw/test/)], \@file,
	'xdg_data_files - for backward compatibility');

$ENV{XDG_CONFIG_HOME} = '.';
$ENV{XDG_CONFIG_DIRS} = join ':', @dir;
$ENV{XDG_DATA_HOME} = 'foo';
$ENV{XDG_DATA_DIRS} = 'bar';

is(config_home(qw/t data test/), $file[0], 'config_home');
is(config_files(qw/data test/), $file[0], 'config_files');
is_deeply([config_files(qw/test/)], \@file, 'config_files - list');
is(config_dirs(qw/data dir/), $dir[2], 'config_dirs');
is_deeply([config_dirs(qw/data dir/)], [$dir[2]], 'config_dirs - list');

is_deeply([xdg_config_files(qw/test/)], \@file,
	'xdg_config_files - for backward compatibility');

SKIP: {
	eval { chmod 0200, $file[0] }; # make non-readable
	skip "chmod not supported", 1 if -r $file[0];
	is(config_files(qw/test/), $file[1], 'config_files checks for read');
}

$ENV{XDG_CACHE_HOME} = 't/data';
ok(cache_home('test') eq $file[0], 'data_cache');