Files
archived-web-bugs/tests/Unit/AutoloaderTest.php
Pieter Hordijk f762db348d Add tests fixes
- 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.
2019-05-16 22:05:30 +02:00

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'],
];
}
}