mirror of
https://github.com/php/web-bugs.git
synced 2026-03-24 15:52:09 +01:00
- Added filter to phpunit config - This enables support for coverage support - Moved unit tests to dedicated directory - Also created constants for the locations of the fixtures and mocks for testing so we do not have to use relative paths in tests - Updated phpunit to 8 - Added type information to tests - Added return type and parameter type declarations for tests - Added strict types to tests - CS fixes in tests - Aligning arrays, consistent string concatenation, removed unused local vars - Added constant for test cache directory - Make the autoloader also properly work on windows - Windows does not care about the directory separator used so just trim both variant from the end.
101 lines
2.7 KiB
PHP
101 lines
2.7 KiB
PHP
<?php declare(strict_types=1);
|
|
|
|
namespace App\Tests\Unit;
|
|
|
|
use App\Autoloader;
|
|
use PHPUnit\Framework\TestCase;
|
|
|
|
class MockAutoloader extends Autoloader
|
|
{
|
|
protected $files = [];
|
|
|
|
public function setFiles(array $files)
|
|
{
|
|
$this->files = $files;
|
|
}
|
|
|
|
protected function requireFile($file)
|
|
{
|
|
return in_array($file, $this->files);
|
|
}
|
|
}
|
|
|
|
class AutoloaderTest extends TestCase
|
|
{
|
|
/** @var MockAutoloader */
|
|
protected $autoloader;
|
|
|
|
protected function setUp(): void
|
|
{
|
|
$this->autoloader = new MockAutoloader;
|
|
|
|
$this->autoloader->setFiles([
|
|
'/vendor/foo.bar/src/ClassName.php',
|
|
'/vendor/foo.bar/src/DoomClassName.php',
|
|
'/vendor/foo.bar/tests/ClassNameTest.php',
|
|
'/vendor/foo.bardoom/src/ClassName.php',
|
|
'/vendor/foo.bar.baz.dib/src/ClassName.php',
|
|
'/vendor/foo.bar.baz.dib.zim.gir/src/ClassName.php',
|
|
'/src/lib/ClassName.php',
|
|
'/src/libfoo/ClassFoo.php',
|
|
]);
|
|
|
|
$this->autoloader->addNamespace(
|
|
'Foo\Bar',
|
|
'/vendor/foo.bar/src'
|
|
);
|
|
|
|
$this->autoloader->addNamespace(
|
|
'Foo\Bar',
|
|
'/vendor/foo.bar/tests'
|
|
);
|
|
|
|
$this->autoloader->addNamespace(
|
|
'Foo\\BarDoom',
|
|
'/vendor/foo.bardoom/src/'
|
|
);
|
|
|
|
$this->autoloader->addNamespace(
|
|
'Foo\Bar\Baz\Dib',
|
|
'/vendor/foo.bar.baz.dib/src/'
|
|
);
|
|
|
|
$this->autoloader->addNamespace(
|
|
'Foo\Bar\Baz\Dib\Zim\Gir',
|
|
'/vendor/foo.bar.baz.dib.zim.gir/src/'
|
|
);
|
|
|
|
$this->autoloader->addClassmap(
|
|
'ClassName',
|
|
'/src/lib/ClassName.php'
|
|
);
|
|
|
|
$this->autoloader->addClassmap(
|
|
'ClassFoo',
|
|
'/src/libfoo/ClassFoo.php'
|
|
);
|
|
}
|
|
|
|
/**
|
|
* @dataProvider classesProvider
|
|
*/
|
|
public function testLoad(string $class, $expected): void
|
|
{
|
|
$this->assertEquals($expected, $this->autoloader->load($class));
|
|
}
|
|
|
|
public function classesProvider(): array
|
|
{
|
|
return [
|
|
['Foo\Bar\ClassName', '/vendor/foo.bar/src/ClassName.php'],
|
|
['Foo\Bar\ClassNameTest', '/vendor/foo.bar/tests/ClassNameTest.php'],
|
|
['ClassName', '/src/lib/ClassName.php'],
|
|
['ClassFoo', '/src/libfoo/ClassFoo.php'],
|
|
['No_Vendor\No_Package\NoClass', false],
|
|
['Foo\Bar\Baz\Dib\Zim\Gir\ClassName', '/vendor/foo.bar.baz.dib.zim.gir/src/ClassName.php'],
|
|
['Foo\Bar\DoomClassName', '/vendor/foo.bar/src/DoomClassName.php'],
|
|
['Foo\BarDoom\ClassName', '/vendor/foo.bardoom/src/ClassName.php'],
|
|
];
|
|
}
|
|
}
|