| 
<?php
 class XdgTest extends PHPUnit_Framework_TestCase
 {
 /**
 * @return \XdgBaseDir\Xdg
 */
 public function getXdg()
 {
 return new \XdgBaseDir\Xdg();
 }
 
 public function testGetHomeDir()
 {
 putenv('HOME=/fake-dir');
 $this->assertEquals('/fake-dir', $this->getXdg()->getHomeDir());
 }
 
 public function testGetFallbackHomeDir()
 {
 putenv('HOME=');
 putenv('HOMEDRIVE=C:');
 putenv('HOMEPATH=fake-dir');
 $this->assertEquals('C:/fake-dir', $this->getXdg()->getHomeDir());
 }
 
 public function testXdgPutCache()
 {
 putenv('XDG_DATA_HOME=tmp/');
 putenv('XDG_CONFIG_HOME=tmp/');
 putenv('XDG_CACHE_HOME=tmp/');
 $this->assertEquals('tmp/', $this->getXdg()->getHomeCacheDir());
 }
 
 public function testXdgPutData()
 {
 putenv('XDG_DATA_HOME=tmp/');
 $this->assertEquals('tmp/', $this->getXdg()->getHomeDataDir());
 }
 
 public function testXdgPutConfig()
 {
 putenv('XDG_CONFIG_HOME=tmp/');
 $this->assertEquals('tmp/', $this->getXdg()->getHomeConfigDir());
 }
 
 public function testXdgDataDirsShouldIncludeHomeDataDir()
 {
 putenv('XDG_DATA_HOME=tmp/');
 putenv('XDG_CONFIG_HOME=tmp/');
 
 $this->assertArrayHasKey('tmp/', array_flip($this->getXdg()->getDataDirs()));
 }
 
 public function testXdgConfigDirsShouldIncludeHomeConfigDir()
 {
 putenv('XDG_CONFIG_HOME=tmp/');
 
 $this->assertArrayHasKey('tmp/', array_flip($this->getXdg()->getConfigDirs()));
 }
 
 /**
 * If XDG_RUNTIME_DIR is set, it should be returned
 */
 public function testGetRuntimeDir()
 {
 putenv('XDG_RUNTIME_DIR=/tmp/');
 $runtimeDir = $this->getXdg()->getRuntimeDir();
 
 $this->assertEquals(is_dir($runtimeDir), true);
 }
 
 /**
 * In strict mode, an exception should be shown if XDG_RUNTIME_DIR does not exist
 *
 * @expectedException \RuntimeException
 */
 public function testGetRuntimeDirShouldThrowException()
 {
 putenv('XDG_RUNTIME_DIR=');
 $this->getXdg()->getRuntimeDir(true);
 }
 
 /**
 * In fallback mode a directory should be created
 */
 public function testGetRuntimeDirShouldCreateDirectory()
 {
 putenv('XDG_RUNTIME_DIR=');
 $dir = $this->getXdg()->getRuntimeDir(false);
 $permission = decoct(fileperms($dir) & 0777);
 $this->assertEquals(700, $permission);
 }
 
 /**
 * Ensure, that the fallback directories are created with correct permission
 */
 public function testGetRuntimeShouldDeleteDirsWithWrongPermission()
 {
 $runtimeDir = sys_get_temp_dir() . DIRECTORY_SEPARATOR . XdgBaseDir\Xdg::RUNTIME_DIR_FALLBACK . getenv('USER');
 
 rmdir($runtimeDir);
 mkdir($runtimeDir, 0764, true);
 
 // Permission should be wrong now
 $permission = decoct(fileperms($runtimeDir) & 0777);
 $this->assertEquals(764, $permission);
 
 putenv('XDG_RUNTIME_DIR=');
 $dir = $this->getXdg()->getRuntimeDir(false);
 
 // Permission should be fixed
 $permission = decoct(fileperms($dir) & 0777);
 $this->assertEquals(700, $permission);
 }
 }
 
 |