From 2c712f2e9fac10d2fce553517eb636ba7e4e1ba2 Mon Sep 17 00:00:00 2001 From: Mitchell Macpherson Date: Mon, 16 Nov 2020 03:05:07 +1100 Subject: [PATCH 1/2] trial L5 compatibility --- .github/workflows/laravel-test.yaml | 5 +- composer.json | 6 +- phpunit.xml | 2 +- src/Binder/LogManagerBinder.php | 72 +++++ src/Binder/LogOutputBinder.php | 58 +--- src/Binder/LogWriterBinder.php | 61 ++++ .../Binder/LogOutputBindedInterface.php | 5 +- ...php => LoggerResolveListenerInterface.php} | 6 +- ...Listener.php => LoggerResolveListener.php} | 16 +- src/Providers/ConsoleLoggServiceProvider.php | 13 +- .../vendor/Illuminate/ApplicationFake.php | 263 +----------------- .../vendor/Illuminate/ApplicationFakeBase.php | 53 ++++ .../Illuminate/ApplicationSharedMethods.php | 226 +++++++++++++++ .../Spies/Binder/LogOutputBinderFake.php | 14 +- tests/Unit/Binder/LogOutputBinderTest.php | 30 +- ...Test.php => LoggerResolveListenerTest.php} | 35 ++- .../ConsoleLoggServiceProviderTest.php | 6 +- tests/bootstrap.php | 19 ++ 18 files changed, 531 insertions(+), 359 deletions(-) create mode 100644 src/Binder/LogManagerBinder.php create mode 100644 src/Binder/LogWriterBinder.php rename src/Interfaces/Listener/{LogManagerResolverListenerInterface.php => LoggerResolveListenerInterface.php} (58%) rename src/Listeners/{LogManagerResolverListener.php => LoggerResolveListener.php} (65%) create mode 100644 tests/Doubles/Fakes/vendor/Illuminate/ApplicationFakeBase.php create mode 100644 tests/Doubles/Fakes/vendor/Illuminate/ApplicationSharedMethods.php rename tests/Unit/Listeners/{LogManagerResolverListenerTest.php => LoggerResolveListenerTest.php} (76%) create mode 100644 tests/bootstrap.php diff --git a/.github/workflows/laravel-test.yaml b/.github/workflows/laravel-test.yaml index 1995681..1c0316d 100644 --- a/.github/workflows/laravel-test.yaml +++ b/.github/workflows/laravel-test.yaml @@ -13,8 +13,7 @@ jobs: fail-fast: false matrix: php: [ 7.2, 7.3, 7.4 ] - #laravel: [~5.6.0, ~5.7.0, ~5.8.0, ~5.9.0, ^6.0, ^7.0, ^8.0] - laravel: [ ^6.0, ^7.0, ^8.0 ] + laravel: [ ~5.5.0, ~5.6.0, ~5.7.0, ~5.8.0, ~5.9.0, ^6.0, ^7.0, ^8.0 ] exclude: - php: 7.2 laravel: ^8.0 @@ -40,7 +39,7 @@ jobs: cd console-logg-package composer install --no-plugins --no-scripts --no-interaction --no-progress --prefer-dist - - name: Setup Laravel application + - name: Setup Laravel ${{ matrix.laravel }} application run: | composer create-project --prefer-dist laravel/laravel:${{ matrix.laravel }} laravel-app cd laravel-app diff --git a/composer.json b/composer.json index 4289311..2333d4e 100644 --- a/composer.json +++ b/composer.json @@ -21,9 +21,9 @@ "license": "MIT", "require": { "php": "7.1.3 - 8.0", - "illuminate/log": ">=6.0", - "illuminate/console": ">=6.0", - "illuminate/support": ">=6.0" + "illuminate/log": "5.5.*", + "illuminate/console": "5.5.*", + "illuminate/support": "5.5.*" }, "extra": { "laravel": { diff --git a/phpunit.xml b/phpunit.xml index 34d814a..fbb439f 100644 --- a/phpunit.xml +++ b/phpunit.xml @@ -1,7 +1,7 @@ isFiltered = $config->get('console-logg.filtered') === true; + $this->consoleLoggerFactory = $consoleLoggerFactory; + } + + public function attach(CommandStarting $commandEvent, LoggerInterface $logger): void + { + if (($logger instanceof LogManager::class) === false) { + throw new \RuntimeException('No.'); + } + + $this->defaultDriver = $logManager->getDefaultDriver(); + $logManager->setDefaultDriver('console-logg'); + + $consoleLogger = $this->consoleLoggerFactory->create($commandEvent->output, $this->isFiltered); + + $logManager->extend( + 'console-logg', + function () use ($consoleLogger) { + return $consoleLogger; + } + ); + } + + public function detach(CommandFinished $commandFinished, LoggerInterface $logger): void + { + if (($logger instanceof LogManager::class) === false) { + throw new \RuntimeException('No.'); + } + + $logManager->forgetChannel('console-logg'); + $logManager->setDefaultDriver($this->defaultDriver); + } +} diff --git a/src/Binder/LogOutputBinder.php b/src/Binder/LogOutputBinder.php index 337dbe4..507804c 100644 --- a/src/Binder/LogOutputBinder.php +++ b/src/Binder/LogOutputBinder.php @@ -4,59 +4,13 @@ namespace DevThis\ConsoleLogg\Binder; -use DevThis\ConsoleLogg\Interfaces\Binder\LogOutputBindedInterface; -use DevThis\ConsoleLogg\Interfaces\Factories\FilterableConsoleLoggerFactoryInterface; -use Illuminate\Console\Events\CommandFinished; -use Illuminate\Console\Events\CommandStarting; -use Illuminate\Contracts\Config\Repository; use Illuminate\Log\LogManager; +use Illuminate\Log\Writer; -/** - * Responsible for binding a ConsoleLogger instance with the built-in Laravel Logger, and removing - * - * @todo nested artisan command call compatibility - */ -class LogOutputBinder implements LogOutputBindedInterface -{ - /** - * @var FilterableConsoleLoggerFactoryInterface - */ - private $consoleLoggerFactory; - - /** - * @var string|null - */ - private $defaultDriver = null; - - /** - * @var bool - */ - private $isFiltered; - - public function __construct(FilterableConsoleLoggerFactoryInterface $consoleLoggerFactory, Repository $config) - { - $this->isFiltered = $config->get('console-logg.filtered') === true; - $this->consoleLoggerFactory = $consoleLoggerFactory; - } - - public function attach(CommandStarting $commandEvent, LogManager $logManager): void - { - $this->defaultDriver = $logManager->getDefaultDriver(); - $logManager->setDefaultDriver('console-logg'); - - $consoleLogger = $this->consoleLoggerFactory->create($commandEvent->output, $this->isFiltered); - - $logManager->extend( - 'console-logg', - function () use ($consoleLogger) { - return $consoleLogger; - } - ); - } +if (class_exists(LogManager::class) === true) { + class_alias(LogManager::class, LogOutputBinder::class); +} - public function detach(CommandFinished $commandFinished, LogManager $logManager): void - { - $logManager->forgetChannel('console-logg'); - $logManager->setDefaultDriver($this->defaultDriver); - } +if (class_exists(Writer::class) === true) { + class_alias(LogWriterBinder::class, LogOutputBinder::class); } diff --git a/src/Binder/LogWriterBinder.php b/src/Binder/LogWriterBinder.php new file mode 100644 index 0000000..a47eb81 --- /dev/null +++ b/src/Binder/LogWriterBinder.php @@ -0,0 +1,61 @@ +isFiltered = $config->get('console-logg.filtered') === true; + $this->consoleLoggerFactory = $consoleLoggerFactory; + } + + public function attach(CommandStarting $commandEvent, LoggerInterface $logger): void + { + if (($logger instanceof Writer) === false) { + throw new \RuntimeException('No.'); + } + + $consoleLogger = $this->consoleLoggerFactory->create($commandEvent->output, $this->isFiltered); + $psrHandler = new PsrHandler($consoleLogger); + + if (in_array($psrHandler, $logger->getMonolog()->getHandlers(), true) === false) { + $logger->getMonolog()->pushHandler($psrHandler); + } + } + + public function detach(CommandFinished $commandFinished, LoggerInterface $logger): void + { + if (($logger instanceof Writer) === false) { + throw new \RuntimeException('No.'); + } + + $logger->getMonolog()->popHandler(); + } +} diff --git a/src/Interfaces/Binder/LogOutputBindedInterface.php b/src/Interfaces/Binder/LogOutputBindedInterface.php index 2ce5d56..8a96b4f 100644 --- a/src/Interfaces/Binder/LogOutputBindedInterface.php +++ b/src/Interfaces/Binder/LogOutputBindedInterface.php @@ -7,10 +7,11 @@ use Illuminate\Console\Events\CommandFinished; use Illuminate\Console\Events\CommandStarting; use Illuminate\Log\LogManager; +use Psr\Log\LoggerInterface; interface LogOutputBindedInterface { - public function attach(CommandStarting $commandEvent, LogManager $logManager): void; + public function attach(CommandStarting $commandEvent, LoggerInterface $logger): void; - public function detach(CommandFinished $commandFinished, LogManager $logManager): void; + public function detach(CommandFinished $commandFinished, LoggerInterface $logger): void; } diff --git a/src/Interfaces/Listener/LogManagerResolverListenerInterface.php b/src/Interfaces/Listener/LoggerResolveListenerInterface.php similarity index 58% rename from src/Interfaces/Listener/LogManagerResolverListenerInterface.php rename to src/Interfaces/Listener/LoggerResolveListenerInterface.php index baa82c6..f1e0062 100644 --- a/src/Interfaces/Listener/LogManagerResolverListenerInterface.php +++ b/src/Interfaces/Listener/LoggerResolveListenerInterface.php @@ -5,12 +5,12 @@ namespace DevThis\ConsoleLogg\Interfaces\Listener; use Illuminate\Contracts\Foundation\Application; -use Illuminate\Log\LogManager; +use Psr\Log\LoggerInterface; -interface LogManagerResolverListenerInterface +interface LoggerResolveListenerInterface { /** * Invoked by the resolution of LogManager with the Laravel container */ - public function handle(LogManager $logManager, Application $application): void; + public function handle(LoggerInterface $logger, Application $application): void; } diff --git a/src/Listeners/LogManagerResolverListener.php b/src/Listeners/LoggerResolveListener.php similarity index 65% rename from src/Listeners/LogManagerResolverListener.php rename to src/Listeners/LoggerResolveListener.php index 8e328a3..1e24105 100644 --- a/src/Listeners/LogManagerResolverListener.php +++ b/src/Listeners/LoggerResolveListener.php @@ -5,14 +5,14 @@ namespace DevThis\ConsoleLogg\Listeners; use DevThis\ConsoleLogg\Interfaces\Binder\LogOutputBindedInterface; -use DevThis\ConsoleLogg\Interfaces\Listener\LogManagerResolverListenerInterface; +use DevThis\ConsoleLogg\Interfaces\Listener\LoggerResolveListenerInterface; use Illuminate\Console\Events\CommandFinished; use Illuminate\Console\Events\CommandStarting; use Illuminate\Contracts\Events\Dispatcher as EventDispatcher; use Illuminate\Contracts\Foundation\Application; -use Illuminate\Log\LogManager; +use Psr\Log\LoggerInterface; -class LogManagerResolverListener implements LogManagerResolverListenerInterface +class LoggerResolveListener implements LoggerResolveListenerInterface { /** * @var \Illuminate\Contracts\Events\Dispatcher @@ -33,19 +33,19 @@ public function __construct(EventDispatcher $eventDispatcher, LogOutputBindedInt /** * @inheritDoc */ - public function handle(LogManager $logManager, Application $application): void + public function handle(LoggerInterface $logger, Application $application): void { $this->eventDispatcher->listen( CommandStarting::class, - function (CommandStarting $event) use ($logManager) { - $this->logOutputBinder->attach($event, $logManager); + function (CommandStarting $event) use ($logger) { + $this->logOutputBinder->attach($event, $logger); } ); $this->eventDispatcher->listen( CommandFinished::class, - function (CommandFinished $event) use ($logManager) { - $this->logOutputBinder->detach($event, $logManager); + function (CommandFinished $event) use ($logger) { + $this->logOutputBinder->detach($event, $logger); } ); } diff --git a/src/Providers/ConsoleLoggServiceProvider.php b/src/Providers/ConsoleLoggServiceProvider.php index 8d1260d..df3949d 100644 --- a/src/Providers/ConsoleLoggServiceProvider.php +++ b/src/Providers/ConsoleLoggServiceProvider.php @@ -9,9 +9,12 @@ use DevThis\ConsoleLogg\Factories\FilterableConsoleLoggerFactory; use DevThis\ConsoleLogg\Interfaces\Binder\LogOutputBindedInterface; use DevThis\ConsoleLogg\Interfaces\Factories\FilterableConsoleLoggerFactoryInterface; +use DevThis\ConsoleLogg\Interfaces\Listener\LoggerResolveListenerInterface; use DevThis\ConsoleLogg\Interfaces\Listener\LogManagerResolverListenerInterface; -use DevThis\ConsoleLogg\Listeners\LogManagerResolverListener; +use DevThis\ConsoleLogg\Listeners\LoggerResolveListener; +use DevThis\ConsoleLogg\Listeners\LogWriterResolverListener; use Illuminate\Log\LogManager; +use Illuminate\Log\Writer; use Illuminate\Support\ServiceProvider; class ConsoleLoggServiceProvider extends ServiceProvider @@ -45,17 +48,19 @@ public function register() } $this->app->singleton(LogOutputBindedInterface::class, LogOutputBinder::class); - $this->app->singleton(LogManagerResolverListenerInterface::class, LogManagerResolverListener::class); + $this->app->singleton(LoggerResolveListenerInterface::class, LoggerResolveListener::class); $this->app->singleton(FilterableConsoleLoggerFactoryInterface::class, FilterableConsoleLoggerFactory::class); // sorry for this hack :( $this->app['config']['logging.channels.console-logg'] = ['driver' => 'console-logg']; + $logger = (class_exists(LogManager::class) === true) ? LogManager::class : Writer::class; + $this->app->resolving( - LogManager::class, + $logger, Closure::fromCallable( [ - $this->app->make(LogManagerResolverListenerInterface::class), + $this->app->make(LoggerResolveListenerInterface::class), 'handle' ] ) diff --git a/tests/Doubles/Fakes/vendor/Illuminate/ApplicationFake.php b/tests/Doubles/Fakes/vendor/Illuminate/ApplicationFake.php index 014cbbb..0bdae3a 100644 --- a/tests/Doubles/Fakes/vendor/Illuminate/ApplicationFake.php +++ b/tests/Doubles/Fakes/vendor/Illuminate/ApplicationFake.php @@ -4,265 +4,20 @@ namespace Tests\Doubles\Fakes\vendor\Illuminate; -use ArrayObject; -use Closure; -use DevThis\ConsoleLogg\Interfaces\Listener\LogManagerResolverListenerInterface; -use DevThis\ConsoleLogg\Listeners\LogManagerResolverListener; -use Illuminate\Contracts\Foundation\Application; -use Tests\Doubles\Spies\Binder\LogOutputBinderFake; - -class ApplicationFake extends ArrayObject implements Application -{ - private $isConsole; - - private $registered = []; - - public function __construct(?array $array = null, ?bool $isConsole = null) - { - parent::__construct($array ?? []); - $this->isConsole = $isConsole ?? true; - } - - public function addContextualBinding($concrete, $abstract, $implementation) - { - } - - public function afterResolving($abstract, Closure $callback = null) - { - } - - public function alias($abstract, $alias) - { - } - - public function basePath($path = '') - { - } - - public function bind($abstract, $concrete = null, $shared = false) - { - } - - public function bindIf($abstract, $concrete = null, $shared = false) - { - } - - public function boot() - { - } - - public function booted($callback) - { - } - - public function booting($callback) - { - } - - public function bootstrapPath($path = '') - { - } - - public function bootstrapWith(array $bootstrappers) - { - } - - public function bound($abstract) - { - } - - public function call($callback, array $parameters = [], $defaultMethod = null) - { - } - - public function configPath($path = '') - { - return '%APP%/' . $path; - } - - public function configurationIsCached() - { - } - - public function databasePath($path = '') - { - } - - public function detectEnvironment(Closure $callback) - { - } - - public function environment(...$environments) - { - } - - public function environmentFile() - { - } - - public function environmentFilePath() - { - } - - public function environmentPath() - { - } - - public function extend($abstract, Closure $closure) - { - } - - public function factory($abstract) - { - } - - public function flush() - { - } - - public function get($id) - { - return $this->registered[$id] ?? $id; - } - - public function getCachedConfigPath() - { - } - - public function getCachedPackagesPath() - { - } - - public function getCachedRoutesPath() - { - } - - public function getCachedServicesPath() +if (getenv('L_VERSION') === '5x') { + class ApplicationFake extends ApplicationFakeBase { - } - - public function getLocale() - { - } - - public function getNamespace() - { - } - - public function getProviders($provider) - { - } - - public function has($id) - { - } - - public function hasBeenBootstrapped() - { - } - - public function instance($abstract, $instance) - { - } - - public function isDownForMaintenance() - { - } - - public function loadDeferredProviders() - { - } - - public function loadEnvironmentFrom($file) - { - } - - public function make($abstract, array $parameters = []) - { - if ($abstract === LogManagerResolverListenerInterface::class) { - return new LogManagerResolverListener(new EventDispatcherFake(), new LogOutputBinderFake()); + public function register($provider, $options = [], $force = false) + { } } - public function register($provider, $force = false) - { - } - - public function registerConfiguredProviders() - { - } - - public function registerDeferredProvider($provider, $service = null) - { - } - - public function resolveProvider($provider) - { - } - - public function resolved($abstract) - { - } - - public function resolving($abstract, Closure $callback = null) - { - } - - public function resourcePath($path = '') - { - } - - public function routesAreCached() - { - } - - public function runningInConsole() - { - return $this->isConsole; - } - - public function runningUnitTests() - { - } - - public function setLocale($locale) - { - } - - public function shouldSkipMiddleware() - { - } - - public function singleton($abstract, $concrete = null) - { - $this->registered[$abstract] = $concrete ?? $abstract; - } - - public function singletonIf($abstract, $concrete = null) - { - } - - public function storagePath() - { - } - - public function tag($abstracts, $tags) - { - } - - public function tagged($tag) - { - } - - public function terminate() - { - } - - public function version() - { - } + return; +} - public function when($concrete) +class ApplicationFake extends ApplicationFakeBase +{ + public function register($provider, $force = false) { } } diff --git a/tests/Doubles/Fakes/vendor/Illuminate/ApplicationFakeBase.php b/tests/Doubles/Fakes/vendor/Illuminate/ApplicationFakeBase.php new file mode 100644 index 0000000..9c39c42 --- /dev/null +++ b/tests/Doubles/Fakes/vendor/Illuminate/ApplicationFakeBase.php @@ -0,0 +1,53 @@ +isConsole = $isConsole ?? true; + } + + public function configPath($path = '') + { + return '%APP%/' . $path; + } + + public function get($id) + { + return $this->registered[$id] ?? $id; + } + + public function make($abstract, array $parameters = []) + { + if ($abstract === LogManagerResolverListenerInterface::class) { + return new LoggerResolveListener(new EventDispatcherFake(), new LogOutputBinderFake()); + } + } + + public function runningInConsole() + { + return $this->isConsole; + } + + public function singleton($abstract, $concrete = null) + { + $this->registered[$abstract] = $concrete ?? $abstract; + } +} diff --git a/tests/Doubles/Fakes/vendor/Illuminate/ApplicationSharedMethods.php b/tests/Doubles/Fakes/vendor/Illuminate/ApplicationSharedMethods.php new file mode 100644 index 0000000..745e6c5 --- /dev/null +++ b/tests/Doubles/Fakes/vendor/Illuminate/ApplicationSharedMethods.php @@ -0,0 +1,226 @@ +lastAttachEvent = $commandEvent; - $this->lastAttachLogManager = $logManager; + $this->lastAttachLogManager = $logger; } - public function detach(CommandFinished $commandFinished, LogManager $logManager): void + public function detach(CommandFinished $commandFinished, LoggerInterface $logger): void { $this->lastDetachEvent = $commandFinished; - $this->lastDetachLogManager = $logManager; + $this->lastDetachLogManager = $logger; } public function getLastAttachEvent(): ?CommandStarting @@ -36,7 +36,7 @@ public function getLastAttachEvent(): ?CommandStarting return $this->lastAttachEvent; } - public function getLastAttachLogManager(): ?LogManager + public function getLastAttachLogManager(): ?LoggerInterface { return $this->lastAttachLogManager; } @@ -46,7 +46,7 @@ public function getLastDetachEvent(): ?CommandFinished return $this->lastDetachEvent; } - public function getLastDetachLogManager(): ?LogManager + public function getLastDetachLogManager(): ?LoggerInterface { return $this->lastDetachLogManager; } diff --git a/tests/Unit/Binder/LogOutputBinderTest.php b/tests/Unit/Binder/LogOutputBinderTest.php index d37c71c..63c425d 100644 --- a/tests/Unit/Binder/LogOutputBinderTest.php +++ b/tests/Unit/Binder/LogOutputBinderTest.php @@ -23,22 +23,30 @@ class LogOutputBinderTest extends TestCase { public function testAttachSetsDefaultDriver(): void { + if (class_exists(LogManager::class) === false) { + self::markTestSkipped('Incompatible with current version of dependencies'); + } + $config = new RepositoryStub(); $filterableConsoleLoggerFactory = new FilterableConsoleLoggerFactorySpy(); $logOutputBinder = new LogOutputBinder($filterableConsoleLoggerFactory, $config); $stringInput = new StringInput('some:command'); $commandStarting = new CommandStarting('Some\Command', $stringInput, new NullOutput()); $app = new ApplicationFake(['config' => ['logging.default' => ['driver' => 'the-default']]]); - $logManager = new LogManager($app); + $logger = new LogManager($app); $expectation = 'console-logg'; - $logOutputBinder->attach($commandStarting, $logManager); + $logOutputBinder->attach($commandStarting, $logger); - self::assertSame($expectation, $logManager->getDefaultDriver()); + self::assertSame($expectation, $logger->getDefaultDriver()); } public function testAttachedConsoleLoggerRespectsFilteredOption(): void { + if (class_exists(LogManager::class) === false) { + self::markTestSkipped('Incompatible with current version of dependencies'); + } + $config = new RepositoryStub(); $filterableConsoleLoggerFactory = new FilterableConsoleLoggerFactorySpy(); $logOutputBinder = new LogOutputBinder($filterableConsoleLoggerFactory, $config); @@ -59,6 +67,10 @@ public function testAttachedConsoleLoggerRespectsFilteredOption(): void public function testDefaultDriverAfterDetachIsNotConsoleLogg(): void { + if (class_exists(LogManager::class) === false) { + self::markTestSkipped('Incompatible with current version of dependencies'); + } + $config = new RepositoryStub(); $filterableConsoleLoggerFactory = new FilterableConsoleLoggerFactorySpy(); $logOutputBinder = new LogOutputBinder($filterableConsoleLoggerFactory, $config); @@ -67,20 +79,20 @@ public function testDefaultDriverAfterDetachIsNotConsoleLogg(): void $commandFinished = new CommandFinished('Some\Command', $stringInput, new NullOutput(), 0); $defaultDriver = ['driver' => 'the-default']; $app = new ApplicationFake(['config' => ['logging.default' => $defaultDriver]]); - $logManager = new LogManager($app); + $logger = new LogManager($app); - $logOutputBinder->attach($commandStarting, $logManager); - $logOutputBinder->detach($commandFinished, $logManager); + $logOutputBinder->attach($commandStarting, $logger); + $logOutputBinder->detach($commandFinished, $logger); - self::assertSame($defaultDriver, $logManager->getDefaultDriver()); + self::assertSame($defaultDriver, $logger->getDefaultDriver()); } public function testDefaultDriverWithoutAttachIsNotConsoleLogg(): void { $app = new ApplicationFake(['config' => ['logging.default' => ['driver' => 'the-default']]]); - $logManager = new LogManager($app); + $logger = new LogManager($app); $expectation = 'console-logg'; - self::assertNotSame($expectation, $logManager->getDefaultDriver()); + self::assertNotSame($expectation, $logger->getDefaultDriver()); } } diff --git a/tests/Unit/Listeners/LogManagerResolverListenerTest.php b/tests/Unit/Listeners/LoggerResolveListenerTest.php similarity index 76% rename from tests/Unit/Listeners/LogManagerResolverListenerTest.php rename to tests/Unit/Listeners/LoggerResolveListenerTest.php index eee7dc2..80cb6db 100644 --- a/tests/Unit/Listeners/LogManagerResolverListenerTest.php +++ b/tests/Unit/Listeners/LoggerResolveListenerTest.php @@ -5,11 +5,14 @@ namespace Tests\Unit\Listeners; use DevThis\ConsoleLogg\Binder\LogOutputBinder; -use DevThis\ConsoleLogg\Listeners\LogManagerResolverListener; +use DevThis\ConsoleLogg\Listeners\LoggerResolveListener; use Illuminate\Console\Events\CommandFinished; use Illuminate\Console\Events\CommandStarting; use Illuminate\Log\LogManager; +use Illuminate\Log\Writer; +use Monolog\Logger; use PHPUnit\Framework\TestCase; +use Psr\Log\LoggerInterface; use Symfony\Component\Console\Input\StringInput; use Symfony\Component\Console\Output\NullOutput; use Tests\Doubles\Fakes\vendor\Illuminate\ApplicationFake; @@ -20,9 +23,9 @@ use Tests\Doubles\Stubs\vendor\Illuminate\RepositoryStub; /** - * @covers \DevThis\ConsoleLogg\Listeners\LogManagerResolverListener + * @covers \DevThis\ConsoleLogg\Listeners\LoggerResolveListener */ -class LogManagerResolverListenerTest extends TestCase +class LoggerResolveListenerTest extends TestCase { public function getInputsForEventDispatchListeningTo(): iterable { @@ -30,6 +33,17 @@ public function getInputsForEventDispatchListeningTo(): iterable yield 'CommandFinished' => [CommandFinished::class]; } + public function getInputsForEventListeners(): iterable + { + if (class_exists(LogManager::class) === true) { + yield 'log manager' => ['logger' => new LogManager(new ApplicationFake())]; + } + + if (class_exists(Writer::class) === true) { + yield 'log writer' => ['logger' => new Writer(new Logger('logger'), new EventDispatcherFake())]; + } + } + /** * Slightly weak test * Testing the spy doesn't prove with certainty @@ -42,7 +56,7 @@ public function testEventDispatcherListensTo(string $eventClass): void $filterableConsoleFactory = new FilterableConsoleLoggerFactorySpy(); $config = new RepositoryStub(); $logOutputBinder = new LogOutputBinder($filterableConsoleFactory, $config); - $logManagerResolverListener = new LogManagerResolverListener($eventDispatcher, $logOutputBinder); + $logManagerResolverListener = new LoggerResolveListener($eventDispatcher, $logOutputBinder); $expectedListenersBefore = false; $expectedListenersAfter = true; $listenersBefore = $eventDispatcher->hasListeners($eventClass); @@ -65,7 +79,7 @@ public function testEventListenerAttachesLogManager(): void { $eventDispatcher = new EventDispatcherFake(); $logOutputBinder = new LogOutputBinderFake(); - $logManagerResolverListener = new LogManagerResolverListener($eventDispatcher, $logOutputBinder); + $logManagerResolverListener = new LoggerResolveListener($eventDispatcher, $logOutputBinder); $app = new ApplicationFake(); $logManager = new LogManager($app); $logManagerResolverListener->handle($logManager, $app); @@ -84,22 +98,23 @@ public function testEventListenerAttachesLogManager(): void /** * Ensures the 'detach' is called on the LogOutputBinder, and the rightful event is passed through * + * @dataProvider getInputsForEventListeners + * * @todo stub Input/Output interfaces & CommandFinished */ - public function testEventListenerDetachesLogManager(): void + public function testEventListenerDetachesLogManager(LoggerInterface $logger): void { $eventDispatcher = new EventDispatcherFake(); $logOutputBinder = new LogOutputBinderFake(); - $logManagerResolverListener = new LogManagerResolverListener($eventDispatcher, $logOutputBinder); + $logManagerResolverListener = new LoggerResolveListener($eventDispatcher, $logOutputBinder); $app = new ApplicationFake(); - $logManager = new LogManager($app); - $logManagerResolverListener->handle($logManager, $app); + $logManagerResolverListener->handle($logger, $app); $event = new CommandFinished('some:command', new StringInput(''), new NullOutput(), 1); $actualBeforeEvent = $logOutputBinder->getLastDetachEvent(); $expectedBeforeEvent = null; $expectedAfterEvent = $event; $closure = $eventDispatcher->getListener(CommandFinished::class); - $closure($event, new LogManagerStub()); + $closure($event, $logger); self::assertSame($expectedAfterEvent, $logOutputBinder->getLastDetachEvent()); self::assertSame($expectedBeforeEvent, $actualBeforeEvent); diff --git a/tests/Unit/Providers/ConsoleLoggServiceProviderTest.php b/tests/Unit/Providers/ConsoleLoggServiceProviderTest.php index 6af50c3..5ebe9f4 100644 --- a/tests/Unit/Providers/ConsoleLoggServiceProviderTest.php +++ b/tests/Unit/Providers/ConsoleLoggServiceProviderTest.php @@ -9,7 +9,7 @@ use DevThis\ConsoleLogg\Interfaces\Binder\LogOutputBindedInterface; use DevThis\ConsoleLogg\Interfaces\Factories\FilterableConsoleLoggerFactoryInterface; use DevThis\ConsoleLogg\Interfaces\Listener\LogManagerResolverListenerInterface; -use DevThis\ConsoleLogg\Listeners\LogManagerResolverListener; +use DevThis\ConsoleLogg\Listeners\LoggerResolveListener; use DevThis\ConsoleLogg\Providers\ConsoleLoggServiceProvider; use PHPUnit\Framework\TestCase; use ReflectionClass; @@ -56,7 +56,7 @@ public function testRegisterBindings(): void $serviceProvider->register(); self::assertSame(LogOutputBinder::class, $app->get(LogOutputBindedInterface::class)); - self::assertSame(LogManagerResolverListener::class, $app->get(LogManagerResolverListenerInterface::class)); + self::assertSame(LoggerResolveListener::class, $app->get(LogManagerResolverListenerInterface::class)); self::assertSame( FilterableConsoleLoggerFactory::class, $app->get(FilterableConsoleLoggerFactoryInterface::class) @@ -71,7 +71,7 @@ public function testRegisterDoesNothingForNonConsole(): void $serviceProvider->register(); self::assertNotSame(LogOutputBinder::class, $app->get(LogOutputBindedInterface::class)); - self::assertNotSame(LogManagerResolverListener::class, $app->get(LogManagerResolverListenerInterface::class)); + self::assertNotSame(LoggerResolveListener::class, $app->get(LogManagerResolverListenerInterface::class)); self::assertNotSame( FilterableConsoleLoggerFactory::class, $app->get(FilterableConsoleLoggerFactoryInterface::class) diff --git a/tests/bootstrap.php b/tests/bootstrap.php new file mode 100644 index 0000000..073ed30 --- /dev/null +++ b/tests/bootstrap.php @@ -0,0 +1,19 @@ +getMethod('register')->getParameters()) === 3) { + // 5.* + putenv('L_VERSION=5x'); + + return; +} + +putenv('L_VERSION=>6x'); From 3cdf63968dab5b815f3db51aa8d4678e000ad1ce Mon Sep 17 00:00:00 2001 From: Mitchell Macpherson Date: Mon, 16 Nov 2020 03:05:43 +1100 Subject: [PATCH 2/2] Enable workflow --- .github/workflows/laravel-test.yaml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/laravel-test.yaml b/.github/workflows/laravel-test.yaml index 1c0316d..50142d0 100644 --- a/.github/workflows/laravel-test.yaml +++ b/.github/workflows/laravel-test.yaml @@ -2,9 +2,9 @@ name: Laravel IRL tests on: push: - branches: [ master ] + branches: [ laravel-5-compat ] pull_request: - branches: [ master ] + branches: [ laravel-5-compat ] jobs: laravel-tests: pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy