diff --git a/system/Common.php b/system/Common.php index b647c9d247ad..d5880acf0363 100644 --- a/system/Common.php +++ b/system/Common.php @@ -598,7 +598,7 @@ function helper($filenames): void if (str_contains($filename, '\\')) { $path = $loader->locateFile($filename, 'Helpers'); - if ($path !== '') { + if ($path === false) { throw FileNotFoundException::forFileNotFound($filename); } diff --git a/tests/system/CommonHelperTest.php b/tests/system/CommonHelperTest.php index db304ecfdb70..1ff0a1d2e201 100644 --- a/tests/system/CommonHelperTest.php +++ b/tests/system/CommonHelperTest.php @@ -13,7 +13,9 @@ namespace CodeIgniter; +use CodeIgniter\Autoloader\Autoloader; use CodeIgniter\Autoloader\FileLocator; +use CodeIgniter\Files\Exceptions\FileNotFoundException; use CodeIgniter\Test\CIUnitTestCase; use Config\Services; use PHPUnit\Framework\Attributes\CoversFunction; @@ -148,4 +150,25 @@ function foo_bar_baz(): string $this->assertSame($this->dummyHelpers[0], foo_bar_baz()); } + + public function testNamespacedHelperNotFound(): void + { + $this->expectException(FileNotFoundException::class); + + $locator = $this->getMockLocator(); + Services::injectMock('locator', $locator); + + helper('foo\barbaz'); + } + + public function testNamespacedHelperFound(): void + { + $autoloader = new Autoloader(); + $autoloader->addNamespace('Tests\Support\Helpers', TESTPATH . '_support/Helpers'); + $locator = new FileLocator($autoloader); + + Services::injectMock('locator', $locator); + + helper('Tests\Support\Helpers\baguette'); + } }