PathTest.php 6.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245
  1. <?php
  2. namespace fphammerle\helpers\tests;
  3. use \fphammerle\helpers\Path;
  4. class PathTest extends \PHPUnit_Framework_TestCase
  5. {
  6. /**
  7. * @dataProvider pathProvider
  8. */
  9. public function testConstruct($path, $expected_dir_path, $expected_filename, $expected_extension)
  10. {
  11. $p = new Path($path);
  12. if(isset($expected_dir_path)) {
  13. $this->assertSame($expected_dir_path, $p->dirPath->path);
  14. } else {
  15. $this->assertNull($p->dirPath);
  16. }
  17. $this->assertSame($expected_filename, $p->filename);
  18. $this->assertSame($expected_extension, $p->extension);
  19. }
  20. public function getBasenameProvider()
  21. {
  22. return [
  23. ['.', null, '.'],
  24. ['..', null, '..'],
  25. ['file', 'php', 'file.php'],
  26. ['file', null, 'file'],
  27. [null, 'php', '.php'],
  28. [null, null, null],
  29. ];
  30. }
  31. /**
  32. * @dataProvider getBasenameProvider
  33. */
  34. public function testGetBasename($filename, $extension, $expected_basename)
  35. {
  36. $p = new Path;
  37. $p->filename = $filename;
  38. $p->extension = $extension;
  39. $this->assertSame($expected_basename, $p->basename);
  40. }
  41. public function setBasenameProvider()
  42. {
  43. return [
  44. ['.', '.', null],
  45. ['..', '..', null],
  46. ['..txt', '.', 'txt'],
  47. ['.php', null, 'php'],
  48. ['file', 'file', null],
  49. ['file.php', 'file', 'php'],
  50. [null, null, null],
  51. ];
  52. }
  53. /**
  54. * @dataProvider setBasenameProvider
  55. */
  56. public function testSetBasename($basename, $expected_filename, $expected_extension)
  57. {
  58. $p = new Path;
  59. $p->basename = $basename;
  60. $this->assertSame($expected_filename, $p->filename);
  61. $this->assertSame($expected_extension, $p->extension);
  62. }
  63. public function dirPathProvider()
  64. {
  65. return [
  66. [null, null],
  67. ];
  68. }
  69. /**
  70. * @dataProvider dirPathProvider
  71. */
  72. public function testDirPath($input_dir_path, $expected_dir_path)
  73. {
  74. $p = new Path;
  75. $p->dirPath = $input_dir_path;
  76. $this->assertSame($expected_dir_path, $p->dirPath);
  77. }
  78. public function extensionProvider()
  79. {
  80. return [
  81. ['.', '.'],
  82. ['.php', '.php'],
  83. ['file', 'file'],
  84. ['file.php', 'file.php'],
  85. [123, '123'],
  86. [null, null],
  87. ];
  88. }
  89. /**
  90. * @dataProvider extensionProvider
  91. */
  92. public function testExtension($input_extension, $expected_extension)
  93. {
  94. $p = new Path;
  95. $p->extension = $input_extension;
  96. $this->assertSame($expected_extension, $p->extension);
  97. }
  98. public function filenameProvider()
  99. {
  100. return [
  101. ['.', '.'],
  102. ['.php', '.php'],
  103. ['file', 'file'],
  104. ['file.php', 'file.php'],
  105. [123, '123'],
  106. [null, null],
  107. ];
  108. }
  109. /**
  110. * @dataProvider filenameProvider
  111. */
  112. public function testFilename($input_filename, $expected_filename)
  113. {
  114. $p = new Path;
  115. $p->filename = $input_filename;
  116. $this->assertSame($expected_filename, $p->filename);
  117. }
  118. public function pathProvider()
  119. {
  120. return [
  121. ['.', null, '.', null],
  122. ['..', null, '..', null],
  123. ['../../file.php', '../..', 'file', 'php'],
  124. ['../file.php', '..', 'file', 'php'],
  125. ['./file.php', '.', 'file', 'php'],
  126. ['dir/../file.php', 'dir/..', 'file', 'php'],
  127. ['dir/file.php', 'dir', 'file', 'php'],
  128. ['dir/subdir/file.php', 'dir/subdir', 'file', 'php'],
  129. ['/file.php', '/', 'file', 'php'],
  130. ['/dir/file.php', '/dir', 'file', 'php'],
  131. ['/', '/', null, null],
  132. ['file.php', null, 'file', 'php'],
  133. [null, null, null, null],
  134. ];
  135. }
  136. /**
  137. * @dataProvider pathProvider
  138. */
  139. public function testGetPath($expected_path, $dir_path, $filename, $extension)
  140. {
  141. $p = new Path;
  142. $p->dirPath = $dir_path;
  143. $p->filename = $filename;
  144. $p->extension = $extension;
  145. $this->assertSame($expected_path, $p->path);
  146. }
  147. /**
  148. * @dataProvider pathProvider
  149. */
  150. public function testSetPath($path, $expected_dir_path, $expected_filename, $expected_extension)
  151. {
  152. $p = new Path;
  153. $p->path = $path;
  154. if(isset($expected_dir_path)) {
  155. $this->assertSame($expected_dir_path, $p->dirPath->path);
  156. } else {
  157. $this->assertNull($p->dirPath);
  158. }
  159. $this->assertSame($expected_filename, $p->filename);
  160. $this->assertSame($expected_extension, $p->extension);
  161. }
  162. /**
  163. * @dataProvider pathProvider
  164. */
  165. public function testSetEqualsGet($path)
  166. {
  167. $p = new Path;
  168. $p->path = $path;
  169. $this->assertSame($path, $p->path);
  170. }
  171. public function isRootProvider()
  172. {
  173. return [
  174. ['.', false],
  175. ['..', false],
  176. ['../../file.php', false],
  177. ['../file.php', false],
  178. ['./file.php', false],
  179. ['/', true],
  180. ['//', false],
  181. ['/dir/file.php', false],
  182. ['/file.php', false],
  183. ['dir/../file.php', false],
  184. ['dir/file.php', false],
  185. ['dir/subdir/file.php', false],
  186. ['file.php', false],
  187. [null, false],
  188. ];
  189. }
  190. /**
  191. * @dataProvider isRootProvider
  192. */
  193. public function testIsRoot($path, $expected_result)
  194. {
  195. $p = new Path;
  196. $p->path = $path;
  197. $this->assertSame($expected_result, $p->isRoot());
  198. }
  199. public function reverseNameProvider()
  200. {
  201. return [
  202. ['.', '.'],
  203. ['..', '..'],
  204. ['../../file.php', '../../elif.php'],
  205. ['dir/subdir/file.html', 'dir/subdir/elif.lmth'],
  206. ['file.png', 'elif.gnp'],
  207. [null, null],
  208. ];
  209. }
  210. /**
  211. * @dataProvider reverseNameProvider
  212. */
  213. public function testReverseName($path, $expected_result)
  214. {
  215. $p = new Path($path);
  216. if(isset($p->filename)) {
  217. $p->filename = strrev($p->filename);
  218. }
  219. if(isset($p->extension)) {
  220. $p->extension = strrev($p->extension);
  221. }
  222. $this->assertSame($expected_result, $p->path);
  223. }
  224. }