Skip to content

Commit

Permalink
Remove tokenizer config from the boot method
Browse files Browse the repository at this point in the history
  • Loading branch information
msmakouz committed Jul 21, 2023
1 parent 0e0c3d5 commit e2b36c7
Show file tree
Hide file tree
Showing 4 changed files with 55 additions and 30 deletions.
32 changes: 16 additions & 16 deletions src/Tokenizer/src/Bootloader/TokenizerListenerBootloader.php
Original file line number Diff line number Diff line change
Expand Up @@ -56,20 +56,11 @@ public function addListener(TokenizationListenerInterface $listener): void
$this->listeners[] = $listener;
}

public function boot(AbstractKernel $kernel, TokenizerConfig $config): void
public function boot(AbstractKernel $kernel): void
{
if ($config->isLoadClassesEnabled()) {
$kernel->booted($this->loadClasses(...));
}

if ($config->isLoadEnumsEnabled()) {
$kernel->booted($this->loadEnums(...));
}

if ($config->isLoadInterfacesEnabled()) {
$kernel->booted($this->loadInterfaces(...));
}

$kernel->booted($this->loadClasses(...));
$kernel->booted($this->loadEnums(...));
$kernel->booted($this->loadInterfaces(...));
$kernel->booted($this->finalizeListeners(...));
}

Expand Down Expand Up @@ -130,27 +121,36 @@ private function makeCachedLoader(
}

private function loadClasses(
TokenizerConfig $config,
ClassesInterface $classes,
ClassesLoaderInterface $loader,
ListenerInvoker $invoker,
): void {
$this->loadReflections($invoker, $classes->getClasses(...), $loader->loadClasses(...));
if ($config->isLoadClassesEnabled()) {
$this->loadReflections($invoker, $classes->getClasses(...), $loader->loadClasses(...));
}
}

private function loadEnums(
TokenizerConfig $config,
EnumsInterface $enums,
EnumsLoaderInterface $loader,
ListenerInvoker $invoker,
): void {
$this->loadReflections($invoker, $enums->getEnums(...), $loader->loadEnums(...));
if ($config->isLoadEnumsEnabled()) {
$this->loadReflections($invoker, $enums->getEnums(...), $loader->loadEnums(...));

Check warning on line 141 in src/Tokenizer/src/Bootloader/TokenizerListenerBootloader.php

View check run for this annotation

Codecov / codecov/patch

src/Tokenizer/src/Bootloader/TokenizerListenerBootloader.php#L141

Added line #L141 was not covered by tests
}
}

private function loadInterfaces(
TokenizerConfig $config,
InterfacesInterface $interfaces,
InterfacesLoaderInterface $loader,
ListenerInvoker $invoker,
): void {
$this->loadReflections($invoker, $interfaces->getInterfaces(...), $loader->loadInterfaces(...));
if ($config->isLoadInterfacesEnabled()) {
$this->loadReflections($invoker, $interfaces->getInterfaces(...), $loader->loadInterfaces(...));

Check warning on line 152 in src/Tokenizer/src/Bootloader/TokenizerListenerBootloader.php

View check run for this annotation

Codecov / codecov/patch

src/Tokenizer/src/Bootloader/TokenizerListenerBootloader.php#L152

Added line #L152 was not covered by tests
}
}

/**
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -275,7 +275,10 @@ public function testAddDirectoryInBootloaderInit(): void
$kernel = TestCoreWithTokenizer::create(directories: ['root' => __DIR__], container: $container);
$kernel->run();

$this->assertTrue(in_array('/foo', $container->get(TokenizerConfig::class)->getDirectories()));
$this->assertTrue(\in_array(
\dirname(__DIR__) . '/Fixtures/Bootloader',
$container->get(TokenizerConfig::class)->getDirectories()
));
}

public static function readCacheDataProvider(): \Traversable
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,6 @@ final class DirectoryBootloader extends Bootloader
{
public function init(TokenizerBootloader $tokenizer): void
{
$tokenizer->addDirectory('/foo');
$tokenizer->addDirectory(\dirname(__DIR__, 2) . '/Fixtures/Bootloader');
}
}
46 changes: 34 additions & 12 deletions src/Tokenizer/tests/Listener/ListenerInvokerTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,11 @@
use Spiral\Tokenizer\Bootloader\TokenizerListenerBootloader;
use Spiral\Tokenizer\ClassesInterface;
use Spiral\Tokenizer\Config\TokenizerConfig;
use Spiral\Tokenizer\EnumsInterface;
use Spiral\Tokenizer\InterfacesInterface;
use Spiral\Tokenizer\Listener\ClassesLoaderInterface;
use Spiral\Tokenizer\Listener\EnumsLoaderInterface;
use Spiral\Tokenizer\Listener\InterfacesLoaderInterface;
use Spiral\Tokenizer\Listener\ListenerInvoker;
use Spiral\Tests\Tokenizer\Classes\Targets;
use Spiral\Tests\Tokenizer\Fixtures\TestCore;
Expand Down Expand Up @@ -55,31 +59,49 @@ public function testInvokerViaKernel(): void
->once()
->andReturn([self::class => new \ReflectionClass($this)]);

$loader = \Mockery::mock(ClassesLoaderInterface::class);
$loader->shouldReceive('loadClasses')->once()->andReturnFalse();
$classesLoader = \Mockery::mock(ClassesLoaderInterface::class);
$classesLoader->shouldReceive('loadClasses')->once()->andReturnFalse();

$enums = \Mockery::mock(EnumsInterface::class);
$enums->shouldReceive('getEnums')->never();

$enumsLoader = \Mockery::mock(EnumsLoaderInterface::class);
$enumsLoader->shouldReceive('loadEnums')->never();

$interfaces = \Mockery::mock(InterfacesInterface::class);
$interfaces->shouldReceive('getInterfaces')->never();

$interfacesLoader = \Mockery::mock(InterfacesLoaderInterface::class);
$interfacesLoader->shouldReceive('loadInterfaces')->never();

$listener = \Mockery::mock(TokenizationListenerInterface::class);
$listener->shouldReceive('listen')->once();
$listener->shouldReceive('finalize')->once();

$container = new Container();
$container->bind(ClassesInterface::class, $classes);
$container->bind(ClassesLoaderInterface::class, $loader);

$kernel = TestCore::create(directories: ['root' => __DIR__], container: $container);

$bootloader = $container->get(TokenizerListenerBootloader::class);
$bootloader->addListener($listener);

$config = new TokenizerConfig([
$container->bind(ClassesLoaderInterface::class, $classesLoader);
$container->bind(EnumsInterface::class, $enums);
$container->bind(EnumsLoaderInterface::class, $enumsLoader);
$container->bind(InterfacesInterface::class, $interfaces);
$container->bind(InterfacesLoaderInterface::class, $interfacesLoader);
$container->bind(TokenizerConfig::class, new TokenizerConfig([
'load' => [
'classes' => true,
'enums' => false,
'interfaces' => false,
],
]);
]));

$kernel = TestCore::create(directories: ['root' => __DIR__], container: $container);

$container->invoke([$bootloader, 'boot'], compact('kernel', 'config'));
$bootloader = $container->get(TokenizerListenerBootloader::class);
$bootloader->addListener($listener);

$container->invoke(
[$bootloader, 'boot'],
['kernel' => $kernel, 'config' => $container->get(TokenizerConfig::class)]
);

$kernel->run();
}
Expand Down

0 comments on commit e2b36c7

Please sign in to comment.