Updated Drupal to 8.6. This goes with the following updates because it's possible...
[yaffs-website] / web / core / modules / system / tests / src / Functional / Common / AlterTest.php
diff --git a/web/core/modules/system/tests/src/Functional/Common/AlterTest.php b/web/core/modules/system/tests/src/Functional/Common/AlterTest.php
new file mode 100644 (file)
index 0000000..e529e9d
--- /dev/null
@@ -0,0 +1,72 @@
+<?php
+
+namespace Drupal\Tests\system\Functional\Common;
+
+use Drupal\Tests\BrowserTestBase;
+
+/**
+ * Tests alteration of arguments passed to \Drupal::moduleHandler->alter().
+ *
+ * @group Common
+ */
+class AlterTest extends BrowserTestBase {
+
+  /**
+   * Modules to enable.
+   *
+   * @var array
+   */
+  public static $modules = ['block', 'common_test'];
+
+  /**
+   * Tests if the theme has been altered.
+   */
+  public function testDrupalAlter() {
+    // This test depends on Bartik, so make sure that it is always the current
+    // active theme.
+    \Drupal::service('theme_handler')->install(['bartik']);
+    \Drupal::theme()->setActiveTheme(\Drupal::service('theme.initialization')->initTheme('bartik'));
+
+    $array = ['foo' => 'bar'];
+    $entity = new \stdClass();
+    $entity->foo = 'bar';
+
+    // Verify alteration of a single argument.
+    $array_copy = $array;
+    $array_expected = ['foo' => 'Drupal theme'];
+    \Drupal::moduleHandler()->alter('drupal_alter', $array_copy);
+    \Drupal::theme()->alter('drupal_alter', $array_copy);
+    $this->assertEqual($array_copy, $array_expected, 'Single array was altered.');
+
+    $entity_copy = clone $entity;
+    $entity_expected = clone $entity;
+    $entity_expected->foo = 'Drupal theme';
+    \Drupal::moduleHandler()->alter('drupal_alter', $entity_copy);
+    \Drupal::theme()->alter('drupal_alter', $entity_copy);
+    $this->assertEqual($entity_copy, $entity_expected, 'Single object was altered.');
+
+    // Verify alteration of multiple arguments.
+    $array_copy = $array;
+    $array_expected = ['foo' => 'Drupal theme'];
+    $entity_copy = clone $entity;
+    $entity_expected = clone $entity;
+    $entity_expected->foo = 'Drupal theme';
+    $array2_copy = $array;
+    $array2_expected = ['foo' => 'Drupal theme'];
+    \Drupal::moduleHandler()->alter('drupal_alter', $array_copy, $entity_copy, $array2_copy);
+    \Drupal::theme()->alter('drupal_alter', $array_copy, $entity_copy, $array2_copy);
+    $this->assertEqual($array_copy, $array_expected, 'First argument to \Drupal::moduleHandler->alter() was altered.');
+    $this->assertEqual($entity_copy, $entity_expected, 'Second argument to \Drupal::moduleHandler->alter() was altered.');
+    $this->assertEqual($array2_copy, $array2_expected, 'Third argument to \Drupal::moduleHandler->alter() was altered.');
+
+    // Verify alteration order when passing an array of types to \Drupal::moduleHandler->alter().
+    // common_test_module_implements_alter() places 'block' implementation after
+    // other modules.
+    $array_copy = $array;
+    $array_expected = ['foo' => 'Drupal block theme'];
+    \Drupal::moduleHandler()->alter(['drupal_alter', 'drupal_alter_foo'], $array_copy);
+    \Drupal::theme()->alter(['drupal_alter', 'drupal_alter_foo'], $array_copy);
+    $this->assertEqual($array_copy, $array_expected, 'hook_TYPE_alter() implementations ran in correct order.');
+  }
+
+}