class TestSubscriber
Defines an event subscriber for testing validation of Package Manager events.
Hierarchy
- class \Drupal\package_manager_test_validation\EventSubscriber\TestSubscriber implements \Symfony\Component\EventDispatcher\EventSubscriberInterface
Expanded class hierarchy of TestSubscriber
2 files declare their use of TestSubscriber
- StageBaseTest.php in core/
modules/ package_manager/ tests/ src/ Kernel/ StageBaseTest.php - StageOwnershipTest.php in core/
modules/ package_manager/ tests/ src/ Kernel/ StageOwnershipTest.php
1 string reference to 'TestSubscriber'
- package_manager_test_validation.services.yml in core/
modules/ package_manager/ tests/ modules/ package_manager_test_validation/ package_manager_test_validation.services.yml - core/modules/package_manager/tests/modules/package_manager_test_validation/package_manager_test_validation.services.yml
1 service uses TestSubscriber
- package_manager_test_validation.subscriber in core/
modules/ package_manager/ tests/ modules/ package_manager_test_validation/ package_manager_test_validation.services.yml - Drupal\package_manager_test_validation\EventSubscriber\TestSubscriber
File
-
core/
modules/ package_manager/ tests/ modules/ package_manager_test_validation/ src/ EventSubscriber/ TestSubscriber.php, line 21
Namespace
Drupal\package_manager_test_validation\EventSubscriberView source
class TestSubscriber implements EventSubscriberInterface {
/**
* The key to use store the test results.
*
* @var string
*/
protected const STATE_KEY = 'package_manager_test_validation';
/**
* The state service.
*
* @var \Drupal\Core\State\StateInterface
*/
protected $state;
/**
* Creates a TestSubscriber object.
*
* @param \Drupal\Core\State\StateInterface $state
* The state service.
*/
public function __construct(StateInterface $state) {
$this->state = $state;
}
/**
* Sets whether a specific event will call exit().
*
* This is useful for simulating an unrecoverable (fatal) error when handling
* the given event.
*
* @param string $event
* The event class.
*/
public static function setExit(string $event) : void {
\Drupal::state()->set(self::getStateKey($event), 'exit');
}
/**
* Sets validation results for a specific event.
*
* This method is static to enable setting the expected results before this
* module is enabled.
*
* @param \Drupal\package_manager\ValidationResult[]|null $results
* The validation results, or NULL to delete stored results.
* @param string $event
* The event class.
*/
public static function setTestResult(?array $results, string $event) : void {
$key = static::getStateKey($event);
$state = \Drupal::state();
if (isset($results)) {
$state->set($key, $results);
}
else {
$state->delete($key);
}
}
/**
* Sets an exception to throw for a specific event.
*
* This method is static to enable setting the expected results before this
* module is enabled.
*
* @param \Throwable|null $error
* The exception to throw, or NULL to delete a stored exception.
* @param string $event
* The event class.
*/
public static function setException(?\Throwable $error, string $event) : void {
$key = self::getStateKey($event);
$state = \Drupal::state();
if (isset($error)) {
$state->set($key, $error);
}
else {
$state->delete($key);
}
}
/**
* Computes the state key to use for a given event class.
*
* @param string $event
* The event class.
*
* @return string
* The state key under which to store the results for the given event.
*/
protected static function getStateKey(string $event) : string {
$key = hash('sha256', static::class . $event);
return static::STATE_KEY . substr($key, 0, 8);
}
/**
* Adds validation results to a stage event.
*
* @param \Drupal\package_manager\Event\StageEvent $event
* The event object.
*/
public function handleEvent(StageEvent $event) : void {
$results = $this->state
->get(self::getStateKey(get_class($event)), []);
// Record that value of maintenance mode for each event.
$this->state
->set(get_class($event) . '.' . 'system.maintenance_mode', $this->state
->get('system.maintenance_mode'));
if ($results instanceof \Throwable) {
throw $results;
}
elseif ($results === 'exit') {
exit;
}
elseif (is_string($results)) {
\Drupal::messenger()->addStatus($results);
return;
}
/** @var \Drupal\package_manager\ValidationResult $result */
foreach ($results as $result) {
$event->addResult($result);
}
}
/**
* {@inheritdoc}
*/
public static function getSubscribedEvents() : array {
return [
PreCreateEvent::class => [
'handleEvent',
5,
],
PostCreateEvent::class => [
'handleEvent',
5,
],
PreRequireEvent::class => [
'handleEvent',
5,
],
PostRequireEvent::class => [
'handleEvent',
5,
],
PreApplyEvent::class => [
'handleEvent',
5,
],
PostApplyEvent::class => [
'handleEvent',
5,
],
StatusCheckEvent::class => [
'handleEvent',
5,
],
];
}
/**
* Sets a status message that will be sent to the messenger for an event.
*
* @param string $message
* Message text.
* @param string $event
* The event class.
*/
public static function setMessage(string $message, string $event) : void {
$key = static::getStateKey($event);
$state = \Drupal::state();
$state->set($key, $message);
}
}
Members
Title Sort descending | Modifiers | Object type | Summary |
---|---|---|---|
TestSubscriber::$state | protected | property | The state service. |
TestSubscriber::getStateKey | protected static | function | Computes the state key to use for a given event class. |
TestSubscriber::getSubscribedEvents | public static | function | |
TestSubscriber::handleEvent | public | function | Adds validation results to a stage event. |
TestSubscriber::setException | public static | function | Sets an exception to throw for a specific event. |
TestSubscriber::setExit | public static | function | Sets whether a specific event will call exit(). |
TestSubscriber::setMessage | public static | function | Sets a status message that will be sent to the messenger for an event. |
TestSubscriber::setTestResult | public static | function | Sets validation results for a specific event. |
TestSubscriber::STATE_KEY | protected | constant | The key to use store the test results. |
TestSubscriber::__construct | public | function | Creates a TestSubscriber object. |
Buggy or inaccurate documentation? Please file an issue. Need support? Need help programming? Connect with the Drupal community.