Chris@0
|
1 <?php
|
Chris@0
|
2
|
Chris@0
|
3 class XdgTest extends PHPUnit_Framework_TestCase
|
Chris@0
|
4 {
|
Chris@0
|
5 /**
|
Chris@0
|
6 * @return \XdgBaseDir\Xdg
|
Chris@0
|
7 */
|
Chris@0
|
8 public function getXdg()
|
Chris@0
|
9 {
|
Chris@0
|
10 return new \XdgBaseDir\Xdg();
|
Chris@0
|
11 }
|
Chris@0
|
12
|
Chris@0
|
13 public function testGetHomeDir()
|
Chris@0
|
14 {
|
Chris@0
|
15 putenv('HOME=/fake-dir');
|
Chris@0
|
16 $this->assertEquals('/fake-dir', $this->getXdg()->getHomeDir());
|
Chris@0
|
17 }
|
Chris@0
|
18
|
Chris@0
|
19 public function testGetFallbackHomeDir()
|
Chris@0
|
20 {
|
Chris@0
|
21 putenv('HOME=');
|
Chris@0
|
22 putenv('HOMEDRIVE=C:');
|
Chris@0
|
23 putenv('HOMEPATH=fake-dir');
|
Chris@0
|
24 $this->assertEquals('C:/fake-dir', $this->getXdg()->getHomeDir());
|
Chris@0
|
25 }
|
Chris@0
|
26
|
Chris@0
|
27 public function testXdgPutCache()
|
Chris@0
|
28 {
|
Chris@0
|
29 putenv('XDG_DATA_HOME=tmp/');
|
Chris@0
|
30 putenv('XDG_CONFIG_HOME=tmp/');
|
Chris@0
|
31 putenv('XDG_CACHE_HOME=tmp/');
|
Chris@0
|
32 $this->assertEquals('tmp/', $this->getXdg()->getHomeCacheDir());
|
Chris@0
|
33 }
|
Chris@0
|
34
|
Chris@0
|
35 public function testXdgPutData()
|
Chris@0
|
36 {
|
Chris@0
|
37 putenv('XDG_DATA_HOME=tmp/');
|
Chris@0
|
38 $this->assertEquals('tmp/', $this->getXdg()->getHomeDataDir());
|
Chris@0
|
39 }
|
Chris@0
|
40
|
Chris@0
|
41 public function testXdgPutConfig()
|
Chris@0
|
42 {
|
Chris@0
|
43 putenv('XDG_CONFIG_HOME=tmp/');
|
Chris@0
|
44 $this->assertEquals('tmp/', $this->getXdg()->getHomeConfigDir());
|
Chris@0
|
45 }
|
Chris@0
|
46
|
Chris@0
|
47 public function testXdgDataDirsShouldIncludeHomeDataDir()
|
Chris@0
|
48 {
|
Chris@0
|
49 putenv('XDG_DATA_HOME=tmp/');
|
Chris@0
|
50 putenv('XDG_CONFIG_HOME=tmp/');
|
Chris@0
|
51
|
Chris@0
|
52 $this->assertArrayHasKey('tmp/', array_flip($this->getXdg()->getDataDirs()));
|
Chris@0
|
53 }
|
Chris@0
|
54
|
Chris@0
|
55 public function testXdgConfigDirsShouldIncludeHomeConfigDir()
|
Chris@0
|
56 {
|
Chris@0
|
57 putenv('XDG_CONFIG_HOME=tmp/');
|
Chris@0
|
58
|
Chris@0
|
59 $this->assertArrayHasKey('tmp/', array_flip($this->getXdg()->getConfigDirs()));
|
Chris@0
|
60 }
|
Chris@0
|
61
|
Chris@0
|
62 /**
|
Chris@0
|
63 * If XDG_RUNTIME_DIR is set, it should be returned
|
Chris@0
|
64 */
|
Chris@0
|
65 public function testGetRuntimeDir()
|
Chris@0
|
66 {
|
Chris@0
|
67 putenv('XDG_RUNTIME_DIR=/tmp/');
|
Chris@0
|
68 $runtimeDir = $this->getXdg()->getRuntimeDir();
|
Chris@0
|
69
|
Chris@0
|
70 $this->assertEquals(is_dir($runtimeDir), true);
|
Chris@0
|
71 }
|
Chris@0
|
72
|
Chris@0
|
73 /**
|
Chris@0
|
74 * In strict mode, an exception should be shown if XDG_RUNTIME_DIR does not exist
|
Chris@0
|
75 *
|
Chris@0
|
76 * @expectedException \RuntimeException
|
Chris@0
|
77 */
|
Chris@0
|
78 public function testGetRuntimeDirShouldThrowException()
|
Chris@0
|
79 {
|
Chris@0
|
80 putenv('XDG_RUNTIME_DIR=');
|
Chris@0
|
81 $this->getXdg()->getRuntimeDir(true);
|
Chris@0
|
82 }
|
Chris@0
|
83
|
Chris@0
|
84 /**
|
Chris@0
|
85 * In fallback mode a directory should be created
|
Chris@0
|
86 */
|
Chris@0
|
87 public function testGetRuntimeDirShouldCreateDirectory()
|
Chris@0
|
88 {
|
Chris@0
|
89 putenv('XDG_RUNTIME_DIR=');
|
Chris@0
|
90 $dir = $this->getXdg()->getRuntimeDir(false);
|
Chris@0
|
91 $permission = decoct(fileperms($dir) & 0777);
|
Chris@0
|
92 $this->assertEquals(700, $permission);
|
Chris@0
|
93 }
|
Chris@0
|
94
|
Chris@0
|
95 /**
|
Chris@0
|
96 * Ensure, that the fallback directories are created with correct permission
|
Chris@0
|
97 */
|
Chris@0
|
98 public function testGetRuntimeShouldDeleteDirsWithWrongPermission()
|
Chris@0
|
99 {
|
Chris@0
|
100 $runtimeDir = sys_get_temp_dir() . DIRECTORY_SEPARATOR . XdgBaseDir\Xdg::RUNTIME_DIR_FALLBACK . getenv('USER');
|
Chris@0
|
101
|
Chris@0
|
102 rmdir($runtimeDir);
|
Chris@0
|
103 mkdir($runtimeDir, 0764, true);
|
Chris@0
|
104
|
Chris@0
|
105 // Permission should be wrong now
|
Chris@0
|
106 $permission = decoct(fileperms($runtimeDir) & 0777);
|
Chris@0
|
107 $this->assertEquals(764, $permission);
|
Chris@0
|
108
|
Chris@0
|
109 putenv('XDG_RUNTIME_DIR=');
|
Chris@0
|
110 $dir = $this->getXdg()->getRuntimeDir(false);
|
Chris@0
|
111
|
Chris@0
|
112 // Permission should be fixed
|
Chris@0
|
113 $permission = decoct(fileperms($dir) & 0777);
|
Chris@0
|
114 $this->assertEquals(700, $permission);
|
Chris@0
|
115 }
|
Chris@0
|
116 }
|