JsAlterEventTest.php in Hook Event Dispatcher 8
File
tests/src/Unit/Theme/JsAlterEventTest.php
View source
<?php
namespace Drupal\Tests\hook_event_dispatcher\Unit\Theme;
use Drupal\Core\Asset\AttachedAssets;
use Drupal\Core\DependencyInjection\ContainerBuilder;
use Drupal\hook_event_dispatcher\Event\Theme\JsAlterEvent;
use Drupal\hook_event_dispatcher\HookEventDispatcherInterface;
use Drupal\Tests\hook_event_dispatcher\Unit\HookEventDispatcherManagerSpy;
use Drupal\Tests\UnitTestCase;
final class JsAlterEventTest extends UnitTestCase {
private $manager;
public function setUp() {
$builder = new ContainerBuilder();
$this->manager = new HookEventDispatcherManagerSpy();
$builder
->set('hook_event_dispatcher.manager', $this->manager);
$builder
->compile();
\Drupal::setContainer($builder);
}
public function testJsAlterEventByReference() {
$this->manager
->setEventCallbacks([
HookEventDispatcherInterface::JS_ALTER => function (JsAlterEvent $event) {
$javascript =& $event
->getJavascript();
unset($javascript['unset']);
},
]);
$javascript = $expectedJavascript = [
'unset' => [
'data',
],
'other' => [
'other_data',
],
];
unset($expectedJavascript['unset']);
$attachedAssets = new AttachedAssets();
hook_event_dispatcher_js_alter($javascript, $attachedAssets);
$event = $this->manager
->getRegisteredEvent(HookEventDispatcherInterface::JS_ALTER);
self::assertSame($expectedJavascript, $event
->getJavascript());
self::assertSame($attachedAssets, $event
->getAttachedAssets());
}
public function testJsAlterEventBySet() {
$newJavascript = [
'new' => [
'new-data',
],
];
$this->manager
->setEventCallbacks([
HookEventDispatcherInterface::JS_ALTER => function (JsAlterEvent $event) use ($newJavascript) {
$javascript = $event
->getJavascript();
$javascript += $newJavascript;
$event
->setJavascript($javascript);
},
]);
$javascript = $expectedJavascript = [
'some' => [
'data',
],
'other' => [
'other_data',
],
];
$expectedJavascript += $newJavascript;
$attachedAssets = new AttachedAssets();
hook_event_dispatcher_js_alter($javascript, $attachedAssets);
$event = $this->manager
->getRegisteredEvent(HookEventDispatcherInterface::JS_ALTER);
self::assertSame($expectedJavascript, $event
->getJavascript());
self::assertSame($attachedAssets, $event
->getAttachedAssets());
}
}