PathResolverTest.php 7.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485
  1. <?php
  2. namespace Codeception\Util;
  3. class PathResolverTest extends \Codeception\Test\Unit
  4. {
  5. /**
  6. * @dataProvider getRelativeDirTestData
  7. * @group core
  8. */
  9. public function testGetRelativeDir($path, $projDir, $dirSep, $expectedOutput)
  10. {
  11. $relativeDir = PathResolver::getRelativeDir($path, $projDir, $dirSep);
  12. $this->assertEquals($expectedOutput, $relativeDir);
  13. }
  14. /**
  15. * data provider for testGetRelativeDir
  16. *
  17. * @return array(array(strings))
  18. */
  19. public function getRelativeDirTestData()
  20. {
  21. return [
  22. // Unix style paths:
  23. // projectDir() with & without trailing directory seperator: actual subdir
  24. ['/my/proj/path/some/file/in/my/proj.txt', '/my/proj/path/', '/', 'some/file/in/my/proj.txt'],
  25. ['/my/proj/path/some/file/in/my/proj.txt', '/my/proj/path', '/', 'some/file/in/my/proj.txt'],
  26. ['/my/proj/pathsome/file/in/my/proj.txt', '/my/proj/path', '/', '../pathsome/file/in/my/proj.txt'],
  27. // Case sensitive:
  28. ['/my/proj/Path/some/file/in/my/proj.txt', '/my/proj/path/', '/', '../Path/some/file/in/my/proj.txt'],
  29. ['/my/Proj/path/some/file/in/my/proj.txt', '/my/proj/path', '/', '../../Proj/path/some/file/in/my/proj.txt'],
  30. ['My/proj/path/some/file/in/my/proj.txt', 'my/proj/path/foo/bar', '/', '../../../../../My/proj/path/some/file/in/my/proj.txt'],
  31. ['/my/proj/path/some/file/in/my/proj.txt', '/my/proj/Path/foobar/', '/', '../../path/some/file/in/my/proj.txt'],
  32. ['/my/PROJ/path/some/dir/in/my/proj/', '/my/proj/path/foobar/', '/', '../../../PROJ/path/some/dir/in/my/proj/'],
  33. // Absolute $path, Relative projectDir()
  34. ['/my/proj/path/some/file/in/my/proj.txt', 'my/proj/path/', '/', '/my/proj/path/some/file/in/my/proj.txt'],
  35. ['/My/proj/path/some/file/in/my/proj.txt', 'my/proj/path/', '/', '/My/proj/path/some/file/in/my/proj.txt'],
  36. // Relative $path, Absolute projectDir()
  37. ['my/proj/path/some/file/in/my/proj.txt', '/my/proj/path/', '/', 'my/proj/path/some/file/in/my/proj.txt'],
  38. // $path & projectDir() both relative
  39. ['my/proj/path/some/file/in/my/proj.txt', 'my/proj/path/foo/bar', '/', '../../some/file/in/my/proj.txt'],
  40. // $path & projectDir() both absolute: not a subdir
  41. ['/my/proj/path/some/file/in/my/proj.txt', '/my/proj/path/foobar/', '/', '../some/file/in/my/proj.txt'],
  42. // ensure trailing DIRECTORY_SEPERATOR maintained
  43. ['/my/proj/path/some/dir/in/my/proj/', '/my/proj/path/foobar', '/', '../some/dir/in/my/proj/'],
  44. // Windows style paths:
  45. // projectDir() with & without trailing directory seperator: actual subdir
  46. ['C:\\my\\proj\\path\\some\\file\\in\\my\\proj.txt', 'C:\\my\\proj\\path\\', '\\', 'some\\file\\in\\my\\proj.txt'],
  47. ['C:\\my\\proj\\path\\some\\file\\in\\my\\proj.txt', 'C:\\my\\proj\\path', '\\', 'some\\file\\in\\my\\proj.txt'],
  48. ['C:\\my\\proj\\pathsome\\file\\in\\my\\proj.txt', 'C:\\my\\proj\\path', '\\', '..\\pathsome\\file\\in\\my\\proj.txt'],
  49. // No device letter... absoluteness mismatch
  50. ['\\my\\proj\\path\\some\\file\\in\\my\\proj.txt', 'my\\proj\\path\\', '\\', '\\my\\proj\\path\\some\\file\\in\\my\\proj.txt'],
  51. ['my\\proj\\path\\some\\file\\in\\my\\proj.txt', '\\my\\proj\\path\\', '\\', 'my\\proj\\path\\some\\file\\in\\my\\proj.txt'],
  52. // No device letter... absoluteness match
  53. ['my\\proj\\path\\some\\file\\in\\my\\proj.txt', 'my\\proj\\path\\foo\\bar', '\\', '..\\..\\some\\file\\in\\my\\proj.txt'],
  54. ['\\my\\proj\\path\\some\\file\\in\\my\\proj.txt', '\\my\\proj\\path\\foobar\\', '\\', '..\\some\\file\\in\\my\\proj.txt'],
  55. ['\\my\\proj\\path\\some\\dir\\in\\my\\proj\\', '\\my\\proj\\path\\foobar\\', '\\', '..\\some\\dir\\in\\my\\proj\\'],
  56. // Device letter (both)... path absoluteness mismatch
  57. ['C:\\my\\proj\\path\\some\\file\\in\\my\\proj.txt', 'C:my\\proj\\path\\', '\\', '\\my\\proj\\path\\some\\file\\in\\my\\proj.txt'],
  58. ['d:my\\proj\\path\\some\\file\\in\\my\\proj.txt', 'd:\\my\\proj\\path\\', '\\', 'my\\proj\\path\\some\\file\\in\\my\\proj.txt'],
  59. // Device letter (both)... path absoluteness match... case-insensitivity
  60. ['E:my\\proj\\path\\some\\file\\in\\my\\proj.txt', 'E:my\\proj\\PATH\\foo\\bar', '\\', '..\\..\\some\\file\\in\\my\\proj.txt'],
  61. ['f:\\my\\Proj\\path\\some\\file\\in\\my\\proj.txt', 'F:\\my\\proj\\path\\foobar\\', '\\', '..\\some\\file\\in\\my\\proj.txt'],
  62. ['A:\\MY\\proj\\path\\some\\dir\\in\\my\\proj\\', 'a:\\my\\proj\\path\\foobar\\', '\\', '..\\some\\dir\\in\\my\\proj\\'],
  63. // Absoluteness mismatch
  64. ['z:\\my\\proj\\path\\some\\file\\in\\my\\proj.txt', 'my\\proj\\path\\', '\\', 'z:\\my\\proj\\path\\some\\file\\in\\my\\proj.txt'],
  65. ['Y:my\\proj\\path\\some\\file\\in\\my\\proj.txt', '\\my\\proj\\path\\', '\\', 'Y:my\\proj\\path\\some\\file\\in\\my\\proj.txt'],
  66. ['x:my\\proj\\path\\some\\file\\in\\my\\proj.txt', 'my\\proj\\path\\foo\\bar', '\\', 'x:my\\proj\\path\\some\\file\\in\\my\\proj.txt'],
  67. ['P:\\my\\proj\\path\\some\\file\\in\\my\\proj.txt', '\\my\\proj\\path\\foobar\\', '\\', 'P:\\my\\proj\\path\\some\\file\\in\\my\\proj.txt'],
  68. ['Q:\\my\\proj\\path\\some\\dir\\in\\my\\proj\\', '\\my\\proj\\path\\foobar\\', '\\', 'Q:\\my\\proj\\path\\some\\dir\\in\\my\\proj\\'],
  69. ['\\my\\proj\\path\\some\\file\\in\\my\\proj.txt', 'm:my\\proj\\path\\', '\\', '\\my\\proj\\path\\some\\file\\in\\my\\proj.txt'],
  70. ['my\\proj\\path\\some\\file\\in\\my\\proj.txt', 'N:\\my\\proj\\path\\', '\\', 'my\\proj\\path\\some\\file\\in\\my\\proj.txt'],
  71. ['my\\proj\\path\\some\\file\\in\\my\\proj.txt', 'o:my\\proj\\path\\foo\\bar', '\\', 'my\\proj\\path\\some\\file\\in\\my\\proj.txt'],
  72. ['\\my\\proj\\path\\some\\file\\in\\my\\proj.txt', 'P:\\my\\proj\\path\\foobar\\', '\\', '\\my\\proj\\path\\some\\file\\in\\my\\proj.txt'],
  73. ['\\my\\proj\\path\\some\\dir\\in\\my\\proj\\', 'q:\\my\\proj\\path\\foobar\\', '\\', '\\my\\proj\\path\\some\\dir\\in\\my\\proj\\'],
  74. // Device letter mismatch
  75. ['A:\\my\\proj\\path\\some\\file\\in\\my\\proj.txt', 'B:my\\proj\\path\\', '\\', 'A:\\my\\proj\\path\\some\\file\\in\\my\\proj.txt'],
  76. ['c:my\\proj\\path\\some\\file\\in\\my\\proj.json', 'd:\\my\\proj\\path\\', '\\', 'c:my\\proj\\path\\some\\file\\in\\my\\proj.json'],
  77. ['M:my\\proj\\path\\foo.txt', 'N:my\\proj\\path\\foo\\bar', '\\', 'M:my\\proj\\path\\foo.txt'],
  78. ['G:\\my\\proj\\path\\baz.exe', 'C:\\my\\proj\\path\\foobar\\', '\\', 'G:\\my\\proj\\path\\baz.exe'],
  79. ['C:\\my\\proj\\path\\bam\\', 'G:\\my\\proj\\path\\foobar\\', '\\', 'C:\\my\\proj\\path\\bam\\'] ];
  80. }
  81. }