$:.unshift 'lib'

require 'xdg/base_dir/legacy'
require 'test/unit'

# run test from fakeroot directory.
Dir.chdir(File.join(File.dirname(__FILE__), 'fakeroot'))

ENV['HOME']            = File.join(Dir.pwd, 'home')
ENV['XDG_DATA_DIRS']   = File.join(Dir.pwd, 'usr/share')
ENV['XDG_CONFIG_DIRS'] = File.join(Dir.pwd, 'etc/xdg')

class TestXDG < Test::Unit::TestCase

  # Test the standard paths.

  def test_home
    assert_equal(File.join(Dir.pwd,'home'), XDG.home)
  end

  def test_config_home
    assert_equal(File.join(Dir.pwd,'home/.config'), XDG.config.home)
  end

  def test_config_dirs
    assert_equal([File.join(Dir.pwd,"etc/xdg")], XDG.config.dirs)
  end

  def test_data_home
    assert_equal(File.join(Dir.pwd,'home/.local/share'), XDG.data.home)
  end

  def test_data_dirs
    assert_equal([File.join(Dir.pwd,'usr/share')], XDG.data.dirs)
  end

  def test_cache_home
    assert_equal(File.join(Dir.pwd,'home/.cache'), XDG.cache.home)
  end

  # Test the find methods.

  def test_data_find
    file = 'foo.dat'
    assert_equal(File.join(Dir.pwd,'home/.local/share', file), XDG.data.find(file))
    file = 'bar.dat'
    assert_equal(File.join(Dir.pwd,'usr/share', file), XDG.data.find(file))
  end

  def test_config_find
    file = 'foo.config'
    assert_equal(File.join(Dir.pwd,'home/.config', file), XDG.config.find(file))
    file = 'bar.config'
    assert_equal(File.join(Dir.pwd,'etc/xdg', file), XDG.config.find(file))
  end

  def test_cache_find
    file = 'foo.cache'
    assert_equal(File.join(Dir.pwd,'home/.cache', file), XDG.cache.find(file))
  end

  # Test the glob methods.

  def test_data_select
    file = 'foo.dat'
    assert_equal([File.join(Dir.pwd,'home/.local/share', file)], XDG.data.select(file))
    file = 'bar.dat'
    assert_equal([File.join(Dir.pwd,'usr/share', file)], XDG.data.select(file))
  end

  def test_config_select
    file = 'foo.config'
    assert_equal([File.join(Dir.pwd,'home/.config', file)], XDG.config.select(file))
    file = 'bar.config'
    assert_equal([File.join(Dir.pwd,'etc/xdg', file)], XDG.config.select(file))
  end

  def test_cache_select
    file = 'foo.cache'
    assert_equal([File.join(Dir.pwd,'home/.cache', file)], XDG.cache.select(file))
  end

  # Test the glob methods.

  def test_data_glob
    file = 'foo.dat'
    assert_equal([File.join(Dir.pwd,'home/.local/share', file)], XDG.data.glob(file))
    file = 'bar.dat'
    assert_equal([File.join(Dir.pwd,'usr/share', file)], XDG.data.glob(file))
  end

  def test_config_glob
    file = 'foo.config'
    assert_equal([File.join(Dir.pwd,'home/.config', file)], XDG.config.glob(file))
    file = 'bar.config'
    assert_equal([File.join(Dir.pwd,'etc/xdg', file)], XDG.config.glob(file))
  end

  def test_cache_glob
    file = 'foo.cache'
    assert_equal([File.join(Dir.pwd,'home/.cache', file)], XDG.cache.glob(file))
  end

  # Test the working directory variations.

  def test_config_work
    result = [File.join(Dir.pwd,'.config'), File.join(Dir.pwd,'config')]
    assert_equal(result, XDG.config.work)
  end

  def test_cache_work
    result = [File.join(Dir.pwd,'.tmp'), File.join(Dir.pwd,'tmp')]
    assert_equal(result, XDG.cache.work)
  end

end