From fca828fe3000398bbc23d5880c395367be4d0905 Mon Sep 17 00:00:00 2001 From: Chris Kankiewicz Date: Mon, 6 Apr 2020 11:50:17 -0700 Subject: [PATCH] Improved Breadcrumbs tests --- app/src/ViewFunctions/Breadcrumbs.php | 16 +++++++++++----- tests/ViewFunctions/BreadcrumbsTest.php | 11 +++++++++++ 2 files changed, 22 insertions(+), 5 deletions(-) diff --git a/app/src/ViewFunctions/Breadcrumbs.php b/app/src/ViewFunctions/Breadcrumbs.php index f061263..22648ea 100644 --- a/app/src/ViewFunctions/Breadcrumbs.php +++ b/app/src/ViewFunctions/Breadcrumbs.php @@ -14,14 +14,20 @@ class Breadcrumbs extends ViewFunction /** @var Container The application container */ protected $container; + /** @var string The directory separator */ + protected $directorySeparator; + /** * Create a new Breadcrumbs object. * * @param \DI\Container $container */ - public function __construct(Container $container) - { + public function __construct( + Container $container, + string $directorySeparator = DIRECTORY_SEPARATOR + ) { $this->container = $container; + $this->directorySeparator = $directorySeparator; } /** @@ -33,15 +39,15 @@ class Breadcrumbs extends ViewFunction */ public function __invoke(string $path) { - $breadcrumbs = Str::explode($path, DIRECTORY_SEPARATOR)->diff( - explode(DIRECTORY_SEPARATOR, $this->container->get('base_path')) + $breadcrumbs = Str::explode($path, $this->directorySeparator)->diff( + explode($this->directorySeparator, $this->container->get('base_path')) )->filter(); return $breadcrumbs->filter(function (string $crumb) { return $crumb !== '.'; })->reduce(function (Collection $carry, string $crumb) { return $carry->put($crumb, ltrim( - $carry->last() . DIRECTORY_SEPARATOR . urlencode($crumb), DIRECTORY_SEPARATOR + $carry->last() . $this->directorySeparator . urlencode($crumb), $this->directorySeparator )); }, new Collection)->map(function (string $path): string { return sprintf('?dir=%s', $path); diff --git a/tests/ViewFunctions/BreadcrumbsTest.php b/tests/ViewFunctions/BreadcrumbsTest.php index b8ec3c4..3a13601 100644 --- a/tests/ViewFunctions/BreadcrumbsTest.php +++ b/tests/ViewFunctions/BreadcrumbsTest.php @@ -58,4 +58,15 @@ class BreadcrumbsTest extends TestCase 'baz' => '?dir=foo/bar/baz', ]), $breadcrumbs('foo/bar/baz')); } + + public function test_it_can_parse_breadcrumbs_from_the_path_with_back_slashes(): void + { + $breadcrumbs = new Breadcrumbs($this->container, '\\'); + + $this->assertEquals(Collection::make([ + 'foo' => '?dir=foo', + 'bar' => '?dir=foo\bar', + 'baz' => '?dir=foo\bar\baz', + ]), $breadcrumbs('foo\bar\baz')); + } }