diff --git a/src/File/FileHelper.php b/src/File/FileHelper.php index 9a67dfd6..08c8c84d 100644 --- a/src/File/FileHelper.php +++ b/src/File/FileHelper.php @@ -19,11 +19,11 @@ public static function removeDot(string $fileName): string * @param array $ignoredDir */ public static function getFileName( - string $absolutePath, + string $path, ?string $baseDir = null, array $ignoredDir = [] ): ?string { - $split = self::splitPath($absolutePath, $baseDir, $ignoredDir); + $split = self::splitPath($path, $baseDir, $ignoredDir); if ([] === $split) { return null; } @@ -37,11 +37,11 @@ public static function getFileName( * @return list */ public static function getDirectories( - string $absolutePath, + string $path, ?string $baseDir = null, array $ignoredDir = [] ): array { - $split = self::splitPath($absolutePath, $baseDir, $ignoredDir); + $split = self::splitPath($path, $baseDir, $ignoredDir); array_pop($split); return $split; @@ -53,24 +53,24 @@ public static function getDirectories( * @return list */ private static function splitPath( - string $absolutePath, + string $path, ?string $baseDir = null, array $ignoredDir = [] ): array { $baseDir = trim($baseDir ?? '', \DIRECTORY_SEPARATOR); - if ('' === $baseDir) { + if ('' === $baseDir || str_starts_with($path, $baseDir.\DIRECTORY_SEPARATOR)) { $baseDirPosition = 0; - $baseDir = \DIRECTORY_SEPARATOR; + $baseDir .= \DIRECTORY_SEPARATOR; } else { $baseDir = \DIRECTORY_SEPARATOR.$baseDir.\DIRECTORY_SEPARATOR; - $baseDirPosition = strrpos($absolutePath, $baseDir); + $baseDirPosition = strrpos($path, $baseDir); if (false === $baseDirPosition) { return []; } } - $path = substr($absolutePath, $baseDirPosition + \strlen($baseDir)); + $path = substr($path, $baseDirPosition + \strlen($baseDir)); foreach ($ignoredDir as $ignoredDirectory) { $ignoredDirectory = trim($ignoredDirectory, \DIRECTORY_SEPARATOR).\DIRECTORY_SEPARATOR; if (str_starts_with($path, $ignoredDirectory)) { diff --git a/tests/File/FileHelperTest.php b/tests/File/FileHelperTest.php index ddeb6a46..6e1eabc4 100644 --- a/tests/File/FileHelperTest.php +++ b/tests/File/FileHelperTest.php @@ -179,5 +179,23 @@ public static function getDirectoriesDataProvider(): iterable [], ['foo_directory'], ]; + yield [ + './foo_directory/directory/file.twig', + 'foo_directory', + [], + ['directory'], + ]; + yield [ + 'foo_directory/directory/file.twig', + 'foo_directory', + [], + ['directory'], + ]; + yield [ + 'foo_directory/directory/file.twig', + 'foo', + [], + [], + ]; } }