Chris@0: alter(). Chris@0: * Chris@0: * @group Common Chris@0: */ Chris@0: class AlterTest extends WebTestBase { Chris@0: Chris@0: /** Chris@0: * Modules to enable. Chris@0: * Chris@0: * @var array Chris@0: */ Chris@0: public static $modules = ['block', 'common_test']; Chris@0: Chris@0: /** Chris@0: * Tests if the theme has been altered. Chris@0: */ Chris@0: public function testDrupalAlter() { Chris@0: // This test depends on Bartik, so make sure that it is always the current Chris@0: // active theme. Chris@0: \Drupal::service('theme_handler')->install(['bartik']); Chris@0: \Drupal::theme()->setActiveTheme(\Drupal::service('theme.initialization')->initTheme('bartik')); Chris@0: Chris@0: $array = ['foo' => 'bar']; Chris@0: $entity = new \stdClass(); Chris@0: $entity->foo = 'bar'; Chris@0: Chris@0: // Verify alteration of a single argument. Chris@0: $array_copy = $array; Chris@0: $array_expected = ['foo' => 'Drupal theme']; Chris@0: \Drupal::moduleHandler()->alter('drupal_alter', $array_copy); Chris@0: \Drupal::theme()->alter('drupal_alter', $array_copy); Chris@0: $this->assertEqual($array_copy, $array_expected, 'Single array was altered.'); Chris@0: Chris@0: $entity_copy = clone $entity; Chris@0: $entity_expected = clone $entity; Chris@0: $entity_expected->foo = 'Drupal theme'; Chris@0: \Drupal::moduleHandler()->alter('drupal_alter', $entity_copy); Chris@0: \Drupal::theme()->alter('drupal_alter', $entity_copy); Chris@0: $this->assertEqual($entity_copy, $entity_expected, 'Single object was altered.'); Chris@0: Chris@0: // Verify alteration of multiple arguments. Chris@0: $array_copy = $array; Chris@0: $array_expected = ['foo' => 'Drupal theme']; Chris@0: $entity_copy = clone $entity; Chris@0: $entity_expected = clone $entity; Chris@0: $entity_expected->foo = 'Drupal theme'; Chris@0: $array2_copy = $array; Chris@0: $array2_expected = ['foo' => 'Drupal theme']; Chris@0: \Drupal::moduleHandler()->alter('drupal_alter', $array_copy, $entity_copy, $array2_copy); Chris@0: \Drupal::theme()->alter('drupal_alter', $array_copy, $entity_copy, $array2_copy); Chris@0: $this->assertEqual($array_copy, $array_expected, 'First argument to \Drupal::moduleHandler->alter() was altered.'); Chris@0: $this->assertEqual($entity_copy, $entity_expected, 'Second argument to \Drupal::moduleHandler->alter() was altered.'); Chris@0: $this->assertEqual($array2_copy, $array2_expected, 'Third argument to \Drupal::moduleHandler->alter() was altered.'); Chris@0: Chris@0: // Verify alteration order when passing an array of types to \Drupal::moduleHandler->alter(). Chris@0: // common_test_module_implements_alter() places 'block' implementation after Chris@0: // other modules. Chris@0: $array_copy = $array; Chris@0: $array_expected = ['foo' => 'Drupal block theme']; Chris@0: \Drupal::moduleHandler()->alter(['drupal_alter', 'drupal_alter_foo'], $array_copy); Chris@0: \Drupal::theme()->alter(['drupal_alter', 'drupal_alter_foo'], $array_copy); Chris@0: $this->assertEqual($array_copy, $array_expected, 'hook_TYPE_alter() implementations ran in correct order.'); Chris@0: } Chris@0: Chris@0: }