diff --git a/composer.json b/composer.json
index b5126d0e57f95ae73e1150baf66132dd7d50f7ac..9eb93908d9bccef3cb73524114c0eaa21a3a8b97 100644
--- a/composer.json
+++ b/composer.json
@@ -105,7 +105,7 @@
         "drupal/config_update": "1.5",
         "drupal/console": "1.8",
         "drupal/content_access": "1.0-alpha1",
-        "drupal/core-recommended": "8.9.1",
+        "drupal/core-recommended": "8.9.2",
         "drupal/crop": "2.1",
         "drupal/ctools": "3.4",
         "drupal/devel": "2.0",
diff --git a/composer.lock b/composer.lock
index f236c210129e68b2d4a2a38a66033362972d9ff0..bb1795ffaf14a32c1cf701093b7f6b1a18501e27 100644
--- a/composer.lock
+++ b/composer.lock
@@ -4,7 +4,7 @@
         "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies",
         "This file is @generated automatically"
     ],
-    "content-hash": "b2b8534ed98ce807918cdc6dee798bb7",
+    "content-hash": "f874d24e642a536123508670c7dba794",
     "packages": [
         {
             "name": "alchemy/zippy",
@@ -3382,16 +3382,16 @@
         },
         {
             "name": "drupal/core",
-            "version": "8.9.1",
+            "version": "8.9.2",
             "source": {
                 "type": "git",
                 "url": "https://github.com/drupal/core.git",
-                "reference": "e8ee964c562870381876e85d3f5eaaf8c8ecc9ee"
+                "reference": "8f0e24555c093669ce41edbb30637fe19df16802"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/drupal/core/zipball/e8ee964c562870381876e85d3f5eaaf8c8ecc9ee",
-                "reference": "e8ee964c562870381876e85d3f5eaaf8c8ecc9ee",
+                "url": "https://api.github.com/repos/drupal/core/zipball/8f0e24555c093669ce41edbb30637fe19df16802",
+                "reference": "8f0e24555c093669ce41edbb30637fe19df16802",
                 "shasum": ""
             },
             "require": {
@@ -3614,20 +3614,20 @@
                 "GPL-2.0-or-later"
             ],
             "description": "Drupal is an open source content management platform powering millions of websites and applications.",
-            "time": "2020-06-17T17:57:48+00:00"
+            "time": "2020-07-08T18:53:45+00:00"
         },
         {
             "name": "drupal/core-recommended",
-            "version": "8.9.1",
+            "version": "8.9.2",
             "source": {
                 "type": "git",
                 "url": "https://github.com/drupal/core-recommended.git",
-                "reference": "41042f9eaa35b027e6b2c42fa03edcb85da54a06"
+                "reference": "8301ff766f17ce8a9eb36d3ffd183cbfff01dad6"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/drupal/core-recommended/zipball/41042f9eaa35b027e6b2c42fa03edcb85da54a06",
-                "reference": "41042f9eaa35b027e6b2c42fa03edcb85da54a06",
+                "url": "https://api.github.com/repos/drupal/core-recommended/zipball/8301ff766f17ce8a9eb36d3ffd183cbfff01dad6",
+                "reference": "8301ff766f17ce8a9eb36d3ffd183cbfff01dad6",
                 "shasum": ""
             },
             "require": {
@@ -3639,7 +3639,7 @@
                 "doctrine/common": "v2.7.3",
                 "doctrine/inflector": "v1.2.0",
                 "doctrine/lexer": "1.0.2",
-                "drupal/core": "8.9.1",
+                "drupal/core": "8.9.2",
                 "easyrdf/easyrdf": "0.9.1",
                 "egulias/email-validator": "2.1.17",
                 "guzzlehttp/guzzle": "6.5.4",
@@ -3696,7 +3696,7 @@
                 "GPL-2.0-or-later"
             ],
             "description": "Locked core dependencies; require this project INSTEAD OF drupal/core.",
-            "time": "2020-06-17T17:57:48+00:00"
+            "time": "2020-07-08T18:53:45+00:00"
         },
         {
             "name": "drupal/crop",
diff --git a/vendor/composer/installed.json b/vendor/composer/installed.json
index b7ea18a483aab5cc3a0d0752cbf33d861ffc4151..382bb89cf654742a65b030edc9a6ecce7d8ada65 100644
--- a/vendor/composer/installed.json
+++ b/vendor/composer/installed.json
@@ -3491,17 +3491,17 @@
     },
     {
         "name": "drupal/core",
-        "version": "8.9.1",
-        "version_normalized": "8.9.1.0",
+        "version": "8.9.2",
+        "version_normalized": "8.9.2.0",
         "source": {
             "type": "git",
             "url": "https://github.com/drupal/core.git",
-            "reference": "e8ee964c562870381876e85d3f5eaaf8c8ecc9ee"
+            "reference": "8f0e24555c093669ce41edbb30637fe19df16802"
         },
         "dist": {
             "type": "zip",
-            "url": "https://api.github.com/repos/drupal/core/zipball/e8ee964c562870381876e85d3f5eaaf8c8ecc9ee",
-            "reference": "e8ee964c562870381876e85d3f5eaaf8c8ecc9ee",
+            "url": "https://api.github.com/repos/drupal/core/zipball/8f0e24555c093669ce41edbb30637fe19df16802",
+            "reference": "8f0e24555c093669ce41edbb30637fe19df16802",
             "shasum": ""
         },
         "require": {
@@ -3668,7 +3668,7 @@
             "drupal/workflows": "self.version",
             "drupal/workspaces": "self.version"
         },
-        "time": "2020-06-17T17:57:48+00:00",
+        "time": "2020-07-08T18:53:45+00:00",
         "type": "drupal-core",
         "extra": {
             "drupal-scaffold": {
@@ -3729,17 +3729,17 @@
     },
     {
         "name": "drupal/core-recommended",
-        "version": "8.9.1",
-        "version_normalized": "8.9.1.0",
+        "version": "8.9.2",
+        "version_normalized": "8.9.2.0",
         "source": {
             "type": "git",
             "url": "https://github.com/drupal/core-recommended.git",
-            "reference": "41042f9eaa35b027e6b2c42fa03edcb85da54a06"
+            "reference": "8301ff766f17ce8a9eb36d3ffd183cbfff01dad6"
         },
         "dist": {
             "type": "zip",
-            "url": "https://api.github.com/repos/drupal/core-recommended/zipball/41042f9eaa35b027e6b2c42fa03edcb85da54a06",
-            "reference": "41042f9eaa35b027e6b2c42fa03edcb85da54a06",
+            "url": "https://api.github.com/repos/drupal/core-recommended/zipball/8301ff766f17ce8a9eb36d3ffd183cbfff01dad6",
+            "reference": "8301ff766f17ce8a9eb36d3ffd183cbfff01dad6",
             "shasum": ""
         },
         "require": {
@@ -3751,7 +3751,7 @@
             "doctrine/common": "v2.7.3",
             "doctrine/inflector": "v1.2.0",
             "doctrine/lexer": "1.0.2",
-            "drupal/core": "8.9.1",
+            "drupal/core": "8.9.2",
             "easyrdf/easyrdf": "0.9.1",
             "egulias/email-validator": "2.1.17",
             "guzzlehttp/guzzle": "6.5.4",
@@ -3802,7 +3802,7 @@
         "conflict": {
             "webflo/drupal-core-strict": "*"
         },
-        "time": "2020-06-17T17:57:48+00:00",
+        "time": "2020-07-08T18:53:45+00:00",
         "type": "metapackage",
         "notification-url": "https://packagist.org/downloads/",
         "license": [
diff --git a/web/core/CHANGELOG.txt b/web/core/CHANGELOG.txt
index 49587bc7aaf6e36e9586035dae2a04069f3129dc..3b99f6bd5d8c8ed890cea59f048813c495a951aa 100644
--- a/web/core/CHANGELOG.txt
+++ b/web/core/CHANGELOG.txt
@@ -3,6 +3,6 @@ patch (bugfix) releases are released every month. More information on the
 Drupal release cycle: https://www.drupal.org/core/release-cycle-overview
 
 * For a full list of fixes in the latest release, visit:
- https://www.drupal.org/8/download
+ https://www.drupal.org/latest-release
 * API change records for Drupal core:
  https://www.drupal.org/list-changes/drupal
diff --git a/web/core/INSTALL.sqlite.txt b/web/core/INSTALL.sqlite.txt
index e22aaa89c3cc2d7d639bcfc5f24469e7432783dc..96092c3760cbabcaf0be2ab2d73c88899cf02d19 100644
--- a/web/core/INSTALL.sqlite.txt
+++ b/web/core/INSTALL.sqlite.txt
@@ -20,13 +20,13 @@ SQLITE DATABASE CREATION
 The Drupal installer will create the SQLite database for you. The only
 requirement is that the installer must have write permissions to the directory
 where the database file resides. This directory (not just the database file) also
-has to remain writeable by the web server going forward for SQLite to continue to
+has to remain writable by the web server going forward for SQLite to continue to
 be able to operate.
 
 On the "Database configuration" form in the "Database file" field, you must
 supply the exact path to where you wish your database file to reside. It is
 strongly suggested that you choose a path that is outside of the webroot, yet
-ensure that the directory is writeable by the web server.
+ensure that the directory is writable by the web server.
 
 If you must place your database file in your webroot, you could try using the
 following in your "Database file" field:
diff --git a/web/core/INSTALL.txt b/web/core/INSTALL.txt
index 5dbc9e0233080f57d2a218fbb82b6837efbb3348..fcfa09d150b5b6f3fc2a4d4b87ed05414c32d2ea 100644
--- a/web/core/INSTALL.txt
+++ b/web/core/INSTALL.txt
@@ -190,7 +190,7 @@ INSTALLATION
         chmod a+w sites/default/files
 
       Be sure to set the permissions for the default directory back after the
-      installation is finished! (Leave the files directory writeable.)
+      installation is finished! (Leave the files directory writable.)
       Sample command:
 
         chmod go-w sites/default
diff --git a/web/core/includes/file.inc b/web/core/includes/file.inc
index 859ed8d0f0983f82576ea46ab9a9c1f942512457..c9eec6c9d81931531183b23fb8997d17e6112c19 100644
--- a/web/core/includes/file.inc
+++ b/web/core/includes/file.inc
@@ -683,7 +683,7 @@ function file_munge_filename($filename, $extensions, $alerts = TRUE) {
     // http://php.net/manual/security.filesystem.nullbytes.php
     $filename = str_replace(chr(0), '', $filename);
 
-    $whitelist = array_unique(explode(' ', strtolower(trim($extensions))));
+    $allowed_extensions = array_unique(explode(' ', strtolower(trim($extensions))));
 
     // Split the filename up by periods. The first part becomes the basename
     // the last part the final extension.
@@ -698,7 +698,7 @@ function file_munge_filename($filename, $extensions, $alerts = TRUE) {
     // of allowed extensions.
     foreach ($filename_parts as $filename_part) {
       $new_filename .= '.' . $filename_part;
-      if (!in_array(strtolower($filename_part), $whitelist) && preg_match("/^[a-zA-Z]{2,5}\d?$/", $filename_part)) {
+      if (!in_array(strtolower($filename_part), $allowed_extensions) && preg_match("/^[a-zA-Z]{2,5}\d?$/", $filename_part)) {
         $new_filename .= '_';
       }
     }
diff --git a/web/core/includes/install.core.inc b/web/core/includes/install.core.inc
index b4ec568004686d279e2f66430722a2331bfa9237..85981876da8540cf5f9d3245190020f69e82e26e 100644
--- a/web/core/includes/install.core.inc
+++ b/web/core/includes/install.core.inc
@@ -1023,7 +1023,7 @@ function install_display_output($output, $install_state) {
   // Prevent install.php from being indexed when installed in a sub folder.
   // robots.txt rules are not read if the site is within domain.com/subfolder
   // resulting in /subfolder/install.php being found through search engines.
-  // When settings.php is writeable this can be used via an external database
+  // When settings.php is writable this can be used via an external database
   // leading a malicious user to gain php access to the server.
   $noindex_meta_tag = [
     '#tag' => 'meta',
diff --git a/web/core/includes/install.inc b/web/core/includes/install.inc
index ce0f94fc58b229775bdbeff227493049dc51443c..987186f5617caccae4cc631dc0bb1335f3f7802d 100644
--- a/web/core/includes/install.inc
+++ b/web/core/includes/install.inc
@@ -478,6 +478,7 @@ function _drupal_rewrite_settings_global(&$ref, $variable) {
  *   The container for variable values.
  * @param string $variable_name
  *   Name of variable.
+ *
  * @return string
  *   A string containing valid PHP code of the variable suitable for placing
  *   into settings.php.
@@ -508,6 +509,7 @@ function _drupal_rewrite_settings_dump($variable, $variable_name) {
  *   A string to prepend to the variable's value.
  * @param string $suffix
  *   A string to append to the variable's value.
+ *
  * @return string
  *   A string containing valid PHP code of the variable suitable for placing
  *   into settings.php.
diff --git a/web/core/lib/Drupal.php b/web/core/lib/Drupal.php
index e1c6c00e345e2c8b5580e6b69427190f96e5a024..b51f24019b8d1f570e9c7ce2cee98f2a3aec5413 100644
--- a/web/core/lib/Drupal.php
+++ b/web/core/lib/Drupal.php
@@ -82,7 +82,7 @@ class Drupal {
   /**
    * The current system version.
    */
-  const VERSION = '8.9.1';
+  const VERSION = '8.9.2';
 
   /**
    * Core API compatibility.
diff --git a/web/core/lib/Drupal/Component/Annotation/Plugin.php b/web/core/lib/Drupal/Component/Annotation/Plugin.php
index 790440d1129287dcdcdd1f615bd874f93dedb480..504ff401d1aa7653db23ddc7d65e4ca495ac2d1c 100644
--- a/web/core/lib/Drupal/Component/Annotation/Plugin.php
+++ b/web/core/lib/Drupal/Component/Annotation/Plugin.php
@@ -39,7 +39,7 @@ public function __construct($values) {
       return $value !== NULL;
     });
     $parsed_values = $this->parse($values);
-    $this->definition = NestedArray::mergeDeep($defaults, $parsed_values);
+    $this->definition = NestedArray::mergeDeepArray([$defaults, $parsed_values], TRUE);
   }
 
   /**
diff --git a/web/core/lib/Drupal/Component/FileSecurity/FileSecurity.php b/web/core/lib/Drupal/Component/FileSecurity/FileSecurity.php
index d9996bbbca211b07097950278216cf508e714b7c..1b90afd8ddae92b772963b6920a3299dff68a33e 100644
--- a/web/core/lib/Drupal/Component/FileSecurity/FileSecurity.php
+++ b/web/core/lib/Drupal/Component/FileSecurity/FileSecurity.php
@@ -26,7 +26,7 @@ class FileSecurity {
    *   TRUE if the file already exists or was created. FALSE otherwise.
    */
   public static function writeHtaccess($directory, $deny_public_access = TRUE, $force = FALSE) {
-    return self::writeFile($directory, '/.htaccess', self::htaccessLines($deny_public_access), $force);
+    return self::writeFile($directory, '.htaccess', self::htaccessLines($deny_public_access), $force);
   }
 
   /**
@@ -110,7 +110,7 @@ protected static function denyPublicAccess() {
    *   TRUE if the file already exists or was created. FALSE otherwise.
    */
   public static function writeWebConfig($directory, $force = FALSE) {
-    return self::writeFile($directory, '/web.config', self::webConfigLines(), $force);
+    return self::writeFile($directory, 'web.config', self::webConfigLines(), $force);
   }
 
   /**
@@ -152,7 +152,12 @@ protected static function writeFile($directory, $filename, $contents, $force) {
     if (file_exists($file_path) && !$force) {
       return TRUE;
     }
-    if (file_exists($directory) && is_writable($directory) && file_put_contents($file_path, $contents)) {
+    // Writing the file can fail if:
+    // - concurrent requests are both trying to write at the same time.
+    // - $directory does not exist or is not writable.
+    // Testing for these conditions introduces windows for concurrency issues to
+    // occur.
+    if (@file_put_contents($file_path, $contents)) {
       return @chmod($file_path, 0444);
     }
     return FALSE;
diff --git a/web/core/lib/Drupal/Component/PhpStorage/MTimeProtectedFastFileStorage.php b/web/core/lib/Drupal/Component/PhpStorage/MTimeProtectedFastFileStorage.php
index c7e6febe9d52046edb2e9980cf56f8687adc1a6b..ff1949418f8f85c1c3fc0170e113a89e21e8bcd7 100644
--- a/web/core/lib/Drupal/Component/PhpStorage/MTimeProtectedFastFileStorage.php
+++ b/web/core/lib/Drupal/Component/PhpStorage/MTimeProtectedFastFileStorage.php
@@ -222,6 +222,7 @@ protected function getUncachedMTime($directory) {
    *   The directory where the temporary filename will be created.
    * @param $prefix
    *   The prefix of the generated temporary filename.
+   *
    * @return string
    *   Returns the new temporary filename (with path), or FALSE on failure.
    */
diff --git a/web/core/lib/Drupal/Component/PhpStorage/PhpStorageInterface.php b/web/core/lib/Drupal/Component/PhpStorage/PhpStorageInterface.php
index fb9194c98a1c5ecc0412bd08cfa00ec0ef098603..7a370d252acecbaf01b944fcbc15eaa1581bdb5c 100644
--- a/web/core/lib/Drupal/Component/PhpStorage/PhpStorageInterface.php
+++ b/web/core/lib/Drupal/Component/PhpStorage/PhpStorageInterface.php
@@ -52,7 +52,7 @@ public function load($name);
   public function save($name, $code);
 
   /**
-   * Whether this is a writeable storage.
+   * Whether this is a writable storage.
    *
    * @return bool
    */
diff --git a/web/core/lib/Drupal/Component/Plugin/Derivative/DeriverInterface.php b/web/core/lib/Drupal/Component/Plugin/Derivative/DeriverInterface.php
index 1932983e2d07d3b7e8367203d5f5a92b2febef81..32b59ef7484f48a943a7f153bf179f8680f859bc 100644
--- a/web/core/lib/Drupal/Component/Plugin/Derivative/DeriverInterface.php
+++ b/web/core/lib/Drupal/Component/Plugin/Derivative/DeriverInterface.php
@@ -32,6 +32,7 @@ public function getDerivativeDefinition($derivative_id, $base_plugin_definition)
    *
    * @param array $base_plugin_definition
    *   The definition array of the base plugin.
+   *
    * @return array
    *   An array of full derivative definitions keyed on derivative id.
    *
diff --git a/web/core/lib/Drupal/Component/Utility/Random.php b/web/core/lib/Drupal/Component/Utility/Random.php
index 57287f9d5fe93e05686146c826bf2c7657acf449..6c2f9056e590e0d9accb56756fb897cd7a2e22d2 100644
--- a/web/core/lib/Drupal/Component/Utility/Random.php
+++ b/web/core/lib/Drupal/Component/Utility/Random.php
@@ -249,6 +249,7 @@ public function sentences($min_word_count, $capitalize = FALSE) {
    * Generate paragraphs separated by double new line.
    *
    * @param int $paragraph_count
+   *
    * @return string
    */
   public function paragraphs($paragraph_count = 12) {
diff --git a/web/core/lib/Drupal/Component/Utility/Xss.php b/web/core/lib/Drupal/Component/Utility/Xss.php
index f5e99fe88606da252ae9514594ef99bda16f72d3..4bb8bbd16fa77befcc076331210a4b0c384da442 100644
--- a/web/core/lib/Drupal/Component/Utility/Xss.php
+++ b/web/core/lib/Drupal/Component/Utility/Xss.php
@@ -70,7 +70,7 @@ public static function filter($string, array $html_tags = NULL) {
 
     // Defuse all HTML entities.
     $string = str_replace('&', '&', $string);
-    // Change back only well-formed entities in our whitelist:
+    // Change back only well-formed entities in our list of allowed html tags:
     // Decimal numeric entities.
     $string = preg_replace('/&#([0-9]+;)/', '&#\1', $string);
     // Hexadecimal numeric entities.
@@ -83,7 +83,7 @@ public static function filter($string, array $html_tags = NULL) {
     $splitter = function ($matches) use ($html_tags, $class) {
       return $class::split($matches[1], $html_tags, $class);
     };
-    // Strip any tags that are not in the whitelist.
+    // Strip any tags that are not in the list of allowed html tags.
     return preg_replace_callback('%
       (
       <(?=[^a-zA-Z!/])  # a lone <
@@ -161,7 +161,9 @@ protected static function split($string, $html_tags, $class) {
       $elem = '!--';
     }
 
-    // When in whitelist mode, an element is disallowed when not listed.
+    // Defer to the ::needsRemoval() method to decide if the element is to be
+    // removed. This allows the list of tags to be treated as either a list of
+    // allowed tags or a list of denied tags.
     if ($class::needsRemoval($html_tags, $elem)) {
       return '';
     }
diff --git a/web/core/lib/Drupal/Core/Asset/AssetResolver.php b/web/core/lib/Drupal/Core/Asset/AssetResolver.php
index c0b0f26fa75e22c0d84a2317535c1263fdc758f9..c52ee7ffad55953aa356ad6cb45b490bef0bf683 100644
--- a/web/core/lib/Drupal/Core/Asset/AssetResolver.php
+++ b/web/core/lib/Drupal/Core/Asset/AssetResolver.php
@@ -188,6 +188,7 @@ public function getCssAssets(AttachedAssetsInterface $assets, $optimize) {
    *
    * @param \Drupal\Core\Asset\AttachedAssetsInterface $assets
    *   The assets attached to the current response.
+   *
    * @return array
    *   A (possibly optimized) collection of JavaScript assets.
    */
diff --git a/web/core/lib/Drupal/Core/Batch/BatchBuilder.php b/web/core/lib/Drupal/Core/Batch/BatchBuilder.php
index dce669874d83594ac07f012277ede6bc93a021ff..91550e716c4ef9100837b50baa95f423bca52aa9 100644
--- a/web/core/lib/Drupal/Core/Batch/BatchBuilder.php
+++ b/web/core/lib/Drupal/Core/Batch/BatchBuilder.php
@@ -205,12 +205,18 @@ public function setErrorMessage($message) {
    * The path should be relative to base_path(), and thus should be built using
    * drupal_get_path(). Defaults to {module_name}.module.
    *
+   * The file needs to be set before using ::addOperation(),
+   * ::setFinishCallback(), or any other function that uses callbacks from the
+   * file. This is so that PHP knows about the included functions.
+   *
    * @param string $filename
    *   The path to the file.
    *
    * @return $this
    */
   public function setFile($filename) {
+    include_once $filename;
+
     $this->file = $filename;
     return $this;
   }
diff --git a/web/core/lib/Drupal/Core/Command/DbCommandBase.php b/web/core/lib/Drupal/Core/Command/DbCommandBase.php
index ec3b1889cccc35b2c0a5894a9079e5a59da8fedd..d5a80e08d21a7ff2a9dbf22e86bfb8a4325d5117 100644
--- a/web/core/lib/Drupal/Core/Command/DbCommandBase.php
+++ b/web/core/lib/Drupal/Core/Command/DbCommandBase.php
@@ -26,6 +26,7 @@ protected function configure() {
    *
    * @param \Symfony\Component\Console\Input\InputInterface $input
    *   Input object.
+   *
    * @return \Drupal\Core\Database\Connection
    */
   protected function getDatabaseConnection(InputInterface $input) {
diff --git a/web/core/lib/Drupal/Core/Command/DbDumpCommand.php b/web/core/lib/Drupal/Core/Command/DbDumpCommand.php
index bd6ca624ce3c3986e1b2c60be137ac93f08fe2dc..d112da5ede690665b232a1710d21c682e97fd4bd 100644
--- a/web/core/lib/Drupal/Core/Command/DbDumpCommand.php
+++ b/web/core/lib/Drupal/Core/Command/DbDumpCommand.php
@@ -70,6 +70,7 @@ protected function execute(InputInterface $input, OutputInterface $output) {
    *   The database connection to use.
    * @param array $schema_only
    *   Table patterns for which to only dump the schema, no data.
+   *
    * @return string
    *   The PHP script.
    */
@@ -105,6 +106,7 @@ protected function generateScript(Connection $connection, array $schema_only = [
    *
    * @param \Drupal\Core\Database\Connection $connection
    *   The database connection to use.
+   *
    * @return array
    *   An array of table names.
    */
diff --git a/web/core/lib/Drupal/Core/Config/TypedConfigManager.php b/web/core/lib/Drupal/Core/Config/TypedConfigManager.php
index c6ddfb5e9c467e9f3f98dd8a0d54e486ac561ab3..8585f8399e71f9c20991bed88e7bc90e5b3bad01 100644
--- a/web/core/lib/Drupal/Core/Config/TypedConfigManager.php
+++ b/web/core/lib/Drupal/Core/Config/TypedConfigManager.php
@@ -269,6 +269,7 @@ protected function getFallbackName($name) {
    *   Configuration name with variables in square brackets.
    * @param mixed $data
    *   Configuration data for the element.
+   *
    * @return string
    *   Configuration name with variables replaced.
    */
diff --git a/web/core/lib/Drupal/Core/Database/Connection.php b/web/core/lib/Drupal/Core/Database/Connection.php
index dc96435f7ef841b2e52eb4b21446a9d8fe567bc6..00e6d6c9d0261e280597427aaf850fce06081d4c 100644
--- a/web/core/lib/Drupal/Core/Database/Connection.php
+++ b/web/core/lib/Drupal/Core/Database/Connection.php
@@ -778,6 +778,7 @@ protected function expandArguments(&$query, &$args) {
    *
    * @param string $class
    *   The class for which we want the potentially driver-specific class.
+   *
    * @return string
    *   The name of the class that should be used for this driver.
    */
diff --git a/web/core/lib/Drupal/Core/Database/Driver/mysql/Schema.php b/web/core/lib/Drupal/Core/Database/Driver/mysql/Schema.php
index ed0f9c8ffc324138f500606e795656789fbfd7ad..5ef4d70ea69c046f456a589d29206f89cd3be7eb 100644
--- a/web/core/lib/Drupal/Core/Database/Driver/mysql/Schema.php
+++ b/web/core/lib/Drupal/Core/Database/Driver/mysql/Schema.php
@@ -87,6 +87,7 @@ protected function buildTableNameCondition($table_name, $operator = '=', $add_pr
    *   The name of the table to create.
    * @param $table
    *   A Schema API table definition array.
+   *
    * @return
    *   An array of SQL statements to create the table.
    */
diff --git a/web/core/lib/Drupal/Core/Database/Driver/pgsql/Connection.php b/web/core/lib/Drupal/Core/Database/Driver/pgsql/Connection.php
index 025b25039d9721da789748490cdca19d64d4fb87..14286c76eb3928aa59f903fe27aa53b84382d5c3 100644
--- a/web/core/lib/Drupal/Core/Database/Driver/pgsql/Connection.php
+++ b/web/core/lib/Drupal/Core/Database/Driver/pgsql/Connection.php
@@ -281,6 +281,7 @@ public function escapeTable($table) {
    *
    * @param $string
    *   The string to escape.
+   *
    * @return string
    *   The escaped string.
    */
diff --git a/web/core/lib/Drupal/Core/Database/Driver/pgsql/Schema.php b/web/core/lib/Drupal/Core/Database/Driver/pgsql/Schema.php
index cf1a3108c2e33369a7058db6f81321af6c95c8d0..14d8afe2f6a243129d8d0181ebd47ddb6e1be5cb 100644
--- a/web/core/lib/Drupal/Core/Database/Driver/pgsql/Schema.php
+++ b/web/core/lib/Drupal/Core/Database/Driver/pgsql/Schema.php
@@ -99,6 +99,7 @@ protected function ensureIdentifiersLength($table_identifier_part, $column_ident
    *
    * @param $table_name
    *   The non-prefixed name of the table.
+   *
    * @return
    *   An object with two member variables:
    *     - 'blob_fields' that lists all the blob fields in the table.
@@ -264,6 +265,7 @@ public function queryFieldInformation($table, $field, $constraint_type = 'c') {
    *   The name of the table to create.
    * @param $table
    *   A Schema API table definition array.
+   *
    * @return
    *   An array of SQL statements to create the table.
    */
@@ -1074,6 +1076,7 @@ public function getComment($table, $column = NULL) {
    *
    * @param $data
    *   String to be hashed.
+   *
    * @return string
    *   A base-64 encoded sha-256 hash, with + and / replaced with _ and any =
    *   padding characters removed.
diff --git a/web/core/lib/Drupal/Core/Database/Driver/sqlite/Schema.php b/web/core/lib/Drupal/Core/Database/Driver/sqlite/Schema.php
index 41106995f386e08616b58c32b66a94da4a7ba57a..ea3be4a9c6f01cf1c1ba851633158dcd0fe22ee0 100644
--- a/web/core/lib/Drupal/Core/Database/Driver/sqlite/Schema.php
+++ b/web/core/lib/Drupal/Core/Database/Driver/sqlite/Schema.php
@@ -48,6 +48,7 @@ public function fieldExists($table, $column) {
    *   The name of the table to create.
    * @param $table
    *   A Schema API table definition array.
+   *
    * @return
    *   An array of SQL statements to create the table.
    */
diff --git a/web/core/lib/Drupal/Core/Database/Log.php b/web/core/lib/Drupal/Core/Database/Log.php
index 74e08e7ca3715728432e64eb5faf28dea5459e60..6cf8d2071890b0849e59cfd16df138ef339cc30e 100644
--- a/web/core/lib/Drupal/Core/Database/Log.php
+++ b/web/core/lib/Drupal/Core/Database/Log.php
@@ -69,6 +69,7 @@ public function start($logging_key) {
    *
    * @param $logging_key
    *   The logging key to fetch.
+   *
    * @return
    *   An indexed array of all query records for this logging key.
    */
diff --git a/web/core/lib/Drupal/Core/Database/Query/SelectInterface.php b/web/core/lib/Drupal/Core/Database/Query/SelectInterface.php
index 710877239af8937a13599335cdaf58bd40593601..b2f2456616b23e11e7b29ac05cb9df0cd596075a 100644
--- a/web/core/lib/Drupal/Core/Database/Query/SelectInterface.php
+++ b/web/core/lib/Drupal/Core/Database/Query/SelectInterface.php
@@ -169,6 +169,7 @@ public function getArguments(PlaceholderInterface $queryPlaceholder = NULL);
    *
    * @param $distinct
    *   TRUE to flag this query DISTINCT, FALSE to disable it.
+   *
    * @return $this
    *   The called object.
    */
@@ -188,6 +189,7 @@ public function distinct($distinct = TRUE);
    *   automatically based on the $table_alias and $field. The alias will be
    *   checked for uniqueness, so the requested alias may not be the alias
    *   that is assigned in all cases.
+   *
    * @return
    *   The unique alias that was assigned for this field.
    */
@@ -211,6 +213,7 @@ public function addField($table_alias, $field, $alias = NULL);
    *   An indexed array of fields present in the specified table that should be
    *   included in this query. If not specified, $table_alias.* will be generated
    *   without any aliases.
+   *
    * @return $this
    *   The called object.
    */
@@ -232,6 +235,7 @@ public function fields($table_alias, array $fields = []);
    *   in all cases.
    * @param $arguments
    *   Any placeholder arguments needed for this expression.
+   *
    * @return
    *   The unique alias that was assigned for this expression.
    */
@@ -260,6 +264,7 @@ public function addExpression($expression, $alias = NULL, $arguments = []);
    *   system, for example, when joining the same table more than once.
    * @param $arguments
    *   An array of arguments to replace into the $condition of this join.
+   *
    * @return
    *   The unique alias that was assigned for this table.
    */
@@ -286,6 +291,7 @@ public function join($table, $alias = NULL, $condition = NULL, $arguments = []);
    *   system, for example, when joining the same table more than once.
    * @param $arguments
    *   An array of arguments to replace into the $condition of this join.
+   *
    * @return
    *   The unique alias that was assigned for this table.
    */
@@ -312,6 +318,7 @@ public function innerJoin($table, $alias = NULL, $condition = NULL, $arguments =
    *   system, for example, when joining the same table more than once.
    * @param $arguments
    *   An array of arguments to replace into the $condition of this join.
+   *
    * @return
    *   The unique alias that was assigned for this table.
    */
@@ -338,6 +345,7 @@ public function leftJoin($table, $alias = NULL, $condition = NULL, $arguments =
    *   system, for example, when joining the same table more than once.
    * @param $arguments
    *   An array of arguments to replace into the $condition of this join.
+   *
    * @return
    *   The unique alias that was assigned for this table.
    *
@@ -379,6 +387,7 @@ public function rightJoin($table, $alias = NULL, $condition = NULL, $arguments =
    *   system, for example, when joining the same table more than once.
    * @param $arguments
    *   An array of arguments to replace into the $condition of this join.
+   *
    * @return
    *   The unique alias that was assigned for this table.
    */
@@ -411,6 +420,7 @@ public function addJoin($type, $table, $alias = NULL, $condition = NULL, $argume
    * @param $direction
    *   The direction to sort. Legal values are "ASC" and "DESC". Any other value
    *   will be converted to "ASC".
+   *
    * @return $this
    *   The called object.
    */
@@ -449,6 +459,7 @@ public function orderRandom();
    *   range directives that are set.
    * @param $length
    *   The number of records to return from the result set.
+   *
    * @return $this
    *   The called object.
    */
@@ -474,6 +485,7 @@ public function range($start = NULL, $length = NULL);
    * @param $type
    *   The type of UNION to add to the query. Defaults to plain
    *   UNION.
+   *
    * @return $this
    *   The called object.
    */
@@ -484,6 +496,7 @@ public function union(SelectInterface $query, $type = '');
    *
    * @param $field
    *   The field on which to group. This should be the field as aliased.
+   *
    * @return $this
    *   The called object.
    */
@@ -539,6 +552,7 @@ public function execute();
    *   The comparison operator, such as =, <, or >=. It also accepts more complex
    *   options such as IN, LIKE, or BETWEEN. Defaults to IN if $value is an array
    *   = otherwise.
+   *
    * @return \Drupal\Core\Database\Query\ConditionInterface
    *   The called object.
    */
diff --git a/web/core/lib/Drupal/Core/Database/StatementPrefetch.php b/web/core/lib/Drupal/Core/Database/StatementPrefetch.php
index 90beeae143a773140cdc0a860c7a6e55e89c7395..da0fea5b68c49d4090457f30f5a89f4be3875fcb 100644
--- a/web/core/lib/Drupal/Core/Database/StatementPrefetch.php
+++ b/web/core/lib/Drupal/Core/Database/StatementPrefetch.php
@@ -216,6 +216,7 @@ protected function throwPDOException() {
    *   The query.
    * @param array|null $args
    *   An array of arguments. This can be NULL.
+   *
    * @return \PDOStatement
    *   A PDOStatement object.
    */
diff --git a/web/core/lib/Drupal/Core/Entity/EntityDisplayBase.php b/web/core/lib/Drupal/Core/Entity/EntityDisplayBase.php
index 3df078a06bfa0bec46f260c93ba164352f5949b9..48663594ceefe1e0fb45810d4b45d55ebda6352c 100644
--- a/web/core/lib/Drupal/Core/Entity/EntityDisplayBase.php
+++ b/web/core/lib/Drupal/Core/Entity/EntityDisplayBase.php
@@ -452,6 +452,7 @@ protected function getFieldDefinitions() {
    *
    * @param \Drupal\Core\Field\FieldDefinitionInterface $definition
    *   A field definition.
+   *
    * @return array|null
    */
   private function fieldHasDisplayOptions(FieldDefinitionInterface $definition) {
diff --git a/web/core/lib/Drupal/Core/Entity/Query/ConditionAggregateInterface.php b/web/core/lib/Drupal/Core/Entity/Query/ConditionAggregateInterface.php
index c7480ed913ccab5eaa01c058b4c2d08f5065621d..1926cf630526dda5325d8b1b00fe7b01eb5e732a 100644
--- a/web/core/lib/Drupal/Core/Entity/Query/ConditionAggregateInterface.php
+++ b/web/core/lib/Drupal/Core/Entity/Query/ConditionAggregateInterface.php
@@ -35,6 +35,7 @@ public function condition($field, $function = NULL, $value = NULL, $operator = N
    *
    * @param $field
    * @param string $langcode
+   *
    * @return ConditionInterface
    * @see \Drupal\Core\Entity\Query\QueryInterface::exists()
    */
@@ -44,6 +45,7 @@ public function exists($field, $function, $langcode = NULL);
    * Queries for the nonexistence of a field.
    *
    * @param string $field
+   *
    * @return ConditionInterface
    * @see \Drupal\Core\Entity\Query\QueryInterface::notExists()
    */
diff --git a/web/core/lib/Drupal/Core/Entity/Query/QueryInterface.php b/web/core/lib/Drupal/Core/Entity/Query/QueryInterface.php
index 1d5ed5dbe7a624743b8f6bc1da922ce3c5a1348b..48052e47191c3c7c58128654ca0936407d8c07b4 100644
--- a/web/core/lib/Drupal/Core/Entity/Query/QueryInterface.php
+++ b/web/core/lib/Drupal/Core/Entity/Query/QueryInterface.php
@@ -107,6 +107,7 @@ public function condition($field, $value = NULL, $operator = NULL, $langcode = N
    *   Name of a field.
    * @param $langcode
    *   Language code (optional).
+   *
    * @return $this
    */
   public function exists($field, $langcode = NULL);
@@ -118,6 +119,7 @@ public function exists($field, $langcode = NULL);
    *   Name of a field.
    * @param $langcode
    *   Language code (optional).
+   *
    * @return $this
    */
   public function notExists($field, $langcode = NULL);
diff --git a/web/core/lib/Drupal/Core/Entity/Query/Sql/QueryAggregate.php b/web/core/lib/Drupal/Core/Entity/Query/Sql/QueryAggregate.php
index 3e263d83815997ee806ab79f4c1d3b64a2abfe86..0f7ae5b217bc3879ea72287e64d676c175381d67 100644
--- a/web/core/lib/Drupal/Core/Entity/Query/Sql/QueryAggregate.php
+++ b/web/core/lib/Drupal/Core/Entity/Query/Sql/QueryAggregate.php
@@ -144,6 +144,7 @@ protected function finish() {
    *   The field as passed in by the caller.
    * @param string $sql_field
    *   The sql field as returned by getSqlField.
+   *
    * @return string
    *   The SQL alias expected in the return value. The dots in $sql_field are
    *   replaced with underscores and if a default fallback to .value happened,
diff --git a/web/core/lib/Drupal/Core/Entity/Query/Sql/Tables.php b/web/core/lib/Drupal/Core/Entity/Query/Sql/Tables.php
index dd23ab652ae1fdad14fd127ae6a9287ff90de945..ac6a3795c1212ab5f9ddc2afcf33ddddbf959744 100644
--- a/web/core/lib/Drupal/Core/Entity/Query/Sql/Tables.php
+++ b/web/core/lib/Drupal/Core/Entity/Query/Sql/Tables.php
@@ -373,7 +373,9 @@ protected function ensureEntityTable($index_prefix, $property, $type, $langcode,
    *
    * @param $field_name
    *   Name of the field.
+   *
    * @return string
+   *
    * @throws \Drupal\Core\Entity\Query\QueryException
    */
   protected function ensureFieldTable($index_prefix, &$field, $type, $langcode, $base_table, $entity_id_field, $field_id_field, $delta) {
diff --git a/web/core/lib/Drupal/Core/Extension/ModuleInstaller.php b/web/core/lib/Drupal/Core/Extension/ModuleInstaller.php
index 09f8434370edec2dc5113da26df7b07b2087bc30..3540a42ef0d0ce39c01098a151e9f79be8f4fb69 100644
--- a/web/core/lib/Drupal/Core/Extension/ModuleInstaller.php
+++ b/web/core/lib/Drupal/Core/Extension/ModuleInstaller.php
@@ -193,14 +193,9 @@ public function install(array $module_list, $enable_dependencies = TRUE) {
           }
         }
 
-        // Update the module handler in order to load the module's code.
-        // This allows the module to participate in hooks and its existence to
-        // be discovered by other modules.
-        // The current ModuleHandler instance is obsolete with the kernel
-        // rebuild below.
+        // Update the module handler in order to have the correct module list
+        // for the kernel update.
         $this->moduleHandler->setModuleList($module_filenames);
-        $this->moduleHandler->load($module);
-        module_load_install($module);
 
         // Clear the static cache of the "extension.list.module" service to pick
         // up the new module, since it merges the installation status of modules
@@ -210,6 +205,10 @@ public function install(array $module_list, $enable_dependencies = TRUE) {
         // Update the kernel to include it.
         $this->updateKernel($module_filenames);
 
+        // Load the module's .module and .install files.
+        $this->moduleHandler->load($module);
+        module_load_install($module);
+
         // Replace the route provider service with a version that will rebuild
         // if routes used during installation. This ensures that a module's
         // routes are available during installation. This has to occur before
diff --git a/web/core/lib/Drupal/Core/Field/FieldConfigBase.php b/web/core/lib/Drupal/Core/Field/FieldConfigBase.php
index 8f041ad0250f768c6ac3ca7af1a35a9b981fca6e..922eba4f25d9ccc7cc8919b56d0f5edde48ed0e7 100644
--- a/web/core/lib/Drupal/Core/Field/FieldConfigBase.php
+++ b/web/core/lib/Drupal/Core/Field/FieldConfigBase.php
@@ -125,9 +125,10 @@ abstract class FieldConfigBase extends ConfigEntityBase implements FieldConfigIn
    *
    * The default value is expressed as a numerically indexed array of items,
    * each item being an array of key/value pairs matching the set of 'columns'
-   * defined by the "field schema" for the field type, as exposed in
-   * hook_field_schema(). If the number of items exceeds the cardinality of the
-   * field, extraneous items will be ignored.
+   * defined by the "field schema" for the field type, as exposed in the class
+   * implementing \Drupal\Core\Field\FieldItemInterface::schema() method. If the
+   * number of items exceeds the cardinality of the field, extraneous items will
+   * be ignored.
    *
    * This property is overlooked if the $default_value_callback is non-empty.
    *
diff --git a/web/core/lib/Drupal/Core/File/file.api.php b/web/core/lib/Drupal/Core/File/file.api.php
index 9109778ef081f73049c189ba8ff570bd5cb35591..6c5236fec9f7fa5a283dcf918bf76a01e47797e8 100644
--- a/web/core/lib/Drupal/Core/File/file.api.php
+++ b/web/core/lib/Drupal/Core/File/file.api.php
@@ -22,6 +22,7 @@
  *
  * @param $uri
  *   The URI of the file.
+ *
  * @return
  *   If the user does not have permission to access the file, return -1. If the
  *   user has permission, return an array with the appropriate headers. If the
diff --git a/web/core/lib/Drupal/Core/Menu/MenuTreeStorage.php b/web/core/lib/Drupal/Core/Menu/MenuTreeStorage.php
index d53ad5ba2aca26ac327b3b87a86cc22be22a9e22..642542b549f5ea384f241c5d7646407e28fe61e1 100644
--- a/web/core/lib/Drupal/Core/Menu/MenuTreeStorage.php
+++ b/web/core/lib/Drupal/Core/Menu/MenuTreeStorage.php
@@ -1459,6 +1459,7 @@ protected static function schemaDefinition() {
    *
    * @param array $definitions
    *   The new menu link definitions.
+   *
    * @return array
    *   A list of menu link IDs that no longer exist.
    */
diff --git a/web/core/lib/Drupal/Core/Menu/menu.api.php b/web/core/lib/Drupal/Core/Menu/menu.api.php
index 758013f494e0a11fb0c6f40a6c06fbe6eb3ed753..dfe000971d2b44c3d664bbbb8383dd3472f46b9e 100644
--- a/web/core/lib/Drupal/Core/Menu/menu.api.php
+++ b/web/core/lib/Drupal/Core/Menu/menu.api.php
@@ -329,7 +329,7 @@ function hook_menu_local_tasks_alter(&$data, $route_name, \Drupal\Core\Cache\Ref
       ],
   ];
   // The tab we're adding is dependent on a user's access to add content.
-  $cacheability->addCacheTags(['user.permissions']);
+  $cacheability->addCacheContexts(['user.permissions']);
 }
 
 /**
diff --git a/web/core/lib/Drupal/Core/Render/theme.api.php b/web/core/lib/Drupal/Core/Render/theme.api.php
index ecb76b7d21f494b69c027e2a30e80e6b83b69a17..605c91b126bd10e377dfca08874f00c462c629d8 100644
--- a/web/core/lib/Drupal/Core/Render/theme.api.php
+++ b/web/core/lib/Drupal/Core/Render/theme.api.php
@@ -274,9 +274,9 @@
  *   vectors while allowing a permissive list of HTML tags that are not XSS
  *   vectors. (For example, <script> and <style> are not allowed.) See
  *   \Drupal\Component\Utility\Xss::$adminTags for the list of allowed tags. If
- *   your markup needs any of the tags not in this whitelist, then you can
- *   implement a theme hook and/or an asset library. Alternatively, you can use
- *   the key #allowed_tags to alter which tags are filtered.
+ *   your markup needs any of the tags not in this list, then you can implement
+ *   a theme hook and/or an asset library. Alternatively, you can use the key
+ *   #allowed_tags to alter which tags are filtered.
  * - #plain_text: Specifies that the array provides text that needs to be
  *   escaped. This value takes precedence over #markup.
  * - #allowed_tags: If #markup is supplied, this can be used to change which
diff --git a/web/core/lib/Drupal/Core/Security/DoTrustedCallbackTrait.php b/web/core/lib/Drupal/Core/Security/DoTrustedCallbackTrait.php
index d3d86b977ba59e9b2bda0e9278f4aba8b607350e..4548a0a52be82e290c30627917ae21ded2a67aa3 100644
--- a/web/core/lib/Drupal/Core/Security/DoTrustedCallbackTrait.php
+++ b/web/core/lib/Drupal/Core/Security/DoTrustedCallbackTrait.php
@@ -32,7 +32,7 @@ trait DoTrustedCallbackTrait {
    * @param string $error_type
    *   (optional) The type of error to trigger. One of:
    *   - TrustedCallbackInterface::THROW_EXCEPTION
-   *   - TrustedCallbackInterface::TRIGGER_DEPRECATION
+   *   - TrustedCallbackInterface::TRIGGER_WARNING
    *   - TrustedCallbackInterface::TRIGGER_SILENCED_DEPRECATION
    *   Defaults to TrustedCallbackInterface::THROW_EXCEPTION.
    * @param string $extra_trusted_interface
diff --git a/web/core/lib/Drupal/Core/StreamWrapper/StreamWrapperInterface.php b/web/core/lib/Drupal/Core/StreamWrapper/StreamWrapperInterface.php
index a354785affbd6eff6c23bc6c32d823eaa929cf74..38a7758d0ade451d0a9b996ae796a4fbaaacb05b 100644
--- a/web/core/lib/Drupal/Core/StreamWrapper/StreamWrapperInterface.php
+++ b/web/core/lib/Drupal/Core/StreamWrapper/StreamWrapperInterface.php
@@ -45,7 +45,7 @@ interface StreamWrapperInterface extends PhpStreamWrapperInterface {
   const READ = 0x0004;
 
   /**
-   * Wrapper is writeable.
+   * Wrapper is writable.
    */
   const WRITE = 0x0008;
 
@@ -67,12 +67,12 @@ interface StreamWrapperInterface extends PhpStreamWrapperInterface {
   const HIDDEN = 0x000C;
 
   /**
-   * Hidden, readable and writeable using local files.
+   * Hidden, readable and writable using local files.
    */
   const LOCAL_HIDDEN = 0x000D;
 
   /**
-   * Visible, readable and writeable.
+   * Visible, readable and writable.
    */
   const WRITE_VISIBLE = 0x001C;
 
@@ -91,7 +91,7 @@ interface StreamWrapperInterface extends PhpStreamWrapperInterface {
   const NORMAL = 0x001C;
 
   /**
-   * Visible, readable and writeable using local files.
+   * Visible, readable and writable using local files.
    */
   const LOCAL_NORMAL = 0x001D;
 
diff --git a/web/core/lib/Drupal/Core/Theme/Registry.php b/web/core/lib/Drupal/Core/Theme/Registry.php
index 38e1006561deeb7cd293ca72a137972b4bbda243..15c88b02901b64cf71a161abe2fab46d577a865a 100644
--- a/web/core/lib/Drupal/Core/Theme/Registry.php
+++ b/web/core/lib/Drupal/Core/Theme/Registry.php
@@ -802,6 +802,7 @@ public function destruct() {
    *
    * @param $prefixes
    *   An array of function prefixes by which the list can be limited.
+   *
    * @return array
    *   Functions grouped by the first prefix.
    */
diff --git a/web/core/lib/Drupal/Core/Theme/ThemeManagerInterface.php b/web/core/lib/Drupal/Core/Theme/ThemeManagerInterface.php
index 3b1e1e49b9ec964a62ead97d6001aca681c322fb..a3986974849c2f3944b960848251b17f84f8b414 100644
--- a/web/core/lib/Drupal/Core/Theme/ThemeManagerInterface.php
+++ b/web/core/lib/Drupal/Core/Theme/ThemeManagerInterface.php
@@ -58,6 +58,7 @@ public function resetActiveTheme();
    *
    * @param \Drupal\Core\Theme\ActiveTheme $active_theme
    *   The new active theme.
+   *
    * @return $this
    */
   public function setActiveTheme(ActiveTheme $active_theme);
diff --git a/web/core/lib/Drupal/Core/Updater/Updater.php b/web/core/lib/Drupal/Core/Updater/Updater.php
index 1d3fdb59a002568c3b3c38e177135eb2d685f5f6..46ea7ea8cd83c2c7ce79da4406470fa1089be622 100644
--- a/web/core/lib/Drupal/Core/Updater/Updater.php
+++ b/web/core/lib/Drupal/Core/Updater/Updater.php
@@ -291,7 +291,7 @@ public function install(&$filetransfer, $overrides = []) {
       return $this->postInstallTasks();
     }
     catch (FileTransferException $e) {
-      throw new UpdaterFileTransferException("File Transfer failed, reason: '" . strtr($e->getMessage(), $e->arguments)) . "'";
+      throw new UpdaterFileTransferException("File Transfer failed, reason: '" . strtr($e->getMessage(), $e->arguments) . "'");
     }
   }
 
diff --git a/web/core/lib/Drupal/Core/Utility/UnroutedUrlAssembler.php b/web/core/lib/Drupal/Core/Utility/UnroutedUrlAssembler.php
index 5e50f5e2b30617633100d69e24f1c5f11e2410de..2a2ac99c7add4efc8df98442676636bf1f6de824 100644
--- a/web/core/lib/Drupal/Core/Utility/UnroutedUrlAssembler.php
+++ b/web/core/lib/Drupal/Core/Utility/UnroutedUrlAssembler.php
@@ -77,7 +77,7 @@ protected function buildExternalUrl($uri, array $options = [], $collect_bubbleab
     $parsed += ['query' => []];
     $options += ['query' => []];
 
-    $options['query'] = NestedArray::mergeDeep($parsed['query'], $options['query']);
+    $options['query'] = NestedArray::mergeDeepArray([$parsed['query'], $options['query']], TRUE);
 
     if ($parsed['fragment'] && !$options['fragment']) {
       $options['fragment'] = '#' . $parsed['fragment'];
diff --git a/web/core/lib/Drupal/Core/Validation/TranslatorInterface.php b/web/core/lib/Drupal/Core/Validation/TranslatorInterface.php
index b7722a9e3f6097ceba8cae6f0d52ef853b5ed2b4..e59e766ffdb6631809a3036cfb421df3ac3585f0 100644
--- a/web/core/lib/Drupal/Core/Validation/TranslatorInterface.php
+++ b/web/core/lib/Drupal/Core/Validation/TranslatorInterface.php
@@ -25,6 +25,7 @@ interface TranslatorInterface {
    *   The domain for the message or null to use the default.
    * @param string|null $locale
    *   The locale or null to use the default.
+   *
    * @return string
    *   The translated string.
    *
diff --git a/web/core/misc/tableheader.es6.js b/web/core/misc/tableheader.es6.js
index 9d3bceecbcac8e03c730387a17f61ee4e3847e64..8b39676651165162fa5e0bea878ce8d26312c4ae 100644
--- a/web/core/misc/tableheader.es6.js
+++ b/web/core/misc/tableheader.es6.js
@@ -139,12 +139,12 @@
   // Bind to custom Drupal events.
   $(document).on({
     /**
-     * Recalculate columns width when window is resized and when show/hide
-     * weight is triggered.
+     * Recalculate columns width when window is resized, when show/hide weight
+     * is triggered, or when toolbar tray is toggled.
      *
      * @ignore
      */
-    'columnschange.TableHeader': tableHeaderResizeHandler,
+    'columnschange.TableHeader drupalToolbarTrayChange': tableHeaderResizeHandler,
 
     /**
      * Recalculate TableHeader.topOffset when viewport is resized.
diff --git a/web/core/misc/tableheader.js b/web/core/misc/tableheader.js
index 6c31845cc041013e2aaa320101b9f37daf4f074e..bc3827d1a721ba7c915f4eea25ee147f9556154f 100644
--- a/web/core/misc/tableheader.js
+++ b/web/core/misc/tableheader.js
@@ -77,7 +77,7 @@
   });
 
   $(document).on({
-    'columnschange.TableHeader': tableHeaderResizeHandler,
+    'columnschange.TableHeader drupalToolbarTrayChange': tableHeaderResizeHandler,
 
     'drupalViewportOffsetChange.TableHeader': tableHeaderOffsetChangeHandler
   });
diff --git a/web/core/modules/aggregator/src/Controller/AggregatorController.php b/web/core/modules/aggregator/src/Controller/AggregatorController.php
index 5beb15441c90bcd2dbb021043fb248ac4fdc4167..0d2a329a9e3a59db2555f8846ce25f96a1cca1ce 100644
--- a/web/core/modules/aggregator/src/Controller/AggregatorController.php
+++ b/web/core/modules/aggregator/src/Controller/AggregatorController.php
@@ -125,7 +125,7 @@ public function adminOverview() {
         $next_update = $this->t('imminently');
       }
       elseif ($last_checked && $refresh_rate) {
-        $next_update = $next = $this->t('%time left', ['%time' => $this->dateFormatter->formatInterval($last_checked + $refresh_rate - REQUEST_TIME)]);
+        $next_update = $this->t('%time left', ['%time' => $this->dateFormatter->formatInterval($last_checked + $refresh_rate - REQUEST_TIME)]);
       }
       else {
         $next_update = $this->t('never');
diff --git a/web/core/modules/aggregator/tests/src/Functional/AggregatorTestBase.php b/web/core/modules/aggregator/tests/src/Functional/AggregatorTestBase.php
index f58ec5fce296dbf29506f9ca516b69286588d6d8..2b74d30046e67eafc9a19ecbbac5e964a0532b6d 100644
--- a/web/core/modules/aggregator/tests/src/Functional/AggregatorTestBase.php
+++ b/web/core/modules/aggregator/tests/src/Functional/AggregatorTestBase.php
@@ -46,7 +46,12 @@ protected function setUp() {
       $this->drupalCreateContentType(['type' => 'article', 'name' => 'Article']);
     }
 
-    $this->adminUser = $this->drupalCreateUser(['access administration pages', 'administer news feeds', 'access news feeds', 'create article content']);
+    $this->adminUser = $this->drupalCreateUser([
+      'access administration pages',
+      'administer news feeds',
+      'access news feeds',
+      'create article content',
+    ]);
     $this->drupalLogin($this->adminUser);
     $this->drupalPlaceBlock('local_tasks_block');
   }
diff --git a/web/core/modules/aggregator/tests/src/Functional/FeedLanguageTest.php b/web/core/modules/aggregator/tests/src/Functional/FeedLanguageTest.php
index aeb7b997953eed0a5ff4eff92b8215458635d03a..1f729cb1e2ceb4a9e3fe26296ddbb903da2f6bc7 100644
--- a/web/core/modules/aggregator/tests/src/Functional/FeedLanguageTest.php
+++ b/web/core/modules/aggregator/tests/src/Functional/FeedLanguageTest.php
@@ -55,7 +55,13 @@ protected function setUp() {
    * Tests creation of feeds with a language.
    */
   public function testFeedLanguage() {
-    $admin_user = $this->drupalCreateUser(['administer languages', 'access administration pages', 'administer news feeds', 'access news feeds', 'create article content']);
+    $admin_user = $this->drupalCreateUser([
+      'administer languages',
+      'access administration pages',
+      'administer news feeds',
+      'access news feeds',
+      'create article content',
+    ]);
     $this->drupalLogin($admin_user);
 
     // Enable language selection for feeds.
diff --git a/web/core/modules/aggregator/tests/src/Functional/ImportOpmlTest.php b/web/core/modules/aggregator/tests/src/Functional/ImportOpmlTest.php
index 89cc07eacab3487004076f32f850dcb2dcc5da64..ba03d6e05310bcca5ecb6e76bfcd057ba48e20c4 100644
--- a/web/core/modules/aggregator/tests/src/Functional/ImportOpmlTest.php
+++ b/web/core/modules/aggregator/tests/src/Functional/ImportOpmlTest.php
@@ -29,7 +29,12 @@ class ImportOpmlTest extends AggregatorTestBase {
   protected function setUp() {
     parent::setUp();
 
-    $admin_user = $this->drupalCreateUser(['administer news feeds', 'access news feeds', 'create article content', 'administer blocks']);
+    $admin_user = $this->drupalCreateUser([
+      'administer news feeds',
+      'access news feeds',
+      'create article content',
+      'administer blocks',
+    ]);
     $this->drupalLogin($admin_user);
   }
 
diff --git a/web/core/modules/basic_auth/src/Authentication/Provider/BasicAuth.php b/web/core/modules/basic_auth/src/Authentication/Provider/BasicAuth.php
index b3fe6b38aeaed269faff99c03b63fce8c74e2d0a..9469aad782140837b165824daeb813c12333d2ac 100644
--- a/web/core/modules/basic_auth/src/Authentication/Provider/BasicAuth.php
+++ b/web/core/modules/basic_auth/src/Authentication/Provider/BasicAuth.php
@@ -128,7 +128,7 @@ public function authenticate(Request $request) {
     }
     // Always register an IP-based failed login event.
     $this->flood->register('basic_auth.failed_login_ip', $flood_config->get('ip_window'));
-    return [];
+    return NULL;
   }
 
   /**
diff --git a/web/core/modules/basic_auth/tests/src/Functional/BasicAuthTest.php b/web/core/modules/basic_auth/tests/src/Functional/BasicAuthTest.php
index 84089e78cf5ce21fd8a8686a510ce9b5a8e0c312..297176e48e1613913c91bf2c8be25def56cead25 100644
--- a/web/core/modules/basic_auth/tests/src/Functional/BasicAuthTest.php
+++ b/web/core/modules/basic_auth/tests/src/Functional/BasicAuthTest.php
@@ -76,7 +76,7 @@ public function testBasicAuth() {
 
     // Ensure that a route without basic auth defined doesn't allow login.
     $this->basicAuthGet(Url::fromRoute('system.admin'), $account->getAccountName(), $account->pass_raw);
-    $this->assertNoLink('Log out', 'User is not logged in');
+    $this->assertSession()->linkNotExists('Log out', 'User is not logged in');
     $this->assertSession()->statusCodeEquals(403);
     $this->mink->resetSessions();
 
diff --git a/web/core/modules/big_pipe/tests/src/Functional/BigPipeTest.php b/web/core/modules/big_pipe/tests/src/Functional/BigPipeTest.php
index 42a9acb6e858f8d398f06c182cb04ea09ae6a46d..e059f983995e354befc3253236bddb3d6283019c 100644
--- a/web/core/modules/big_pipe/tests/src/Functional/BigPipeTest.php
+++ b/web/core/modules/big_pipe/tests/src/Functional/BigPipeTest.php
@@ -192,7 +192,9 @@ public function testBigPipe() {
 
     // Verify that the two expected exceptions are logged as errors.
     $this->assertEqual($log_count + 2, $connection->query('SELECT COUNT(*) FROM {watchdog}')->fetchField(), 'Two new watchdog entries.');
-    $records = $connection->query('SELECT * FROM {watchdog} ORDER BY wid DESC LIMIT 2')->fetchAll();
+    // Using the method queryRange() allows contrib database drivers the ability
+    // to insert their own limit and offset functionality.
+    $records = $connection->queryRange('SELECT * FROM {watchdog} ORDER BY wid DESC', 0, 2)->fetchAll();
     $this->assertEqual(RfcLogLevel::ERROR, $records[0]->severity);
     $this->assertStringContainsString('Oh noes!', (string) unserialize($records[0]->variables)['@message']);
     $this->assertEqual(RfcLogLevel::ERROR, $records[1]->severity);
diff --git a/web/core/modules/block/tests/src/Functional/BlockAdminThemeTest.php b/web/core/modules/block/tests/src/Functional/BlockAdminThemeTest.php
index a217396aeedad72cd7ac32c5781b8ededb9bbe2f..bd7af5e9179fc5f52427d0ae58a938423ebf0c0a 100644
--- a/web/core/modules/block/tests/src/Functional/BlockAdminThemeTest.php
+++ b/web/core/modules/block/tests/src/Functional/BlockAdminThemeTest.php
@@ -28,7 +28,10 @@ class BlockAdminThemeTest extends BrowserTestBase {
    */
   public function testAdminTheme() {
     // Create administrative user.
-    $admin_user = $this->drupalCreateUser(['administer blocks', 'administer themes']);
+    $admin_user = $this->drupalCreateUser([
+      'administer blocks',
+      'administer themes',
+    ]);
     $this->drupalLogin($admin_user);
 
     // Ensure that access to block admin page is denied when theme is not
diff --git a/web/core/modules/block/tests/src/Functional/BlockCacheTest.php b/web/core/modules/block/tests/src/Functional/BlockCacheTest.php
index 4e8f23972810e58ad73d6851431db91a9e257d48..63bb68d8857763bff51f5678d181599a69ae8160 100644
--- a/web/core/modules/block/tests/src/Functional/BlockCacheTest.php
+++ b/web/core/modules/block/tests/src/Functional/BlockCacheTest.php
@@ -56,7 +56,10 @@ protected function setUp() {
     parent::setUp();
 
     // Create an admin user, log in and enable test blocks.
-    $this->adminUser = $this->drupalCreateUser(['administer blocks', 'access administration pages']);
+    $this->adminUser = $this->drupalCreateUser([
+      'administer blocks',
+      'access administration pages',
+    ]);
     $this->drupalLogin($this->adminUser);
 
     // Create additional users to test caching modes.
diff --git a/web/core/modules/block/tests/src/Functional/BlockDemoTest.php b/web/core/modules/block/tests/src/Functional/BlockDemoTest.php
index fcc2bd520038bd22842770202fdae8271e0daac3..5adcd88ac783afc04c1cdaf56e462f86397d7689 100644
--- a/web/core/modules/block/tests/src/Functional/BlockDemoTest.php
+++ b/web/core/modules/block/tests/src/Functional/BlockDemoTest.php
@@ -28,7 +28,10 @@ class BlockDemoTest extends BrowserTestBase {
    */
   public function testBlockDemo() {
     // Create administrative user.
-    $admin_user = $this->drupalCreateUser(['administer blocks', 'administer themes']);
+    $admin_user = $this->drupalCreateUser([
+      'administer blocks',
+      'administer themes',
+    ]);
     $this->drupalLogin($admin_user);
 
     // Confirm we have access to the block demo page for the default theme.
diff --git a/web/core/modules/block/tests/src/Functional/BlockLanguageTest.php b/web/core/modules/block/tests/src/Functional/BlockLanguageTest.php
index 74ecba2469c508f755fb65c4a6ba7ec77e79adfd..71aa4b9fa4c3dde63c995aba35c3e2abfde3eec2 100644
--- a/web/core/modules/block/tests/src/Functional/BlockLanguageTest.php
+++ b/web/core/modules/block/tests/src/Functional/BlockLanguageTest.php
@@ -33,7 +33,10 @@ class BlockLanguageTest extends BrowserTestBase {
   protected function setUp() {
     parent::setUp();
 
-    $this->adminUser = $this->drupalCreateUser(['administer blocks', 'administer languages']);
+    $this->adminUser = $this->drupalCreateUser([
+      'administer blocks',
+      'administer languages',
+    ]);
     $this->drupalLogin($this->adminUser);
 
     // Add predefined language.
diff --git a/web/core/modules/block/tests/src/Functional/BlockUiTest.php b/web/core/modules/block/tests/src/Functional/BlockUiTest.php
index 7ec5f3b132ebc815c9e5d90685ac9582e85e00c7..e6a56be830a705767c393cc5d393f4c516a67758 100644
--- a/web/core/modules/block/tests/src/Functional/BlockUiTest.php
+++ b/web/core/modules/block/tests/src/Functional/BlockUiTest.php
@@ -152,9 +152,9 @@ public function testBlockAdminUiPage() {
     \Drupal::service('theme_installer')->install(['stable', 'stark']);
     $this->drupalGet('admin/structure/block');
     $theme_handler = \Drupal::service('theme_handler');
-    $this->assertLink($theme_handler->getName('classy'));
-    $this->assertLink($theme_handler->getName('stark'));
-    $this->assertNoLink($theme_handler->getName('stable'));
+    $this->assertSession()->linkExists($theme_handler->getName('classy'));
+    $this->assertSession()->linkExists($theme_handler->getName('stark'));
+    $this->assertSession()->linkNotExists($theme_handler->getName('stable'));
 
     // Ensure that a hidden theme cannot use the block demo page.
     $this->drupalGet('admin/structure/block/list/stable');
@@ -166,7 +166,7 @@ public function testBlockAdminUiPage() {
     \Drupal::service('router.builder')->rebuildIfNeeded();
     $this->drupalPlaceBlock('local_tasks_block', ['region' => 'header', 'theme' => 'stable']);
     $this->drupalGet('admin/structure/block');
-    $this->assertLink($theme_handler->getName('stable'));
+    $this->assertSession()->linkExists($theme_handler->getName('stable'));
     $this->drupalGet('admin/structure/block/list/stable');
     $this->assertSession()->statusCodeEquals(200);
   }
diff --git a/web/core/modules/block/tests/src/Functional/BlockXssTest.php b/web/core/modules/block/tests/src/Functional/BlockXssTest.php
index 72d38e1ee3c9512021e2b47e773a24d07d4740cf..cf90835fb1cc61239488896bc62336e254a1085e 100644
--- a/web/core/modules/block/tests/src/Functional/BlockXssTest.php
+++ b/web/core/modules/block/tests/src/Functional/BlockXssTest.php
@@ -32,7 +32,10 @@ class BlockXssTest extends BrowserTestBase {
    * Tests that nothing is escaped other than the blocks explicitly tested.
    */
   public function testNoUnexpectedEscaping() {
-    $this->drupalLogin($this->drupalCreateUser(['administer blocks', 'access administration pages']));
+    $this->drupalLogin($this->drupalCreateUser([
+      'administer blocks',
+      'access administration pages',
+    ]));
     $this->drupalGet(Url::fromRoute('block.admin_display'));
     $this->clickLink('Place block');
     $this->assertNoEscaped('<');
@@ -49,7 +52,10 @@ public function testXssInTitle() {
     $this->drupalGet('');
     $this->assertNoRaw('<script>alert("XSS label");</script>', 'The block title was properly sanitized when rendered.');
 
-    $this->drupalLogin($this->drupalCreateUser(['administer blocks', 'access administration pages']));
+    $this->drupalLogin($this->drupalCreateUser([
+      'administer blocks',
+      'access administration pages',
+    ]));
     $default_theme = $this->config('system.theme')->get('default');
     $this->drupalGet('admin/structure/block/list/' . $default_theme);
     $this->assertNoRaw("<script>alert('XSS subject');</script>", 'The block title was properly sanitized in Block Plugin UI Admin page.');
@@ -61,7 +67,10 @@ public function testXssInTitle() {
   public function testXssInCategory() {
     $this->container->get('module_installer')->install(['block_test']);
     $this->drupalPlaceBlock('test_xss_title');
-    $this->drupalLogin($this->drupalCreateUser(['administer blocks', 'access administration pages']));
+    $this->drupalLogin($this->drupalCreateUser([
+      'administer blocks',
+      'access administration pages',
+    ]));
     $this->drupalGet(Url::fromRoute('block.admin_display'));
     $this->clickLink('Place block');
     $this->assertNoRaw("<script>alert('XSS category');</script>");
diff --git a/web/core/modules/block/tests/src/Functional/NonDefaultBlockAdminTest.php b/web/core/modules/block/tests/src/Functional/NonDefaultBlockAdminTest.php
index 5564a502231f11b1db0dba2b517c86cf856a1555..9552809f920d3da6286b7404261a91e6568c75d3 100644
--- a/web/core/modules/block/tests/src/Functional/NonDefaultBlockAdminTest.php
+++ b/web/core/modules/block/tests/src/Functional/NonDefaultBlockAdminTest.php
@@ -36,7 +36,10 @@ protected function setUp() {
    * Test non-default theme admin.
    */
   public function testNonDefaultBlockAdmin() {
-    $admin_user = $this->drupalCreateUser(['administer blocks', 'administer themes']);
+    $admin_user = $this->drupalCreateUser([
+      'administer blocks',
+      'administer themes',
+    ]);
     $this->drupalLogin($admin_user);
     $new_theme = 'bartik';
     \Drupal::service('theme_installer')->install([$new_theme]);
diff --git a/web/core/modules/block/tests/src/Functional/Views/DisplayBlockTest.php b/web/core/modules/block/tests/src/Functional/Views/DisplayBlockTest.php
index b9125ffc1436ea5c81c8becc12d5bd9aeaac16da..f4add7d75491f90778c6359c941dbf074db7dba6 100644
--- a/web/core/modules/block/tests/src/Functional/Views/DisplayBlockTest.php
+++ b/web/core/modules/block/tests/src/Functional/Views/DisplayBlockTest.php
@@ -65,7 +65,10 @@ protected function setUp($import_test_views = TRUE) {
    * Tests default and custom block categories.
    */
   public function testBlockCategory() {
-    $this->drupalLogin($this->drupalCreateUser(['administer views', 'administer blocks']));
+    $this->drupalLogin($this->drupalCreateUser([
+      'administer views',
+      'administer blocks',
+    ]));
 
     // Create a new view in the UI.
     $edit = [];
@@ -368,7 +371,11 @@ public function testBlockEmptyRendering() {
    * Tests the contextual links on a Views block.
    */
   public function testBlockContextualLinks() {
-    $this->drupalLogin($this->drupalCreateUser(['administer views', 'access contextual links', 'administer blocks']));
+    $this->drupalLogin($this->drupalCreateUser([
+      'administer views',
+      'access contextual links',
+      'administer blocks',
+    ]));
     $block = $this->drupalPlaceBlock('views_block:test_view_block-block_1');
     $cached_block = $this->drupalPlaceBlock('views_block:test_view_block-block_1');
     $this->drupalGet('test-page');
diff --git a/web/core/modules/block_content/src/Entity/BlockContentType.php b/web/core/modules/block_content/src/Entity/BlockContentType.php
index 20f9593b82f5a54cbcea5a7a644b88b8d83abc8f..acaa64039ddf4cf809a2f18055bc936c953be33b 100644
--- a/web/core/modules/block_content/src/Entity/BlockContentType.php
+++ b/web/core/modules/block_content/src/Entity/BlockContentType.php
@@ -11,14 +11,13 @@
  * @ConfigEntityType(
  *   id = "block_content_type",
  *   label = @Translation("Custom block type"),
- *   label_collection = @Translation("Custom block types"),
+ *   label_collection = @Translation("Custom block library"),
  *   label_singular = @Translation("custom block type"),
  *   label_plural = @Translation("custom block types"),
  *   label_count = @PluralTranslation(
  *     singular = "@count custom block type",
  *     plural = "@count custom block types",
  *   ),
- *   label_collection = @Translation("Custom block library"),
  *   handlers = {
  *     "form" = {
  *       "default" = "Drupal\block_content\BlockContentTypeForm",
diff --git a/web/core/modules/block_content/tests/src/Functional/BlockContentListTest.php b/web/core/modules/block_content/tests/src/Functional/BlockContentListTest.php
index c598972663c7e90d492f08474619c26773b0b671..ed9cb5c1cdf29d233f215f698673270cc113d52f 100644
--- a/web/core/modules/block_content/tests/src/Functional/BlockContentListTest.php
+++ b/web/core/modules/block_content/tests/src/Functional/BlockContentListTest.php
@@ -31,7 +31,10 @@ class BlockContentListTest extends BlockContentTestBase {
    * Tests the custom block listing page.
    */
   public function testListing() {
-    $this->drupalLogin($this->drupalCreateUser(['administer blocks', 'translate configuration']));
+    $this->drupalLogin($this->drupalCreateUser([
+      'administer blocks',
+      'translate configuration',
+    ]));
     $this->drupalGet('admin/structure/block/block-content');
 
     // Test for the page title.
@@ -55,7 +58,7 @@ public function testListing() {
     $new_label = 'Albatross';
     // Add a new entity using the operations link.
     $link_text = t('Add custom block');
-    $this->assertLink($link_text);
+    $this->assertSession()->linkExists($link_text);
     $this->clickLink($link_text);
     $this->assertSession()->statusCodeEquals(200);
     $edit = [];
diff --git a/web/core/modules/block_content/tests/src/Functional/BlockContentListViewsTest.php b/web/core/modules/block_content/tests/src/Functional/BlockContentListViewsTest.php
index c7ba7488477118e92303a32a4b36dcb19c9e7112..01f045eedf830aa38dea62ddb8c4bfa08f0f6bdd 100644
--- a/web/core/modules/block_content/tests/src/Functional/BlockContentListViewsTest.php
+++ b/web/core/modules/block_content/tests/src/Functional/BlockContentListViewsTest.php
@@ -34,7 +34,10 @@ class BlockContentListViewsTest extends BlockContentTestBase {
    * Tests the custom block listing page.
    */
   public function testListing() {
-    $this->drupalLogin($this->drupalCreateUser(['administer blocks', 'translate configuration']));
+    $this->drupalLogin($this->drupalCreateUser([
+      'administer blocks',
+      'translate configuration',
+    ]));
     $this->drupalGet('admin/structure/block/block-content');
 
     // Test for the page title.
@@ -67,7 +70,7 @@ public function testListing() {
     $new_label = 'Albatross';
     // Add a new entity using the operations link.
     $link_text = t('Add custom block');
-    $this->assertLink($link_text);
+    $this->assertSession()->linkExists($link_text);
     $this->clickLink($link_text);
     $this->assertSession()->statusCodeEquals(200);
     $edit = [];
@@ -123,7 +126,7 @@ public function testListing() {
 
     // Confirm that the empty text is displayed.
     $this->assertText('There are no custom blocks available.');
-    $this->assertLink('custom block');
+    $this->assertSession()->linkExists('custom block');
 
     $block_content = BlockContent::create([
       'info' => 'Non-reusable block',
diff --git a/web/core/modules/book/tests/src/Functional/BookBreadcrumbTest.php b/web/core/modules/book/tests/src/Functional/BookBreadcrumbTest.php
index b2355aa25d6344096f9b897efe09e8f9caedd3a4..4f471fbbf221d132782dc38a92107e57a5f5a3a6 100644
--- a/web/core/modules/book/tests/src/Functional/BookBreadcrumbTest.php
+++ b/web/core/modules/book/tests/src/Functional/BookBreadcrumbTest.php
@@ -53,8 +53,24 @@ protected function setUp() {
     $this->drupalPlaceBlock('page_title_block');
 
     // Create users.
-    $this->bookAuthor = $this->drupalCreateUser(['create new books', 'create book content', 'edit own book content', 'add content to books']);
-    $this->adminUser = $this->drupalCreateUser(['create new books', 'create book content', 'edit any book content', 'delete any book content', 'add content to books', 'administer blocks', 'administer permissions', 'administer book outlines', 'administer content types', 'administer site configuration']);
+    $this->bookAuthor = $this->drupalCreateUser([
+      'create new books',
+      'create book content',
+      'edit own book content',
+      'add content to books',
+    ]);
+    $this->adminUser = $this->drupalCreateUser([
+      'create new books',
+      'create book content',
+      'edit any book content',
+      'delete any book content',
+      'add content to books',
+      'administer blocks',
+      'administer permissions',
+      'administer book outlines',
+      'administer content types',
+      'administer site configuration',
+    ]);
   }
 
   /**
diff --git a/web/core/modules/book/tests/src/Functional/BookContentModerationTest.php b/web/core/modules/book/tests/src/Functional/BookContentModerationTest.php
index 2dde86657796a0cdb0c0dfd121c3410c8a7eaf84..02d489fc52e59bc3db285b35153a3a7b59e01cd8 100644
--- a/web/core/modules/book/tests/src/Functional/BookContentModerationTest.php
+++ b/web/core/modules/book/tests/src/Functional/BookContentModerationTest.php
@@ -46,7 +46,16 @@ protected function setUp() {
     $workflow->save();
 
     // We need a user with additional content moderation permissions.
-    $this->bookAuthor = $this->drupalCreateUser(['create new books', 'create book content', 'edit own book content', 'add content to books', 'access printer-friendly version', 'view any unpublished content', 'use editorial transition create_new_draft', 'use editorial transition publish']);
+    $this->bookAuthor = $this->drupalCreateUser([
+      'create new books',
+      'create book content',
+      'edit own book content',
+      'add content to books',
+      'access printer-friendly version',
+      'view any unpublished content',
+      'use editorial transition create_new_draft',
+      'use editorial transition publish',
+    ]);
   }
 
   /**
diff --git a/web/core/modules/book/tests/src/Functional/BookTest.php b/web/core/modules/book/tests/src/Functional/BookTest.php
index f4aaa6de1219b77e5497c2d227c36bab39744bb2..b57773c805500e29bc4c50ef9b91f3847af237a0 100644
--- a/web/core/modules/book/tests/src/Functional/BookTest.php
+++ b/web/core/modules/book/tests/src/Functional/BookTest.php
@@ -61,10 +61,32 @@ protected function setUp() {
     node_access_rebuild();
 
     // Create users.
-    $this->bookAuthor = $this->drupalCreateUser(['create new books', 'create book content', 'edit own book content', 'add content to books']);
-    $this->webUser = $this->drupalCreateUser(['access printer-friendly version', 'node test view']);
-    $this->webUserWithoutNodeAccess = $this->drupalCreateUser(['access printer-friendly version']);
-    $this->adminUser = $this->drupalCreateUser(['create new books', 'create book content', 'edit any book content', 'delete any book content', 'add content to books', 'administer blocks', 'administer permissions', 'administer book outlines', 'node test view', 'administer content types', 'administer site configuration']);
+    $this->bookAuthor = $this->drupalCreateUser([
+      'create new books',
+      'create book content',
+      'edit own book content',
+      'add content to books',
+    ]);
+    $this->webUser = $this->drupalCreateUser([
+      'access printer-friendly version',
+      'node test view',
+    ]);
+    $this->webUserWithoutNodeAccess = $this->drupalCreateUser([
+      'access printer-friendly version',
+    ]);
+    $this->adminUser = $this->drupalCreateUser([
+      'create new books',
+      'create book content',
+      'edit any book content',
+      'delete any book content',
+      'add content to books',
+      'administer blocks',
+      'administer permissions',
+      'administer book outlines',
+      'node test view',
+      'administer content types',
+      'administer site configuration',
+    ]);
   }
 
   /**
@@ -220,7 +242,7 @@ public function testBookExport() {
 
     // Load the book and verify there is no printer-friendly version link.
     $this->drupalGet('node/' . $this->book->id());
-    $this->assertNoLink(t('Printer-friendly version'), 'Anonymous user is not shown link to printer-friendly version.');
+    $this->assertSession()->linkNotExists(t('Printer-friendly version'), 'Anonymous user is not shown link to printer-friendly version.');
 
     // Try getting the URL directly, and verify it fails.
     $this->drupalGet('book/export/html/' . $this->book->id());
@@ -402,13 +424,13 @@ public function testBookOutline() {
     // Create new node not yet a book.
     $empty_book = $this->drupalCreateNode(['type' => 'book']);
     $this->drupalGet('node/' . $empty_book->id() . '/outline');
-    $this->assertNoLink(t('Book outline'), 'Book Author is not allowed to outline');
+    $this->assertSession()->linkNotExists(t('Book outline'), 'Book Author is not allowed to outline');
 
     $this->drupalLogin($this->adminUser);
     $this->drupalGet('node/' . $empty_book->id() . '/outline');
     $this->assertRaw(t('Book outline'));
     $this->assertOptionSelected('edit-book-bid', 0, 'Node does not belong to a book');
-    $this->assertNoLink(t('Remove from book outline'));
+    $this->assertSession()->linkNotExists(t('Remove from book outline'));
 
     $edit = [];
     $edit['book[bid]'] = '1';
@@ -557,7 +579,11 @@ public function testBookNavigationBlockOnUnpublishedBook() {
     $this->createBook();
 
     // Create administrator user.
-    $administratorUser = $this->drupalCreateUser(['administer blocks', 'administer nodes', 'bypass node access']);
+    $administratorUser = $this->drupalCreateUser([
+      'administer blocks',
+      'administer nodes',
+      'bypass node access',
+    ]);
     $this->drupalLogin($administratorUser);
 
     // Enable the block with "Show block only on book pages" mode.
diff --git a/web/core/modules/book/tests/src/Functional/Views/BookRelationshipTest.php b/web/core/modules/book/tests/src/Functional/Views/BookRelationshipTest.php
index b8e7fa04fee247e0acaef2d7fb20520f2951d971..487abe50308d31bf24595d72a6cb8b0d181ea567 100644
--- a/web/core/modules/book/tests/src/Functional/Views/BookRelationshipTest.php
+++ b/web/core/modules/book/tests/src/Functional/Views/BookRelationshipTest.php
@@ -153,7 +153,7 @@ public function testRelationship() {
       $this->drupalGet('test-book/' . $nodes[$i]->id());
 
       for ($j = 0; $j < $i; $j++) {
-        $this->assertLink($nodes[$j]->label());
+        $this->assertSession()->linkExists($nodes[$j]->label());
       }
     }
   }
diff --git a/web/core/modules/ckeditor/src/CKEditorPluginInterface.php b/web/core/modules/ckeditor/src/CKEditorPluginInterface.php
index a5052dce61f6f59fe3f2ca0ffe8c9a08f3316e97..1f3158b58b715229f2159853b621464a894b6661 100644
--- a/web/core/modules/ckeditor/src/CKEditorPluginInterface.php
+++ b/web/core/modules/ckeditor/src/CKEditorPluginInterface.php
@@ -45,6 +45,7 @@ public function isInternal();
    *
    * @param \Drupal\editor\Entity\Editor $editor
    *   A configured text editor object.
+   *
    * @return array
    *   An unindexed array of plugin names this plugin requires. Each plugin is
    *   is identified by its annotated ID.
@@ -59,6 +60,7 @@ public function getDependencies(Editor $editor);
    *
    * @param \Drupal\editor\Entity\Editor $editor
    *   A configured text editor object.
+   *
    * @return array
    *   An array of libraries suitable for usage in a render API #attached
    *   property.
@@ -91,6 +93,7 @@ public function getFile();
    *
    * @param \Drupal\editor\Entity\Editor $editor
    *   A configured text editor object.
+   *
    * @return array
    *   A keyed array, whose keys will end up as keys under CKEDITOR.config.
    */
diff --git a/web/core/modules/ckeditor/src/CKEditorPluginManager.php b/web/core/modules/ckeditor/src/CKEditorPluginManager.php
index 735cfa6678c67f56499e51ac75b93dbc6d0f8879..47fa80b06cbdd07ca996d63f3f3e52ebe7d84370 100644
--- a/web/core/modules/ckeditor/src/CKEditorPluginManager.php
+++ b/web/core/modules/ckeditor/src/CKEditorPluginManager.php
@@ -60,6 +60,7 @@ public function __construct(\Traversable $namespaces, CacheBackendInterface $cac
    * @param bool $include_internal_plugins
    *   Defaults to FALSE. When set to TRUE, plugins whose isInternal() method
    *   returns TRUE will also be included.
+   *
    * @return array
    *   A list of the enabled CKEditor plugins, with the plugin IDs as keys and
    *   the Drupal root-relative plugin files as values.
diff --git a/web/core/modules/ckeditor/src/Plugin/CKEditorPlugin/StylesCombo.php b/web/core/modules/ckeditor/src/Plugin/CKEditorPlugin/StylesCombo.php
index dc7595a67ddfc961038484185157ebf5c6ef008f..c839f7b42bc3d9f655adefbeb7ad087b74c8501a 100644
--- a/web/core/modules/ckeditor/src/Plugin/CKEditorPlugin/StylesCombo.php
+++ b/web/core/modules/ckeditor/src/Plugin/CKEditorPlugin/StylesCombo.php
@@ -117,6 +117,7 @@ public function validateStylesValue(array $element, FormStateInterface $form_sta
    *
    * @param string $styles
    *   The "styles" setting.
+   *
    * @return array|false
    *   An array containing the "stylesSet" configuration, or FALSE when the
    *   syntax is invalid.
diff --git a/web/core/modules/ckeditor/src/Plugin/Editor/CKEditor.php b/web/core/modules/ckeditor/src/Plugin/Editor/CKEditor.php
index f62825af6f304e28ab8ce62384fbee6bf99922ce..af5a4a6506580a2617d1c88f74715faa5c5dec57 100644
--- a/web/core/modules/ckeditor/src/Plugin/Editor/CKEditor.php
+++ b/web/core/modules/ckeditor/src/Plugin/Editor/CKEditor.php
@@ -403,6 +403,7 @@ public function getLibraries(Editor $editor) {
    *
    * @param \Drupal\editor\Entity\Editor $editor
    *   A configured text editor object.
+   *
    * @return array
    *   An array containing the "toolbar" configuration.
    */
@@ -426,6 +427,7 @@ public function buildToolbarJSSetting(Editor $editor) {
    *
    * @param \Drupal\editor\Entity\Editor $editor
    *   A configured text editor object.
+   *
    * @return array
    *   An array containing the "contentsCss" configuration.
    */
diff --git a/web/core/modules/ckeditor/tests/src/Functional/CKEditorLoadingTest.php b/web/core/modules/ckeditor/tests/src/Functional/CKEditorLoadingTest.php
index c43280cbcbe5075d8c33a0d180ad763f187ae00d..1e8f2ae2fed7f395063ef56703d2af0f11dda419 100644
--- a/web/core/modules/ckeditor/tests/src/Functional/CKEditorLoadingTest.php
+++ b/web/core/modules/ckeditor/tests/src/Functional/CKEditorLoadingTest.php
@@ -72,8 +72,16 @@ protected function setUp() {
       'name' => 'Article',
     ]);
 
-    $this->untrustedUser = $this->drupalCreateUser(['create article content', 'edit any article content']);
-    $this->normalUser = $this->drupalCreateUser(['create article content', 'edit any article content', 'use text format filtered_html', 'use text format full_html']);
+    $this->untrustedUser = $this->drupalCreateUser([
+      'create article content',
+      'edit any article content',
+    ]);
+    $this->normalUser = $this->drupalCreateUser([
+      'create article content',
+      'edit any article content',
+      'use text format filtered_html',
+      'use text format full_html',
+    ]);
   }
 
   /**
diff --git a/web/core/modules/ckeditor/tests/src/Functional/CKEditorStylesComboTranslationTest.php b/web/core/modules/ckeditor/tests/src/Functional/CKEditorStylesComboTranslationTest.php
index 27fabffbf7853abb9d706a04b1428ac1e9cce583..30207fbf631365cc1a1d3bf1b9e70597b76bc72e 100644
--- a/web/core/modules/ckeditor/tests/src/Functional/CKEditorStylesComboTranslationTest.php
+++ b/web/core/modules/ckeditor/tests/src/Functional/CKEditorStylesComboTranslationTest.php
@@ -57,7 +57,10 @@ protected function setUp() {
     ]);
     $editor->save();
 
-    $this->adminUser = $this->drupalCreateUser(['administer filters', 'translate configuration']);
+    $this->adminUser = $this->drupalCreateUser([
+      'administer filters',
+      'translate configuration',
+    ]);
 
     ConfigurableLanguage::createFromLangcode('de')->save();
   }
diff --git a/web/core/modules/comment/src/CommentStorageInterface.php b/web/core/modules/comment/src/CommentStorageInterface.php
index accc9de42056c72575c310f430a8fcd23786d9e7..592b1ea92159f6e260943f90ec7221d44543e9e9 100644
--- a/web/core/modules/comment/src/CommentStorageInterface.php
+++ b/web/core/modules/comment/src/CommentStorageInterface.php
@@ -75,6 +75,7 @@ public function getDisplayOrdinal(CommentInterface $comment, $comment_mode, $div
    *
    * @param \Drupal\comment\CommentInterface[] $comments
    *   An array of comment entities keyed by their ids.
+   *
    * @return array
    *   The entity ids of the passed comment entities' children as an array.
    */
diff --git a/web/core/modules/comment/tests/src/Functional/CommentAnonymousTest.php b/web/core/modules/comment/tests/src/Functional/CommentAnonymousTest.php
index ac30efa0f567eca15d37cfcf6abd44c73bf47c1e..5f9bbd0cae8063033aa91593936895c15c8eb647 100644
--- a/web/core/modules/comment/tests/src/Functional/CommentAnonymousTest.php
+++ b/web/core/modules/comment/tests/src/Functional/CommentAnonymousTest.php
@@ -176,7 +176,7 @@ public function testAnonymous() {
     // "Login or register to post comments" type link may be shown.
     $this->drupalGet('node/' . $this->node->id());
     $this->assertSession()->responseNotMatches('@<h2[^>]*>Comments</h2>@', 'Comments were not displayed.');
-    $this->assertNoLink('Add new comment', 'Link to add comment was found.');
+    $this->assertSession()->linkNotExists('Add new comment', 'Link to add comment was found.');
 
     // Attempt to view node-comment form while disallowed.
     $this->drupalGet('comment/reply/node/' . $this->node->id() . '/comment');
@@ -189,8 +189,8 @@ public function testAnonymous() {
     ]);
     $this->drupalGet('node/' . $this->node->id());
     $this->assertPattern('@<h2[^>]*>Comments</h2>@', 'Comments were displayed.');
-    $this->assertLink('Log in', 1, 'Link to login was found.');
-    $this->assertLink('register', 1, 'Link to register was found.');
+    $this->assertSession()->linkExists('Log in', 1, 'Link to login was found.');
+    $this->assertSession()->linkExists('register', 1, 'Link to register was found.');
 
     user_role_change_permissions(RoleInterface::ANONYMOUS_ID, [
       'access comments' => FALSE,
diff --git a/web/core/modules/comment/tests/src/Functional/CommentBookTest.php b/web/core/modules/comment/tests/src/Functional/CommentBookTest.php
index b461f7098abe34dcb941247c3a7205448e837a17..76230d1f3c67286c97ceeba8030e52d5fcca5f39 100644
--- a/web/core/modules/comment/tests/src/Functional/CommentBookTest.php
+++ b/web/core/modules/comment/tests/src/Functional/CommentBookTest.php
@@ -60,7 +60,11 @@ public function testBookCommentPrint() {
     ]);
     $comment->save();
 
-    $commenting_user = $this->drupalCreateUser(['access printer-friendly version', 'access comments', 'post comments']);
+    $commenting_user = $this->drupalCreateUser([
+      'access printer-friendly version',
+      'access comments',
+      'post comments',
+    ]);
     $this->drupalLogin($commenting_user);
 
     $this->drupalGet('node/' . $book_node->id());
diff --git a/web/core/modules/comment/tests/src/Functional/CommentFieldsTest.php b/web/core/modules/comment/tests/src/Functional/CommentFieldsTest.php
index 46fe42d983e1803894290f097a368b60a5b7df98..7a0298ea4242e6cc6af1973b757e76e558069f2f 100644
--- a/web/core/modules/comment/tests/src/Functional/CommentFieldsTest.php
+++ b/web/core/modules/comment/tests/src/Functional/CommentFieldsTest.php
@@ -191,7 +191,10 @@ public function testCommentFieldCreate() {
    */
   public function testCommentInstallAfterContentModule() {
     // Create a user to do module administration.
-    $this->adminUser = $this->drupalCreateUser(['access administration pages', 'administer modules']);
+    $this->adminUser = $this->drupalCreateUser([
+      'access administration pages',
+      'administer modules',
+    ]);
     $this->drupalLogin($this->adminUser);
 
     // Drop default comment field added in CommentTestBase::setup().
@@ -233,7 +236,12 @@ public function testCommentInstallAfterContentModule() {
     // Try to post a comment on each node. A failure will be triggered if the
     // comment body is missing on one of these forms, due to postComment()
     // asserting that the body is actually posted correctly.
-    $this->webUser = $this->drupalCreateUser(['access content', 'access comments', 'post comments', 'skip comment approval']);
+    $this->webUser = $this->drupalCreateUser([
+      'access content',
+      'access comments',
+      'post comments',
+      'skip comment approval',
+    ]);
     $this->drupalLogin($this->webUser);
     $this->postComment($book_node, $this->randomMachineName(), $this->randomMachineName());
   }
diff --git a/web/core/modules/comment/tests/src/Functional/CommentLanguageTest.php b/web/core/modules/comment/tests/src/Functional/CommentLanguageTest.php
index cb2c796683fe68c34ff20ccfff741410319389ac..7970718d1c6d1fe77007c675fcdf9d9789a5a59c 100644
--- a/web/core/modules/comment/tests/src/Functional/CommentLanguageTest.php
+++ b/web/core/modules/comment/tests/src/Functional/CommentLanguageTest.php
@@ -45,7 +45,17 @@ protected function setUp() {
     $this->drupalCreateContentType(['type' => 'article', 'name' => 'Article']);
 
     // Create and log in user.
-    $admin_user = $this->drupalCreateUser(['administer site configuration', 'administer languages', 'access administration pages', 'administer content types', 'administer comments', 'create article content', 'access comments', 'post comments', 'skip comment approval']);
+    $admin_user = $this->drupalCreateUser([
+      'administer site configuration',
+      'administer languages',
+      'access administration pages',
+      'administer content types',
+      'administer comments',
+      'create article content',
+      'access comments',
+      'post comments',
+      'skip comment approval',
+    ]);
     $this->drupalLogin($admin_user);
 
     // Add language.
diff --git a/web/core/modules/comment/tests/src/Functional/CommentLinksAlterTest.php b/web/core/modules/comment/tests/src/Functional/CommentLinksAlterTest.php
index 7c4349b1bdc5b763e5bb48c676c96788b237b1dc..3abc1f87f18dd0acddac35160906aa072d21c19a 100644
--- a/web/core/modules/comment/tests/src/Functional/CommentLinksAlterTest.php
+++ b/web/core/modules/comment/tests/src/Functional/CommentLinksAlterTest.php
@@ -34,7 +34,7 @@ public function testCommentLinksAlter() {
 
     $this->drupalGet('node/' . $this->node->id());
 
-    $this->assertLink(t('Report'));
+    $this->assertSession()->linkExists(t('Report'));
   }
 
 }
diff --git a/web/core/modules/comment/tests/src/Functional/CommentLinksTest.php b/web/core/modules/comment/tests/src/Functional/CommentLinksTest.php
index 34a815c0287bbbee3414f0e98856f9c045dbe2f5..0d501c7bb23909ca0e3f7add956966c48ca9f8fd 100644
--- a/web/core/modules/comment/tests/src/Functional/CommentLinksTest.php
+++ b/web/core/modules/comment/tests/src/Functional/CommentLinksTest.php
@@ -101,9 +101,9 @@ public function testCommentLinks() {
       // In teaser view, a link containing the comment count is always
       // expected.
       if ($path == 'node') {
-        $this->assertLink(t('1 comment'));
+        $this->assertSession()->linkExists(t('1 comment'));
       }
-      $this->assertLink('Add new comment');
+      $this->assertSession()->linkExists('Add new comment');
     }
 
     $display_repository = $this->container->get('entity_display.repository');
@@ -133,13 +133,13 @@ public function testCommentLinks() {
       ->removeComponent('links')
       ->save();
     $this->drupalGet($this->node->toUrl());
-    $this->assertNoLink('1 comment');
-    $this->assertNoLink('Add new comment');
+    $this->assertSession()->linkNotExists('1 comment');
+    $this->assertSession()->linkNotExists('Add new comment');
 
     // Visit the full node, make sure there are links for the comment.
     $this->drupalGet('node/' . $this->node->id());
     $this->assertText($comment->getSubject());
-    $this->assertLink('Reply');
+    $this->assertSession()->linkExists('Reply');
 
     // Make sure we can hide comment links.
     $display_repository->getViewDisplay('comment', 'comment')
@@ -147,7 +147,7 @@ public function testCommentLinks() {
       ->save();
     $this->drupalGet('node/' . $this->node->id());
     $this->assertText($comment->getSubject());
-    $this->assertNoLink('Reply');
+    $this->assertSession()->linkNotExists('Reply');
   }
 
 }
diff --git a/web/core/modules/comment/tests/src/Functional/CommentNewIndicatorTest.php b/web/core/modules/comment/tests/src/Functional/CommentNewIndicatorTest.php
index 9f7b74b93da16a231186d9d1f3a125ec964d098c..ba0a16bd5a0c3ae736f47ec53ff30d94e8c056c3 100644
--- a/web/core/modules/comment/tests/src/Functional/CommentNewIndicatorTest.php
+++ b/web/core/modules/comment/tests/src/Functional/CommentNewIndicatorTest.php
@@ -60,8 +60,8 @@ public function testCommentNewCommentsIndicator() {
     // node.
     $this->drupalLogin($this->adminUser);
     $this->drupalGet('node');
-    $this->assertNoLink(t('@count comments', ['@count' => 0]));
-    $this->assertLink(t('Read more'));
+    $this->assertSession()->linkNotExists(t('@count comments', ['@count' => 0]));
+    $this->assertSession()->linkExists(t('Read more'));
     // Verify the data-history-node-last-comment-timestamp attribute, which is
     // used by the drupal.node-new-comments-link library to determine whether
     // a "x new comments" link might be necessary or not. We do this in
diff --git a/web/core/modules/comment/tests/src/Functional/CommentNonNodeTest.php b/web/core/modules/comment/tests/src/Functional/CommentNonNodeTest.php
index d7676cdd0edf942dd6edaaa05c25f51f6e485985..295fa377b39dbfd7265b1fa038c943a29fd4411f 100644
--- a/web/core/modules/comment/tests/src/Functional/CommentNonNodeTest.php
+++ b/web/core/modules/comment/tests/src/Functional/CommentNonNodeTest.php
@@ -355,7 +355,7 @@ public function testCommentFunctionality() {
     // Attempt to view comments while disallowed.
     $this->drupalGet('entity-test/' . $this->entity->id());
     $this->assertSession()->responseNotMatches('@<h2[^>]*>Comments</h2>@', 'Comments were not displayed.');
-    $this->assertNoLink('Add new comment', 'Link to add comment was found.');
+    $this->assertSession()->linkNotExists('Add new comment', 'Link to add comment was found.');
 
     // Attempt to view test entity comment form while disallowed.
     $this->drupalGet('comment/reply/entity_test/' . $this->entity->id() . '/comment');
@@ -371,8 +371,8 @@ public function testCommentFunctionality() {
     ]);
     $this->drupalGet('entity_test/' . $this->entity->id());
     $this->assertPattern('@<h2[^>]*>Comments</h2>@', 'Comments were displayed.');
-    $this->assertLink('Log in', 0, 'Link to login was found.');
-    $this->assertLink('register', 0, 'Link to register was found.');
+    $this->assertSession()->linkExists('Log in', 0, 'Link to login was found.');
+    $this->assertSession()->linkExists('register', 0, 'Link to register was found.');
     $this->assertNoFieldByName('subject[0][value]', '', 'Subject field not found.');
     $this->assertNoFieldByName('comment_body[0][value]', '', 'Comment field not found.');
 
diff --git a/web/core/modules/comment/tests/src/Functional/CommentPreviewTest.php b/web/core/modules/comment/tests/src/Functional/CommentPreviewTest.php
index 4f029a7f932871d7b27dc487f8ead5c398926dc7..06f8a7bd62a6e922b2f7fcbc0d3cd80586bf8a7d 100644
--- a/web/core/modules/comment/tests/src/Functional/CommentPreviewTest.php
+++ b/web/core/modules/comment/tests/src/Functional/CommentPreviewTest.php
@@ -128,7 +128,12 @@ public function testCommentPreviewDuplicateSubmission() {
    * Tests comment edit, preview, and save.
    */
   public function testCommentEditPreviewSave() {
-    $web_user = $this->drupalCreateUser(['access comments', 'post comments', 'skip comment approval', 'edit own comments']);
+    $web_user = $this->drupalCreateUser([
+      'access comments',
+      'post comments',
+      'skip comment approval',
+      'edit own comments',
+    ]);
     $this->drupalLogin($this->adminUser);
     $this->setCommentPreview(DRUPAL_OPTIONAL);
     $this->setCommentForm(TRUE);
diff --git a/web/core/modules/config/tests/src/Functional/ConfigDependencyWebTest.php b/web/core/modules/config/tests/src/Functional/ConfigDependencyWebTest.php
index cce78346b71567cef65c3c170968c8d149a4e498..f5ddd141e1afb79be100061507f0a539bae2f84b 100644
--- a/web/core/modules/config/tests/src/Functional/ConfigDependencyWebTest.php
+++ b/web/core/modules/config/tests/src/Functional/ConfigDependencyWebTest.php
@@ -35,7 +35,9 @@ class ConfigDependencyWebTest extends BrowserTestBase {
    * @see \Drupal\Core\Config\Entity\ConfigDependencyDeleteFormTrait
    */
   public function testConfigDependencyDeleteFormTrait() {
-    $this->drupalLogin($this->drupalCreateUser(['administer site configuration']));
+    $this->drupalLogin($this->drupalCreateUser([
+      'administer site configuration',
+    ]));
 
     /** @var \Drupal\Core\Config\Entity\ConfigEntityStorage $storage */
     $storage = $this->container->get('entity_type.manager')->getStorage('config_test');
diff --git a/web/core/modules/config/tests/src/Functional/ConfigEntityFormOverrideTest.php b/web/core/modules/config/tests/src/Functional/ConfigEntityFormOverrideTest.php
index 628fb4bf826d043b03d4bd27d949e687ec9d175a..ddb839ed21d6dead3699b4e388bded5e316f82ad 100644
--- a/web/core/modules/config/tests/src/Functional/ConfigEntityFormOverrideTest.php
+++ b/web/core/modules/config/tests/src/Functional/ConfigEntityFormOverrideTest.php
@@ -25,7 +25,9 @@ class ConfigEntityFormOverrideTest extends BrowserTestBase {
    * Tests that overrides do not affect forms or listing screens.
    */
   public function testFormsWithOverrides() {
-    $this->drupalLogin($this->drupalCreateUser(['administer site configuration']));
+    $this->drupalLogin($this->drupalCreateUser([
+      'administer site configuration',
+    ]));
 
     $original_label = 'Default';
     $overridden_label = 'Overridden label';
diff --git a/web/core/modules/config/tests/src/Functional/ConfigEntityListMultilingualTest.php b/web/core/modules/config/tests/src/Functional/ConfigEntityListMultilingualTest.php
index 882190a9c063b0eb6e8e04088c22fc00ce5a33ac..496d67c4f3d7c64b43a1f48b26ec3a3b7e2a2b80 100644
--- a/web/core/modules/config/tests/src/Functional/ConfigEntityListMultilingualTest.php
+++ b/web/core/modules/config/tests/src/Functional/ConfigEntityListMultilingualTest.php
@@ -41,7 +41,10 @@ protected function setUp() {
    */
   public function testListUI() {
     // Log in as an administrative user to access the full menu trail.
-    $this->drupalLogin($this->drupalCreateUser(['access administration pages', 'administer site configuration']));
+    $this->drupalLogin($this->drupalCreateUser([
+      'access administration pages',
+      'administer site configuration',
+    ]));
 
     // Get the list page.
     $this->drupalGet('admin/structure/config_test');
diff --git a/web/core/modules/config/tests/src/Functional/ConfigEntityListTest.php b/web/core/modules/config/tests/src/Functional/ConfigEntityListTest.php
index 786c6296a279040cff481d6e7481ba14f731a3f5..cd12fbde7c6e1a938245e1f2dd4a4b9c2864a846 100644
--- a/web/core/modules/config/tests/src/Functional/ConfigEntityListTest.php
+++ b/web/core/modules/config/tests/src/Functional/ConfigEntityListTest.php
@@ -156,7 +156,10 @@ public function testList() {
    */
   public function testListUI() {
     // Log in as an administrative user to access the full menu trail.
-    $this->drupalLogin($this->drupalCreateUser(['access administration pages', 'administer site configuration']));
+    $this->drupalLogin($this->drupalCreateUser([
+      'access administration pages',
+      'administer site configuration',
+    ]));
 
     // Get the list callback page.
     $this->drupalGet('admin/structure/config_test');
@@ -190,7 +193,7 @@ public function testListUI() {
     $this->assertNotEmpty($elements[2]->find('xpath', '//ul'), 'Operations list found.');
 
     // Add a new entity using the operations link.
-    $this->assertLink('Add test configuration');
+    $this->assertSession()->linkExists('Add test configuration');
     $this->clickLink('Add test configuration');
     $this->assertSession()->statusCodeEquals(200);
     $edit = [
@@ -254,7 +257,9 @@ public function testListUI() {
    * Test paging.
    */
   public function testPager() {
-    $this->drupalLogin($this->drupalCreateUser(['administer site configuration']));
+    $this->drupalLogin($this->drupalCreateUser([
+      'administer site configuration',
+    ]));
 
     $storage = \Drupal::service('entity_type.manager')->getListBuilder('config_test')->getStorage();
 
diff --git a/web/core/modules/config/tests/src/Functional/ConfigEntityStatusUITest.php b/web/core/modules/config/tests/src/Functional/ConfigEntityStatusUITest.php
index 4b062bcd22ee826ba064ca972fd5d0644897ace7..ef994d76fb01d0b0080278560ba25cc9268b43ad 100644
--- a/web/core/modules/config/tests/src/Functional/ConfigEntityStatusUITest.php
+++ b/web/core/modules/config/tests/src/Functional/ConfigEntityStatusUITest.php
@@ -27,7 +27,9 @@ class ConfigEntityStatusUITest extends BrowserTestBase {
    * Tests status operations.
    */
   public function testCRUD() {
-    $this->drupalLogin($this->drupalCreateUser(['administer site configuration']));
+    $this->drupalLogin($this->drupalCreateUser([
+      'administer site configuration',
+    ]));
 
     $id = strtolower($this->randomMachineName());
     $edit = [
diff --git a/web/core/modules/config/tests/src/Functional/ConfigEntityTest.php b/web/core/modules/config/tests/src/Functional/ConfigEntityTest.php
index ef6b327539a59f54b03fd549a46c5125a7664c44..cff042f7a830302b07c4e08e50d63e71d3640c89 100644
--- a/web/core/modules/config/tests/src/Functional/ConfigEntityTest.php
+++ b/web/core/modules/config/tests/src/Functional/ConfigEntityTest.php
@@ -236,7 +236,9 @@ public function testCRUD() {
    * Tests CRUD operations through the UI.
    */
   public function testCRUDUI() {
-    $this->drupalLogin($this->drupalCreateUser(['administer site configuration']));
+    $this->drupalLogin($this->drupalCreateUser([
+      'administer site configuration',
+    ]));
 
     $id = strtolower($this->randomMachineName());
     $label1 = $this->randomMachineName();
diff --git a/web/core/modules/config/tests/src/Functional/ConfigFormOverrideTest.php b/web/core/modules/config/tests/src/Functional/ConfigFormOverrideTest.php
index 14edd8838685611e1e621ae02ed7a8cded636ff7..75ab4a7a8cc77d9a31c81e458ab4e89df7d4cf42 100644
--- a/web/core/modules/config/tests/src/Functional/ConfigFormOverrideTest.php
+++ b/web/core/modules/config/tests/src/Functional/ConfigFormOverrideTest.php
@@ -21,7 +21,10 @@ class ConfigFormOverrideTest extends BrowserTestBase {
    * Tests that overrides do not affect forms.
    */
   public function testFormsWithOverrides() {
-    $this->drupalLogin($this->drupalCreateUser(['access administration pages', 'administer site configuration']));
+    $this->drupalLogin($this->drupalCreateUser([
+      'access administration pages',
+      'administer site configuration',
+    ]));
 
     $overridden_name = 'Site name global conf override';
 
diff --git a/web/core/modules/config/tests/src/Functional/ConfigInstallWebTest.php b/web/core/modules/config/tests/src/Functional/ConfigInstallWebTest.php
index 3cc8fda79023d752842c97e993d0157f103971d1..745a3f5482242015dabf502a91b11bd12cee5897 100644
--- a/web/core/modules/config/tests/src/Functional/ConfigInstallWebTest.php
+++ b/web/core/modules/config/tests/src/Functional/ConfigInstallWebTest.php
@@ -34,7 +34,11 @@ class ConfigInstallWebTest extends BrowserTestBase {
   protected function setUp() {
     parent::setUp();
 
-    $this->adminUser = $this->drupalCreateUser(['administer modules', 'administer themes', 'administer site configuration']);
+    $this->adminUser = $this->drupalCreateUser([
+      'administer modules',
+      'administer themes',
+      'administer site configuration',
+    ]);
 
     // Ensure the global variable being asserted by this test does not exist;
     // a previous test executed in this request/process might have set it.
diff --git a/web/core/modules/config/tests/src/Functional/ConfigLanguageOverrideWebTest.php b/web/core/modules/config/tests/src/Functional/ConfigLanguageOverrideWebTest.php
index b35821cb37e931bf848f48133f9b439d7d085082..4399f5810724625d024c31fc00555e540f1e5405 100644
--- a/web/core/modules/config/tests/src/Functional/ConfigLanguageOverrideWebTest.php
+++ b/web/core/modules/config/tests/src/Functional/ConfigLanguageOverrideWebTest.php
@@ -40,7 +40,10 @@ protected function setUp() {
    * Tests translating the site name.
    */
   public function testSiteNameTranslation() {
-    $adminUser = $this->drupalCreateUser(['administer site configuration', 'administer languages']);
+    $adminUser = $this->drupalCreateUser([
+      'administer site configuration',
+      'administer languages',
+    ]);
     $this->drupalLogin($adminUser);
 
     // Add a custom language.
diff --git a/web/core/modules/config/tests/src/FunctionalJavascript/ConfigEntityTest.php b/web/core/modules/config/tests/src/FunctionalJavascript/ConfigEntityTest.php
index 7ea62e2e90f114e011571561787451b8a335d586..5337ab909be7a2abffa17da56af7cafe0f834749 100644
--- a/web/core/modules/config/tests/src/FunctionalJavascript/ConfigEntityTest.php
+++ b/web/core/modules/config/tests/src/FunctionalJavascript/ConfigEntityTest.php
@@ -25,7 +25,9 @@ class ConfigEntityTest extends WebDriverTestBase {
    * Tests ajax operations through the UI on 'Add' page.
    */
   public function testAjaxOnAddPage() {
-    $this->drupalLogin($this->drupalCreateUser(['administer site configuration']));
+    $this->drupalLogin($this->drupalCreateUser([
+      'administer site configuration',
+    ]));
 
     $page = $this->getSession()->getPage();
     $assert_session = $this->assertSession();
diff --git a/web/core/modules/config_translation/tests/src/Functional/ConfigTranslationInstallTest.php b/web/core/modules/config_translation/tests/src/Functional/ConfigTranslationInstallTest.php
index 4594e06e8017fab803fc596d9a1164868047822f..a4d174a8c79772e5d32aab7bfa07d7cd80496ce6 100644
--- a/web/core/modules/config_translation/tests/src/Functional/ConfigTranslationInstallTest.php
+++ b/web/core/modules/config_translation/tests/src/Functional/ConfigTranslationInstallTest.php
@@ -39,6 +39,7 @@ protected function setUpLanguage() {
    *
    * @param string $langcode
    *   The language code.
+   *
    * @return string
    *   Contents for the test .po file.
    */
diff --git a/web/core/modules/config_translation/tests/src/Functional/ConfigTranslationOverviewTest.php b/web/core/modules/config_translation/tests/src/Functional/ConfigTranslationOverviewTest.php
index 3519a5c7b347e68184e7ba7b8eae310772ceb6b5..99da0efc6f50e4fd15ca31b167e09c9952b49a79 100644
--- a/web/core/modules/config_translation/tests/src/Functional/ConfigTranslationOverviewTest.php
+++ b/web/core/modules/config_translation/tests/src/Functional/ConfigTranslationOverviewTest.php
@@ -126,7 +126,7 @@ public function testMapperListPage() {
       $this->assertRaw('<th>' . t('Language') . '</th>');
 
       $this->drupalGet($base_url);
-      $this->assertLink(t('Translate @title', ['@title' => $entity_type->getSingularLabel()]));
+      $this->assertSession()->linkExists(t('Translate @title', ['@title' => $entity_type->getSingularLabel()]));
     }
   }
 
diff --git a/web/core/modules/config_translation/tests/src/Functional/ConfigTranslationUiTest.php b/web/core/modules/config_translation/tests/src/Functional/ConfigTranslationUiTest.php
index 343b3481103231f8fd68e2a49dfcc74befa18cb5..bc540b0067310d5da3b705d1fd0e49c2124c4fa3 100644
--- a/web/core/modules/config_translation/tests/src/Functional/ConfigTranslationUiTest.php
+++ b/web/core/modules/config_translation/tests/src/Functional/ConfigTranslationUiTest.php
@@ -299,7 +299,7 @@ public function testSourceValueDuplicateSave() {
     // While translator can access the translation page, the edit link is not
     // present due to lack of permissions.
     $this->drupalGet($translation_base_url);
-    $this->assertNoLink(t('Edit'));
+    $this->assertSession()->linkNotExists(t('Edit'));
 
     // Check 'Add' link for French.
     $this->assertLinkByHref("$translation_base_url/fr/add");
@@ -331,7 +331,7 @@ public function testContactConfigEntityTranslation() {
 
     // Make sure translate tab is present.
     $this->drupalGet('admin/structure/contact/manage/feedback');
-    $this->assertLink(t('Translate @type', ['@type' => 'contact form']));
+    $this->assertSession()->linkExists(t('Translate @type', ['@type' => 'contact form']));
 
     // Visit the form to confirm the changes.
     $this->drupalGet('contact/feedback');
@@ -339,7 +339,7 @@ public function testContactConfigEntityTranslation() {
 
     foreach ($this->langcodes as $langcode) {
       $this->drupalGet($translation_base_url);
-      $this->assertLink(t('Translate @type', ['@type' => 'contact form']));
+      $this->assertSession()->linkExists(t('Translate @type', ['@type' => 'contact form']));
 
       // 'Add' link should be present for $langcode translation.
       $translation_page_url = "$translation_base_url/$langcode/add";
@@ -435,7 +435,7 @@ public function testContactConfigEntityTranslation() {
     // While translator can access the translation page, the edit link is not
     // present due to lack of permissions.
     $this->drupalGet($translation_base_url);
-    $this->assertNoLink(t('Edit'));
+    $this->assertSession()->linkNotExists(t('Edit'));
 
     // Check 'Add' link for French.
     $this->assertLinkByHref("$translation_base_url/fr/add");
@@ -516,10 +516,10 @@ public function testAccountSettingsConfigurationTranslation() {
     $this->drupalLogin($this->adminUser);
 
     $this->drupalGet('admin/config/people/accounts');
-    $this->assertLink(t('Translate @type', ['@type' => 'account settings']));
+    $this->assertSession()->linkExists(t('Translate @type', ['@type' => 'account settings']));
 
     $this->drupalGet('admin/config/people/accounts/translate');
-    $this->assertLink(t('Translate @type', ['@type' => 'account settings']));
+    $this->assertSession()->linkExists(t('Translate @type', ['@type' => 'account settings']));
     $this->assertLinkByHref('admin/config/people/accounts/translate/fr/add');
 
     // Update account settings fields for French.
diff --git a/web/core/modules/contact/tests/src/Functional/ContactPersonalTest.php b/web/core/modules/contact/tests/src/Functional/ContactPersonalTest.php
index a6a5e20163b905399f5509565b1d40db6326d2b5..0029b2eb39b861e87b28150e7a4286b247a72169 100644
--- a/web/core/modules/contact/tests/src/Functional/ContactPersonalTest.php
+++ b/web/core/modules/contact/tests/src/Functional/ContactPersonalTest.php
@@ -57,11 +57,19 @@ protected function setUp() {
     parent::setUp();
 
     // Create an admin user.
-    $this->adminUser = $this->drupalCreateUser(['administer contact forms', 'administer users', 'administer account settings', 'access site reports']);
+    $this->adminUser = $this->drupalCreateUser([
+      'administer contact forms',
+      'administer users',
+      'administer account settings',
+      'access site reports',
+    ]);
 
     // Create some normal users with their contact forms enabled by default.
     $this->config('contact.settings')->set('user_default_enabled', TRUE)->save();
-    $this->webUser = $this->drupalCreateUser(['access user profiles', 'access user contact forms']);
+    $this->webUser = $this->drupalCreateUser([
+      'access user profiles',
+      'access user contact forms',
+    ]);
     $this->contactUser = $this->drupalCreateUser();
   }
 
diff --git a/web/core/modules/contact/tests/src/Functional/ContactSitewideTest.php b/web/core/modules/contact/tests/src/Functional/ContactSitewideTest.php
index ac8bf0ebfbebec937f81e6383650f1fc66ef0786..20b924c5ac8210864982cbe95922adbebaa618d5 100644
--- a/web/core/modules/contact/tests/src/Functional/ContactSitewideTest.php
+++ b/web/core/modules/contact/tests/src/Functional/ContactSitewideTest.php
@@ -59,7 +59,9 @@ protected function setUp() {
    */
   public function testSiteWideContact() {
     // Tests name and email fields for authenticated and anonymous users.
-    $this->drupalLogin($this->drupalCreateUser(['access site-wide contact form']));
+    $this->drupalLogin($this->drupalCreateUser([
+      'access site-wide contact form',
+    ]));
     $this->drupalGet('contact');
 
     // Ensure that there is no textfield for name.
diff --git a/web/core/modules/content_moderation/src/EntityTypeInfo.php b/web/core/modules/content_moderation/src/EntityTypeInfo.php
index 363ecaac919695bbfa5889adab61f8b7695c91af..00ddda2dfcda086c2b5acd46ba6576332cabbc9e 100644
--- a/web/core/modules/content_moderation/src/EntityTypeInfo.php
+++ b/web/core/modules/content_moderation/src/EntityTypeInfo.php
@@ -321,37 +321,36 @@ public function entityPrepareForm(EntityInterface $entity, $operation, FormState
   public function formAlter(array &$form, FormStateInterface $form_state, $form_id) {
     $form_object = $form_state->getFormObject();
     if ($form_object instanceof BundleEntityFormBase) {
-      $config_entity_type = $form_object->getEntity()->getEntityType();
-      $bundle_of = $config_entity_type->getBundleOf();
+      $config_entity = $form_object->getEntity();
+      $bundle_of = $config_entity->getEntityType()->getBundleOf();
       if ($bundle_of
           && ($bundle_of_entity_type = $this->entityTypeManager->getDefinition($bundle_of))
-          && $this->moderationInfo->canModerateEntitiesOfEntityType($bundle_of_entity_type)) {
-        $this->entityTypeManager->getHandler($config_entity_type->getBundleOf(), 'moderation')->enforceRevisionsBundleFormAlter($form, $form_state, $form_id);
+          && $this->moderationInfo->shouldModerateEntitiesOfBundle($bundle_of_entity_type, $config_entity->id())) {
+        $this->entityTypeManager->getHandler($bundle_of, 'moderation')->enforceRevisionsBundleFormAlter($form, $form_state, $form_id);
       }
     }
     elseif ($this->isModeratedEntityEditForm($form_object)) {
       /** @var \Drupal\Core\Entity\ContentEntityFormInterface $form_object */
       /** @var \Drupal\Core\Entity\ContentEntityInterface $entity */
       $entity = $form_object->getEntity();
-      if ($this->moderationInfo->isModeratedEntity($entity)) {
-        $this->entityTypeManager
-          ->getHandler($entity->getEntityTypeId(), 'moderation')
-          ->enforceRevisionsEntityFormAlter($form, $form_state, $form_id);
-
-        // Submit handler to redirect to the latest version, if available.
-        $form['actions']['submit']['#submit'][] = [EntityTypeInfo::class, 'bundleFormRedirect'];
-
-        // Move the 'moderation_state' field widget to the footer region, if
-        // available.
-        if (isset($form['footer']) && in_array($form_object->getOperation(), ['edit', 'default'], TRUE)) {
-          $form['moderation_state']['#group'] = 'footer';
-        }
 
-        // If the publishing status exists in the meta region, replace it with
-        // the current state instead.
-        if (isset($form['meta']['published'])) {
-          $form['meta']['published']['#markup'] = $this->moderationInfo->getWorkflowForEntity($entity)->getTypePlugin()->getState($entity->moderation_state->value)->label();
-        }
+      $this->entityTypeManager
+        ->getHandler($entity->getEntityTypeId(), 'moderation')
+        ->enforceRevisionsEntityFormAlter($form, $form_state, $form_id);
+
+      // Submit handler to redirect to the latest version, if available.
+      $form['actions']['submit']['#submit'][] = [EntityTypeInfo::class, 'bundleFormRedirect'];
+
+      // Move the 'moderation_state' field widget to the footer region, if
+      // available.
+      if (isset($form['footer']) && in_array($form_object->getOperation(), ['edit', 'default'], TRUE)) {
+        $form['moderation_state']['#group'] = 'footer';
+      }
+
+      // If the publishing status exists in the meta region, replace it with
+      // the current state instead.
+      if (isset($form['meta']['published'])) {
+        $form['meta']['published']['#markup'] = $this->moderationInfo->getWorkflowForEntity($entity)->getTypePlugin()->getState($entity->moderation_state->value)->label();
       }
     }
   }
diff --git a/web/core/modules/content_moderation/src/Plugin/Field/ModerationStateFieldItemList.php b/web/core/modules/content_moderation/src/Plugin/Field/ModerationStateFieldItemList.php
index 679fca92db260a258bb393c9c4e7eeb9ae1a06db..7e717881cfd8a75da196b7457b71f626c359d664 100644
--- a/web/core/modules/content_moderation/src/Plugin/Field/ModerationStateFieldItemList.php
+++ b/web/core/modules/content_moderation/src/Plugin/Field/ModerationStateFieldItemList.php
@@ -81,6 +81,7 @@ protected function loadContentModerationStateRevision(ContentEntityInterface $en
       // being reverted.
       ->condition('content_entity_revision_id', $entity->isNewRevision() ? $entity->getLoadedRevisionId() : $entity->getRevisionId())
       ->condition('workflow', $moderation_info->getWorkflowForEntity($entity)->id())
+      ->condition('langcode', $entity->language()->getId())
       ->allRevisions()
       ->sort('revision_id', 'DESC')
       ->execute();
diff --git a/web/core/modules/content_moderation/tests/src/Functional/ModeratedContentViewTest.php b/web/core/modules/content_moderation/tests/src/Functional/ModeratedContentViewTest.php
index 0faf532f3c2868ade622134510eb9339d4bdfb2d..d5906e0de9531593524b2027b2060671197fc596 100644
--- a/web/core/modules/content_moderation/tests/src/Functional/ModeratedContentViewTest.php
+++ b/web/core/modules/content_moderation/tests/src/Functional/ModeratedContentViewTest.php
@@ -54,7 +54,12 @@ public function setUp() {
     $workflow->getTypePlugin()->addEntityTypeAndBundle('node', 'article');
     $workflow->save();
 
-    $this->adminUser = $this->drupalCreateUser(['access administration pages', 'view any unpublished content', 'administer nodes', 'bypass node access']);
+    $this->adminUser = $this->drupalCreateUser([
+      'access administration pages',
+      'view any unpublished content',
+      'administer nodes',
+      'bypass node access',
+    ]);
   }
 
   /**
diff --git a/web/core/modules/content_moderation/tests/src/Functional/ModerationStateNodeTypeTest.php b/web/core/modules/content_moderation/tests/src/Functional/ModerationStateNodeTypeTest.php
index 8999dae1229bfc2df18c7e0d97cacc2976f3b929..5c4b70a4e21dc622e7a27203895eace24dc7e54b 100644
--- a/web/core/modules/content_moderation/tests/src/Functional/ModerationStateNodeTypeTest.php
+++ b/web/core/modules/content_moderation/tests/src/Functional/ModerationStateNodeTypeTest.php
@@ -67,9 +67,18 @@ public function testEnablingOnExistingContent() {
     ], t('Save'));
     $this->assertText('Not moderated Test has been created.');
 
+    // Check that the 'Create new revision' is not disabled.
+    $this->drupalGet('/admin/structure/types/manage/not_moderated');
+    $this->assertNull($this->assertSession()->fieldExists('options[revision]')->getAttribute('disabled'));
+
     // Now enable moderation state.
     $this->enableModerationThroughUi('not_moderated');
 
+    // Check that the 'Create new revision' checkbox is checked and disabled.
+    $this->drupalGet('/admin/structure/types/manage/not_moderated');
+    $this->assertSession()->checkboxChecked('options[revision]');
+    $this->assertSession()->fieldDisabled('options[revision]');
+
     // And make sure it works.
     $nodes = \Drupal::entityTypeManager()->getStorage('node')
       ->loadByProperties(['title' => 'Test']);
diff --git a/web/core/modules/content_moderation/tests/src/Functional/ModerationStateTestBase.php b/web/core/modules/content_moderation/tests/src/Functional/ModerationStateTestBase.php
index a2600abd7896437a073fbd9ae4b29d05fd7e8b92..530acff33836d0ad0041dd64c4ec904bf7b814a3 100644
--- a/web/core/modules/content_moderation/tests/src/Functional/ModerationStateTestBase.php
+++ b/web/core/modules/content_moderation/tests/src/Functional/ModerationStateTestBase.php
@@ -112,10 +112,6 @@ protected function createContentTypeFromUi($content_type_name, $content_type_id,
     $this->drupalGet('admin/structure/types');
     $this->clickLink('Add content type');
 
-    // Check that the 'Create new revision' checkbox is checked and disabled.
-    $this->assertSession()->checkboxChecked('options[revision]');
-    $this->assertSession()->fieldDisabled('options[revision]');
-
     $edit = [
       'name' => $content_type_name,
       'type' => $content_type_id,
diff --git a/web/core/modules/content_moderation/tests/src/Functional/ViewsModerationStateFilterTest.php b/web/core/modules/content_moderation/tests/src/Functional/ViewsModerationStateFilterTest.php
index 9598e1bd081ecba4b4e85d5bffa097828402a8b3..7aa509f2fe9ce4a5853f0d7143d4acaf641de85f 100644
--- a/web/core/modules/content_moderation/tests/src/Functional/ViewsModerationStateFilterTest.php
+++ b/web/core/modules/content_moderation/tests/src/Functional/ViewsModerationStateFilterTest.php
@@ -66,7 +66,10 @@ protected function setUp($import_test_views = TRUE) {
     $new_workflow->getTypePlugin()->addEntityTypeAndBundle('node', 'example_c');
     $new_workflow->save();
 
-    $this->drupalLogin($this->drupalCreateUser(['administer workflows', 'administer views']));
+    $this->drupalLogin($this->drupalCreateUser([
+      'administer workflows',
+      'administer views',
+    ]));
 
     $this->container->get('module_installer')->install(['content_moderation_test_views']);
 
diff --git a/web/core/modules/content_moderation/tests/src/Kernel/ModerationStateFieldItemListTest.php b/web/core/modules/content_moderation/tests/src/Kernel/ModerationStateFieldItemListTest.php
index ee03797de2cbdc2b14b8ed12c99a83de16c4c2ed..6479afd700486c3eab789e808cd5b055a158d592 100644
--- a/web/core/modules/content_moderation/tests/src/Kernel/ModerationStateFieldItemListTest.php
+++ b/web/core/modules/content_moderation/tests/src/Kernel/ModerationStateFieldItemListTest.php
@@ -401,4 +401,33 @@ public function testWithExistingUnmoderatedContent() {
     $this->assertEquals('published', $translation->moderation_state->value);
   }
 
+  /**
+   * Tests field item list translation support with unmoderated content.
+   */
+  public function testTranslationWithExistingUnmoderatedContent() {
+    $node = Node::create([
+      'title' => 'Published en',
+      'langcode' => 'en',
+      'type' => 'unmoderated',
+    ]);
+    $node->setPublished();
+    $node->save();
+
+    $workflow = Workflow::load('editorial');
+    $workflow->getTypePlugin()->addEntityTypeAndBundle('node', 'unmoderated');
+    $workflow->save();
+
+    $translation = $node->addTranslation('de');
+    $translation->moderation_state = 'draft';
+    $translation->save();
+
+    $node_storage = $this->container->get('entity_type.manager')->getStorage('node');
+    $node = $node_storage->loadRevision($node_storage->getLatestRevisionId($node->id()));
+
+    $this->assertEquals('published', $node->moderation_state->value);
+    $this->assertEquals('draft', $translation->moderation_state->value);
+    $this->assertTrue($node->isPublished());
+    $this->assertFalse($translation->isPublished());
+  }
+
 }
diff --git a/web/core/modules/content_translation/src/Controller/ContentTranslationController.php b/web/core/modules/content_translation/src/Controller/ContentTranslationController.php
index 5d48cc05335c49231b34156858a2d55f3aad81d0..254a4057ad5e69c9de93f33471a7e587599e3bd8 100644
--- a/web/core/modules/content_translation/src/Controller/ContentTranslationController.php
+++ b/web/core/modules/content_translation/src/Controller/ContentTranslationController.php
@@ -99,6 +99,7 @@ public function prepareTranslation(ContentEntityInterface $entity, LanguageInter
    *   The route match.
    * @param string $entity_type_id
    *   (optional) The entity type ID.
+   *
    * @return array
    *   Array of page elements to render.
    */
diff --git a/web/core/modules/content_translation/tests/src/Functional/ContentTranslationEntityBundleUITest.php b/web/core/modules/content_translation/tests/src/Functional/ContentTranslationEntityBundleUITest.php
index d9c0ab230652ac8279b5da326f713b8f69fd8450..76bada776e39762e52cda50ebe0f3dd10b46f3fc 100644
--- a/web/core/modules/content_translation/tests/src/Functional/ContentTranslationEntityBundleUITest.php
+++ b/web/core/modules/content_translation/tests/src/Functional/ContentTranslationEntityBundleUITest.php
@@ -26,7 +26,12 @@ class ContentTranslationEntityBundleUITest extends BrowserTestBase {
 
   protected function setUp() {
     parent::setUp();
-    $user = $this->drupalCreateUser(['access administration pages', 'administer languages', 'administer content translation', 'administer content types']);
+    $user = $this->drupalCreateUser([
+      'access administration pages',
+      'administer languages',
+      'administer content translation',
+      'administer content types',
+    ]);
     $this->drupalLogin($user);
   }
 
diff --git a/web/core/modules/content_translation/tests/src/Functional/ContentTranslationOperationsTest.php b/web/core/modules/content_translation/tests/src/Functional/ContentTranslationOperationsTest.php
index 347d4c9ec9a38054095783307e498404c77058f8..60e704ef49a7ab93481a83b01e07e01c18db48cb 100644
--- a/web/core/modules/content_translation/tests/src/Functional/ContentTranslationOperationsTest.php
+++ b/web/core/modules/content_translation/tests/src/Functional/ContentTranslationOperationsTest.php
@@ -64,7 +64,12 @@ protected function setUp() {
     \Drupal::service('router.builder')->rebuild();
 
     $this->baseUser1 = $this->drupalCreateUser(['access content overview']);
-    $this->baseUser2 = $this->drupalCreateUser(['access content overview', 'create content translations', 'update content translations', 'delete content translations']);
+    $this->baseUser2 = $this->drupalCreateUser([
+      'access content overview',
+      'create content translations',
+      'update content translations',
+      'delete content translations',
+    ]);
   }
 
   /**
diff --git a/web/core/modules/content_translation/tests/src/Functional/ContentTranslationSettingsTest.php b/web/core/modules/content_translation/tests/src/Functional/ContentTranslationSettingsTest.php
index 2f6455a9eb65d5782fe5467ff305208c66d8dd7d..4c99f1b75ac6d04e11e2915b95b6b9feeab5d774 100644
--- a/web/core/modules/content_translation/tests/src/Functional/ContentTranslationSettingsTest.php
+++ b/web/core/modules/content_translation/tests/src/Functional/ContentTranslationSettingsTest.php
@@ -49,7 +49,17 @@ protected function setUp() {
     $this->addDefaultCommentField('node', 'article', 'comment_article', CommentItemInterface::OPEN, 'comment_article');
     $this->addDefaultCommentField('node', 'page', 'comment_page');
 
-    $admin_user = $this->drupalCreateUser(['access administration pages', 'administer languages', 'administer content translation', 'administer content types', 'administer node fields', 'administer comment fields', 'administer comments', 'administer comment types', 'administer account settings']);
+    $admin_user = $this->drupalCreateUser([
+      'access administration pages',
+      'administer languages',
+      'administer content translation',
+      'administer content types',
+      'administer node fields',
+      'administer comment fields',
+      'administer comments',
+      'administer comment types',
+      'administer account settings',
+    ]);
     $this->drupalLogin($admin_user);
   }
 
@@ -59,7 +69,7 @@ protected function setUp() {
   public function testSettingsUI() {
     // Check for the content_translation_menu_links_discovered_alter() changes.
     $this->drupalGet('admin/config');
-    $this->assertLink('Content language and translation');
+    $this->assertSession()->linkExists('Content language and translation');
     $this->assertText('Configure language and translation support for content.');
     // Test that the translation settings are ignored if the bundle is marked
     // translatable but the entity type is not.
diff --git a/web/core/modules/content_translation/tests/src/Functional/ContentTranslationWorkflowsTest.php b/web/core/modules/content_translation/tests/src/Functional/ContentTranslationWorkflowsTest.php
index 168b6a59e19aacf8e23f675b95fa46424be16bd3..05655f04aa2ed13b4ff0144ceaebef68023ef0ec 100644
--- a/web/core/modules/content_translation/tests/src/Functional/ContentTranslationWorkflowsTest.php
+++ b/web/core/modules/content_translation/tests/src/Functional/ContentTranslationWorkflowsTest.php
@@ -125,7 +125,11 @@ public function testWorkflows() {
     $ops = ['create' => t('Add'), 'update' => t('Edit'), 'delete' => t('Delete')];
     $translations_url = $this->entity->toUrl('drupal:content-translation-overview');
     foreach ($ops as $current_op => $item) {
-      $user = $this->drupalCreateUser([$this->getTranslatePermission(), "$current_op content translations", 'view test entity']);
+      $user = $this->drupalCreateUser([
+        $this->getTranslatePermission(),
+        "$current_op content translations",
+        'view test entity',
+      ]);
       $this->drupalLogin($user);
       $this->drupalGet($translations_url);
 
@@ -138,10 +142,10 @@ public function testWorkflows() {
 
       foreach ($ops as $op => $label) {
         if ($op != $current_op) {
-          $this->assertNoLink($label, new FormattableMarkup('No %op link found.', ['%op' => $label]));
+          $this->assertSession()->linkNotExists($label, new FormattableMarkup('No %op link found.', ['%op' => $label]));
         }
         else {
-          $this->assertLink($label, 0, new FormattableMarkup('%op link found.', ['%op' => $label]));
+          $this->assertSession()->linkExists($label, 0, new FormattableMarkup('%op link found.', ['%op' => $label]));
         }
       }
     }
diff --git a/web/core/modules/contextual/tests/src/Functional/ContextualDynamicContextTest.php b/web/core/modules/contextual/tests/src/Functional/ContextualDynamicContextTest.php
index a9e2af5a4bf1f0299bfda5323628a818d0048ac8..10b61e5ca813c7d1dca0f1ca98afc777630421a7 100644
--- a/web/core/modules/contextual/tests/src/Functional/ContextualDynamicContextTest.php
+++ b/web/core/modules/contextual/tests/src/Functional/ContextualDynamicContextTest.php
@@ -66,8 +66,15 @@ protected function setUp() {
     ConfigurableLanguage::createFromLangcode('it')->save();
     $this->rebuildContainer();
 
-    $this->editorUser = $this->drupalCreateUser(['access content', 'access contextual links', 'edit any article content']);
-    $this->authenticatedUser = $this->drupalCreateUser(['access content', 'access contextual links']);
+    $this->editorUser = $this->drupalCreateUser([
+      'access content',
+      'access contextual links',
+      'edit any article content',
+    ]);
+    $this->authenticatedUser = $this->drupalCreateUser([
+      'access content',
+      'access contextual links',
+    ]);
     $this->anonymousUser = $this->drupalCreateUser(['access content']);
   }
 
diff --git a/web/core/modules/datetime/tests/src/Functional/DateTimeFieldTest.php b/web/core/modules/datetime/tests/src/Functional/DateTimeFieldTest.php
index 2c5ed0b3db00f9c47facbe670b8eb76ba6f46af0..b0dc9ee1a21c09a4ffaa633af2a12aee5847f034 100644
--- a/web/core/modules/datetime/tests/src/Functional/DateTimeFieldTest.php
+++ b/web/core/modules/datetime/tests/src/Functional/DateTimeFieldTest.php
@@ -460,23 +460,23 @@ public function testDatelistWidget() {
 
     $this->assertFieldByXPath("//*[@id=\"edit-$field_name-0-value-year\"]", NULL, 'Year element found.');
     $this->assertOptionSelected("edit-$field_name-0-value-year", '', 'No year selected.');
-    $this->assertOptionByText("edit-$field_name-0-value-year", t('Year'));
+    $this->assertSession()->optionExists("edit-$field_name-0-value-year", t('Year'));
     $this->assertFieldByXPath("//*[@id=\"edit-$field_name-0-value-month\"]", NULL, 'Month element found.');
     $this->assertOptionSelected("edit-$field_name-0-value-month", '', 'No month selected.');
-    $this->assertOptionByText("edit-$field_name-0-value-month", t('Month'));
+    $this->assertSession()->optionExists("edit-$field_name-0-value-month", t('Month'));
     $this->assertFieldByXPath("//*[@id=\"edit-$field_name-0-value-day\"]", NULL, 'Day element found.');
     $this->assertOptionSelected("edit-$field_name-0-value-day", '', 'No day selected.');
-    $this->assertOptionByText("edit-$field_name-0-value-day", t('Day'));
+    $this->assertSession()->optionExists("edit-$field_name-0-value-day", t('Day'));
     $this->assertFieldByXPath("//*[@id=\"edit-$field_name-0-value-hour\"]", NULL, 'Hour element found.');
     $this->assertOptionSelected("edit-$field_name-0-value-hour", '', 'No hour selected.');
-    $this->assertOptionByText("edit-$field_name-0-value-hour", t('Hour'));
+    $this->assertSession()->optionExists("edit-$field_name-0-value-hour", t('Hour'));
     $this->assertFieldByXPath("//*[@id=\"edit-$field_name-0-value-minute\"]", NULL, 'Minute element found.');
     $this->assertOptionSelected("edit-$field_name-0-value-minute", '', 'No minute selected.');
-    $this->assertOptionByText("edit-$field_name-0-value-minute", t('Minute'));
+    $this->assertSession()->optionExists("edit-$field_name-0-value-minute", t('Minute'));
     $this->assertNoFieldByXPath("//*[@id=\"edit-$field_name-0-value-second\"]", NULL, 'Second element not found.');
     $this->assertFieldByXPath("//*[@id=\"edit-$field_name-0-value-ampm\"]", NULL, 'AMPM element found.');
     $this->assertOptionSelected("edit-$field_name-0-value-ampm", '', 'No ampm selected.');
-    $this->assertOptionByText("edit-$field_name-0-value-ampm", t('AM/PM'));
+    $this->assertSession()->optionExists("edit-$field_name-0-value-ampm", t('AM/PM'));
 
     // Submit a valid date and ensure it is accepted.
     $date_value = ['year' => 2012, 'month' => 12, 'day' => 31, 'hour' => 5, 'minute' => 15];
diff --git a/web/core/modules/dblog/tests/src/Functional/DbLogTest.php b/web/core/modules/dblog/tests/src/Functional/DbLogTest.php
index fa54e14f5b5f312bb71ce572ec7ec256d55b56bb..e83ef261e0666bc12f9b1bfe123866599fe0a393 100644
--- a/web/core/modules/dblog/tests/src/Functional/DbLogTest.php
+++ b/web/core/modules/dblog/tests/src/Functional/DbLogTest.php
@@ -64,7 +64,12 @@ protected function setUp() {
     $this->drupalPlaceBlock('page_title_block');
 
     // Create users with specific permissions.
-    $this->adminUser = $this->drupalCreateUser(['administer site configuration', 'access administration pages', 'access site reports', 'administer users']);
+    $this->adminUser = $this->drupalCreateUser([
+      'administer site configuration',
+      'access administration pages',
+      'access site reports',
+      'administer users',
+    ]);
     $this->webUser = $this->drupalCreateUser([]);
   }
 
@@ -228,7 +233,7 @@ public function testLogEventPageWithMissingInfo() {
 
     // Verify location is available as plain text.
     $this->assertEquals($request_uri, $this->cssSelect('table.dblog-event > tbody > tr:nth-child(4) > td')[0]->getHtml());
-    $this->assertNoLink($request_uri);
+    $this->assertSession()->linkNotExists($request_uri);
   }
 
   /**
@@ -782,7 +787,7 @@ protected function getSeverityConstant($class) {
    */
   protected function assertLogMessage($log_message, $message) {
     $message_text = Unicode::truncate(Html::decodeEntities(strip_tags($log_message)), 56, TRUE, TRUE);
-    $this->assertLink($message_text, 0, $message);
+    $this->assertSession()->linkExists($message_text, 0, $message);
   }
 
   /**
diff --git a/web/core/modules/editor/tests/src/Functional/EditorLoadingTest.php b/web/core/modules/editor/tests/src/Functional/EditorLoadingTest.php
index 795d0daeb7431c1725249333616dcfb08ed631d2..99454969d373758ed4014a8dca023b07431367e7 100644
--- a/web/core/modules/editor/tests/src/Functional/EditorLoadingTest.php
+++ b/web/core/modules/editor/tests/src/Functional/EditorLoadingTest.php
@@ -105,9 +105,23 @@ protected function setUp() {
       ->save();
 
     // Create 3 users, each with access to different text formats.
-    $this->untrustedUser = $this->drupalCreateUser(['create article content', 'edit any article content']);
-    $this->normalUser = $this->drupalCreateUser(['create article content', 'edit any article content', 'use text format filtered_html']);
-    $this->privilegedUser = $this->drupalCreateUser(['create article content', 'edit any article content', 'create page content', 'edit any page content', 'use text format filtered_html', 'use text format full_html']);
+    $this->untrustedUser = $this->drupalCreateUser([
+      'create article content',
+      'edit any article content',
+    ]);
+    $this->normalUser = $this->drupalCreateUser([
+      'create article content',
+      'edit any article content',
+      'use text format filtered_html',
+    ]);
+    $this->privilegedUser = $this->drupalCreateUser([
+      'create article content',
+      'edit any article content',
+      'create page content',
+      'edit any page content',
+      'use text format filtered_html',
+      'use text format full_html',
+    ]);
   }
 
   /**
diff --git a/web/core/modules/editor/tests/src/Functional/EditorUploadImageScaleTest.php b/web/core/modules/editor/tests/src/Functional/EditorUploadImageScaleTest.php
index b7a88d809c5f21a1eb93018188a4d0c6a05bf5f3..f917b95e62b2fefc94581c380ee203ba8a974f2b 100644
--- a/web/core/modules/editor/tests/src/Functional/EditorUploadImageScaleTest.php
+++ b/web/core/modules/editor/tests/src/Functional/EditorUploadImageScaleTest.php
@@ -66,7 +66,10 @@ protected function setUp() {
     ])->save();
 
     // Create admin user.
-    $this->adminUser = $this->drupalCreateUser(['administer filters', 'use text format basic_html']);
+    $this->adminUser = $this->drupalCreateUser([
+      'administer filters',
+      'use text format basic_html',
+    ]);
     $this->drupalLogin($this->adminUser);
   }
 
diff --git a/web/core/modules/field/field.api.php b/web/core/modules/field/field.api.php
index 36e5fcefe9d615e87fe1bf5772cde48dfbb8da68..557ff58057f83db43215b0c6a918a560ba5d8467 100644
--- a/web/core/modules/field/field.api.php
+++ b/web/core/modules/field/field.api.php
@@ -17,8 +17,8 @@
  *
  * In the Field API, each field has a type, which determines what kind of data
  * (integer, string, date, etc.) the field can hold, which settings it provides,
- * and so on. The data type(s) accepted by a field are defined in
- * hook_field_schema().
+ * and so on. The data type(s) accepted by a field are defined in the class
+ * implementing \Drupal\Core\Field\FieldItemInterface::schema() method.
  *
  * Field types are plugins annotated with class
  * \Drupal\Core\Field\Annotation\FieldType, and implement plugin interface
diff --git a/web/core/modules/field/src/Entity/FieldStorageConfig.php b/web/core/modules/field/src/Entity/FieldStorageConfig.php
index fcfa7caf2025ba0ddf77b00cce3369312fa8e8f1..1209fffb88220814bdf69c30965b46ad88d4d70d 100644
--- a/web/core/modules/field/src/Entity/FieldStorageConfig.php
+++ b/web/core/modules/field/src/Entity/FieldStorageConfig.php
@@ -175,12 +175,14 @@ class FieldStorageConfig extends ConfigEntityBase implements FieldStorageConfigI
    * The custom storage indexes for the field data storage.
    *
    * This set of indexes is merged with the "default" indexes specified by the
-   * field type in hook_field_schema() to determine the actual set of indexes
-   * that get created.
+   * field type in the class implementing
+   * \Drupal\Core\Field\FieldItemInterface::schema() method to determine the
+   * actual set of indexes that get created.
    *
    * The indexes are defined using the same definition format as Schema API
    * index specifications. Only columns that are part of the field schema, as
-   * defined by the field type in hook_field_schema(), are allowed.
+   * defined by the field type in the class implementing
+   * \Drupal\Core\Field\FieldItemInterface::schema() method, are allowed.
    *
    * Some storage backends might not support indexes, and discard that
    * information.
diff --git a/web/core/modules/field/src/Tests/FieldTestBase.php b/web/core/modules/field/src/Tests/FieldTestBase.php
index ebd679c9e075399ee9328993de4253d0deb036a0..cf487d49df8db30478e96d5d9c5d5afd5d33a24e 100644
--- a/web/core/modules/field/src/Tests/FieldTestBase.php
+++ b/web/core/modules/field/src/Tests/FieldTestBase.php
@@ -24,6 +24,7 @@ abstract class FieldTestBase extends WebTestBase {
    *
    * @param $cardinality
    *   Number of values to generate.
+   *
    * @return
    *   An array of random values, in the format expected for field values.
    */
diff --git a/web/core/modules/field/tests/modules/field_test/field_test.module b/web/core/modules/field/tests/modules/field_test/field_test.module
index 585fa35c2f28c5bca798f8b9d94365817c87f534..7804a7ab4d6e1e9505b1612aedae9b796f0f0c83 100644
--- a/web/core/modules/field/tests/modules/field_test/field_test.module
+++ b/web/core/modules/field/tests/modules/field_test/field_test.module
@@ -58,6 +58,7 @@
  *   The key under which to store to $value, or NULL as described above.
  * @param $value
  *   A value to store for $key.
+ *
  * @return
  *   An array mapping each $key to an array of each $value passed in
  *   for that key.
diff --git a/web/core/modules/field/tests/src/Functional/Boolean/BooleanFormatterSettingsTest.php b/web/core/modules/field/tests/src/Functional/Boolean/BooleanFormatterSettingsTest.php
index 85ed22c873b42a3029b721dd042fbaa5dddb1ae6..614ca02b8e182537fd120b8a3b1cc68556154a86 100644
--- a/web/core/modules/field/tests/src/Functional/Boolean/BooleanFormatterSettingsTest.php
+++ b/web/core/modules/field/tests/src/Functional/Boolean/BooleanFormatterSettingsTest.php
@@ -50,7 +50,14 @@ protected function setUp() {
     $type = $this->drupalCreateContentType(['name' => $type_name, 'type' => $type_name]);
     $this->bundle = $type->id();
 
-    $admin_user = $this->drupalCreateUser(['access content', 'administer content types', 'administer node fields', 'administer node display', 'bypass node access', 'administer nodes']);
+    $admin_user = $this->drupalCreateUser([
+      'access content',
+      'administer content types',
+      'administer node fields',
+      'administer node display',
+      'bypass node access',
+      'administer nodes',
+    ]);
     $this->drupalLogin($admin_user);
 
     $this->fieldName = mb_strtolower($this->randomMachineName(8));
diff --git a/web/core/modules/field/tests/src/Functional/EntityReference/EntityReferenceAdminTest.php b/web/core/modules/field/tests/src/Functional/EntityReference/EntityReferenceAdminTest.php
index fe09077b909b67fc610057148668bb93d3c86e31..086e24522662580e67a9b75d10a64c6bcdba66a5 100644
--- a/web/core/modules/field/tests/src/Functional/EntityReference/EntityReferenceAdminTest.php
+++ b/web/core/modules/field/tests/src/Functional/EntityReference/EntityReferenceAdminTest.php
@@ -192,7 +192,7 @@ public function testFieldAdminHandler() {
       'field_test_entity_ref_field[0][target_id]' => $node1->getTitle() . ' (' . $node1->id() . ')',
     ];
     $this->drupalPostForm('node/add/' . $this->type, $edit, t('Save'));
-    $this->assertLink($node1->getTitle());
+    $this->assertSession()->linkExists($node1->getTitle());
 
     // Tests adding default values to autocomplete widgets.
     Vocabulary::create(['vid' => 'tags', 'name' => 'tags'])->save();
diff --git a/web/core/modules/field/tests/src/Functional/EntityReference/EntityReferenceAutoCreateTest.php b/web/core/modules/field/tests/src/Functional/EntityReference/EntityReferenceAutoCreateTest.php
index 831775380d3091dc124f1413c4144b624f4c1396..214704289729bb8ede067bf4b6e5e0950217281e 100644
--- a/web/core/modules/field/tests/src/Functional/EntityReference/EntityReferenceAutoCreateTest.php
+++ b/web/core/modules/field/tests/src/Functional/EntityReference/EntityReferenceAutoCreateTest.php
@@ -92,7 +92,10 @@ protected function setUp() {
       ])
       ->save();
 
-    $account = $this->drupalCreateUser(['access content', "create $this->referencingType content"]);
+    $account = $this->drupalCreateUser([
+      'access content',
+      "create $this->referencingType content",
+    ]);
     $this->drupalLogin($account);
   }
 
diff --git a/web/core/modules/field/tests/src/Functional/EntityReference/EntityReferenceFieldDefaultValueTest.php b/web/core/modules/field/tests/src/Functional/EntityReference/EntityReferenceFieldDefaultValueTest.php
index f4329f47972551578753c5921c81ef383f612338..9be563772de1decfc385b9b6794984b1de6de847 100644
--- a/web/core/modules/field/tests/src/Functional/EntityReference/EntityReferenceFieldDefaultValueTest.php
+++ b/web/core/modules/field/tests/src/Functional/EntityReference/EntityReferenceFieldDefaultValueTest.php
@@ -44,7 +44,13 @@ protected function setUp() {
     $this->drupalCreateContentType(['type' => 'referenced_content']);
 
     // Create admin user.
-    $this->adminUser = $this->drupalCreateUser(['access content', 'administer content types', 'administer node fields', 'administer node form display', 'bypass node access']);
+    $this->adminUser = $this->drupalCreateUser([
+      'access content',
+      'administer content types',
+      'administer node fields',
+      'administer node form display',
+      'bypass node access',
+    ]);
     $this->drupalLogin($this->adminUser);
   }
 
diff --git a/web/core/modules/field/tests/src/Functional/EntityReference/EntityReferenceFieldTranslatedReferenceViewTest.php b/web/core/modules/field/tests/src/Functional/EntityReference/EntityReferenceFieldTranslatedReferenceViewTest.php
index 79ba27170b6f120696b01109bb2c4d22c84dd931..5e0c791201ecbfe14583110ddd8a2b2754ed5b5f 100644
--- a/web/core/modules/field/tests/src/Functional/EntityReference/EntityReferenceFieldTranslatedReferenceViewTest.php
+++ b/web/core/modules/field/tests/src/Functional/EntityReference/EntityReferenceFieldTranslatedReferenceViewTest.php
@@ -147,7 +147,9 @@ protected function setUp() {
     $this->setUpEntityReferenceField();
     $this->createContent();
 
-    $this->webUser = $this->drupalCreateUser(['edit any ' . $this->referrerType->id() . ' content']);
+    $this->webUser = $this->drupalCreateUser([
+      'edit any ' . $this->referrerType->id() . ' content',
+    ]);
   }
 
   /**
diff --git a/web/core/modules/field/tests/src/Functional/EntityReference/EntityReferenceFileUploadTest.php b/web/core/modules/field/tests/src/Functional/EntityReference/EntityReferenceFileUploadTest.php
index d2012e16e15f439cb2c54ed8638eb83df3c3024e..92d69045cbaa821732f62682d26b86f4a1d18d83 100644
--- a/web/core/modules/field/tests/src/Functional/EntityReference/EntityReferenceFileUploadTest.php
+++ b/web/core/modules/field/tests/src/Functional/EntityReference/EntityReferenceFileUploadTest.php
@@ -121,7 +121,10 @@ protected function setUp() {
    * Tests that the autocomplete input element does not cause ajax fatal.
    */
   public function testFileUpload() {
-    $user1 = $this->drupalCreateUser(['access content', "create $this->referencingType content"]);
+    $user1 = $this->drupalCreateUser([
+      'access content',
+      "create $this->referencingType content",
+    ]);
     $this->drupalLogin($user1);
 
     $test_file = current($this->getTestFiles('text'));
diff --git a/web/core/modules/field/tests/src/Functional/EntityReference/EntityReferenceIntegrationTest.php b/web/core/modules/field/tests/src/Functional/EntityReference/EntityReferenceIntegrationTest.php
index cc131227461978afb3a21735f37074af45219874..36d9358d81d5b85279e687d96fd85d3350131ebc 100644
--- a/web/core/modules/field/tests/src/Functional/EntityReference/EntityReferenceIntegrationTest.php
+++ b/web/core/modules/field/tests/src/Functional/EntityReference/EntityReferenceIntegrationTest.php
@@ -59,7 +59,11 @@ protected function setUp() {
     parent::setUp();
 
     // Create a test user.
-    $web_user = $this->drupalCreateUser(['administer entity_test content', 'administer entity_test fields', 'view test entity']);
+    $web_user = $this->drupalCreateUser([
+      'administer entity_test content',
+      'administer entity_test fields',
+      'view test entity',
+    ]);
     $this->drupalLogin($web_user);
   }
 
diff --git a/web/core/modules/field/tests/src/Functional/FieldHelpTest.php b/web/core/modules/field/tests/src/Functional/FieldHelpTest.php
index d0c2bb777fdc07f1ed1f39f840b4de9407d09e70..54d9d72f74c1195e485c85afdc5e989f60604d10 100644
--- a/web/core/modules/field/tests/src/Functional/FieldHelpTest.php
+++ b/web/core/modules/field/tests/src/Functional/FieldHelpTest.php
@@ -35,7 +35,10 @@ protected function setUp() {
     parent::setUp();
 
     // Create the admin user.
-    $this->adminUser = $this->drupalCreateUser(['access administration pages', 'view the administration theme']);
+    $this->adminUser = $this->drupalCreateUser([
+      'access administration pages',
+      'view the administration theme',
+    ]);
   }
 
   /**
@@ -55,10 +58,10 @@ public function testFieldHelp() {
     \Drupal::service('plugin.manager.field.field_type')->clearCachedDefinitions();
 
     $this->drupalGet('admin/help/field');
-    $this->assertLink('Options', 0, 'Options module is listed on the Field help page.');
+    $this->assertSession()->linkExists('Options', 0, 'Options module is listed on the Field help page.');
     $this->assertText('Field API Test', 'Modules with field types that do not implement hook_help are listed.');
-    $this->assertNoLink('Field API Test', 'Modules with field types that do not implement hook_help are not linked.');
-    $this->assertNoLink('Link', 'Modules that have not been installed, are not listed.');
+    $this->assertSession()->linkNotExists('Field API Test', 'Modules with field types that do not implement hook_help are not linked.');
+    $this->assertSession()->linkNotExists('Link', 'Modules that have not been installed, are not listed.');
   }
 
 }
diff --git a/web/core/modules/field/tests/src/Functional/FieldTestBase.php b/web/core/modules/field/tests/src/Functional/FieldTestBase.php
index db20aa2fe140e24466a17027dacd011b529a242b..2de6ac1ce1087d6c9710d05a1dc98a9489a21b35 100644
--- a/web/core/modules/field/tests/src/Functional/FieldTestBase.php
+++ b/web/core/modules/field/tests/src/Functional/FieldTestBase.php
@@ -17,6 +17,7 @@ abstract class FieldTestBase extends BrowserTestBase {
    *
    * @param $cardinality
    *   Number of values to generate.
+   *
    * @return
    *   An array of random values, in the format expected for field values.
    */
diff --git a/web/core/modules/field/tests/src/Functional/FormTest.php b/web/core/modules/field/tests/src/Functional/FormTest.php
index dd475dbec9346f9fea8130158700f2ca66bd8b24..48613f13827e5f2166885c4ce8632bc2c23fee8a 100644
--- a/web/core/modules/field/tests/src/Functional/FormTest.php
+++ b/web/core/modules/field/tests/src/Functional/FormTest.php
@@ -69,7 +69,10 @@ class FormTest extends FieldTestBase {
   protected function setUp() {
     parent::setUp();
 
-    $web_user = $this->drupalCreateUser(['view test entity', 'administer entity_test content']);
+    $web_user = $this->drupalCreateUser([
+      'view test entity',
+      'administer entity_test content',
+    ]);
     $this->drupalLogin($web_user);
 
     $this->fieldStorageSingle = [
diff --git a/web/core/modules/field/tests/src/Functional/NestedFormTest.php b/web/core/modules/field/tests/src/Functional/NestedFormTest.php
index 78be016d44c5cccf215cb402311ac604af669b0c..772d2abc9a4d240cdd0efc27fbca37115848c350 100644
--- a/web/core/modules/field/tests/src/Functional/NestedFormTest.php
+++ b/web/core/modules/field/tests/src/Functional/NestedFormTest.php
@@ -28,7 +28,10 @@ class NestedFormTest extends FieldTestBase {
   protected function setUp() {
     parent::setUp();
 
-    $web_user = $this->drupalCreateUser(['view test entity', 'administer entity_test content']);
+    $web_user = $this->drupalCreateUser([
+      'view test entity',
+      'administer entity_test content',
+    ]);
     $this->drupalLogin($web_user);
 
     $this->fieldStorageSingle = [
diff --git a/web/core/modules/field/tests/src/Functional/String/StringFieldTest.php b/web/core/modules/field/tests/src/Functional/String/StringFieldTest.php
index 9be6e01b7b5bd14d10071b58a0d101584c1dddfe..2d6194882e6ee3755cfebb4e17876910eda8abde 100644
--- a/web/core/modules/field/tests/src/Functional/String/StringFieldTest.php
+++ b/web/core/modules/field/tests/src/Functional/String/StringFieldTest.php
@@ -37,7 +37,11 @@ class StringFieldTest extends BrowserTestBase {
   protected function setUp() {
     parent::setUp();
 
-    $this->webUser = $this->drupalCreateUser(['view test entity', 'administer entity_test content', 'access content']);
+    $this->webUser = $this->drupalCreateUser([
+      'view test entity',
+      'administer entity_test content',
+      'access content',
+    ]);
     $this->drupalLogin($this->webUser);
   }
 
diff --git a/web/core/modules/field/tests/src/Functional/TranslationWebTest.php b/web/core/modules/field/tests/src/Functional/TranslationWebTest.php
index d15692e1ad66f134a29b51394c1a60b9f1718e94..a65bf44057fb29a916d7b49d610752bb7e6d4747 100644
--- a/web/core/modules/field/tests/src/Functional/TranslationWebTest.php
+++ b/web/core/modules/field/tests/src/Functional/TranslationWebTest.php
@@ -92,7 +92,10 @@ protected function setUp() {
    * Tests field translations when creating a new revision.
    */
   public function testFieldFormTranslationRevisions() {
-    $web_user = $this->drupalCreateUser(['view test entity', 'administer entity_test content']);
+    $web_user = $this->drupalCreateUser([
+      'view test entity',
+      'administer entity_test content',
+    ]);
     $this->drupalLogin($web_user);
 
     // Prepare the field translations.
diff --git a/web/core/modules/field/tests/src/Functional/reEnableModuleFieldTest.php b/web/core/modules/field/tests/src/Functional/reEnableModuleFieldTest.php
index ac14ccc287958588754f4abef1a74542513493de..1b2ad0a7471602784dce7c62f0077a34c7dd8609 100644
--- a/web/core/modules/field/tests/src/Functional/reEnableModuleFieldTest.php
+++ b/web/core/modules/field/tests/src/Functional/reEnableModuleFieldTest.php
@@ -96,7 +96,10 @@ public function testReEnabledField() {
 
     // Test that the module can't be uninstalled from the UI while there is data
     // for its fields.
-    $admin_user = $this->drupalCreateUser(['access administration pages', 'administer modules']);
+    $admin_user = $this->drupalCreateUser([
+      'access administration pages',
+      'administer modules',
+    ]);
     $this->drupalLogin($admin_user);
     $this->drupalGet('admin/modules/uninstall');
     $this->assertText("The Telephone number field type is used in the following field: node.field_telephone");
diff --git a/web/core/modules/field/tests/src/Kernel/FieldKernelTestBase.php b/web/core/modules/field/tests/src/Kernel/FieldKernelTestBase.php
index c20ee8188401db8c2529dab5c0d498d7c3f93c07..b42fa3b6d902f784e594e976ab8c3449e4291a36 100644
--- a/web/core/modules/field/tests/src/Kernel/FieldKernelTestBase.php
+++ b/web/core/modules/field/tests/src/Kernel/FieldKernelTestBase.php
@@ -163,6 +163,7 @@ protected function entityValidateAndSave(EntityInterface $entity) {
    *
    * @param $cardinality
    *   Number of values to generate.
+   *
    * @return
    *   An array of random values, in the format expected for field values.
    */
diff --git a/web/core/modules/field_ui/tests/src/Functional/EntityDisplayModeTest.php b/web/core/modules/field_ui/tests/src/Functional/EntityDisplayModeTest.php
index 72751d3bbcaa0ee200750d0ff4c7c5797637a323..9e2ba1dc128455fedbc6229daccc4151bf653be2 100644
--- a/web/core/modules/field_ui/tests/src/Functional/EntityDisplayModeTest.php
+++ b/web/core/modules/field_ui/tests/src/Functional/EntityDisplayModeTest.php
@@ -60,7 +60,7 @@ public function testEntityViewModeUI() {
     $this->assertSession()->statusCodeEquals(404);
 
     $this->drupalGet('admin/structure/display-modes/view/add');
-    $this->assertNoLink(t('Test entity - revisions and data table'), 'An entity type with no view builder cannot have view modes.');
+    $this->assertSession()->linkNotExists(t('Test entity - revisions and data table'), 'An entity type with no view builder cannot have view modes.');
 
     // Test adding a view mode including dots in machine_name.
     $this->clickLink(t('Test entity'));
@@ -114,7 +114,7 @@ public function testEntityFormModeUI() {
     $this->assertSession()->statusCodeEquals(404);
 
     $this->drupalGet('admin/structure/display-modes/form/add');
-    $this->assertNoLink(t('Entity Test without label'), 'An entity type with no form cannot have form modes.');
+    $this->assertSession()->linkNotExists(t('Entity Test without label'), 'An entity type with no form cannot have form modes.');
 
     // Test adding a view mode including dots in machine_name.
     $this->clickLink(t('Test entity'));
diff --git a/web/core/modules/field_ui/tests/src/Functional/FieldUIDeleteTest.php b/web/core/modules/field_ui/tests/src/Functional/FieldUIDeleteTest.php
index 742b2796b4a5ad31faa14198f39ac19247be0329..62146c7319f179f2a58a4af03437a3b3de390222 100644
--- a/web/core/modules/field_ui/tests/src/Functional/FieldUIDeleteTest.php
+++ b/web/core/modules/field_ui/tests/src/Functional/FieldUIDeleteTest.php
@@ -54,7 +54,17 @@ protected function setUp() {
     $this->drupalPlaceBlock('page_title_block');
 
     // Create a test user.
-    $admin_user = $this->drupalCreateUser(['access content', 'administer content types', 'administer node fields', 'administer node form display', 'administer node display', 'administer users', 'administer account settings', 'administer user display', 'bypass node access']);
+    $admin_user = $this->drupalCreateUser([
+      'access content',
+      'administer content types',
+      'administer node fields',
+      'administer node form display',
+      'administer node display',
+      'administer users',
+      'administer account settings',
+      'administer user display',
+      'bypass node access',
+    ]);
     $this->drupalLogin($admin_user);
   }
 
diff --git a/web/core/modules/field_ui/tests/src/Functional/FieldUIIndentationTest.php b/web/core/modules/field_ui/tests/src/Functional/FieldUIIndentationTest.php
index 0eeff4bcbdc5f19b480ef801de717230e48bc3b6..26417e8c42651b82ff1f48e65c15a6b803ea3611 100644
--- a/web/core/modules/field_ui/tests/src/Functional/FieldUIIndentationTest.php
+++ b/web/core/modules/field_ui/tests/src/Functional/FieldUIIndentationTest.php
@@ -30,7 +30,11 @@ protected function setUp() {
     parent::setUp();
 
     // Create a test user.
-    $admin_user = $this->drupalCreateUser(['access content', 'administer content types', 'administer node display']);
+    $admin_user = $this->drupalCreateUser([
+      'access content',
+      'administer content types',
+      'administer node display',
+    ]);
     $this->drupalLogin($admin_user);
 
     // Create Basic page node type.
diff --git a/web/core/modules/field_ui/tests/src/Functional/FieldUIRouteTest.php b/web/core/modules/field_ui/tests/src/Functional/FieldUIRouteTest.php
index ab5a0ba3120c382311c66a82db64594d831db255..ab57c9941feab8c567b10da1e83a6e91a79f384c 100644
--- a/web/core/modules/field_ui/tests/src/Functional/FieldUIRouteTest.php
+++ b/web/core/modules/field_ui/tests/src/Functional/FieldUIRouteTest.php
@@ -87,7 +87,7 @@ public function testFieldUIRoutes() {
 
     $edit = ['display_modes_custom[test]' => TRUE];
     $this->drupalPostForm('admin/config/people/accounts/display', $edit, t('Save'));
-    $this->assertLink('Test');
+    $this->assertSession()->linkExists('Test');
 
     // Create new form mode and verify it's available on the Manage Form
     // Display screen after enabling it.
@@ -100,17 +100,17 @@ public function testFieldUIRoutes() {
 
     $edit = ['display_modes_custom[test]' => TRUE];
     $this->drupalPostForm('admin/config/people/accounts/form-display', $edit, t('Save'));
-    $this->assertLink('Test');
+    $this->assertSession()->linkExists('Test');
   }
 
   /**
    * Asserts that local tasks exists.
    */
   public function assertLocalTasks() {
-    $this->assertLink('Settings');
-    $this->assertLink('Manage fields');
-    $this->assertLink('Manage display');
-    $this->assertLink('Manage form display');
+    $this->assertSession()->linkExists('Settings');
+    $this->assertSession()->linkExists('Manage fields');
+    $this->assertSession()->linkExists('Manage display');
+    $this->assertSession()->linkExists('Manage form display');
   }
 
   /**
diff --git a/web/core/modules/field_ui/tests/src/Functional/ManageDisplayTest.php b/web/core/modules/field_ui/tests/src/Functional/ManageDisplayTest.php
index d1db9a2f4fe989be5a434cbdb01da5109decb810..b61ea7060aeafa172930514c609541d0fb5cd3db 100644
--- a/web/core/modules/field_ui/tests/src/Functional/ManageDisplayTest.php
+++ b/web/core/modules/field_ui/tests/src/Functional/ManageDisplayTest.php
@@ -49,7 +49,20 @@ protected function setUp() {
     $this->drupalPlaceBlock('local_tasks_block');
 
     // Create a test user.
-    $admin_user = $this->drupalCreateUser(['access content', 'administer content types', 'administer node fields', 'administer node form display', 'administer node display', 'administer taxonomy', 'administer taxonomy_term fields', 'administer taxonomy_term display', 'administer users', 'administer account settings', 'administer user display', 'bypass node access']);
+    $admin_user = $this->drupalCreateUser([
+      'access content',
+      'administer content types',
+      'administer node fields',
+      'administer node form display',
+      'administer node display',
+      'administer taxonomy',
+      'administer taxonomy_term fields',
+      'administer taxonomy_term display',
+      'administer users',
+      'administer account settings',
+      'administer user display',
+      'bypass node access',
+    ]);
     $this->drupalLogin($admin_user);
 
     // Create content type, with underscores.
@@ -149,12 +162,12 @@ public function testViewModeCustom() {
   public function testViewModeLocalTasks() {
     $manage_display = 'admin/structure/types/manage/' . $this->type . '/display';
     $this->drupalGet($manage_display);
-    $this->assertNoLink('Full content');
-    $this->assertLink('Teaser');
+    $this->assertSession()->linkNotExists('Full content');
+    $this->assertSession()->linkExists('Teaser');
 
     $this->drupalGet($manage_display . '/teaser');
-    $this->assertNoLink('Full content');
-    $this->assertLink('Default');
+    $this->assertSession()->linkNotExists('Full content');
+    $this->assertSession()->linkExists('Default');
   }
 
   /**
@@ -225,6 +238,7 @@ public function assertNodeViewText(EntityInterface $node, $view_mode, $text, $me
    *   Plain text to look for.
    * @param $message
    *   Message to display.
+   *
    * @return
    *   TRUE on pass, FALSE on fail.
    */
diff --git a/web/core/modules/field_ui/tests/src/Functional/ManageFieldsFunctionalTest.php b/web/core/modules/field_ui/tests/src/Functional/ManageFieldsFunctionalTest.php
index db6634dd711421109d92333f8c7da8e69f78aa37..de67f75202457f7033ad3b725ce6828370a1fa95 100644
--- a/web/core/modules/field_ui/tests/src/Functional/ManageFieldsFunctionalTest.php
+++ b/web/core/modules/field_ui/tests/src/Functional/ManageFieldsFunctionalTest.php
@@ -81,7 +81,20 @@ protected function setUp() {
     $this->drupalPlaceBlock('page_title_block');
 
     // Create a test user.
-    $admin_user = $this->drupalCreateUser(['access content', 'administer content types', 'administer node fields', 'administer node form display', 'administer node display', 'administer taxonomy', 'administer taxonomy_term fields', 'administer taxonomy_term display', 'administer users', 'administer account settings', 'administer user display', 'bypass node access']);
+    $admin_user = $this->drupalCreateUser([
+      'access content',
+      'administer content types',
+      'administer node fields',
+      'administer node form display',
+      'administer node display',
+      'administer taxonomy',
+      'administer taxonomy_term fields',
+      'administer taxonomy_term display',
+      'administer users',
+      'administer account settings',
+      'administer user display',
+      'bypass node access',
+    ]);
     $this->drupalLogin($admin_user);
 
     // Create content type, with underscores.
@@ -158,7 +171,7 @@ public function manageFieldsPage($type = '') {
     }
 
     // Test the "Add field" action link.
-    $this->assertLink('Add field');
+    $this->assertSession()->linkExists('Add field');
 
     // Assert entity operations for all fields.
     $number_of_links = 3;
@@ -278,9 +291,9 @@ public function cardinalitySettings() {
     $this->assertFieldByXPath("//input[@name='cardinality_number']", 6);
 
     // Check that tabs displayed.
-    $this->assertLink(t('Edit'));
+    $this->assertSession()->linkExists(t('Edit'));
     $this->assertLinkByHref('admin/structure/types/manage/article/fields/node.article.body');
-    $this->assertLink(t('Field settings'));
+    $this->assertSession()->linkExists(t('Field settings'));
     $this->assertLinkByHref($field_edit_path);
 
     // Add two entries in the body.
diff --git a/web/core/modules/field_ui/tests/src/FunctionalJavascript/ManageDisplayTest.php b/web/core/modules/field_ui/tests/src/FunctionalJavascript/ManageDisplayTest.php
index a55d993b6a8eadeaf35f2f9e733562e6f08225a0..56f175de1009cca672f27f107c744bd2c3c5df1d 100644
--- a/web/core/modules/field_ui/tests/src/FunctionalJavascript/ManageDisplayTest.php
+++ b/web/core/modules/field_ui/tests/src/FunctionalJavascript/ManageDisplayTest.php
@@ -51,7 +51,17 @@ protected function setUp() {
     $this->drupalPlaceBlock('system_breadcrumb_block');
 
     // Create a test user.
-    $admin_user = $this->drupalCreateUser(['access content', 'administer content types', 'administer node fields', 'administer node form display', 'administer node display', 'administer users', 'administer account settings', 'administer user display', 'bypass node access']);
+    $admin_user = $this->drupalCreateUser([
+      'access content',
+      'administer content types',
+      'administer node fields',
+      'administer node form display',
+      'administer node display',
+      'administer users',
+      'administer account settings',
+      'administer user display',
+      'bypass node access',
+    ]);
     $this->drupalLogin($admin_user);
 
     // Create content type, with underscores.
diff --git a/web/core/modules/field_ui/tests/src/Traits/FieldUiTestTrait.php b/web/core/modules/field_ui/tests/src/Traits/FieldUiTestTrait.php
index de125d18546504f01d0244e49bb441403d919180..e5554cbdae5c6db9f38edb91b6b349daf20d1205 100644
--- a/web/core/modules/field_ui/tests/src/Traits/FieldUiTestTrait.php
+++ b/web/core/modules/field_ui/tests/src/Traits/FieldUiTestTrait.php
@@ -47,7 +47,7 @@ public function fieldUIAddNewField($bundle_path, $field_name, $label = NULL, $fi
     $this->drupalPostForm($bundle_path, $initial_edit, t('Save and continue'));
     $this->assertRaw(t('These settings apply to the %label field everywhere it is used.', ['%label' => $label]), 'Storage settings page was displayed.');
     // Test Breadcrumbs.
-    $this->assertLink($label, 0, 'Field label is correct in the breadcrumb of the storage settings page.');
+    $this->assertSession()->linkExists($label, 0, 'Field label is correct in the breadcrumb of the storage settings page.');
 
     // Second step: 'Storage settings' form.
     $this->drupalPostForm(NULL, $storage_edit, t('Save field settings'));
@@ -115,7 +115,7 @@ public function fieldUIDeleteField($bundle_path, $field_name, $label, $bundle_la
     $this->assertRaw(t('Are you sure you want to delete the field %label', ['%label' => $label]), 'Delete confirmation was found.');
 
     // Test Breadcrumbs.
-    $this->assertLink($label, 0, 'Field label is correct in the breadcrumb of the field delete page.');
+    $this->assertSession()->linkExists($label, 0, 'Field label is correct in the breadcrumb of the field delete page.');
 
     // Submit confirmation form.
     $this->drupalPostForm(NULL, [], t('Delete'));
diff --git a/web/core/modules/file/file.api.php b/web/core/modules/file/file.api.php
index 1fda717da7aabdc7a2793c95dfc149797934563d..7ba8f604016f549c0bd4f6090af56ea43b5aa5ad 100644
--- a/web/core/modules/file/file.api.php
+++ b/web/core/modules/file/file.api.php
@@ -18,6 +18,7 @@
  *
  * @param \Drupal\file\FileInterface $file
  *   The file entity being validated.
+ *
  * @return array
  *   An array of error messages. If there are no problems with the file return
  *   an empty array.
diff --git a/web/core/modules/file/src/Tests/FileManagedTestBase.php b/web/core/modules/file/src/Tests/FileManagedTestBase.php
index 685877c0359c219ed60e586f2c6fad9521be41ed..c86c9e7b12e3c3cf05cc9e69edb43b009d4a36dd 100644
--- a/web/core/modules/file/src/Tests/FileManagedTestBase.php
+++ b/web/core/modules/file/src/Tests/FileManagedTestBase.php
@@ -148,6 +148,7 @@ public function assertSameFile(FileInterface $file1, FileInterface $file2) {
    * @param string $scheme
    *   Optional string indicating the stream scheme to use. Drupal core includes
    *   public, private, and temporary. The public wrapper is the default.
+   *
    * @return \Drupal\file\FileInterface
    *   File entity.
    */
diff --git a/web/core/modules/file/tests/src/Functional/FileFieldRSSContentTest.php b/web/core/modules/file/tests/src/Functional/FileFieldRSSContentTest.php
index 73f94047a068c5719a14dc499309c2f271041467..0eaf79d502c7f33b3282653dc429f740f9b6fac4 100644
--- a/web/core/modules/file/tests/src/Functional/FileFieldRSSContentTest.php
+++ b/web/core/modules/file/tests/src/Functional/FileFieldRSSContentTest.php
@@ -63,14 +63,13 @@ public function testFileFieldRSSContent() {
 
     // Check that the RSS enclosure appears in the RSS feed.
     $this->drupalGet('rss.xml');
-    $uploaded_filename = str_replace('public://', '', $node_file->getFileUri());
     $selector = sprintf(
-      'enclosure[@url="%s"][@length="%s"][@type="%s"]',
-      file_create_url("public://$uploaded_filename", ['absolute' => TRUE]),
+      '//enclosure[@url="%s" and @length="%s" and @type="%s"]',
+      file_create_url($node_file->getFileUri()),
       $node_file->getSize(),
       $node_file->getMimeType()
     );
-    $this->assertNotNull($this->getSession()->getDriver()->find('xpath', $selector), 'File field RSS enclosure is displayed when viewing the RSS feed.');
+    $this->assertNotEmpty($this->getSession()->getDriver()->find($selector), 'File field RSS enclosure is displayed when viewing the RSS feed.');
   }
 
 }
diff --git a/web/core/modules/file/tests/src/Functional/FileFieldTestBase.php b/web/core/modules/file/tests/src/Functional/FileFieldTestBase.php
index 05f084ee347017e4d7638583333824cd394eaac1..629629025f8b5530347e9a852db348e6de35c24c 100644
--- a/web/core/modules/file/tests/src/Functional/FileFieldTestBase.php
+++ b/web/core/modules/file/tests/src/Functional/FileFieldTestBase.php
@@ -46,7 +46,18 @@ abstract class FileFieldTestBase extends BrowserTestBase {
    */
   protected function setUp() {
     parent::setUp();
-    $this->adminUser = $this->drupalCreateUser(['access content', 'access administration pages', 'administer site configuration', 'administer users', 'administer permissions', 'administer content types', 'administer node fields', 'administer node display', 'administer nodes', 'bypass node access']);
+    $this->adminUser = $this->drupalCreateUser([
+      'access content',
+      'access administration pages',
+      'administer site configuration',
+      'administer users',
+      'administer permissions',
+      'administer content types',
+      'administer node fields',
+      'administer node display',
+      'administer nodes',
+      'bypass node access',
+    ]);
     $this->drupalLogin($this->adminUser);
     $this->drupalCreateContentType(['type' => 'article', 'name' => 'Article']);
   }
diff --git a/web/core/modules/file/tests/src/Functional/FileListingTest.php b/web/core/modules/file/tests/src/Functional/FileListingTest.php
index 95ac9aedac11c98d363ed300e34f3a7667ed09c6..4410720924e697baf99a1deb4c0dd8a2ae0d6c10 100644
--- a/web/core/modules/file/tests/src/Functional/FileListingTest.php
+++ b/web/core/modules/file/tests/src/Functional/FileListingTest.php
@@ -40,7 +40,10 @@ protected function setUp() {
       ->set('make_unused_managed_files_temporary', TRUE)
       ->save();
 
-    $this->adminUser = $this->drupalCreateUser(['access files overview', 'bypass node access']);
+    $this->adminUser = $this->drupalCreateUser([
+      'access files overview',
+      'bypass node access',
+    ]);
     $this->baseUser = $this->drupalCreateUser();
     $this->createFileField('file', 'node', 'article', [], ['file_extensions' => 'txt png']);
   }
@@ -50,6 +53,7 @@ protected function setUp() {
    *
    * @param $usage array
    *   Array of file usage information as returned from file_usage subsystem.
+   *
    * @return int
    *   Total usage count.
    */
@@ -201,8 +205,8 @@ public function testFileListingUsageNoLink() {
     // Entity name should be displayed, but not linked if Entity::toUrl
     // throws an exception
     $this->assertText($entity_name, 'Entity name is added to file usage listing.');
-    $this->assertNoLink($entity_name, 'Linked entity name not added to file usage listing.');
-    $this->assertLink($node->getTitle());
+    $this->assertSession()->linkNotExists($entity_name, 'Linked entity name not added to file usage listing.');
+    $this->assertSession()->linkExists($node->getTitle());
   }
 
   /**
diff --git a/web/core/modules/file/tests/src/Functional/FileManagedTestBase.php b/web/core/modules/file/tests/src/Functional/FileManagedTestBase.php
index 2a4465d811e74e0aca849c9de17d2229fb6d2157..1538e4c5eb3ba01fce2254e90183a8a89dfc9c5d 100644
--- a/web/core/modules/file/tests/src/Functional/FileManagedTestBase.php
+++ b/web/core/modules/file/tests/src/Functional/FileManagedTestBase.php
@@ -143,6 +143,7 @@ public function assertSameFile(FileInterface $file1, FileInterface $file2) {
    * @param string $scheme
    *   Optional string indicating the stream scheme to use. Drupal core includes
    *   public, private, and temporary. The public wrapper is the default.
+   *
    * @return \Drupal\file\FileInterface
    *   File entity.
    */
diff --git a/web/core/modules/file/tests/src/FunctionalJavascript/FileFieldWidgetTest.php b/web/core/modules/file/tests/src/FunctionalJavascript/FileFieldWidgetTest.php
index c563337ddd4b229ee904eb2450259600230ad44a..54c44753d36b6aa76c4836e89eaa27ebda93bbe1 100644
--- a/web/core/modules/file/tests/src/FunctionalJavascript/FileFieldWidgetTest.php
+++ b/web/core/modules/file/tests/src/FunctionalJavascript/FileFieldWidgetTest.php
@@ -42,7 +42,18 @@ class FileFieldWidgetTest extends WebDriverTestBase {
    */
   protected function setUp() {
     parent::setUp();
-    $this->adminUser = $this->drupalCreateUser(['access content', 'access administration pages', 'administer site configuration', 'administer users', 'administer permissions', 'administer content types', 'administer node fields', 'administer node display', 'administer nodes', 'bypass node access']);
+    $this->adminUser = $this->drupalCreateUser([
+      'access content',
+      'access administration pages',
+      'administer site configuration',
+      'administer users',
+      'administer permissions',
+      'administer content types',
+      'administer node fields',
+      'administer node display',
+      'administer nodes',
+      'bypass node access',
+    ]);
     $this->drupalLogin($this->adminUser);
     $this->drupalCreateContentType(['type' => 'article', 'name' => 'Article']);
   }
diff --git a/web/core/modules/file/tests/src/FunctionalJavascript/FileManagedFileElementTest.php b/web/core/modules/file/tests/src/FunctionalJavascript/FileManagedFileElementTest.php
index a4f2c0ca55a43cdb2ef7de51f139a3e56ab2f776..625878ad8835829261fe98839a80b2dab96a3ab8 100644
--- a/web/core/modules/file/tests/src/FunctionalJavascript/FileManagedFileElementTest.php
+++ b/web/core/modules/file/tests/src/FunctionalJavascript/FileManagedFileElementTest.php
@@ -33,7 +33,18 @@ class FileManagedFileElementTest extends WebDriverTestBase {
    */
   protected function setUp() {
     parent::setUp();
-    $this->adminUser = $this->drupalCreateUser(['access content', 'access administration pages', 'administer site configuration', 'administer users', 'administer permissions', 'administer content types', 'administer node fields', 'administer node display', 'administer nodes', 'bypass node access']);
+    $this->adminUser = $this->drupalCreateUser([
+      'access content',
+      'access administration pages',
+      'administer site configuration',
+      'administer users',
+      'administer permissions',
+      'administer content types',
+      'administer node fields',
+      'administer node display',
+      'administer nodes',
+      'bypass node access',
+    ]);
     $this->drupalLogin($this->adminUser);
     $this->drupalCreateContentType(['type' => 'article', 'name' => 'Article']);
   }
diff --git a/web/core/modules/file/tests/src/Kernel/FileManagedUnitTestBase.php b/web/core/modules/file/tests/src/Kernel/FileManagedUnitTestBase.php
index aa336f1e2c9a598fc01f4e4c8936ccd95dbe567b..715d96b973df65428c052adafb9e78df4b9dd132 100644
--- a/web/core/modules/file/tests/src/Kernel/FileManagedUnitTestBase.php
+++ b/web/core/modules/file/tests/src/Kernel/FileManagedUnitTestBase.php
@@ -156,6 +156,7 @@ public function assertSameFile(FileInterface $file1, FileInterface $file2) {
    * @param string $scheme
    *   Optional string indicating the stream scheme to use. Drupal core includes
    *   public, private, and temporary. The public wrapper is the default.
+   *
    * @return \Drupal\file\FileInterface
    *   File entity.
    */
diff --git a/web/core/modules/filter/tests/src/Functional/FilterAdminTest.php b/web/core/modules/filter/tests/src/Functional/FilterAdminTest.php
index ea18cffa774ed918b6eb643dadd64be6b8f59068..14a3c35c2a1209f3511d59ebedf90ff46a8a7be0 100644
--- a/web/core/modules/filter/tests/src/Functional/FilterAdminTest.php
+++ b/web/core/modules/filter/tests/src/Functional/FilterAdminTest.php
@@ -111,7 +111,10 @@ protected function setUp() {
       'access site reports',
     ]);
 
-    $this->webUser = $this->drupalCreateUser(['create page content', 'edit own page content']);
+    $this->webUser = $this->drupalCreateUser([
+      'create page content',
+      'edit own page content',
+    ]);
     user_role_grant_permissions('authenticated', [$basic_html_format->getPermissionName()]);
     user_role_grant_permissions('anonymous', [$restricted_html_format->getPermissionName()]);
     $this->drupalLogin($this->adminUser);
@@ -320,7 +323,7 @@ public function testFilterAdmin() {
     $edit['body[0][format]'] = $plain;
     $this->drupalPostForm('node/' . $node->id() . '/edit', $edit, t('Save'));
     $this->drupalGet('node/' . $node->id());
-    $this->assertEscaped($text, 'The "Plain text" text format escapes all HTML tags.');
+    $this->assertEscaped($text);
     $this->config('filter.settings')
       ->set('always_show_fallback_choice', FALSE)
       ->save();
diff --git a/web/core/modules/filter/tests/src/Functional/FilterDefaultFormatTest.php b/web/core/modules/filter/tests/src/Functional/FilterDefaultFormatTest.php
index d74a14dc6fe85b5a689c2383110953b585f0e57c..ce12706055b90b403c743c71189edd78d59cb975 100644
--- a/web/core/modules/filter/tests/src/Functional/FilterDefaultFormatTest.php
+++ b/web/core/modules/filter/tests/src/Functional/FilterDefaultFormatTest.php
@@ -44,7 +44,10 @@ public function testDefaultTextFormats() {
     }
     list($first_format, $second_format) = $formats;
     $second_format_permission = $second_format->getPermissionName();
-    $first_user = $this->drupalCreateUser([$first_format->getPermissionName(), $second_format_permission]);
+    $first_user = $this->drupalCreateUser([
+      $first_format->getPermissionName(),
+      $second_format_permission,
+    ]);
     $second_user = $this->drupalCreateUser([$second_format_permission]);
 
     // Adjust the weights so that the first and second formats (in that order)
diff --git a/web/core/modules/filter/tests/src/Functional/FilterHooksTest.php b/web/core/modules/filter/tests/src/Functional/FilterHooksTest.php
index a70a95f96502a9c103985721fffda6b06f54ee1f..3fd9513c2e96b36876a040e6466cca1c7b8f3622 100644
--- a/web/core/modules/filter/tests/src/Functional/FilterHooksTest.php
+++ b/web/core/modules/filter/tests/src/Functional/FilterHooksTest.php
@@ -36,7 +36,11 @@ public function testFilterHooks() {
     $type = $this->drupalCreateContentType(['name' => $type_name, 'type' => $type_name]);
     $node_permission = "create $type_name content";
 
-    $admin_user = $this->drupalCreateUser(['administer filters', 'administer nodes', $node_permission]);
+    $admin_user = $this->drupalCreateUser([
+      'administer filters',
+      'administer nodes',
+      $node_permission,
+    ]);
     $this->drupalLogin($admin_user);
 
     // Add a text format.
diff --git a/web/core/modules/filter/tests/src/Functional/FilterSecurityTest.php b/web/core/modules/filter/tests/src/Functional/FilterSecurityTest.php
index 103c6e3cde8513229305b1561660b4a5112a8d52..1d6c10cc433ed66f4b022d897856181cd2dde5c4 100644
--- a/web/core/modules/filter/tests/src/Functional/FilterSecurityTest.php
+++ b/web/core/modules/filter/tests/src/Functional/FilterSecurityTest.php
@@ -46,7 +46,11 @@ protected function setUp() {
     $filtered_html_permission = $filtered_html_format->getPermissionName();
     user_role_grant_permissions(RoleInterface::ANONYMOUS_ID, [$filtered_html_permission]);
 
-    $this->adminUser = $this->drupalCreateUser(['administer modules', 'administer filters', 'administer site configuration']);
+    $this->adminUser = $this->drupalCreateUser([
+      'administer modules',
+      'administer filters',
+      'administer site configuration',
+    ]);
     $this->drupalLogin($this->adminUser);
   }
 
diff --git a/web/core/modules/forum/tests/src/Functional/ForumBlockTest.php b/web/core/modules/forum/tests/src/Functional/ForumBlockTest.php
index a5043fe26586e652991753ed0cb88573bbe1385a..3bd1d43c9a92cd22e3c27a85ebe9b11dca19ad62 100644
--- a/web/core/modules/forum/tests/src/Functional/ForumBlockTest.php
+++ b/web/core/modules/forum/tests/src/Functional/ForumBlockTest.php
@@ -58,12 +58,12 @@ public function testNewForumTopicsBlock() {
     // Create 5 forum topics.
     $topics = $this->createForumTopics();
 
-    $this->assertLink(t('More'), 0, 'New forum topics block has a "more"-link.');
+    $this->assertSession()->linkExists(t('More'), 0, 'New forum topics block has a "more"-link.');
     $this->assertLinkByHref('forum', 0, 'New forum topics block has a "more"-link.');
 
     // We expect all 5 forum topics to appear in the "New forum topics" block.
     foreach ($topics as $topic) {
-      $this->assertLink($topic, 0, new FormattableMarkup('Forum topic @topic found in the "New forum topics" block.', ['@topic' => $topic]));
+      $this->assertSession()->linkExists($topic, 0, new FormattableMarkup('Forum topic @topic found in the "New forum topics" block.', ['@topic' => $topic]));
     }
 
     // Configure the new forum topics block to only show 2 topics.
@@ -75,7 +75,7 @@ public function testNewForumTopicsBlock() {
     // topics" block.
     for ($index = 0; $index < 5; $index++) {
       if (in_array($index, [3, 4])) {
-        $this->assertLink($topics[$index], 0, new FormattableMarkup('Forum topic @topic found in the "New forum topics" block.', ['@topic' => $topics[$index]]));
+        $this->assertSession()->linkExists($topics[$index], 0, new FormattableMarkup('Forum topic @topic found in the "New forum topics" block.', ['@topic' => $topics[$index]]));
       }
       else {
         $this->assertNoText($topics[$index], new FormattableMarkup('Forum topic @topic not found in the "New forum topics" block.', ['@topic' => $topics[$index]]));
@@ -113,7 +113,7 @@ public function testActiveForumTopicsBlock() {
     // Enable the block.
     $block = $this->drupalPlaceBlock('forum_active_block');
     $this->drupalGet('');
-    $this->assertLink(t('More'), 0, 'Active forum topics block has a "more"-link.');
+    $this->assertSession()->linkExists(t('More'), 0, 'Active forum topics block has a "more"-link.');
     $this->assertLinkByHref('forum', 0, 'Active forum topics block has a "more"-link.');
 
     // We expect the first 5 forum topics to appear in the "Active forum topics"
@@ -121,7 +121,7 @@ public function testActiveForumTopicsBlock() {
     $this->drupalGet('<front>');
     for ($index = 0; $index < 10; $index++) {
       if ($index < 5) {
-        $this->assertLink($topics[$index], 0, new FormattableMarkup('Forum topic @topic found in the "Active forum topics" block.', ['@topic' => $topics[$index]]));
+        $this->assertSession()->linkExists($topics[$index], 0, new FormattableMarkup('Forum topic @topic found in the "Active forum topics" block.', ['@topic' => $topics[$index]]));
       }
       else {
         $this->assertNoText($topics[$index], new FormattableMarkup('Forum topic @topic not found in the "Active forum topics" block.', ['@topic' => $topics[$index]]));
@@ -138,7 +138,7 @@ public function testActiveForumTopicsBlock() {
     // the "Active forum topics" block.
     for ($index = 0; $index < 10; $index++) {
       if (in_array($index, [3, 4])) {
-        $this->assertLink($topics[$index], 0, 'Forum topic found in the "Active forum topics" block.');
+        $this->assertSession()->linkExists($topics[$index], 0, 'Forum topic found in the "Active forum topics" block.');
       }
       else {
         $this->assertNoText($topics[$index], 'Forum topic not found in the "Active forum topics" block.');
diff --git a/web/core/modules/forum/tests/src/Functional/ForumIndexTest.php b/web/core/modules/forum/tests/src/Functional/ForumIndexTest.php
index 3bb803a971c83e6bbb76faeccc6d9c2a6a50ab09..de07fd0c4ed0ee681c018215437029e26e98abee 100644
--- a/web/core/modules/forum/tests/src/Functional/ForumIndexTest.php
+++ b/web/core/modules/forum/tests/src/Functional/ForumIndexTest.php
@@ -27,7 +27,13 @@ protected function setUp() {
     parent::setUp();
 
     // Create a test user.
-    $web_user = $this->drupalCreateUser(['create forum content', 'edit own forum content', 'edit any forum content', 'administer nodes', 'administer forums']);
+    $web_user = $this->drupalCreateUser([
+      'create forum content',
+      'edit own forum content',
+      'edit any forum content',
+      'administer nodes',
+      'administer forums',
+    ]);
     $this->drupalLogin($web_user);
   }
 
diff --git a/web/core/modules/forum/tests/src/Functional/ForumNodeAccessTest.php b/web/core/modules/forum/tests/src/Functional/ForumNodeAccessTest.php
index e18efd93679ac93d780be011cb7aba6f2b0ecb73..acf3f2a7e9bdfbfe381c7bbfe12f29ad2bd88838 100644
--- a/web/core/modules/forum/tests/src/Functional/ForumNodeAccessTest.php
+++ b/web/core/modules/forum/tests/src/Functional/ForumNodeAccessTest.php
@@ -49,7 +49,12 @@ public function testForumNodeAccess() {
     // Create some users.
     $access_user = $this->drupalCreateUser(['node test view']);
     $no_access_user = $this->drupalCreateUser();
-    $admin_user = $this->drupalCreateUser(['access administration pages', 'administer modules', 'administer blocks', 'create forum content']);
+    $admin_user = $this->drupalCreateUser([
+      'access administration pages',
+      'administer modules',
+      'administer blocks',
+      'create forum content',
+    ]);
 
     $this->drupalLogin($admin_user);
 
diff --git a/web/core/modules/forum/tests/src/Functional/ForumTest.php b/web/core/modules/forum/tests/src/Functional/ForumTest.php
index fd54ff99983d571c8fb342e4d45ec6c63c57d55d..0b44b6a1b6b4596e4bab73c9c71638adbb75b34a 100644
--- a/web/core/modules/forum/tests/src/Functional/ForumTest.php
+++ b/web/core/modules/forum/tests/src/Functional/ForumTest.php
@@ -189,9 +189,9 @@ public function testForum() {
 
     // Verify that this user is shown a local task to add new forum content.
     $this->drupalGet('forum');
-    $this->assertLink(t('Add new Forum topic'));
+    $this->assertSession()->linkExists(t('Add new Forum topic'));
     $this->drupalGet('forum/' . $this->forum['tid']);
-    $this->assertLink(t('Add new Forum topic'));
+    $this->assertSession()->linkExists(t('Add new Forum topic'));
 
     // Log in a user with permission to edit any forum content.
     $this->drupalLogin($this->editAnyTopicsUser);
@@ -224,7 +224,11 @@ public function testForum() {
     $this->assertEquals('6', $elements[0]->getText(), 'Number of posts found.');
 
     // Test loading multiple forum nodes on the front page.
-    $this->drupalLogin($this->drupalCreateUser(['administer content types', 'create forum content', 'post comments']));
+    $this->drupalLogin($this->drupalCreateUser([
+      'administer content types',
+      'create forum content',
+      'post comments',
+    ]));
     $this->drupalPostForm('admin/structure/types/manage/forum', ['options[promote]' => 'promote'], t('Save content type'));
     $this->createForumTopic($this->forum, FALSE);
     $this->createForumTopic($this->forum, FALSE);
@@ -256,7 +260,7 @@ public function testForum() {
     // Test anonymous action link.
     $this->drupalLogout();
     $this->drupalGet('forum/' . $this->forum['tid']);
-    $this->assertLink(t('Log in to post new content in the forum.'));
+    $this->assertSession()->linkExists(t('Log in to post new content in the forum.'));
   }
 
   /**
@@ -319,8 +323,8 @@ private function doAdminTests($user) {
     // Verify help text is shown.
     $this->assertText(t('Forums contain forum topics. Use containers to group related forums'));
     // Verify action links are there.
-    $this->assertLink('Add forum');
-    $this->assertLink('Add container');
+    $this->assertSession()->linkExists('Add forum');
+    $this->assertSession()->linkExists('Add container');
     $this->clickLink('edit container');
     $this->assertRaw('Edit container', 'Followed the link to edit the container');
     // Create forum inside the forum container.
@@ -365,7 +369,7 @@ private function doAdminTests($user) {
     // Test tags vocabulary form is not affected.
     $this->drupalGet('admin/structure/taxonomy/manage/tags');
     $this->assertSession()->buttonExists('Save');
-    $this->assertLink(t('Delete'));
+    $this->assertSession()->linkExists(t('Delete'));
     // Test tags vocabulary term form is not affected.
     $this->drupalGet('admin/structure/taxonomy/manage/tags/add');
     $this->assertField('parent[]', 'Parent field found.');
@@ -547,7 +551,7 @@ public function testForumWithNewPost() {
     $this->assertSession()->statusCodeEquals(200);
 
     // Verify there is no unintentional HTML tag escaping.
-    $this->assertNoEscaped('<', '');
+    $this->assertNoEscaped('<');
   }
 
   /**
diff --git a/web/core/modules/forum/tests/src/Functional/ForumUninstallTest.php b/web/core/modules/forum/tests/src/Functional/ForumUninstallTest.php
index 78e4492f6d16b323118b35e8d065a11c1eff96db..430c6837f79a11de3105b110e7a23b8777b3d178 100644
--- a/web/core/modules/forum/tests/src/Functional/ForumUninstallTest.php
+++ b/web/core/modules/forum/tests/src/Functional/ForumUninstallTest.php
@@ -32,7 +32,13 @@ class ForumUninstallTest extends BrowserTestBase {
    * Tests if forum module uninstallation properly deletes the field.
    */
   public function testForumUninstallWithField() {
-    $this->drupalLogin($this->drupalCreateUser(['administer taxonomy', 'administer nodes', 'administer modules', 'delete any forum content', 'administer content types']));
+    $this->drupalLogin($this->drupalCreateUser([
+      'administer taxonomy',
+      'administer nodes',
+      'administer modules',
+      'delete any forum content',
+      'administer content types',
+    ]));
     // Ensure that the field exists before uninstallation.
     $field_storage = FieldStorageConfig::loadByName('node', 'taxonomy_forums');
     $this->assertNotNull($field_storage, 'The taxonomy_forums field storage exists.');
@@ -91,7 +97,7 @@ public function testForumUninstallWithField() {
 
     // Ensure that the forum node type can not be deleted.
     $this->drupalGet('admin/structure/types/manage/forum');
-    $this->assertNoLink(t('Delete'));
+    $this->assertSession()->linkNotExists(t('Delete'));
 
     // Now attempt to uninstall forum.
     $this->drupalGet('admin/modules/uninstall');
diff --git a/web/core/modules/help/tests/src/Functional/HelpTest.php b/web/core/modules/help/tests/src/Functional/HelpTest.php
index 199f6809c14f6a4c59c0952b07a00621daadacf0..a3b9f8530c94eef8ca9802207870fc7d0753fce0 100644
--- a/web/core/modules/help/tests/src/Functional/HelpTest.php
+++ b/web/core/modules/help/tests/src/Functional/HelpTest.php
@@ -49,7 +49,11 @@ protected function setUp() {
     parent::setUp();
 
     // Create users.
-    $this->adminUser = $this->drupalCreateUser(['access administration pages', 'view the administration theme', 'administer permissions']);
+    $this->adminUser = $this->drupalCreateUser([
+      'access administration pages',
+      'view the administration theme',
+      'administer permissions',
+    ]);
     $this->anyUser = $this->drupalCreateUser([]);
   }
 
@@ -82,7 +86,7 @@ public function testHelp() {
 
     // Make sure links are properly added for modules implementing hook_help().
     foreach ($this->getModuleList() as $module => $name) {
-      $this->assertLink($name, 0, new FormattableMarkup('Link properly added to @name (admin/help/@module)', ['@module' => $module, '@name' => $name]));
+      $this->assertSession()->linkExists($name, 0, new FormattableMarkup('Link properly added to @name (admin/help/@module)', ['@module' => $module, '@name' => $name]));
     }
 
     // Ensure that module which does not provide an module overview page is
@@ -99,7 +103,7 @@ public function testHelp() {
     $pos = $start;
     $list = ['Block', 'Color', 'Custom Block', 'History', 'Text Editor'];
     foreach ($list as $name) {
-      $this->assertLink($name);
+      $this->assertSession()->linkExists($name);
       $new_pos = strpos($page_text, $name, $start);
       $this->assertTrue($new_pos > $pos, 'Order of ' . $name . ' is correct on page');
       $pos = $new_pos;
@@ -135,12 +139,12 @@ protected function verifyHelp($response = 200) {
           $this->assertText(t('@module administration pages', ['@module' => $name]));
         }
         foreach ($admin_tasks as $task) {
-          $this->assertLink($task['title']);
+          $this->assertSession()->linkExists($task['title']);
           // Ensure there are no double escaped '&' or '<' characters.
-          $this->assertNoEscaped('&amp;', 'The help text does not have double escaped &amp;.');
-          $this->assertNoEscaped('&lt;', 'The help text does not have double escaped &lt;.');
+          $this->assertNoEscaped('&amp;');
+          $this->assertNoEscaped('&lt;');
           // Ensure there are no escaped '<' characters.
-          $this->assertNoEscaped('<', 'The help text does not have single escaped &lt;.');
+          $this->assertNoEscaped('<');
         }
         // Ensure there are no double escaped '&' or '<' characters.
         $this->assertNoEscaped('&amp;');
diff --git a/web/core/modules/history/tests/src/Functional/HistoryTest.php b/web/core/modules/history/tests/src/Functional/HistoryTest.php
index ab9b3562bf5620fd235a75189ace4a0104de2b0e..5d4e80ec47ab3011c328901c5fe3820d3afd08ef 100644
--- a/web/core/modules/history/tests/src/Functional/HistoryTest.php
+++ b/web/core/modules/history/tests/src/Functional/HistoryTest.php
@@ -47,7 +47,10 @@ protected function setUp() {
 
     $this->drupalCreateContentType(['type' => 'page', 'name' => 'Basic page']);
 
-    $this->user = $this->drupalCreateUser(['create page content', 'access content']);
+    $this->user = $this->drupalCreateUser([
+      'create page content',
+      'access content',
+    ]);
     $this->drupalLogin($this->user);
     $this->testNode = $this->drupalCreateNode(['type' => 'page', 'uid' => $this->user->id()]);
   }
diff --git a/web/core/modules/image/image.module b/web/core/modules/image/image.module
index d7bb236c3820c16e750c591223cabaffa52a2248..35db4a8e334801326454f29f514daa66841f027f 100644
--- a/web/core/modules/image/image.module
+++ b/web/core/modules/image/image.module
@@ -248,6 +248,7 @@ function image_path_flush($path) {
  *
  * @param $include_empty
  *   If TRUE a '- None -' option will be inserted in the options array.
+ *
  * @return
  *   Array of image styles both key and value are set to style name.
  */
diff --git a/web/core/modules/image/tests/modules/image_module_test/src/Plugin/Field/FieldFormatter/DummyImageFormatter.php b/web/core/modules/image/tests/modules/image_module_test/src/Plugin/Field/FieldFormatter/DummyImageFormatter.php
new file mode 100644
index 0000000000000000000000000000000000000000..43a6860bd6bd281ba9c310d84dca09e921f7d5f2
--- /dev/null
+++ b/web/core/modules/image/tests/modules/image_module_test/src/Plugin/Field/FieldFormatter/DummyImageFormatter.php
@@ -0,0 +1,33 @@
+<?php
+
+namespace Drupal\image_module_test\Plugin\Field\FieldFormatter;
+
+use Drupal\Core\Field\FieldItemListInterface;
+use Drupal\Core\Field\FormatterBase;
+
+/**
+ * Plugin implementation of the Dummy image formatter.
+ *
+ * @FieldFormatter(
+ *   id = "dummy_image_formatter",
+ *   label = @Translation("Dummy image"),
+ *   field_types = {
+ *     "image"
+ *   },
+ *   quickedit = {
+ *     "editor" = "image"
+ *   }
+ * )
+ */
+class DummyImageFormatter extends FormatterBase {
+
+  /**
+   * {@inheritdoc}
+   */
+  public function viewElements(FieldItemListInterface $items, $langcode) {
+    return [
+      ['#markup' => 'Dummy'],
+    ];
+  }
+
+}
diff --git a/web/core/modules/image/tests/src/Functional/ImageFieldTestBase.php b/web/core/modules/image/tests/src/Functional/ImageFieldTestBase.php
index b736e8f4661455b80ba9f15616014b20daa24122..3d0421e1ac3c7b2892b64d88c9db450f5f627bf6 100644
--- a/web/core/modules/image/tests/src/Functional/ImageFieldTestBase.php
+++ b/web/core/modules/image/tests/src/Functional/ImageFieldTestBase.php
@@ -49,7 +49,19 @@ protected function setUp() {
       $this->drupalCreateContentType(['type' => 'article', 'name' => 'Article']);
     }
 
-    $this->adminUser = $this->drupalCreateUser(['access content', 'access administration pages', 'administer site configuration', 'administer content types', 'administer node fields', 'administer nodes', 'create article content', 'edit any article content', 'delete any article content', 'administer image styles', 'administer node display']);
+    $this->adminUser = $this->drupalCreateUser([
+      'access content',
+      'access administration pages',
+      'administer site configuration',
+      'administer content types',
+      'administer node fields',
+      'administer nodes',
+      'create article content',
+      'edit any article content',
+      'delete any article content',
+      'administer image styles',
+      'administer node display',
+    ]);
     $this->drupalLogin($this->adminUser);
   }
 
diff --git a/web/core/modules/jsonapi/tests/src/Functional/JsonApiRegressionTest.php b/web/core/modules/jsonapi/tests/src/Functional/JsonApiRegressionTest.php
index f117de6a88ab47917c559c9037cab4048635eec2..f2da5ad3669c0afc0ce56fbfc76f85309ae4cc0a 100644
--- a/web/core/modules/jsonapi/tests/src/Functional/JsonApiRegressionTest.php
+++ b/web/core/modules/jsonapi/tests/src/Functional/JsonApiRegressionTest.php
@@ -1029,7 +1029,10 @@ public function testNonTranslatableEntityUpdatesFromIssue3043168() {
     $this->assertInstanceOf(TranslatableInterface::class, $entity);
     $this->assertFalse($entity->isTranslatable());
     // Set up a test user with permission to view and update the test entity.
-    $user = $this->drupalCreateUser(['view test entity', 'administer entity_test content']);
+    $user = $this->drupalCreateUser([
+      'view test entity',
+      'administer entity_test content',
+    ]);
     $request_options[RequestOptions::HEADERS]['Accept'] = 'application/vnd.api+json';
     $request_options[RequestOptions::AUTH] = [
       $user->getAccountName(),
diff --git a/web/core/modules/language/tests/src/Functional/LanguageBlockSettingsVisibilityTest.php b/web/core/modules/language/tests/src/Functional/LanguageBlockSettingsVisibilityTest.php
index 1511bf1f14915173f9f776316df5a37f63be7ed9..afdfaa365391c03308e50ad3f1f796dcd148a8ad 100644
--- a/web/core/modules/language/tests/src/Functional/LanguageBlockSettingsVisibilityTest.php
+++ b/web/core/modules/language/tests/src/Functional/LanguageBlockSettingsVisibilityTest.php
@@ -19,7 +19,11 @@ class LanguageBlockSettingsVisibilityTest extends BrowserTestBase {
   protected $defaultTheme = 'stark';
 
   public function testUnnecessaryLanguageSettingsVisibility() {
-    $admin_user = $this->drupalCreateUser(['administer languages', 'access administration pages', 'administer blocks']);
+    $admin_user = $this->drupalCreateUser([
+      'administer languages',
+      'access administration pages',
+      'administer blocks',
+    ]);
     $this->drupalLogin($admin_user);
     $this->drupalPostForm('admin/config/regional/language/add', ['predefined_langcode' => 'hu'], t('Add language'));
     $this->drupalGet('admin/structure/block/add/system_menu_block:admin/stark');
diff --git a/web/core/modules/language/tests/src/Functional/LanguageBrowserDetectionTest.php b/web/core/modules/language/tests/src/Functional/LanguageBrowserDetectionTest.php
index 6c76a021112e54befa268bc1145e0db76535657a..36159ead5e0ab05a9eba77eb17b58cbdf2d70657 100644
--- a/web/core/modules/language/tests/src/Functional/LanguageBrowserDetectionTest.php
+++ b/web/core/modules/language/tests/src/Functional/LanguageBrowserDetectionTest.php
@@ -25,7 +25,10 @@ class LanguageBrowserDetectionTest extends BrowserTestBase {
    */
   public function testUIBrowserLanguageMappings() {
     // User to manage languages.
-    $admin_user = $this->drupalCreateUser(['administer languages', 'access administration pages']);
+    $admin_user = $this->drupalCreateUser([
+      'administer languages',
+      'access administration pages',
+    ]);
     $this->drupalLogin($admin_user);
 
     // Check that the configure link exists.
diff --git a/web/core/modules/language/tests/src/Functional/LanguageConfigurationElementTest.php b/web/core/modules/language/tests/src/Functional/LanguageConfigurationElementTest.php
index 8e70032900665e190f61ba6ff212b82bc44bfd5d..e9f520dbf0687ec892f1f1529ee7a39436230d71 100644
--- a/web/core/modules/language/tests/src/Functional/LanguageConfigurationElementTest.php
+++ b/web/core/modules/language/tests/src/Functional/LanguageConfigurationElementTest.php
@@ -35,7 +35,11 @@ class LanguageConfigurationElementTest extends BrowserTestBase {
 
   protected function setUp() {
     parent::setUp();
-    $user = $this->drupalCreateUser(['access administration pages', 'administer languages', 'administer content types']);
+    $user = $this->drupalCreateUser([
+      'access administration pages',
+      'administer languages',
+      'administer content types',
+    ]);
     $this->drupalLogin($user);
   }
 
diff --git a/web/core/modules/language/tests/src/Functional/LanguageConfigurationTest.php b/web/core/modules/language/tests/src/Functional/LanguageConfigurationTest.php
index 06f4cee3ba7111314b43ce064bf2ac5e0fec3513..fa40a942f32af6f558b5350ba1a2cb5126821b6e 100644
--- a/web/core/modules/language/tests/src/Functional/LanguageConfigurationTest.php
+++ b/web/core/modules/language/tests/src/Functional/LanguageConfigurationTest.php
@@ -36,7 +36,10 @@ public function testLanguageConfiguration() {
     $this->assertEqual(ConfigurableLanguage::load('en')->getWeight(), 0, 'The English language has a weight of 0.');
 
     // User to add and remove language.
-    $admin_user = $this->drupalCreateUser(['administer languages', 'access administration pages']);
+    $admin_user = $this->drupalCreateUser([
+      'administer languages',
+      'access administration pages',
+    ]);
     $this->drupalLogin($admin_user);
 
     // Check if the Default English language has no path prefix.
@@ -157,7 +160,10 @@ public function testLanguageConfiguration() {
    */
   public function testLanguageConfigurationWeight() {
     // User to add and remove language.
-    $admin_user = $this->drupalCreateUser(['administer languages', 'access administration pages']);
+    $admin_user = $this->drupalCreateUser([
+      'administer languages',
+      'access administration pages',
+      ]);
     $this->drupalLogin($admin_user);
     $this->checkConfigurableLanguageWeight();
 
diff --git a/web/core/modules/language/tests/src/Functional/LanguageCustomLanguageConfigurationTest.php b/web/core/modules/language/tests/src/Functional/LanguageCustomLanguageConfigurationTest.php
index 52bbde11725ca10f793e9e40058ed40dc8cec7a2..e4bcfc516634fb9d144bb3189db48378d944267a 100644
--- a/web/core/modules/language/tests/src/Functional/LanguageCustomLanguageConfigurationTest.php
+++ b/web/core/modules/language/tests/src/Functional/LanguageCustomLanguageConfigurationTest.php
@@ -32,7 +32,10 @@ class LanguageCustomLanguageConfigurationTest extends BrowserTestBase {
   public function testLanguageConfiguration() {
 
     // Create user with permissions to add and remove languages.
-    $admin_user = $this->drupalCreateUser(['administer languages', 'access administration pages']);
+    $admin_user = $this->drupalCreateUser([
+      'administer languages',
+      'access administration pages',
+    ]);
     $this->drupalLogin($admin_user);
 
     // Add custom language.
diff --git a/web/core/modules/language/tests/src/Functional/LanguageListModuleInstallTest.php b/web/core/modules/language/tests/src/Functional/LanguageListModuleInstallTest.php
index e63c31726c393b9c9a2943838e6fadd8387ee98d..f825049cde8f09262936212ce155ddee6a20060c 100644
--- a/web/core/modules/language/tests/src/Functional/LanguageListModuleInstallTest.php
+++ b/web/core/modules/language/tests/src/Functional/LanguageListModuleInstallTest.php
@@ -30,7 +30,10 @@ class LanguageListModuleInstallTest extends BrowserTestBase {
   public function testModuleInstallLanguageList() {
     // Since LanguageManager::getLanguages() uses static caches we need to do
     // this by enabling the module using the UI.
-    $admin_user = $this->drupalCreateUser(['access administration pages', 'administer modules']);
+    $admin_user = $this->drupalCreateUser([
+      'access administration pages',
+      'administer modules',
+    ]);
     $this->drupalLogin($admin_user);
     $edit = [];
     $edit['modules[language][enable]'] = 'language';
diff --git a/web/core/modules/language/tests/src/Functional/LanguageListTest.php b/web/core/modules/language/tests/src/Functional/LanguageListTest.php
index bdaf68259254ff65ca29375618f1b94d93aedb6d..ac84fd9ece14662c96999c656f45eaf18d2ad42f 100644
--- a/web/core/modules/language/tests/src/Functional/LanguageListTest.php
+++ b/web/core/modules/language/tests/src/Functional/LanguageListTest.php
@@ -33,7 +33,10 @@ class LanguageListTest extends BrowserTestBase {
   public function testLanguageList() {
 
     // User to add and remove language.
-    $admin_user = $this->drupalCreateUser(['administer languages', 'access administration pages']);
+    $admin_user = $this->drupalCreateUser([
+      'administer languages',
+      'access administration pages',
+    ]);
     $this->drupalLogin($admin_user);
 
     // Get the weight of the last language.
diff --git a/web/core/modules/language/tests/src/Functional/LanguageLocaleListTest.php b/web/core/modules/language/tests/src/Functional/LanguageLocaleListTest.php
index 2809d329862ea4b485cd96be522965288324533a..6b78d8d298ec3c67e11fbca6c8ba6f4fbffa89e6 100644
--- a/web/core/modules/language/tests/src/Functional/LanguageLocaleListTest.php
+++ b/web/core/modules/language/tests/src/Functional/LanguageLocaleListTest.php
@@ -38,7 +38,10 @@ protected function setUp() {
    */
   public function testLanguageLocaleList() {
     // User to add and remove language.
-    $admin_user = $this->drupalCreateUser(['administer languages', 'access administration pages']);
+    $admin_user = $this->drupalCreateUser([
+      'administer languages',
+      'access administration pages',
+    ]);
     $this->drupalLogin($admin_user);
 
     // Add predefined language.
diff --git a/web/core/modules/language/tests/src/Functional/LanguageNegotiationInfoTest.php b/web/core/modules/language/tests/src/Functional/LanguageNegotiationInfoTest.php
index 35974cfd51183add6ca41b3977483a1b5c4c848c..22cd83e7848c455a8c39e21ae5cdb1333963ec38 100644
--- a/web/core/modules/language/tests/src/Functional/LanguageNegotiationInfoTest.php
+++ b/web/core/modules/language/tests/src/Functional/LanguageNegotiationInfoTest.php
@@ -31,7 +31,12 @@ class LanguageNegotiationInfoTest extends BrowserTestBase {
    */
   protected function setUp() {
     parent::setUp();
-    $admin_user = $this->drupalCreateUser(['administer languages', 'access administration pages', 'view the administration theme', 'administer modules']);
+    $admin_user = $this->drupalCreateUser([
+      'administer languages',
+      'access administration pages',
+      'view the administration theme',
+      'administer modules',
+    ]);
     $this->drupalLogin($admin_user);
     $this->drupalPostForm('admin/config/regional/language/add', ['predefined_langcode' => 'it'], t('Add language'));
   }
diff --git a/web/core/modules/language/tests/src/Functional/LanguagePathMonolingualTest.php b/web/core/modules/language/tests/src/Functional/LanguagePathMonolingualTest.php
index 06affc01f808e138bb9be9e81b27a8a70571f1eb..aea3a7f3765feb600fdcc034432ca4e40c8a55ac 100644
--- a/web/core/modules/language/tests/src/Functional/LanguagePathMonolingualTest.php
+++ b/web/core/modules/language/tests/src/Functional/LanguagePathMonolingualTest.php
@@ -27,7 +27,11 @@ protected function setUp() {
     parent::setUp();
 
     // Create and log in user.
-    $web_user = $this->drupalCreateUser(['administer languages', 'access administration pages', 'administer site configuration']);
+    $web_user = $this->drupalCreateUser([
+      'administer languages',
+      'access administration pages',
+      'administer site configuration',
+    ]);
     $this->drupalLogin($web_user);
 
     // Enable French language.
diff --git a/web/core/modules/language/tests/src/Functional/LanguageSwitchingTest.php b/web/core/modules/language/tests/src/Functional/LanguageSwitchingTest.php
index 7f20d47d1289ee93cf1ada639c70d39d024e32d7..c636f250ecb0f6c44b05043f98ca921648138ca7 100644
--- a/web/core/modules/language/tests/src/Functional/LanguageSwitchingTest.php
+++ b/web/core/modules/language/tests/src/Functional/LanguageSwitchingTest.php
@@ -38,7 +38,11 @@ protected function setUp() {
     parent::setUp();
 
     // Create and log in user.
-    $admin_user = $this->drupalCreateUser(['administer blocks', 'administer languages', 'access administration pages']);
+    $admin_user = $this->drupalCreateUser([
+      'administer blocks',
+      'administer languages',
+      'access administration pages',
+    ]);
     $this->drupalLogin($admin_user);
   }
 
diff --git a/web/core/modules/language/tests/src/Functional/LanguageTourTest.php b/web/core/modules/language/tests/src/Functional/LanguageTourTest.php
index 9bae57720a6cb75a27e8fb53ab85ae9161312116..804b86ced9b136a5a45dcc0ea5775b70fb647eec 100644
--- a/web/core/modules/language/tests/src/Functional/LanguageTourTest.php
+++ b/web/core/modules/language/tests/src/Functional/LanguageTourTest.php
@@ -35,7 +35,10 @@ class LanguageTourTest extends TourTestBase {
    */
   protected function setUp() {
     parent::setUp();
-    $this->adminUser = $this->drupalCreateUser(['administer languages', 'access tour']);
+    $this->adminUser = $this->drupalCreateUser([
+      'administer languages',
+      'access tour',
+    ]);
     $this->drupalLogin($this->adminUser);
     $this->drupalPlaceBlock('local_actions_block');
   }
diff --git a/web/core/modules/language/tests/src/Functional/LanguageUILanguageNegotiationTest.php b/web/core/modules/language/tests/src/Functional/LanguageUILanguageNegotiationTest.php
index 62e0ae5e72fbbc65d8119f6cdd1ab5d8c71d3e72..7816321881f1964fc41182543528f2159e53dca3 100644
--- a/web/core/modules/language/tests/src/Functional/LanguageUILanguageNegotiationTest.php
+++ b/web/core/modules/language/tests/src/Functional/LanguageUILanguageNegotiationTest.php
@@ -74,7 +74,12 @@ class LanguageUILanguageNegotiationTest extends BrowserTestBase {
   protected function setUp() {
     parent::setUp();
 
-    $this->adminUser = $this->drupalCreateUser(['administer languages', 'translate interface', 'access administration pages', 'administer blocks']);
+    $this->adminUser = $this->drupalCreateUser([
+      'administer languages',
+      'translate interface',
+      'access administration pages',
+      'administer blocks',
+    ]);
     $this->drupalLogin($this->adminUser);
   }
 
diff --git a/web/core/modules/language/tests/src/Functional/LanguageUrlRewritingTest.php b/web/core/modules/language/tests/src/Functional/LanguageUrlRewritingTest.php
index 456c5b620281091577750a11ed36f17e6d2af064..60d5885dde3fbd8ee56184fc1e01f5db6eb5b314 100644
--- a/web/core/modules/language/tests/src/Functional/LanguageUrlRewritingTest.php
+++ b/web/core/modules/language/tests/src/Functional/LanguageUrlRewritingTest.php
@@ -39,7 +39,10 @@ protected function setUp() {
     parent::setUp();
 
     // Create and log in user.
-    $this->webUser = $this->drupalCreateUser(['administer languages', 'access administration pages']);
+    $this->webUser = $this->drupalCreateUser([
+      'administer languages',
+      'access administration pages',
+    ]);
     $this->drupalLogin($this->webUser);
 
     // Install French language.
diff --git a/web/core/modules/layout_builder/tests/src/Functional/LayoutBuilderAccessTest.php b/web/core/modules/layout_builder/tests/src/Functional/LayoutBuilderAccessTest.php
index 55c69ac176ebf939b00575eceb94f238ab70de6f..ecaccd94ef9d021a296b80dd8954e470024af99f 100644
--- a/web/core/modules/layout_builder/tests/src/Functional/LayoutBuilderAccessTest.php
+++ b/web/core/modules/layout_builder/tests/src/Functional/LayoutBuilderAccessTest.php
@@ -189,7 +189,12 @@ public function testAccessWithoutBundles(array $permissions, $default_access, $n
     $this->drupalGet('user/' . $non_editable_user->id() . '/layout');
     $this->assertExpectedAccess($non_editable_access);
 
-    $non_viewable_user = $this->drupalCreateUser([], 'bad person', FALSE, ['status' => 0]);
+    $non_viewable_user = $this->drupalCreateUser(
+      [],
+      'bad person',
+      FALSE,
+      ['status' => 0]
+    );
     $this->drupalGet($non_viewable_user->toUrl());
     $this->assertExpectedAccess(FALSE);
     $this->drupalGet($non_viewable_user->toUrl('edit-form'));
diff --git a/web/core/modules/link/tests/src/Functional/LinkFieldUITest.php b/web/core/modules/link/tests/src/Functional/LinkFieldUITest.php
index 65e4125dc38e9dc442871424337bf2804fb62e6f..dd2318e4283e40520e8432f4a7ac820d7e98b55b 100644
--- a/web/core/modules/link/tests/src/Functional/LinkFieldUITest.php
+++ b/web/core/modules/link/tests/src/Functional/LinkFieldUITest.php
@@ -68,8 +68,14 @@ protected function setUp() {
 
     $this->firstContentType = $this->drupalCreateContentType();
     $this->secondContentType = $this->drupalCreateContentType();
-    $this->adminUser = $this->drupalCreateUser(['administer content types', 'administer node fields', 'administer node display']);
-    $this->helpTextUser = $this->drupalCreateUser(['create ' . $this->secondContentType->id() . ' content']);
+    $this->adminUser = $this->drupalCreateUser([
+      'administer content types',
+      'administer node fields',
+      'administer node display',
+    ]);
+    $this->helpTextUser = $this->drupalCreateUser([
+      'create ' . $this->secondContentType->id() . ' content',
+    ]);
     $this->drupalPlaceBlock('system_breadcrumb_block');
   }
 
diff --git a/web/core/modules/locale/src/LocaleConfigManager.php b/web/core/modules/locale/src/LocaleConfigManager.php
index 547a1b504fcba22984e7a4dc3d8336db5da37d49..2ebdd735c93890fe4c57069303dbc4c78b806fbf 100644
--- a/web/core/modules/locale/src/LocaleConfigManager.php
+++ b/web/core/modules/locale/src/LocaleConfigManager.php
@@ -621,6 +621,7 @@ public function updateConfigTranslations(array $names, array $langcodes = []) {
    *   Configuration override data.
    * @param array $translatable
    *   Translatable data array. @see self::getTranslatableData()
+   *
    * @return array
    *   Nested array of any items of $override_data which did not have keys in
    *   $translatable. May be empty if $override_data only had items which were
diff --git a/web/core/modules/locale/tests/src/Functional/LocaleConfigTranslationImportTest.php b/web/core/modules/locale/tests/src/Functional/LocaleConfigTranslationImportTest.php
index 64dcb705d8a653717392d56287ee6fcb5c24ebec..d51a2d3d081a472ee20b0477b87e4beb7a417263 100644
--- a/web/core/modules/locale/tests/src/Functional/LocaleConfigTranslationImportTest.php
+++ b/web/core/modules/locale/tests/src/Functional/LocaleConfigTranslationImportTest.php
@@ -36,7 +36,13 @@ protected function setUp() {
    * Test update changes configuration translations if enabled after language.
    */
   public function testConfigTranslationImport() {
-    $admin_user = $this->drupalCreateUser(['administer modules', 'administer site configuration', 'administer languages', 'access administration pages', 'administer permissions']);
+    $admin_user = $this->drupalCreateUser([
+      'administer modules',
+      'administer site configuration',
+      'administer languages',
+      'access administration pages',
+      'administer permissions',
+    ]);
     $this->drupalLogin($admin_user);
 
     // Add a language. The Afrikaans translation file of locale_test_translate
@@ -90,7 +96,14 @@ public function testConfigTranslationModuleInstall() {
     // import. Test that this override is in place.
     $this->assertFalse($this->config('locale.settings')->get('translation.import_enabled'), 'Translations imports are disabled by default in the Testing profile.');
 
-    $admin_user = $this->drupalCreateUser(['administer modules', 'administer site configuration', 'administer languages', 'access administration pages', 'administer permissions', 'translate configuration']);
+    $admin_user = $this->drupalCreateUser([
+      'administer modules',
+      'administer site configuration',
+      'administer languages',
+      'access administration pages',
+      'administer permissions',
+      'translate configuration',
+    ]);
     $this->drupalLogin($admin_user);
 
     // Enable import of translations. By default this is disabled for automated
@@ -149,7 +162,14 @@ public function testLocaleRemovalAndConfigOverrideDelete() {
     $this->container->get('module_installer')->install(['locale']);
     $this->resetAll();
 
-    $admin_user = $this->drupalCreateUser(['administer modules', 'administer site configuration', 'administer languages', 'access administration pages', 'administer permissions', 'translate interface']);
+    $admin_user = $this->drupalCreateUser([
+      'administer modules',
+      'administer site configuration',
+      'administer languages',
+      'access administration pages',
+      'administer permissions',
+      'translate interface',
+    ]);
     $this->drupalLogin($admin_user);
 
     // Enable import of translations. By default this is disabled for automated
@@ -187,7 +207,14 @@ public function testLocaleRemovalAndConfigOverridePreserve() {
     $this->container->get('module_installer')->install(['locale']);
     $this->resetAll();
 
-    $admin_user = $this->drupalCreateUser(['administer modules', 'administer site configuration', 'administer languages', 'access administration pages', 'administer permissions', 'translate interface']);
+    $admin_user = $this->drupalCreateUser([
+      'administer modules',
+      'administer site configuration',
+      'administer languages',
+      'access administration pages',
+      'administer permissions',
+      'translate interface',
+    ]);
     $this->drupalLogin($admin_user);
 
     // Enable import of translations. By default this is disabled for automated
diff --git a/web/core/modules/locale/tests/src/Functional/LocaleConfigTranslationTest.php b/web/core/modules/locale/tests/src/Functional/LocaleConfigTranslationTest.php
index c555099bcc351efd13b27bf176823b8ab2a8a19a..e42f8d39a884ab94ebc26eb572a59e89ebfb307d 100644
--- a/web/core/modules/locale/tests/src/Functional/LocaleConfigTranslationTest.php
+++ b/web/core/modules/locale/tests/src/Functional/LocaleConfigTranslationTest.php
@@ -48,7 +48,15 @@ protected function setUp() {
 
     // Add custom language.
     $this->langcode = 'xx';
-    $admin_user = $this->drupalCreateUser(['administer languages', 'access administration pages', 'translate interface', 'administer modules', 'access site-wide contact form', 'administer contact forms', 'administer site configuration']);
+    $admin_user = $this->drupalCreateUser([
+      'administer languages',
+      'access administration pages',
+      'translate interface',
+      'administer modules',
+      'access site-wide contact form',
+      'administer contact forms',
+      'administer site configuration',
+    ]);
     $this->drupalLogin($admin_user);
     $name = $this->randomMachineName(16);
     $edit = [
diff --git a/web/core/modules/locale/tests/src/Functional/LocaleContentTest.php b/web/core/modules/locale/tests/src/Functional/LocaleContentTest.php
index 9ac40754f80763f03946456166dc19761ba95997..04c09ff81d3e2323d18795f6dbd92105403f3847 100644
--- a/web/core/modules/locale/tests/src/Functional/LocaleContentTest.php
+++ b/web/core/modules/locale/tests/src/Functional/LocaleContentTest.php
@@ -31,7 +31,12 @@ class LocaleContentTest extends BrowserTestBase {
    */
   public function testMachineNameLTR() {
     // User to add and remove language.
-    $admin_user = $this->drupalCreateUser(['administer languages', 'administer content types', 'access administration pages', 'administer site configuration']);
+    $admin_user = $this->drupalCreateUser([
+      'administer languages',
+      'administer content types',
+      'access administration pages',
+      'administer site configuration',
+    ]);
 
     // Log in as admin.
     $this->drupalLogin($admin_user);
@@ -63,9 +68,17 @@ public function testContentTypeLanguageConfiguration() {
     $type2 = $this->drupalCreateContentType();
 
     // User to add and remove language.
-    $admin_user = $this->drupalCreateUser(['administer languages', 'administer content types', 'access administration pages']);
+    $admin_user = $this->drupalCreateUser([
+      'administer languages',
+      'administer content types',
+      'access administration pages',
+    ]);
     // User to create a node.
-    $web_user = $this->drupalCreateUser(["create {$type1->id()} content", "create {$type2->id()} content", "edit any {$type2->id()} content"]);
+    $web_user = $this->drupalCreateUser([
+      "create {$type1->id()} content",
+      "create {$type2->id()} content",
+      "edit any {$type2->id()} content",
+    ]);
 
     // Add custom language.
     $this->drupalLogin($admin_user);
@@ -140,9 +153,16 @@ public function testContentTypeDirLang() {
     $type = $this->drupalCreateContentType();
 
     // User to add and remove language.
-    $admin_user = $this->drupalCreateUser(['administer languages', 'administer content types', 'access administration pages']);
+    $admin_user = $this->drupalCreateUser([
+      'administer languages',
+      'administer content types',
+      'access administration pages',
+    ]);
     // User to create a node.
-    $web_user = $this->drupalCreateUser(["create {$type->id()} content", "edit own {$type->id()} content"]);
+    $web_user = $this->drupalCreateUser([
+      "create {$type->id()} content",
+      "edit own {$type->id()} content",
+    ]);
 
     // Log in as admin.
     $this->drupalLogin($admin_user);
diff --git a/web/core/modules/locale/tests/src/Functional/LocaleExportTest.php b/web/core/modules/locale/tests/src/Functional/LocaleExportTest.php
index 9869fb70a2226dcc1e1589491fad2ac6c7e2af1a..5170a8317b709f266368b62b54fc57d744a55fe4 100644
--- a/web/core/modules/locale/tests/src/Functional/LocaleExportTest.php
+++ b/web/core/modules/locale/tests/src/Functional/LocaleExportTest.php
@@ -35,7 +35,11 @@ class LocaleExportTest extends BrowserTestBase {
   protected function setUp() {
     parent::setUp();
 
-    $this->adminUser = $this->drupalCreateUser(['administer languages', 'translate interface', 'access administration pages']);
+    $this->adminUser = $this->drupalCreateUser([
+      'administer languages',
+      'translate interface',
+      'access administration pages',
+    ]);
     $this->drupalLogin($this->adminUser);
 
     // Copy test po files to the translations directory.
diff --git a/web/core/modules/locale/tests/src/Functional/LocaleImportFunctionalTest.php b/web/core/modules/locale/tests/src/Functional/LocaleImportFunctionalTest.php
index 9342c6ed84278107e6a91275801ace52e774c72b..526db97c0a9fd12cd1ad627452d38b4a24571d35 100644
--- a/web/core/modules/locale/tests/src/Functional/LocaleImportFunctionalTest.php
+++ b/web/core/modules/locale/tests/src/Functional/LocaleImportFunctionalTest.php
@@ -55,8 +55,17 @@ protected function setUp() {
     $file_system->copy(__DIR__ . '/../../../tests/test.de.po', 'translations://', FileSystemInterface::EXISTS_REPLACE);
     $file_system->copy(__DIR__ . '/../../../tests/test.xx.po', 'translations://', FileSystemInterface::EXISTS_REPLACE);
 
-    $this->adminUser = $this->drupalCreateUser(['administer languages', 'translate interface', 'access administration pages']);
-    $this->adminUserAccessSiteReports = $this->drupalCreateUser(['administer languages', 'translate interface', 'access administration pages', 'access site reports']);
+    $this->adminUser = $this->drupalCreateUser([
+      'administer languages',
+      'translate interface',
+      'access administration pages',
+    ]);
+    $this->adminUserAccessSiteReports = $this->drupalCreateUser([
+      'administer languages',
+      'translate interface',
+      'access administration pages',
+      'access site reports',
+    ]);
     $this->drupalLogin($this->adminUser);
 
     // Enable import of translations. By default this is disabled for automated
diff --git a/web/core/modules/locale/tests/src/Functional/LocaleJavascriptTranslationTest.php b/web/core/modules/locale/tests/src/Functional/LocaleJavascriptTranslationTest.php
index 087052974c83607500befcc06793f0781a8f4b01..7b735b7f3258f2c0d6d9169db668533b9e0cdb91 100644
--- a/web/core/modules/locale/tests/src/Functional/LocaleJavascriptTranslationTest.php
+++ b/web/core/modules/locale/tests/src/Functional/LocaleJavascriptTranslationTest.php
@@ -116,7 +116,11 @@ public function testFileParsing() {
    */
   public function testLocaleTranslationJsDependencies() {
     // User to add and remove language.
-    $admin_user = $this->drupalCreateUser(['administer languages', 'access administration pages', 'translate interface']);
+    $admin_user = $this->drupalCreateUser([
+      'administer languages',
+      'access administration pages',
+      'translate interface',
+    ]);
 
     // Add custom language.
     $this->drupalLogin($admin_user);
diff --git a/web/core/modules/locale/tests/src/Functional/LocalePathTest.php b/web/core/modules/locale/tests/src/Functional/LocalePathTest.php
index 8ec53c666be53eec7aaac425e098dd14ccf75aad..9357230ab2043803efaa6ac44fc05600d3b454fe 100644
--- a/web/core/modules/locale/tests/src/Functional/LocalePathTest.php
+++ b/web/core/modules/locale/tests/src/Functional/LocalePathTest.php
@@ -44,7 +44,14 @@ protected function setUp() {
    */
   public function testPathLanguageConfiguration() {
     // User to add and remove language.
-    $admin_user = $this->drupalCreateUser(['administer languages', 'create page content', 'administer url aliases', 'create url aliases', 'access administration pages', 'access content overview']);
+    $admin_user = $this->drupalCreateUser([
+      'administer languages',
+      'create page content',
+      'administer url aliases',
+      'create url aliases',
+      'access administration pages',
+      'access content overview',
+    ]);
 
     // Add custom language.
     $this->drupalLogin($admin_user);
diff --git a/web/core/modules/locale/tests/src/Functional/LocalePluralFormatTest.php b/web/core/modules/locale/tests/src/Functional/LocalePluralFormatTest.php
index b85e737a06bb1a30f1ffade5235f8572cd3538b6..552273cfa769195b993c0b9c09db37a1a2e42b80 100644
--- a/web/core/modules/locale/tests/src/Functional/LocalePluralFormatTest.php
+++ b/web/core/modules/locale/tests/src/Functional/LocalePluralFormatTest.php
@@ -39,7 +39,11 @@ class LocalePluralFormatTest extends BrowserTestBase {
   protected function setUp() {
     parent::setUp();
 
-    $this->adminUser = $this->drupalCreateUser(['administer languages', 'translate interface', 'access administration pages']);
+    $this->adminUser = $this->drupalCreateUser([
+      'administer languages',
+      'translate interface',
+      'access administration pages',
+    ]);
     $this->drupalLogin($this->adminUser);
   }
 
diff --git a/web/core/modules/locale/tests/src/Functional/LocaleTranslateStringTourTest.php b/web/core/modules/locale/tests/src/Functional/LocaleTranslateStringTourTest.php
index 19db1b38ed2bf92ff6c52a7d784d3f75401f5245..f2307cf9199f4ac2c7c5303b15a4ed33347e6cd8 100644
--- a/web/core/modules/locale/tests/src/Functional/LocaleTranslateStringTourTest.php
+++ b/web/core/modules/locale/tests/src/Functional/LocaleTranslateStringTourTest.php
@@ -35,7 +35,11 @@ class LocaleTranslateStringTourTest extends TourTestBase {
    */
   protected function setUp() {
     parent::setUp();
-    $this->adminUser = $this->drupalCreateUser(['translate interface', 'access tour', 'administer languages']);
+    $this->adminUser = $this->drupalCreateUser([
+      'translate interface',
+      'access tour',
+      'administer languages',
+    ]);
     $this->drupalLogin($this->adminUser);
   }
 
diff --git a/web/core/modules/locale/tests/src/Functional/LocaleTranslationUiTest.php b/web/core/modules/locale/tests/src/Functional/LocaleTranslationUiTest.php
index 3905116eae7686e78f06a4fea4498d5226a5e39b..aac663b25b311b3acae82a19fbc28013a8fcd782 100644
--- a/web/core/modules/locale/tests/src/Functional/LocaleTranslationUiTest.php
+++ b/web/core/modules/locale/tests/src/Functional/LocaleTranslationUiTest.php
@@ -32,7 +32,10 @@ class LocaleTranslationUiTest extends BrowserTestBase {
    * Enable interface translation to English.
    */
   public function testEnglishTranslation() {
-    $admin_user = $this->drupalCreateUser(['administer languages', 'access administration pages']);
+    $admin_user = $this->drupalCreateUser([
+      'administer languages',
+      'access administration pages',
+    ]);
     $this->drupalLogin($admin_user);
 
     $this->drupalPostForm('admin/config/regional/language/edit/en', ['locale_translate_english' => TRUE], t('Save language'));
@@ -44,9 +47,15 @@ public function testEnglishTranslation() {
    */
   public function testStringTranslation() {
     // User to add and remove language.
-    $admin_user = $this->drupalCreateUser(['administer languages', 'access administration pages']);
+    $admin_user = $this->drupalCreateUser([
+      'administer languages',
+      'access administration pages',
+    ]);
     // User to translate and delete string.
-    $translate_user = $this->drupalCreateUser(['translate interface', 'access administration pages']);
+    $translate_user = $this->drupalCreateUser([
+      'translate interface',
+      'access administration pages',
+    ]);
     // Code for the language.
     $langcode = 'xx';
     // The English name for the language. This will be translated.
@@ -216,7 +225,11 @@ public function testStringTranslation() {
    * properly created and rebuilt on deletion.
    */
   public function testJavaScriptTranslation() {
-    $user = $this->drupalCreateUser(['translate interface', 'administer languages', 'access administration pages']);
+    $user = $this->drupalCreateUser([
+      'translate interface',
+      'administer languages',
+      'access administration pages',
+    ]);
     $this->drupalLogin($user);
     $config = $this->config('locale.settings');
 
@@ -279,7 +292,11 @@ public function testJavaScriptTranslation() {
    */
   public function testStringValidation() {
     // User to add language and strings.
-    $admin_user = $this->drupalCreateUser(['administer languages', 'access administration pages', 'translate interface']);
+    $admin_user = $this->drupalCreateUser([
+      'administer languages',
+      'access administration pages',
+      'translate interface',
+    ]);
     $this->drupalLogin($admin_user);
     $langcode = 'xx';
     // The English name for the language. This will be translated.
@@ -333,9 +350,15 @@ public function testStringValidation() {
    */
   public function testStringSearch() {
     // User to add and remove language.
-    $admin_user = $this->drupalCreateUser(['administer languages', 'access administration pages']);
+    $admin_user = $this->drupalCreateUser([
+      'administer languages',
+      'access administration pages',
+    ]);
     // User to translate and delete string.
-    $translate_user = $this->drupalCreateUser(['translate interface', 'access administration pages']);
+    $translate_user = $this->drupalCreateUser([
+      'translate interface',
+      'access administration pages',
+    ]);
 
     // Code for the language.
     $langcode = 'xx';
@@ -474,7 +497,11 @@ public function testStringSearch() {
    * Tests that only changed strings are saved customized when edited.
    */
   public function testUICustomizedStrings() {
-    $user = $this->drupalCreateUser(['translate interface', 'administer languages', 'access administration pages']);
+    $user = $this->drupalCreateUser([
+      'translate interface',
+      'administer languages',
+      'access administration pages',
+    ]);
     $this->drupalLogin($user);
     ConfigurableLanguage::createFromLangcode('de')->save();
 
diff --git a/web/core/modules/locale/tests/src/Functional/LocaleUpdateCronTest.php b/web/core/modules/locale/tests/src/Functional/LocaleUpdateCronTest.php
index 34ee9dc36a8af98766037ca9759bd458f34bcd15..d7ebf3254d7003b81a8ec46cf8bf943a8a831fb2 100644
--- a/web/core/modules/locale/tests/src/Functional/LocaleUpdateCronTest.php
+++ b/web/core/modules/locale/tests/src/Functional/LocaleUpdateCronTest.php
@@ -26,7 +26,13 @@ class LocaleUpdateCronTest extends LocaleUpdateBase {
    */
   protected function setUp() {
     parent::setUp();
-    $admin_user = $this->drupalCreateUser(['administer modules', 'administer site configuration', 'administer languages', 'access administration pages', 'translate interface']);
+    $admin_user = $this->drupalCreateUser([
+      'administer modules',
+      'administer site configuration',
+      'administer languages',
+      'access administration pages',
+      'translate interface',
+    ]);
     $this->drupalLogin($admin_user);
     $this->addLanguage('de');
   }
diff --git a/web/core/modules/locale/tests/src/Functional/LocaleUpdateDevelopmentReleaseTest.php b/web/core/modules/locale/tests/src/Functional/LocaleUpdateDevelopmentReleaseTest.php
index 59211984079397d900f50faa955ba35d3d34f12d..a04eafc19af70998771b49cc24c969cb6393c56e 100644
--- a/web/core/modules/locale/tests/src/Functional/LocaleUpdateDevelopmentReleaseTest.php
+++ b/web/core/modules/locale/tests/src/Functional/LocaleUpdateDevelopmentReleaseTest.php
@@ -21,7 +21,12 @@ class LocaleUpdateDevelopmentReleaseTest extends BrowserTestBase {
   protected function setUp() {
     parent::setUp();
     module_load_include('compare.inc', 'locale');
-    $admin_user = $this->drupalCreateUser(['administer modules', 'administer languages', 'access administration pages', 'translate interface']);
+    $admin_user = $this->drupalCreateUser([
+      'administer modules',
+      'administer languages',
+      'access administration pages',
+      'translate interface',
+    ]);
     $this->drupalLogin($admin_user);
     $this->drupalPostForm('admin/config/regional/language/add', ['predefined_langcode' => 'hu'], t('Add language'));
   }
diff --git a/web/core/modules/locale/tests/src/Functional/LocaleUpdateInterfaceTest.php b/web/core/modules/locale/tests/src/Functional/LocaleUpdateInterfaceTest.php
index 516d5b6386a3f6daf101b71ae81e5e3b01dcf981..02049b6646d93d952ccb0514dfebd16a0ce2148f 100644
--- a/web/core/modules/locale/tests/src/Functional/LocaleUpdateInterfaceTest.php
+++ b/web/core/modules/locale/tests/src/Functional/LocaleUpdateInterfaceTest.php
@@ -29,7 +29,13 @@ class LocaleUpdateInterfaceTest extends LocaleUpdateBase {
    */
   protected function setUp() {
     parent::setUp();
-    $admin_user = $this->drupalCreateUser(['administer modules', 'administer site configuration', 'administer languages', 'access administration pages', 'translate interface']);
+    $admin_user = $this->drupalCreateUser([
+      'administer modules',
+      'administer site configuration',
+      'administer languages',
+      'access administration pages',
+      'translate interface',
+    ]);
     $this->drupalLogin($admin_user);
   }
 
diff --git a/web/core/modules/locale/tests/src/Functional/LocaleUpdateTest.php b/web/core/modules/locale/tests/src/Functional/LocaleUpdateTest.php
index d6818a8f143422c509cef30a5e905c44baac712c..d1b12c17f4cd665931f957e9f829c88b2e686170 100644
--- a/web/core/modules/locale/tests/src/Functional/LocaleUpdateTest.php
+++ b/web/core/modules/locale/tests/src/Functional/LocaleUpdateTest.php
@@ -24,7 +24,13 @@ protected function setUp() {
     parent::setUp();
     module_load_include('compare.inc', 'locale');
     module_load_include('fetch.inc', 'locale');
-    $admin_user = $this->drupalCreateUser(['administer modules', 'administer site configuration', 'administer languages', 'access administration pages', 'translate interface']);
+    $admin_user = $this->drupalCreateUser([
+      'administer modules',
+      'administer site configuration',
+      'administer languages',
+      'access administration pages',
+      'translate interface',
+    ]);
     $this->drupalLogin($admin_user);
     // We use German as test language. This language must match the translation
     // file that come with the locale_test module (test.de.po) and can therefore
diff --git a/web/core/modules/menu_link_content/menu_link_content.module b/web/core/modules/menu_link_content/menu_link_content.module
index def0ed9db0e728ba1ea910d042e520b89b3cb7e8..a593bef4e3c986e376e6fb8b58f66a0faad087aa 100644
--- a/web/core/modules/menu_link_content/menu_link_content.module
+++ b/web/core/modules/menu_link_content/menu_link_content.module
@@ -104,6 +104,11 @@ function menu_link_content_entity_predelete(EntityInterface $entity) {
   $entity_type_id = $entity->getEntityTypeId();
   foreach ($entity->uriRelationships() as $rel) {
     $url = $entity->toUrl($rel);
+    // Entities can provide uri relationships that are not routed, in this case
+    // getRouteParameters() will throw an exception.
+    if (!$url->isRouted()) {
+      continue;
+    }
     $route_parameters = $url->getRouteParameters();
     if (!isset($route_parameters[$entity_type_id])) {
       // Do not delete links which do not relate to this exact entity. For
diff --git a/web/core/modules/menu_link_content/tests/src/Functional/MenuLinkContentDeleteFormTest.php b/web/core/modules/menu_link_content/tests/src/Functional/MenuLinkContentDeleteFormTest.php
index 942703ae533dfa6b6ed88db541138d70eda1fb73..bf77e303075be7b730b4e2d742c70de731e3383c 100644
--- a/web/core/modules/menu_link_content/tests/src/Functional/MenuLinkContentDeleteFormTest.php
+++ b/web/core/modules/menu_link_content/tests/src/Functional/MenuLinkContentDeleteFormTest.php
@@ -52,7 +52,7 @@ public function testMenuLinkContentDeleteForm() {
     $menu_link = MenuLinkContent::load(1);
     $this->drupalGet($menu_link->toUrl('delete-form'));
     $this->assertRaw(t('Are you sure you want to delete the custom menu link %name?', ['%name' => $menu_link->label()]));
-    $this->assertLink(t('Cancel'));
+    $this->assertSession()->linkExists(t('Cancel'));
     // Make sure cancel link points to link edit
     $this->assertLinkByHref($menu_link->toUrl('edit-form')->toString());
 
diff --git a/web/core/modules/menu_link_content/tests/src/Functional/MenuLinkContentFormTest.php b/web/core/modules/menu_link_content/tests/src/Functional/MenuLinkContentFormTest.php
index 8b58f4ff2851f0fe76d033d9dddc07185da1848a..d2c1b750e53b6d911b27bc6c53f2fbf35c4c5686 100644
--- a/web/core/modules/menu_link_content/tests/src/Functional/MenuLinkContentFormTest.php
+++ b/web/core/modules/menu_link_content/tests/src/Functional/MenuLinkContentFormTest.php
@@ -47,7 +47,10 @@ class MenuLinkContentFormTest extends BrowserTestBase {
    */
   protected function setUp() {
     parent::setUp();
-    $this->adminUser = $this->drupalCreateUser(['administer menu', 'link to any page']);
+    $this->adminUser = $this->drupalCreateUser([
+      'administer menu',
+      'link to any page',
+    ]);
     $this->basicUser = $this->drupalCreateUser(['administer menu']);
     $this->drupalLogin($this->adminUser);
   }
diff --git a/web/core/modules/menu_link_content/tests/src/Functional/MenuLinkContentTranslationUITest.php b/web/core/modules/menu_link_content/tests/src/Functional/MenuLinkContentTranslationUITest.php
index badeb9cc002f00df5345e6c88c5225750906ab97..334bfcf018152b55bdb758bf33aaea9be22f78e4 100644
--- a/web/core/modules/menu_link_content/tests/src/Functional/MenuLinkContentTranslationUITest.php
+++ b/web/core/modules/menu_link_content/tests/src/Functional/MenuLinkContentTranslationUITest.php
@@ -73,7 +73,7 @@ protected function createEntity($values, $langcode, $bundle_name = NULL) {
    */
   public function testTranslationLinkOnMenuEditForm() {
     $this->drupalGet('admin/structure/menu/manage/tools');
-    $this->assertNoLink(t('Translate'));
+    $this->assertSession()->linkNotExists(t('Translate'));
 
     $menu_link_content = MenuLinkContent::create([
       'menu_name' => 'tools',
@@ -82,7 +82,7 @@ public function testTranslationLinkOnMenuEditForm() {
     ]);
     $menu_link_content->save();
     $this->drupalGet('admin/structure/menu/manage/tools');
-    $this->assertLink(t('Translate'));
+    $this->assertSession()->linkExists(t('Translate'));
   }
 
   /**
diff --git a/web/core/modules/menu_link_content/tests/src/Kernel/MenuLinksTest.php b/web/core/modules/menu_link_content/tests/src/Kernel/MenuLinksTest.php
index d7d3812f70c38094d800804513a15d5a91ff6e2c..6883c76abbe0d07397a49829dcdbf81defb686c9 100644
--- a/web/core/modules/menu_link_content/tests/src/Kernel/MenuLinksTest.php
+++ b/web/core/modules/menu_link_content/tests/src/Kernel/MenuLinksTest.php
@@ -4,6 +4,7 @@
 
 use Drupal\Component\Render\FormattableMarkup;
 use Drupal\Core\Menu\MenuTreeParameters;
+use Drupal\entity_test\Entity\EntityTestExternal;
 use Drupal\KernelTests\KernelTestBase;
 use Drupal\menu_link_content\Entity\MenuLinkContent;
 use Drupal\system\Entity\Menu;
@@ -17,11 +18,10 @@
 class MenuLinksTest extends KernelTestBase {
 
   /**
-   * Modules to enable.
-   *
-   * @var array
+   * {@inheritdoc}
    */
-  public static $modules = [
+  protected static $modules = [
+    'entity_test',
     'link',
     'menu_link_content',
     'router_test',
@@ -46,6 +46,7 @@ protected function setUp() {
 
     $this->installSchema('system', ['sequences']);
     $this->installSchema('user', ['users_data']);
+    $this->installEntitySchema('entity_test_external');
     $this->installEntitySchema('menu_link_content');
     $this->installEntitySchema('user');
 
@@ -163,6 +164,12 @@ public function testMenuLinkOnEntityDelete() {
     $user = User::create(['name' => 'username']);
     $user->save();
 
+    // Create External test entity.
+    $external_entity = EntityTestExternal::create();
+    $external_entity->save();
+    // Ensure an external entity can be deleted.
+    $external_entity->delete();
+
     // Create "canonical" menu link pointing to the user.
     $menu_link_content = MenuLinkContent::create([
       'title' => 'username profile',
diff --git a/web/core/modules/menu_ui/tests/src/Functional/MenuLinkReorderTest.php b/web/core/modules/menu_ui/tests/src/Functional/MenuLinkReorderTest.php
index 88e515857f15732fab412ef4fa33c19c92c7a926..0a94dbd289d971478ed0012fcc98d9cd86104b71 100644
--- a/web/core/modules/menu_ui/tests/src/Functional/MenuLinkReorderTest.php
+++ b/web/core/modules/menu_ui/tests/src/Functional/MenuLinkReorderTest.php
@@ -40,7 +40,7 @@ public function testDefaultMenuLinkReorder() {
 
     // Assert that the Home link is available.
     $this->drupalGet('test-page');
-    $this->assertLink('Home');
+    $this->assertSession()->linkExists('Home');
 
     // The administrator user that can re-order menu links.
     $this->administrator = $this->drupalCreateUser([
@@ -58,14 +58,14 @@ public function testDefaultMenuLinkReorder() {
 
     // The link is still there.
     $this->drupalGet('test-page');
-    $this->assertLink('Home');
+    $this->assertSession()->linkExists('Home');
 
     // Clear all caches.
     $this->drupalPostForm('admin/config/development/performance', [], t('Clear all caches'));
 
     // Clearing all caches should not affect the state of the menu link.
     $this->drupalGet('test-page');
-    $this->assertLink('Home');
+    $this->assertSession()->linkExists('Home');
 
   }
 
diff --git a/web/core/modules/menu_ui/tests/src/Functional/MenuUiLanguageTest.php b/web/core/modules/menu_ui/tests/src/Functional/MenuUiLanguageTest.php
index dcdb3277b61110648855d8beac4069293111e17e..af69440e0bc91cd115db586279adeb452786bcbc 100644
--- a/web/core/modules/menu_ui/tests/src/Functional/MenuUiLanguageTest.php
+++ b/web/core/modules/menu_ui/tests/src/Functional/MenuUiLanguageTest.php
@@ -38,7 +38,10 @@ class MenuUiLanguageTest extends BrowserTestBase {
   protected function setUp() {
     parent::setUp();
 
-    $this->drupalLogin($this->drupalCreateUser(['access administration pages', 'administer menu']));
+    $this->drupalLogin($this->drupalCreateUser([
+      'access administration pages',
+      'administer menu',
+    ]));
 
     // Add some custom languages.
     foreach (['aa', 'bb', 'cc', 'cs'] as $language_code) {
diff --git a/web/core/modules/menu_ui/tests/src/Functional/MenuUiNodeTest.php b/web/core/modules/menu_ui/tests/src/Functional/MenuUiNodeTest.php
index 5909ee0db50963f2819d0929c3b7596e21d55447..05b2dd91fc19a50f81c18341626ffa6c51ca0135 100644
--- a/web/core/modules/menu_ui/tests/src/Functional/MenuUiNodeTest.php
+++ b/web/core/modules/menu_ui/tests/src/Functional/MenuUiNodeTest.php
@@ -141,7 +141,7 @@ public function testMenuNodeFormWidget() {
     $node = $this->drupalGetNodeByTitle($node_title);
     // Assert that there is no link for the node.
     $this->drupalGet('test-page');
-    $this->assertNoLink($node_title);
+    $this->assertSession()->linkNotExists($node_title);
 
     // Edit the node, enable the menu link setting, but skip the link title.
     $edit = [
@@ -150,7 +150,7 @@ public function testMenuNodeFormWidget() {
     $this->drupalPostForm('node/' . $node->id() . '/edit', $edit, t('Save'));
     // Assert that there is no link for the node.
     $this->drupalGet('test-page');
-    $this->assertNoLink($node_title);
+    $this->assertSession()->linkNotExists($node_title);
 
     // Make sure the menu links only appear when the node is published.
     // These buttons just appear for 'administer nodes' users.
@@ -171,12 +171,12 @@ public function testMenuNodeFormWidget() {
     ];
     $this->drupalPostForm('node/' . $node->id() . '/edit', $edit, 'Save');
     $this->drupalGet('test-page');
-    $this->assertNoLink($node_title, 'Found no menu link with the node unpublished');
+    $this->assertSession()->linkNotExists($node_title, 'Found no menu link with the node unpublished');
     // Assert that the link exists if published.
     $edit['status[value]'] = TRUE;
     $this->drupalPostForm('node/' . $node->id() . '/edit', $edit, 'Save');
     $this->drupalGet('test-page');
-    $this->assertLink($node_title, 0, 'Found a menu link with the node published');
+    $this->assertSession()->linkExists($node_title, 0, 'Found a menu link with the node published');
 
     // Log back in as normal user.
     $this->drupalLogin($this->editor);
@@ -189,7 +189,7 @@ public function testMenuNodeFormWidget() {
     $this->drupalPostForm('node/' . $node->id() . '/edit', $edit, t('Save'));
     // Assert that the link exists.
     $this->drupalGet('test-page');
-    $this->assertLink($node_title);
+    $this->assertSession()->linkExists($node_title);
 
     $this->drupalGet('node/' . $node->id() . '/edit');
     $this->assertFieldById('edit-menu-weight', 17, 'Menu weight correct in edit form');
@@ -213,7 +213,7 @@ public function testMenuNodeFormWidget() {
     $this->drupalPostForm('node/' . $node->id() . '/edit', $edit, t('Save'));
     // Assert that there is no link for the node.
     $this->drupalGet('test-page');
-    $this->assertNoLink($node_title);
+    $this->assertSession()->linkNotExists($node_title);
 
     // Add a menu link to the Administration menu.
     $item = MenuLinkContent::create([
@@ -335,11 +335,11 @@ public function testMultilingualMenuNodeFormWidget() {
 
     // Assert that the original link exists in the frontend.
     $this->drupalGet('node/' . $node->id(), ['language' => $languages[$langcodes[0]]]);
-    $this->assertLink($node_title);
+    $this->assertSession()->linkExists($node_title);
 
     // Assert that the translated link exists in the frontend.
     $this->drupalGet('node/' . $node->id(), ['language' => $languages[$langcodes[1]]]);
-    $this->assertLink($translated_node_title);
+    $this->assertSession()->linkExists($translated_node_title);
 
     // Revisit the edit page in original language, check the loaded menu item title and save.
     $options = ['language' => $languages[$langcodes[0]]];
diff --git a/web/core/modules/menu_ui/tests/src/Functional/MenuUiTest.php b/web/core/modules/menu_ui/tests/src/Functional/MenuUiTest.php
index 38823057fc32ea889dbfd67a5981145ce3466ed2..de15179d68a4fb20521e9211894aff3bb2b411c9 100644
--- a/web/core/modules/menu_ui/tests/src/Functional/MenuUiTest.php
+++ b/web/core/modules/menu_ui/tests/src/Functional/MenuUiTest.php
@@ -88,7 +88,12 @@ protected function setUp() {
     $this->drupalCreateContentType(['type' => 'article', 'name' => 'Article']);
 
     // Create users.
-    $this->adminUser = $this->drupalCreateUser(['access administration pages', 'administer blocks', 'administer menu', 'create article content']);
+    $this->adminUser = $this->drupalCreateUser([
+      'access administration pages',
+      'administer blocks',
+      'administer menu',
+      'create article content',
+    ]);
     $this->authenticatedUser = $this->drupalCreateUser([]);
   }
 
@@ -557,7 +562,13 @@ public function testSystemMenuRename() {
    * Tests that menu items pointing to unpublished nodes are editable.
    */
   public function testUnpublishedNodeMenuItem() {
-    $this->drupalLogin($this->drupalCreateUser(['access administration pages', 'administer blocks', 'administer menu', 'create article content', 'bypass node access']));
+    $this->drupalLogin($this->drupalCreateUser([
+      'access administration pages',
+      'administer blocks',
+      'administer menu',
+      'create article content',
+      'bypass node access',
+    ]));
     // Create an unpublished node.
     $node = $this->drupalCreateNode([
       'type' => 'article',
@@ -704,7 +715,7 @@ public function verifyMenuLink(MenuLinkContent $item, $item_node, MenuLinkConten
     if (isset($parent)) {
       // Verify menu link.
       $title = $parent->getTitle();
-      $this->assertLink($title, 0, 'Parent menu link was displayed');
+      $this->assertSession()->linkExists($title, 0, 'Parent menu link was displayed');
 
       // Verify menu link link.
       $this->clickLink($title);
@@ -714,7 +725,7 @@ public function verifyMenuLink(MenuLinkContent $item, $item_node, MenuLinkConten
 
     // Verify menu link.
     $title = $item->getTitle();
-    $this->assertLink($title, 0, 'Menu link was displayed');
+    $this->assertSession()->linkExists($title, 0, 'Menu link was displayed');
 
     // Verify menu link link.
     $this->clickLink($title);
diff --git a/web/core/modules/migrate_drupal/src/Plugin/migrate/source/DrupalSqlBase.php b/web/core/modules/migrate_drupal/src/Plugin/migrate/source/DrupalSqlBase.php
index 38b4cbe3abcfcd39daaa43243323be8f0cb0fd5f..f66559032f12c8d61a39cf2aa60e133e8b120b14 100644
--- a/web/core/modules/migrate_drupal/src/Plugin/migrate/source/DrupalSqlBase.php
+++ b/web/core/modules/migrate_drupal/src/Plugin/migrate/source/DrupalSqlBase.php
@@ -160,6 +160,7 @@ protected function moduleExists($module) {
    *   Name of the variable.
    * @param $default
    *   The default value.
+   *
    * @return mixed
    */
   protected function variableGet($name, $default) {
diff --git a/web/core/modules/node/src/NodeGrantDatabaseStorage.php b/web/core/modules/node/src/NodeGrantDatabaseStorage.php
index 1bea256c203e582fad4e88c044707af8e149ebaf..bacd952c3668eddbe8b8dfab9dbc9304f08d865d 100644
--- a/web/core/modules/node/src/NodeGrantDatabaseStorage.php
+++ b/web/core/modules/node/src/NodeGrantDatabaseStorage.php
@@ -288,6 +288,7 @@ public function deleteNodeRecords(array $nids) {
    *
    * @param array $node_access_grants
    *   An array of grants, as returned by node_access_grants().
+   *
    * @return \Drupal\Core\Database\Query\Condition
    *   A condition object to be passed to $query->condition().
    *
diff --git a/web/core/modules/node/tests/src/Functional/MultiStepNodeFormBasicOptionsTest.php b/web/core/modules/node/tests/src/Functional/MultiStepNodeFormBasicOptionsTest.php
index 837d96ce31b4d05d9a3256975af9df6e7b077195..5e49d08accb92aa9112233b7853546eef971b383 100644
--- a/web/core/modules/node/tests/src/Functional/MultiStepNodeFormBasicOptionsTest.php
+++ b/web/core/modules/node/tests/src/Functional/MultiStepNodeFormBasicOptionsTest.php
@@ -29,7 +29,10 @@ class MultiStepNodeFormBasicOptionsTest extends NodeTestBase {
    */
   public function testMultiStepNodeFormBasicOptions() {
     // Prepare a user to create the node.
-    $web_user = $this->drupalCreateUser(['administer nodes', 'create page content']);
+    $web_user = $this->drupalCreateUser([
+      'administer nodes',
+      'create page content',
+    ]);
     $this->drupalLogin($web_user);
 
     // Create an unlimited cardinality field.
diff --git a/web/core/modules/node/tests/src/Functional/NodeAccessBaseTableTest.php b/web/core/modules/node/tests/src/Functional/NodeAccessBaseTableTest.php
index c5f376b73a662e986512db69b3d45f8137174b93..3ed15bc97f450ae6eb614bcb6e8d000637a02f25 100644
--- a/web/core/modules/node/tests/src/Functional/NodeAccessBaseTableTest.php
+++ b/web/core/modules/node/tests/src/Functional/NodeAccessBaseTableTest.php
@@ -100,7 +100,10 @@ public function testNodeAccessBasic() {
     // Array of nids marked private.
     $private_nodes = [];
     for ($i = 0; $i < $num_simple_users; $i++) {
-      $simple_users[$i] = $this->drupalCreateUser(['access content', 'create article content']);
+      $simple_users[$i] = $this->drupalCreateUser([
+        'access content',
+        'create article content',
+      ]);
     }
     foreach ($simple_users as $this->webUser) {
       $this->drupalLogin($this->webUser);
@@ -160,7 +163,12 @@ public function testNodeAccessBasic() {
     }
 
     // Now test that a user with 'node test view' permissions can view content.
-    $access_user = $this->drupalCreateUser(['access content', 'create article content', 'node test view', 'search content']);
+    $access_user = $this->drupalCreateUser([
+      'access content',
+      'create article content',
+      'node test view',
+      'search content',
+    ]);
     $this->drupalLogin($access_user);
 
     foreach ($this->nodesByUser as $private_status) {
diff --git a/web/core/modules/node/tests/src/Functional/NodeAccessFieldTest.php b/web/core/modules/node/tests/src/Functional/NodeAccessFieldTest.php
index d92b5ef8a814fb311f884e5e91cbf2e41738c93a..8f29c65e87904fa8e5fde714336e72d867c55eeb 100644
--- a/web/core/modules/node/tests/src/Functional/NodeAccessFieldTest.php
+++ b/web/core/modules/node/tests/src/Functional/NodeAccessFieldTest.php
@@ -51,8 +51,15 @@ protected function setUp() {
     node_access_rebuild();
 
     // Create some users.
-    $this->adminUser = $this->drupalCreateUser(['access content', 'bypass node access']);
-    $this->contentAdminUser = $this->drupalCreateUser(['access content', 'administer content types', 'administer node fields']);
+    $this->adminUser = $this->drupalCreateUser([
+      'access content',
+      'bypass node access',
+    ]);
+    $this->contentAdminUser = $this->drupalCreateUser([
+      'access content',
+      'administer content types',
+      'administer node fields',
+    ]);
 
     // Add a custom field to the page content type.
     $this->fieldName = mb_strtolower($this->randomMachineName() . '_field_name');
diff --git a/web/core/modules/node/tests/src/Functional/NodeAccessGrantsCacheContextTest.php b/web/core/modules/node/tests/src/Functional/NodeAccessGrantsCacheContextTest.php
index ba9f2bb1547a0c1652694aeb8f93aac4ce4ed46d..4352c6c974c797506777d4c426289a45d4f52efc 100644
--- a/web/core/modules/node/tests/src/Functional/NodeAccessGrantsCacheContextTest.php
+++ b/web/core/modules/node/tests/src/Functional/NodeAccessGrantsCacheContextTest.php
@@ -50,9 +50,19 @@ protected function setUp() {
 
     // Create user with simple node access permission. The 'node test view'
     // permission is implemented and granted by the node_access_test module.
-    $this->accessUser = $this->drupalCreateUser(['access content overview', 'access content', 'node test view']);
-    $this->noAccessUser = $this->drupalCreateUser(['access content overview', 'access content']);
-    $this->noAccessUser2 = $this->drupalCreateUser(['access content overview', 'access content']);
+    $this->accessUser = $this->drupalCreateUser([
+      'access content overview',
+      'access content',
+      'node test view',
+    ]);
+    $this->noAccessUser = $this->drupalCreateUser([
+      'access content overview',
+      'access content',
+    ]);
+    $this->noAccessUser2 = $this->drupalCreateUser([
+      'access content overview',
+      'access content',
+    ]);
 
     $this->userMapping = [
       1 => $this->rootUser,
diff --git a/web/core/modules/node/tests/src/Functional/NodeAccessMenuLinkTest.php b/web/core/modules/node/tests/src/Functional/NodeAccessMenuLinkTest.php
index 54c912345dc1872cef2e78a8371ff9af5b59a35b..fdd35dd64aa021ab31407c700a6f2ea14e739e35 100644
--- a/web/core/modules/node/tests/src/Functional/NodeAccessMenuLinkTest.php
+++ b/web/core/modules/node/tests/src/Functional/NodeAccessMenuLinkTest.php
@@ -59,19 +59,19 @@ public function testNodeAccessMenuLink() {
       'menu[title]' => $menu_link_title,
     ];
     $this->drupalPostForm('node/add/page', $edit, t('Save'));
-    $this->assertLink($menu_link_title);
+    $this->assertSession()->linkExists($menu_link_title);
 
     // Ensure anonymous users without "access content" permission do not see
     // this menu link.
     $this->drupalLogout();
     $this->drupalGet('');
-    $this->assertNoLink($menu_link_title);
+    $this->assertSession()->linkNotExists($menu_link_title);
 
     // Ensure anonymous users with "access content" permission see this menu
     // link.
     $this->config('user.role.' . RoleInterface::ANONYMOUS_ID)->set('permissions', ['access content'])->save();
     $this->drupalGet('');
-    $this->assertLink($menu_link_title);
+    $this->assertSession()->linkExists($menu_link_title);
   }
 
 }
diff --git a/web/core/modules/node/tests/src/Functional/NodeAccessPagerTest.php b/web/core/modules/node/tests/src/Functional/NodeAccessPagerTest.php
index 76acb9f9f49b3165e71c2e33ea6b343cfde9c05c..11fde433a79c182414bb58648e80691cd8ead1d3 100644
--- a/web/core/modules/node/tests/src/Functional/NodeAccessPagerTest.php
+++ b/web/core/modules/node/tests/src/Functional/NodeAccessPagerTest.php
@@ -34,7 +34,11 @@ protected function setUp() {
     node_access_rebuild();
     $this->drupalCreateContentType(['type' => 'page', 'name' => t('Basic page')]);
     $this->addDefaultCommentField('node', 'page');
-    $this->webUser = $this->drupalCreateUser(['access content', 'access comments', 'node test view']);
+    $this->webUser = $this->drupalCreateUser([
+      'access content',
+      'access comments',
+      'node test view',
+    ]);
   }
 
   /**
diff --git a/web/core/modules/node/tests/src/Functional/NodeAccessRebuildNodeGrantsTest.php b/web/core/modules/node/tests/src/Functional/NodeAccessRebuildNodeGrantsTest.php
index 8c61404b8dcbbf60c94c0ea3d6379185a57f9905..dae30883285500edb533bbe3e7643d4ab3850c80 100644
--- a/web/core/modules/node/tests/src/Functional/NodeAccessRebuildNodeGrantsTest.php
+++ b/web/core/modules/node/tests/src/Functional/NodeAccessRebuildNodeGrantsTest.php
@@ -37,7 +37,11 @@ class NodeAccessRebuildNodeGrantsTest extends NodeTestBase {
   protected function setUp() {
     parent::setUp();
 
-    $this->adminUser = $this->drupalCreateUser(['administer site configuration', 'access administration pages', 'access site reports']);
+    $this->adminUser = $this->drupalCreateUser([
+      'administer site configuration',
+      'access administration pages',
+      'access site reports',
+    ]);
     $this->drupalLogin($this->adminUser);
 
     $this->webUser = $this->drupalCreateUser();
diff --git a/web/core/modules/node/tests/src/Functional/NodeAdminTest.php b/web/core/modules/node/tests/src/Functional/NodeAdminTest.php
index 707f0b3ffb982cd39499192752174946ee2b5790..5c4f046f8c9a61f731f96250c66e3f52d7c07fee 100644
--- a/web/core/modules/node/tests/src/Functional/NodeAdminTest.php
+++ b/web/core/modules/node/tests/src/Functional/NodeAdminTest.php
@@ -60,10 +60,21 @@ protected function setUp() {
     // correctly.
     user_role_revoke_permissions(RoleInterface::AUTHENTICATED_ID, ['view own unpublished content']);
 
-    $this->adminUser = $this->drupalCreateUser(['access administration pages', 'access content overview', 'administer nodes', 'bypass node access']);
+    $this->adminUser = $this->drupalCreateUser([
+      'access administration pages',
+      'access content overview',
+      'administer nodes',
+      'bypass node access',
+    ]);
     $this->baseUser1 = $this->drupalCreateUser(['access content overview']);
-    $this->baseUser2 = $this->drupalCreateUser(['access content overview', 'view own unpublished content']);
-    $this->baseUser3 = $this->drupalCreateUser(['access content overview', 'bypass node access']);
+    $this->baseUser2 = $this->drupalCreateUser([
+      'access content overview',
+      'view own unpublished content',
+    ]);
+    $this->baseUser3 = $this->drupalCreateUser([
+      'access content overview',
+      'bypass node access',
+    ]);
   }
 
   /**
diff --git a/web/core/modules/node/tests/src/Functional/NodeBlockFunctionalTest.php b/web/core/modules/node/tests/src/Functional/NodeBlockFunctionalTest.php
index b0b0aae17bb85ace010dd7e3497f923ad0ddf034..1ed8f982e3b5bbc7b5840ef7fc3d8848ac41b389 100644
--- a/web/core/modules/node/tests/src/Functional/NodeBlockFunctionalTest.php
+++ b/web/core/modules/node/tests/src/Functional/NodeBlockFunctionalTest.php
@@ -47,8 +47,16 @@ protected function setUp() {
     parent::setUp();
 
     // Create users and test node.
-    $this->adminUser = $this->drupalCreateUser(['administer content types', 'administer nodes', 'administer blocks', 'access content overview']);
-    $this->webUser = $this->drupalCreateUser(['access content', 'create article content']);
+    $this->adminUser = $this->drupalCreateUser([
+      'administer content types',
+      'administer nodes',
+      'administer blocks',
+      'access content overview',
+    ]);
+    $this->webUser = $this->drupalCreateUser([
+      'access content',
+      'create article content',
+    ]);
   }
 
   /**
diff --git a/web/core/modules/node/tests/src/Functional/NodeCreationTest.php b/web/core/modules/node/tests/src/Functional/NodeCreationTest.php
index 62fb395ed4f4e270194b60478038fadcab705912..1791bb0ab8d3ae723f1677d2e9e287cf07a0f564 100644
--- a/web/core/modules/node/tests/src/Functional/NodeCreationTest.php
+++ b/web/core/modules/node/tests/src/Functional/NodeCreationTest.php
@@ -31,7 +31,10 @@ class NodeCreationTest extends NodeTestBase {
   protected function setUp() {
     parent::setUp();
 
-    $web_user = $this->drupalCreateUser(['create page content', 'edit own page content']);
+    $web_user = $this->drupalCreateUser([
+      'create page content',
+      'edit own page content',
+    ]);
     $this->drupalLogin($web_user);
   }
 
@@ -79,7 +82,10 @@ public function testNodeCreation() {
     $this->assertText($this->container->get('date.formatter')->format($node->getCreatedTime()));
 
     // Check if the node revision checkbox is not rendered on node creation form.
-    $admin_user = $this->drupalCreateUser(['administer nodes', 'create page content']);
+    $admin_user = $this->drupalCreateUser([
+      'administer nodes',
+      'create page content',
+    ]);
     $this->drupalLogin($admin_user);
     $this->drupalGet('node/add/page');
     $this->assertNoFieldById('edit-revision', NULL, 'The revision checkbox is not present.');
@@ -227,7 +233,10 @@ public function testAuthoredDate() {
    * Tests the author autocompletion textfield.
    */
   public function testAuthorAutocomplete() {
-    $admin_user = $this->drupalCreateUser(['administer nodes', 'create page content']);
+    $admin_user = $this->drupalCreateUser([
+      'administer nodes',
+      'create page content',
+    ]);
     $this->drupalLogin($admin_user);
 
     $this->drupalGet('node/add/page');
@@ -235,7 +244,11 @@ public function testAuthorAutocomplete() {
     $result = $this->xpath('//input[@id="edit-uid-0-value" and contains(@data-autocomplete-path, "user/autocomplete")]');
     $this->assertCount(0, $result, 'No autocompletion without access user profiles.');
 
-    $admin_user = $this->drupalCreateUser(['administer nodes', 'create page content', 'access user profiles']);
+    $admin_user = $this->drupalCreateUser([
+      'administer nodes',
+      'create page content',
+      'access user profiles',
+    ]);
     $this->drupalLogin($admin_user);
 
     $this->drupalGet('node/add/page');
@@ -260,7 +273,9 @@ public function testNodeAddWithoutContentTypes() {
     $this->drupalGet('node/add');
     $this->assertSession()->statusCodeEquals(403);
 
-    $admin_content_types = $this->drupalCreateUser(['administer content types']);
+    $admin_content_types = $this->drupalCreateUser([
+      'administer content types',
+    ]);
     $this->drupalLogin($admin_content_types);
 
     $this->drupalGet('node/add');
diff --git a/web/core/modules/node/tests/src/Functional/NodeDisplayConfigurableTest.php b/web/core/modules/node/tests/src/Functional/NodeDisplayConfigurableTest.php
index 9193b6efc95568c03f77d7b4edda350790305856..994c30f1ce61849462616d94f50195dda98e3377 100644
--- a/web/core/modules/node/tests/src/Functional/NodeDisplayConfigurableTest.php
+++ b/web/core/modules/node/tests/src/Functional/NodeDisplayConfigurableTest.php
@@ -32,7 +32,10 @@ public function testDisplayConfigurable() {
     $node_type->setDisplaySubmitted(TRUE);
     $node_type->save();
 
-    $user = $this->drupalCreateUser(['access in-place editing', 'administer nodes']);
+    $user = $this->drupalCreateUser([
+      'access in-place editing',
+      'administer nodes',
+    ]);
     $this->drupalLogin($user);
     $node = $this->drupalCreateNode(['uid' => $user->id()]);
     $assert = $this->assertSession();
diff --git a/web/core/modules/node/tests/src/Functional/NodeEditFormTest.php b/web/core/modules/node/tests/src/Functional/NodeEditFormTest.php
index 62d0a6100654838214b9914203fdf394d4bccd83..8e39d08456954c882f1ccf44d9cb9945a0d2d087 100644
--- a/web/core/modules/node/tests/src/Functional/NodeEditFormTest.php
+++ b/web/core/modules/node/tests/src/Functional/NodeEditFormTest.php
@@ -48,8 +48,14 @@ class NodeEditFormTest extends NodeTestBase {
   protected function setUp() {
     parent::setUp();
 
-    $this->webUser = $this->drupalCreateUser(['edit own page content', 'create page content']);
-    $this->adminUser = $this->drupalCreateUser(['bypass node access', 'administer nodes']);
+    $this->webUser = $this->drupalCreateUser([
+      'edit own page content',
+      'create page content',
+    ]);
+    $this->adminUser = $this->drupalCreateUser([
+      'bypass node access',
+      'administer nodes',
+    ]);
     $this->drupalPlaceBlock('local_tasks_block');
 
     $this->nodeStorage = $this->container->get('entity_type.manager')->getStorage('node');
@@ -95,7 +101,10 @@ public function testNodeEdit() {
     $this->assertText($edit[$body_key], 'Body displayed.');
 
     // Log in as a second administrator user.
-    $second_web_user = $this->drupalCreateUser(['administer nodes', 'edit any page content']);
+    $second_web_user = $this->drupalCreateUser([
+      'administer nodes',
+      'edit any page content',
+    ]);
     $this->drupalLogin($second_web_user);
     // Edit the same node, creating a new revision.
     $this->drupalGet("node/" . $node->id() . "/edit");
diff --git a/web/core/modules/node/tests/src/Functional/NodeEntityViewModeAlterTest.php b/web/core/modules/node/tests/src/Functional/NodeEntityViewModeAlterTest.php
index c51af5d42c2bb0a93e2250ae3f56e6566faa5377..31f32aba163fdf7ede5a479dc4c83371f941e3d3 100644
--- a/web/core/modules/node/tests/src/Functional/NodeEntityViewModeAlterTest.php
+++ b/web/core/modules/node/tests/src/Functional/NodeEntityViewModeAlterTest.php
@@ -28,7 +28,10 @@ class NodeEntityViewModeAlterTest extends NodeTestBase {
    * Create a "Basic page" node and verify its consistency in the database.
    */
   public function testNodeViewModeChange() {
-    $web_user = $this->drupalCreateUser(['create page content', 'edit own page content']);
+    $web_user = $this->drupalCreateUser([
+      'create page content',
+      'edit own page content',
+    ]);
     $this->drupalLogin($web_user);
 
     // Create a node.
diff --git a/web/core/modules/node/tests/src/Functional/NodeFieldMultilingualTest.php b/web/core/modules/node/tests/src/Functional/NodeFieldMultilingualTest.php
index 2d1f97472decc39a27a3173c1e0832c1a6c4e9da..2bf6b30e3e7d95def92f244fb23ccd00e662bbff 100644
--- a/web/core/modules/node/tests/src/Functional/NodeFieldMultilingualTest.php
+++ b/web/core/modules/node/tests/src/Functional/NodeFieldMultilingualTest.php
@@ -34,7 +34,13 @@ protected function setUp() {
     $this->drupalCreateContentType(['type' => 'page', 'name' => 'Basic page']);
 
     // Setup users.
-    $admin_user = $this->drupalCreateUser(['administer languages', 'administer content types', 'access administration pages', 'create page content', 'edit own page content']);
+    $admin_user = $this->drupalCreateUser([
+      'administer languages',
+      'administer content types',
+      'access administration pages',
+      'create page content',
+      'edit own page content',
+    ]);
     $this->drupalLogin($admin_user);
 
     // Add a new language.
diff --git a/web/core/modules/node/tests/src/Functional/NodeFormSaveChangedTimeTest.php b/web/core/modules/node/tests/src/Functional/NodeFormSaveChangedTimeTest.php
index 6dfd5a73c28487dcb7353916330f1bb05cdcc0bc..f16453e2bf319ecec9e6e04ff9e39fd2571a2a5a 100644
--- a/web/core/modules/node/tests/src/Functional/NodeFormSaveChangedTimeTest.php
+++ b/web/core/modules/node/tests/src/Functional/NodeFormSaveChangedTimeTest.php
@@ -44,7 +44,11 @@ protected function setUp() {
       'name' => 'Article',
     ]);
 
-    $this->authorUser = $this->drupalCreateUser(['access content', 'create article content', 'edit any article content'], 'author');
+    $this->authorUser = $this->drupalCreateUser([
+      'access content',
+      'create article content',
+      'edit any article content',
+    ], 'author');
     $this->drupalLogin($this->authorUser);
 
     // Create one node of the above node type .
diff --git a/web/core/modules/node/tests/src/Functional/NodeLinksTest.php b/web/core/modules/node/tests/src/Functional/NodeLinksTest.php
index 31b222d5aabfe0b470e6cc1a4ac5841bb62651fb..67500661a7db756b051201d5758008847f6f250b 100644
--- a/web/core/modules/node/tests/src/Functional/NodeLinksTest.php
+++ b/web/core/modules/node/tests/src/Functional/NodeLinksTest.php
@@ -35,7 +35,7 @@ public function testHideLinks() {
     // Links are displayed by default.
     $this->drupalGet('node');
     $this->assertText($node->getTitle());
-    $this->assertLink('Read more');
+    $this->assertSession()->linkExists('Read more');
 
     // Hide links.
     \Drupal::service('entity_display.repository')
@@ -45,7 +45,7 @@ public function testHideLinks() {
 
     $this->drupalGet('node');
     $this->assertText($node->getTitle());
-    $this->assertNoLink('Read more');
+    $this->assertSession()->linkNotExists('Read more');
   }
 
 }
diff --git a/web/core/modules/node/tests/src/Functional/NodeLoadMultipleTest.php b/web/core/modules/node/tests/src/Functional/NodeLoadMultipleTest.php
index 5f503e358db675ec68e95462d2432a831ef78d0a..effa4f52d07c70f1e391935f13b7332b39d02dd2 100644
--- a/web/core/modules/node/tests/src/Functional/NodeLoadMultipleTest.php
+++ b/web/core/modules/node/tests/src/Functional/NodeLoadMultipleTest.php
@@ -25,7 +25,10 @@ class NodeLoadMultipleTest extends NodeTestBase {
 
   protected function setUp() {
     parent::setUp();
-    $web_user = $this->drupalCreateUser(['create article content', 'create page content']);
+    $web_user = $this->drupalCreateUser([
+      'create article content',
+      'create page content',
+    ]);
     $this->drupalLogin($web_user);
   }
 
diff --git a/web/core/modules/node/tests/src/Functional/NodePostSettingsTest.php b/web/core/modules/node/tests/src/Functional/NodePostSettingsTest.php
index 5e788b507beb7dcf99dbbc5d90ef5f6808c7583e..02a6d4602cdb77ccea73b8a6cb6022082cc01521 100644
--- a/web/core/modules/node/tests/src/Functional/NodePostSettingsTest.php
+++ b/web/core/modules/node/tests/src/Functional/NodePostSettingsTest.php
@@ -18,7 +18,11 @@ class NodePostSettingsTest extends NodeTestBase {
   protected function setUp() {
     parent::setUp();
 
-    $web_user = $this->drupalCreateUser(['create page content', 'administer content types', 'access user profiles']);
+    $web_user = $this->drupalCreateUser([
+      'create page content',
+      'administer content types',
+      'access user profiles',
+    ]);
     $this->drupalLogin($web_user);
   }
 
diff --git a/web/core/modules/node/tests/src/Functional/NodeQueryAlterTest.php b/web/core/modules/node/tests/src/Functional/NodeQueryAlterTest.php
index 3771323006c1b7ed0c8e0e8831f09c3904352de7..11ca8549b2ec5952202e5bf5e4fe2321f697d240 100644
--- a/web/core/modules/node/tests/src/Functional/NodeQueryAlterTest.php
+++ b/web/core/modules/node/tests/src/Functional/NodeQueryAlterTest.php
@@ -46,9 +46,19 @@ protected function setUp() {
 
     // Create user with simple node access permission. The 'node test view'
     // permission is implemented and granted by the node_access_test module.
-    $this->accessUser = $this->drupalCreateUser(['access content overview', 'access content', 'node test view']);
-    $this->noAccessUser = $this->drupalCreateUser(['access content overview', 'access content']);
-    $this->noAccessUser2 = $this->drupalCreateUser(['access content overview', 'access content']);
+    $this->accessUser = $this->drupalCreateUser([
+      'access content overview',
+      'access content',
+      'node test view',
+    ]);
+    $this->noAccessUser = $this->drupalCreateUser([
+      'access content overview',
+      'access content',
+    ]);
+    $this->noAccessUser2 = $this->drupalCreateUser([
+      'access content overview',
+      'access content',
+    ]);
   }
 
   /**
diff --git a/web/core/modules/node/tests/src/Functional/NodeRSSContentTest.php b/web/core/modules/node/tests/src/Functional/NodeRSSContentTest.php
index 6dd1592228a943892436c80d9938e98946c414ea..fa81958d94520696d7a3c7eda351f0e6b9f9036a 100644
--- a/web/core/modules/node/tests/src/Functional/NodeRSSContentTest.php
+++ b/web/core/modules/node/tests/src/Functional/NodeRSSContentTest.php
@@ -33,7 +33,11 @@ protected function setUp() {
     // Use bypass node access permission here, because the test class uses
     // hook_grants_alter() to deny access to everyone on node_access
     // queries.
-    $user = $this->drupalCreateUser(['bypass node access', 'access content', 'create article content']);
+    $user = $this->drupalCreateUser([
+      'bypass node access',
+      'access content',
+      'create article content',
+    ]);
     $this->drupalLogin($user);
   }
 
diff --git a/web/core/modules/node/tests/src/Functional/NodeRevisionPermissionsTest.php b/web/core/modules/node/tests/src/Functional/NodeRevisionPermissionsTest.php
index 3418bcb269eeeda5a19838b19d4d3bf107eb6340..12625c799df36a04bf19548ca3e9f86d030ce060 100644
--- a/web/core/modules/node/tests/src/Functional/NodeRevisionPermissionsTest.php
+++ b/web/core/modules/node/tests/src/Functional/NodeRevisionPermissionsTest.php
@@ -87,7 +87,10 @@ public function testNodeRevisionAccessAnyType() {
     }
 
     // Create an admin account (returns TRUE for all revision permissions).
-    $admin_account = $this->drupalCreateUser(['access content', 'administer nodes']);
+    $admin_account = $this->drupalCreateUser([
+      'access content',
+      'administer nodes',
+    ]);
     $admin_account->is_admin = TRUE;
     $this->accounts['admin'] = $admin_account;
     $accounts['admin'] = $admin_account;
diff --git a/web/core/modules/node/tests/src/Functional/NodeRevisionsUiBypassAccessTest.php b/web/core/modules/node/tests/src/Functional/NodeRevisionsUiBypassAccessTest.php
index d63bb7dca39cba3e7e58bbd27a90c904e1592f5f..c4062b0731c801437cac26c9147a153062f6e483 100644
--- a/web/core/modules/node/tests/src/Functional/NodeRevisionsUiBypassAccessTest.php
+++ b/web/core/modules/node/tests/src/Functional/NodeRevisionsUiBypassAccessTest.php
@@ -76,7 +76,7 @@ public function testDisplayRevisionTab() {
 
     $this->assertUrl($node->toUrl());
     // Verify revisions exist since the content type has revisions enabled.
-    $this->assertLink(t('Revisions'));
+    $this->assertSession()->linkExists(t('Revisions'));
 
     // Verify the checkbox is checked on the node edit form.
     $this->drupalGet('node/' . $node->id() . '/edit');
@@ -87,7 +87,7 @@ public function testDisplayRevisionTab() {
     $this->drupalPostForm('node/' . $node->id() . '/edit', $edit, 'Save');
 
     $this->assertUrl($node->toUrl());
-    $this->assertLink(t('Revisions'));
+    $this->assertSession()->linkExists(t('Revisions'));
 
     // Unset page revision setting 'create new revision'. This will mean new
     // revisions are not created by default when the node is edited.
@@ -108,7 +108,7 @@ public function testDisplayRevisionTab() {
     $this->assertUrl($node->toUrl());
     // Verify that no link to revisions is displayed since the type
     // has the 'create new revision' setting unset.
-    $this->assertNoLink(t('Revisions'));
+    $this->assertSession()->linkNotExists(t('Revisions'));
 
     // Verify the checkbox is unchecked on the node edit form.
     $this->drupalGet('node/' . $node->id() . '/edit');
@@ -121,7 +121,7 @@ public function testDisplayRevisionTab() {
     $this->assertUrl($node->toUrl());
     // Verify that the link is displayed since a new revision is created and
     // the 'create new revision' checkbox on the node is checked.
-    $this->assertLink(t('Revisions'));
+    $this->assertSession()->linkExists(t('Revisions'));
   }
 
 }
diff --git a/web/core/modules/node/tests/src/Functional/NodeTitleTest.php b/web/core/modules/node/tests/src/Functional/NodeTitleTest.php
index ff6c432e810badac494b7409f5ea7701d558f7d2..152aed37c476968819b6044a3d0ff7d9bc5825ec 100644
--- a/web/core/modules/node/tests/src/Functional/NodeTitleTest.php
+++ b/web/core/modules/node/tests/src/Functional/NodeTitleTest.php
@@ -41,7 +41,12 @@ protected function setUp() {
     $this->drupalPlaceBlock('system_breadcrumb_block');
     $this->drupalPlaceBlock('page_title_block');
 
-    $this->adminUser = $this->drupalCreateUser(['administer nodes', 'create article content', 'create page content', 'post comments']);
+    $this->adminUser = $this->drupalCreateUser([
+      'administer nodes',
+      'create article content',
+      'create page content',
+      'post comments',
+    ]);
     $this->drupalLogin($this->adminUser);
     $this->addDefaultCommentField('node', 'page');
   }
diff --git a/web/core/modules/node/tests/src/Functional/NodeTitleXSSTest.php b/web/core/modules/node/tests/src/Functional/NodeTitleXSSTest.php
index a5302e7042ce2237860630e4c2e807609d9d33ed..6207a0bbf63b40e9df927a3cc02c47cea0c89da2 100644
--- a/web/core/modules/node/tests/src/Functional/NodeTitleXSSTest.php
+++ b/web/core/modules/node/tests/src/Functional/NodeTitleXSSTest.php
@@ -22,7 +22,10 @@ class NodeTitleXSSTest extends NodeTestBase {
    */
   public function testNodeTitleXSS() {
     // Prepare a user to do the stuff.
-    $web_user = $this->drupalCreateUser(['create page content', 'edit any page content']);
+    $web_user = $this->drupalCreateUser([
+      'create page content',
+      'edit any page content',
+    ]);
     $this->drupalLogin($web_user);
 
     $xss = '<script>alert("xss")</script>';
diff --git a/web/core/modules/node/tests/src/Functional/NodeTypeInitialLanguageTest.php b/web/core/modules/node/tests/src/Functional/NodeTypeInitialLanguageTest.php
index 8d970e7d9a33906e90cb1458dd16453b1d67b6e7..ee875d1b5d77d2d1819823ecf21b2851af5cd75a 100644
--- a/web/core/modules/node/tests/src/Functional/NodeTypeInitialLanguageTest.php
+++ b/web/core/modules/node/tests/src/Functional/NodeTypeInitialLanguageTest.php
@@ -26,7 +26,14 @@ class NodeTypeInitialLanguageTest extends NodeTestBase {
   protected function setUp() {
     parent::setUp();
 
-    $web_user = $this->drupalCreateUser(['bypass node access', 'administer content types', 'administer node fields', 'administer node form display', 'administer node display', 'administer languages']);
+    $web_user = $this->drupalCreateUser([
+      'bypass node access',
+      'administer content types',
+      'administer node fields',
+      'administer node form display',
+      'administer node display',
+      'administer languages',
+    ]);
     $this->drupalLogin($web_user);
   }
 
diff --git a/web/core/modules/node/tests/src/Functional/NodeTypeTest.php b/web/core/modules/node/tests/src/Functional/NodeTypeTest.php
index 7e9498254e0cd908637112a1b56e1ce8dc942c98..b19b3d72b6a5febd651cb391356c19b5a463fb71 100644
--- a/web/core/modules/node/tests/src/Functional/NodeTypeTest.php
+++ b/web/core/modules/node/tests/src/Functional/NodeTypeTest.php
@@ -60,14 +60,19 @@ public function testNodeTypeCreation() {
     $this->assertTrue($type_exists, 'The new content type has been created in the database.');
 
     // Log in a test user.
-    $web_user = $this->drupalCreateUser(['create ' . $type->label() . ' content']);
+    $web_user = $this->drupalCreateUser([
+      'create ' . $type->label() . ' content',
+    ]);
     $this->drupalLogin($web_user);
 
     $this->drupalGet('node/add/' . $type->id());
     $this->assertSession()->statusCodeEquals(200);
 
     // Create a content type via the user interface.
-    $web_user = $this->drupalCreateUser(['bypass node access', 'administer content types']);
+    $web_user = $this->drupalCreateUser([
+      'bypass node access',
+      'administer content types',
+    ]);
     $this->drupalLogin($web_user);
 
     $this->drupalGet('node/add');
@@ -96,7 +101,11 @@ public function testNodeTypeCreation() {
   public function testNodeTypeEditing() {
     $assert = $this->assertSession();
     $this->drupalPlaceBlock('system_breadcrumb_block');
-    $web_user = $this->drupalCreateUser(['bypass node access', 'administer content types', 'administer node fields']);
+    $web_user = $this->drupalCreateUser([
+      'bypass node access',
+      'administer content types',
+      'administer node fields',
+    ]);
     $this->drupalLogin($web_user);
 
     $field = FieldConfig::loadByName('node', 'page', 'body');
@@ -202,7 +211,7 @@ public function testNodeTypeDeletion() {
     // way installing a module through the UI does.
     $this->resetAll();
     $this->drupalGet('admin/structure/types/manage/default');
-    $this->assertNoLink(t('Delete'));
+    $this->assertSession()->linkNotExists(t('Delete'));
     $this->drupalGet('admin/structure/types/manage/default/delete');
     $this->assertSession()->statusCodeEquals(403);
     $this->container->get('module_installer')->uninstall(['node_test_config']);
@@ -221,7 +230,10 @@ public function testNodeTypeDeletion() {
    */
   public function testNodeTypeFieldUiPermissions() {
     // Create an admin user who can only manage node fields.
-    $admin_user_1 = $this->drupalCreateUser(['administer content types', 'administer node fields']);
+    $admin_user_1 = $this->drupalCreateUser([
+      'administer content types',
+      'administer node fields',
+    ]);
     $this->drupalLogin($admin_user_1);
 
     // Test that the user only sees the actions available to them.
@@ -230,7 +242,10 @@ public function testNodeTypeFieldUiPermissions() {
     $this->assertNoLinkByHref('admin/structure/types/manage/article/display');
 
     // Create another admin user who can manage node fields display.
-    $admin_user_2 = $this->drupalCreateUser(['administer content types', 'administer node display']);
+    $admin_user_2 = $this->drupalCreateUser([
+      'administer content types',
+      'administer node display',
+    ]);
     $this->drupalLogin($admin_user_2);
 
     // Test that the user only sees the actions available to them.
diff --git a/web/core/modules/node/tests/src/Functional/PagePreviewTest.php b/web/core/modules/node/tests/src/Functional/PagePreviewTest.php
index aa9c6477f45d7ce27f3b81bafa9e5e09ea735051..0b9bb2d78f66b8119a62d5a02b24400225038328 100644
--- a/web/core/modules/node/tests/src/Functional/PagePreviewTest.php
+++ b/web/core/modules/node/tests/src/Functional/PagePreviewTest.php
@@ -59,7 +59,11 @@ protected function setUp() {
     parent::setUp();
     $this->addDefaultCommentField('node', 'page');
 
-    $web_user = $this->drupalCreateUser(['edit own page content', 'create page content', 'administer menu']);
+    $web_user = $this->drupalCreateUser([
+      'edit own page content',
+      'create page content',
+      'administer menu',
+    ]);
     $this->drupalLogin($web_user);
 
     // Add a vocabulary so we can test different view modes.
@@ -200,10 +204,10 @@ public function testPagePreview() {
     // Check that the preview is displaying the title, body and term.
     $expected_title = $edit[$title_key] . ' | Drupal';
     $this->assertSession()->titleEquals($expected_title);
-    $this->assertEscaped($edit[$title_key], 'Title displayed and escaped.');
+    $this->assertEscaped($edit[$title_key]);
     $this->assertText($edit[$body_key], 'Body displayed.');
     $this->assertText($edit[$term_key], 'Term displayed.');
-    $this->assertLink(t('Back to content editing'));
+    $this->assertSession()->linkExists(t('Back to content editing'));
 
     // Check that we see the class of the node type on the body element.
     $body_class_element = $this->xpath("//body[contains(@class, 'page-node-type-page')]");
@@ -240,10 +244,10 @@ public function testPagePreview() {
     // Return to page preview to check everything is as expected.
     $this->drupalPostForm(NULL, [], t('Preview'));
     $this->assertSession()->titleEquals($expected_title);
-    $this->assertEscaped($edit[$title_key], 'Title displayed and escaped.');
+    $this->assertEscaped($edit[$title_key]);
     $this->assertText($edit[$body_key], 'Body displayed.');
     $this->assertText($edit[$term_key], 'Term displayed.');
-    $this->assertLink(t('Back to content editing'));
+    $this->assertSession()->linkExists(t('Back to content editing'));
 
     // Assert the content is kept when reloading the page.
     $this->drupalGet('node/add/page', ['query' => ['uuid' => $uuid]]);
@@ -274,9 +278,9 @@ public function testPagePreview() {
     $this->assertRaw('>' . $newterm1 . '<', 'First new term displayed.');
     $this->assertRaw('>' . $newterm2 . '<', 'Second new term displayed.');
     // The first term should be displayed as link, the others not.
-    $this->assertLink($this->term->getName());
-    $this->assertNoLink($newterm1);
-    $this->assertNoLink($newterm2);
+    $this->assertSession()->linkExists($this->term->getName());
+    $this->assertSession()->linkNotExists($newterm1);
+    $this->assertSession()->linkNotExists($newterm2);
 
     $this->drupalPostForm('node/' . $node->id() . '/edit', $edit, t('Save'));
 
@@ -290,9 +294,9 @@ public function testPagePreview() {
     $this->assertRaw('>' . $newterm2 . '<', 'Second existing term displayed.');
     $this->assertRaw('>' . $newterm3 . '<', 'Third new term displayed.');
     $this->assertNoText($this->term->getName());
-    $this->assertLink($newterm1);
-    $this->assertLink($newterm2);
-    $this->assertNoLink($newterm3);
+    $this->assertSession()->linkExists($newterm1);
+    $this->assertSession()->linkExists($newterm2);
+    $this->assertSession()->linkNotExists($newterm3);
 
     // Check that editing an existing node after it has been previewed and not
     // saved doesn't remember the previous changes.
diff --git a/web/core/modules/node/tests/src/Functional/Views/BulkFormAccessTest.php b/web/core/modules/node/tests/src/Functional/Views/BulkFormAccessTest.php
index 0de0ed127a3b0070efb49858caa3617536ed5637..79231fcf0eb22f84d3550d4f2d7f8fdff1bdbac3 100644
--- a/web/core/modules/node/tests/src/Functional/Views/BulkFormAccessTest.php
+++ b/web/core/modules/node/tests/src/Functional/Views/BulkFormAccessTest.php
@@ -161,7 +161,12 @@ public function testNodeDeleteAccess() {
       'uid' => $author->id(),
     ]);
     // Create an account that may view the private node, but not delete it.
-    $account = $this->drupalCreateUser(['access content', 'administer nodes', 'delete own article content', 'node test view']);
+    $account = $this->drupalCreateUser([
+      'access content',
+      'administer nodes',
+      'delete own article content',
+      'node test view',
+    ]);
     // Create a node that may be deleted too, to ensure the delete confirmation
     // page is shown later. In node_access_test.module, nodes may only be
     // deleted by the author.
diff --git a/web/core/modules/node/tests/src/Functional/Views/BulkFormTest.php b/web/core/modules/node/tests/src/Functional/Views/BulkFormTest.php
index 99a9534c50a992ee7a6f83c115a6581f20e2e027..2e57f5e7e1e7cb033f073510527f85f69dd61963 100644
--- a/web/core/modules/node/tests/src/Functional/Views/BulkFormTest.php
+++ b/web/core/modules/node/tests/src/Functional/Views/BulkFormTest.php
@@ -91,7 +91,11 @@ protected function setUp($import_test_views = TRUE) {
     $this->assertCount(10, $view->result, 'All created translations are selected.');
 
     // Check the operations are accessible to the logged in user.
-    $this->drupalLogin($this->drupalCreateUser(['administer nodes', 'access content overview', 'bypass node access']));
+    $this->drupalLogin($this->drupalCreateUser([
+      'administer nodes',
+      'access content overview',
+      'bypass node access',
+    ]));
     $this->drupalGet('test-node-bulk-form');
     $elements = $this->xpath('//select[@id="edit-action"]//option');
     $this->assertCount(8, $elements, 'All node operations are found.');
diff --git a/web/core/modules/node/tests/src/Functional/Views/FilterNodeAccessTest.php b/web/core/modules/node/tests/src/Functional/Views/FilterNodeAccessTest.php
index e5597d07baa86f40c7e67b3307a56dd3a8cb014d..6040a673938a0f7b93bd377313dfa7bfc01cb11b 100644
--- a/web/core/modules/node/tests/src/Functional/Views/FilterNodeAccessTest.php
+++ b/web/core/modules/node/tests/src/Functional/Views/FilterNodeAccessTest.php
@@ -53,7 +53,10 @@ protected function setUp($import_test_views = TRUE) {
     $this->users = [];
 
     for ($i = 0; $i < $num_simple_users; $i++) {
-      $this->users[$i] = $this->drupalCreateUser(['access content', 'create article content']);
+      $this->users[$i] = $this->drupalCreateUser([
+        'access content',
+        'create article content',
+      ]);
     }
     foreach ($this->users as $web_user) {
       $this->drupalLogin($web_user);
@@ -100,7 +103,10 @@ public function testFilterNodeAccess() {
     $this->assertNoText('Private Article created by ' . $this->users[0]->getAccountName());
 
     // Test that a user with administer nodes permission can't see all nodes.
-    $administer_nodes_user = $this->drupalCreateUser(['access content', 'administer nodes']);
+    $administer_nodes_user = $this->drupalCreateUser([
+      'access content',
+      'administer nodes',
+    ]);
     $this->drupalLogin($administer_nodes_user);
     $this->drupalGet('test_filter_node_access');
     $this->assertNoText('Private Article created by ' . $this->users[0]->getAccountName());
@@ -109,7 +115,10 @@ public function testFilterNodeAccess() {
     $this->assertText('Public Article created by ' . $this->users[1]->getAccountName());
 
     // Test that a user with bypass node access can see all nodes.
-    $bypass_access_user = $this->drupalCreateUser(['access content', 'bypass node access']);
+    $bypass_access_user = $this->drupalCreateUser([
+      'access content',
+      'bypass node access',
+    ]);
     $this->drupalLogin($bypass_access_user);
     $this->drupalGet('test_filter_node_access');
     $this->assertText('Private Article created by ' . $this->users[0]->getAccountName());
diff --git a/web/core/modules/node/tests/src/Functional/Views/NodeLanguageTest.php b/web/core/modules/node/tests/src/Functional/Views/NodeLanguageTest.php
index 012f6dd57cb3dee30c8da8bceec5e7d8e39582fd..d506f6944115470ff0c0ede36526f58884c8aed1 100644
--- a/web/core/modules/node/tests/src/Functional/Views/NodeLanguageTest.php
+++ b/web/core/modules/node/tests/src/Functional/Views/NodeLanguageTest.php
@@ -103,7 +103,10 @@ protected function setUp($import_test_views = TRUE) {
 
     $this->container->get('router.builder')->rebuild();
 
-    $user = $this->drupalCreateUser(['access content overview', 'access content']);
+    $user = $this->drupalCreateUser([
+      'access content overview',
+      'access content',
+    ]);
     $this->drupalLogin($user);
   }
 
diff --git a/web/core/modules/node/tests/src/Functional/Views/RevisionLinkTest.php b/web/core/modules/node/tests/src/Functional/Views/RevisionLinkTest.php
index 55c4d0082b16d0f1458ae856f78c6d08987500f4..64b930bb67bcc22f52bb5d7870226c480dc78341 100644
--- a/web/core/modules/node/tests/src/Functional/Views/RevisionLinkTest.php
+++ b/web/core/modules/node/tests/src/Functional/Views/RevisionLinkTest.php
@@ -32,7 +32,13 @@ public function testRevisionLinks() {
     // Create one user which can view/revert and delete and one which can only
     // do one of them.
     $this->drupalCreateContentType(['name' => 'page', 'type' => 'page']);
-    $account = $this->drupalCreateUser(['revert all revisions', 'view all revisions', 'delete all revisions', 'edit any page content', 'delete any page content']);
+    $account = $this->drupalCreateUser([
+      'revert all revisions',
+      'view all revisions',
+      'delete all revisions',
+      'edit any page content',
+      'delete any page content',
+    ]);
     $this->drupalLogin($account);
     // Create two nodes, one without an additional revision and one with a
     // revision.
@@ -70,8 +76,14 @@ public function testRevisionLinks() {
 
     $accounts = [
       'view' => $this->drupalCreateUser(['view all revisions']),
-      'revert' => $this->drupalCreateUser(['revert all revisions', 'edit any page content']),
-      'delete' => $this->drupalCreateUser(['delete all revisions', 'delete any page content']),
+      'revert' => $this->drupalCreateUser([
+        'revert all revisions',
+        'edit any page content',
+      ]),
+      'delete' => $this->drupalCreateUser([
+        'delete all revisions',
+        'delete any page content',
+      ]),
     ];
 
     $url = $nodes[1]->toUrl()->toString();
diff --git a/web/core/modules/node/tests/src/Kernel/NodeAccessLanguageTest.php b/web/core/modules/node/tests/src/Kernel/NodeAccessLanguageTest.php
index c6314385fe94745576ab8a370d43df80bb123d84..da96fc1098808bbe8afbf35d855c439978ac5d02 100644
--- a/web/core/modules/node/tests/src/Kernel/NodeAccessLanguageTest.php
+++ b/web/core/modules/node/tests/src/Kernel/NodeAccessLanguageTest.php
@@ -150,7 +150,10 @@ public function testNodeAccessPrivate() {
 
     // Creating a private node with langcode Catalan to test that the
     // node_access_test_secret_catalan flag works.
-    $private_ca_user = $this->drupalCreateUser(['access content', 'node test view']);
+    $private_ca_user = $this->drupalCreateUser([
+      'access content',
+      'node test view',
+    ]);
     $node_private_ca = $this->drupalCreateNode(['body' => [[]], 'langcode' => 'ca', 'private' => TRUE]);
     $this->assertTrue($node_private_ca->language()->getId() == 'ca', 'Node created as Catalan.');
 
diff --git a/web/core/modules/options/tests/src/Functional/OptionsFieldUITest.php b/web/core/modules/options/tests/src/Functional/OptionsFieldUITest.php
index f4e1683b6c4c6bafc5b2f4c7f6b87d75966eee57..607260e8e38c402e3339339c02e67481ec4f26f8 100644
--- a/web/core/modules/options/tests/src/Functional/OptionsFieldUITest.php
+++ b/web/core/modules/options/tests/src/Functional/OptionsFieldUITest.php
@@ -64,7 +64,17 @@ protected function setUp() {
     parent::setUp();
 
     // Create test user.
-    $admin_user = $this->drupalCreateUser(['access content', 'administer taxonomy', 'access administration pages', 'administer site configuration', 'administer content types', 'administer nodes', 'bypass node access', 'administer node fields', 'administer node display']);
+    $admin_user = $this->drupalCreateUser([
+      'access content',
+      'administer taxonomy',
+      'access administration pages',
+      'administer site configuration',
+      'administer content types',
+      'administer nodes',
+      'bypass node access',
+      'administer node fields',
+      'administer node display',
+    ]);
     $this->drupalLogin($admin_user);
 
     // Create content type, with underscores.
diff --git a/web/core/modules/options/tests/src/Functional/OptionsFloatFieldImportTest.php b/web/core/modules/options/tests/src/Functional/OptionsFloatFieldImportTest.php
index 8b3ef7824139f042ac1e10abfcb441f54f5e9cbe..00fa57e560651e8e29c6ced476ec978917e8c133 100644
--- a/web/core/modules/options/tests/src/Functional/OptionsFloatFieldImportTest.php
+++ b/web/core/modules/options/tests/src/Functional/OptionsFloatFieldImportTest.php
@@ -35,7 +35,17 @@ protected function setUp() {
     parent::setUp();
 
     // Create test user.
-    $admin_user = $this->drupalCreateUser(['synchronize configuration', 'access content', 'access administration pages', 'administer site configuration', 'administer content types', 'administer nodes', 'bypass node access', 'administer node fields', 'administer node display']);
+    $admin_user = $this->drupalCreateUser([
+      'synchronize configuration',
+      'access content',
+      'access administration pages',
+      'administer site configuration',
+      'administer content types',
+      'administer nodes',
+      'bypass node access',
+      'administer node fields',
+      'administer node display',
+    ]);
     $this->drupalLogin($admin_user);
   }
 
diff --git a/web/core/modules/options/tests/src/Functional/OptionsSelectDynamicValuesTest.php b/web/core/modules/options/tests/src/Functional/OptionsSelectDynamicValuesTest.php
index 6738dbf68c95307b4e73e7be2b1e94546238782f..a0f88aa5e5f5cb275c87d61fe23566fcd5ae9e06 100644
--- a/web/core/modules/options/tests/src/Functional/OptionsSelectDynamicValuesTest.php
+++ b/web/core/modules/options/tests/src/Functional/OptionsSelectDynamicValuesTest.php
@@ -22,7 +22,10 @@ public function testSelectListDynamic() {
     $this->entity->save();
 
     // Create a web user.
-    $web_user = $this->drupalCreateUser(['view test entity', 'administer entity_test content']);
+    $web_user = $this->drupalCreateUser([
+      'view test entity',
+      'administer entity_test content',
+    ]);
     $this->drupalLogin($web_user);
 
     // Display form.
diff --git a/web/core/modules/options/tests/src/Functional/OptionsWidgetsTest.php b/web/core/modules/options/tests/src/Functional/OptionsWidgetsTest.php
index 7b3ac433d00140829031c3d50c64ce593f738827..306121a061256157a584c42ffa0684ba0316baf4 100644
--- a/web/core/modules/options/tests/src/Functional/OptionsWidgetsTest.php
+++ b/web/core/modules/options/tests/src/Functional/OptionsWidgetsTest.php
@@ -112,7 +112,10 @@ protected function setUp() {
     $this->float->save();
 
     // Create a web user.
-    $this->drupalLogin($this->drupalCreateUser(['view test entity', 'administer entity_test content']));
+    $this->drupalLogin($this->drupalCreateUser([
+      'view test entity',
+      'administer entity_test content',
+    ]));
   }
 
   /**
diff --git a/web/core/modules/path/tests/src/Functional/PathAdminTest.php b/web/core/modules/path/tests/src/Functional/PathAdminTest.php
index 2ac11efa6a3dcf970a0c7011c797213867d7c77f..dbf4154d510cfa89143f44b7a3209c4651ddbe45 100644
--- a/web/core/modules/path/tests/src/Functional/PathAdminTest.php
+++ b/web/core/modules/path/tests/src/Functional/PathAdminTest.php
@@ -25,7 +25,12 @@ protected function setUp() {
     parent::setUp();
 
     // Create test user and log in.
-    $web_user = $this->drupalCreateUser(['create page content', 'edit own page content', 'administer url aliases', 'create url aliases']);
+    $web_user = $this->drupalCreateUser([
+      'create page content',
+      'edit own page content',
+      'administer url aliases',
+      'create url aliases',
+    ]);
     $this->drupalLogin($web_user);
   }
 
diff --git a/web/core/modules/path/tests/src/Functional/PathAliasTest.php b/web/core/modules/path/tests/src/Functional/PathAliasTest.php
index b3250695506da7dad8cf17a31a20198260ff28ca..921653577974fbd2ae70d237b3b32ab1f754ef7a 100644
--- a/web/core/modules/path/tests/src/Functional/PathAliasTest.php
+++ b/web/core/modules/path/tests/src/Functional/PathAliasTest.php
@@ -30,7 +30,13 @@ protected function setUp() {
     parent::setUp();
 
     // Create test user and log in.
-    $web_user = $this->drupalCreateUser(['create page content', 'edit own page content', 'administer url aliases', 'create url aliases', 'access content overview']);
+    $web_user = $this->drupalCreateUser([
+      'create page content',
+      'edit own page content',
+      'administer url aliases',
+      'create url aliases',
+      'access content overview',
+    ]);
     $this->drupalLogin($web_user);
   }
 
diff --git a/web/core/modules/path/tests/src/Functional/PathLanguageUiTest.php b/web/core/modules/path/tests/src/Functional/PathLanguageUiTest.php
index 6ab6e2c22ca64214111e141f5ddd2cda0ef059f0..34268d41c92fad59b2c6ad4a3db6a97615c3b53f 100644
--- a/web/core/modules/path/tests/src/Functional/PathLanguageUiTest.php
+++ b/web/core/modules/path/tests/src/Functional/PathLanguageUiTest.php
@@ -27,7 +27,14 @@ protected function setUp() {
     parent::setUp();
 
     // Create and log in user.
-    $web_user = $this->drupalCreateUser(['edit any page content', 'create page content', 'administer url aliases', 'create url aliases', 'administer languages', 'access administration pages']);
+    $web_user = $this->drupalCreateUser([
+      'edit any page content',
+      'create page content',
+      'administer url aliases',
+      'create url aliases',
+      'administer languages',
+      'access administration pages',
+    ]);
     $this->drupalLogin($web_user);
 
     // Enable French language.
diff --git a/web/core/modules/path/tests/src/Functional/PathNodeFormTest.php b/web/core/modules/path/tests/src/Functional/PathNodeFormTest.php
index 66c6198cc925175a1f6b2e14ae6e0ba09b140ae6..cf009193af9ca1adf2cc86385c776bc4f861ee26 100644
--- a/web/core/modules/path/tests/src/Functional/PathNodeFormTest.php
+++ b/web/core/modules/path/tests/src/Functional/PathNodeFormTest.php
@@ -25,7 +25,10 @@ protected function setUp() {
     parent::setUp();
 
     // Create test user and log in.
-    $web_user = $this->drupalCreateUser(['create page content', 'create url aliases']);
+    $web_user = $this->drupalCreateUser([
+      'create page content',
+      'create url aliases',
+    ]);
     $this->drupalLogin($web_user);
   }
 
diff --git a/web/core/modules/path/tests/src/Functional/PathTaxonomyTermTest.php b/web/core/modules/path/tests/src/Functional/PathTaxonomyTermTest.php
index 5bb92e2e8cdf9998e2a7e4ed947bb57212c2b211..586fae108035ebcba3e180330b612acba86c38b7 100644
--- a/web/core/modules/path/tests/src/Functional/PathTaxonomyTermTest.php
+++ b/web/core/modules/path/tests/src/Functional/PathTaxonomyTermTest.php
@@ -35,7 +35,11 @@ protected function setUp() {
     $vocabulary->save();
 
     // Create and log in user.
-    $web_user = $this->drupalCreateUser(['administer url aliases', 'administer taxonomy', 'access administration pages']);
+    $web_user = $this->drupalCreateUser([
+      'administer url aliases',
+      'administer taxonomy',
+      'access administration pages',
+    ]);
     $this->drupalLogin($web_user);
   }
 
diff --git a/web/core/modules/quickedit/src/MetadataGeneratorInterface.php b/web/core/modules/quickedit/src/MetadataGeneratorInterface.php
index a319ae439e66c858f0c22375073857eb4d83d064..a739fb2b6b7f326cfcccf15ad9550b35abc2c0f7 100644
--- a/web/core/modules/quickedit/src/MetadataGeneratorInterface.php
+++ b/web/core/modules/quickedit/src/MetadataGeneratorInterface.php
@@ -15,6 +15,7 @@ interface MetadataGeneratorInterface {
    *
    * @param \Drupal\Core\Entity\EntityInterface $entity
    *   The entity, in the language in which one of its fields is being edited.
+   *
    * @return array
    *   An array containing metadata with the following keys:
    *   - label: the user-visible label for the entity in the given language.
@@ -28,6 +29,7 @@ public function generateEntityMetadata(EntityInterface $entity);
    *   The field values to be in-place edited.
    * @param string $view_mode
    *   The view mode the field should be rerendered in.
+   *
    * @return array
    *   An array containing metadata with the following keys:
    *   - label: the user-visible label for the field.
diff --git a/web/core/modules/rdf/tests/src/Functional/CommentAttributesTest.php b/web/core/modules/rdf/tests/src/Functional/CommentAttributesTest.php
index 5c80dc1815d37815c68bf79f93bbff8effb0f979..129e348ae93c5dbc2bf5a6af454d4cc8861a19a6 100644
--- a/web/core/modules/rdf/tests/src/Functional/CommentAttributesTest.php
+++ b/web/core/modules/rdf/tests/src/Functional/CommentAttributesTest.php
@@ -158,7 +158,7 @@ public function testCommentRdfAuthorMarkup() {
     // Ensure that the author link still works properly after the author output
     // is modified by the RDF module.
     $this->drupalGet('node/' . $this->node->id());
-    $this->assertLink($this->webUser->getAccountName());
+    $this->assertSession()->linkExists($this->webUser->getAccountName());
     $this->assertLinkByHref('user/' . $this->webUser->id());
   }
 
diff --git a/web/core/modules/rdf/tests/src/Functional/EntityReferenceFieldAttributesTest.php b/web/core/modules/rdf/tests/src/Functional/EntityReferenceFieldAttributesTest.php
index ce76ba3160af080b8556f4c05850115e68850ca7..d662a3fcf218b6784c09a381381beb9d9df80b96 100644
--- a/web/core/modules/rdf/tests/src/Functional/EntityReferenceFieldAttributesTest.php
+++ b/web/core/modules/rdf/tests/src/Functional/EntityReferenceFieldAttributesTest.php
@@ -52,7 +52,10 @@ class EntityReferenceFieldAttributesTest extends TaxonomyTestBase {
   protected function setUp() {
     parent::setUp();
 
-    $web_user = $this->drupalCreateUser(['bypass node access', 'administer taxonomy']);
+    $web_user = $this->drupalCreateUser([
+      'bypass node access',
+      'administer taxonomy',
+    ]);
     $this->drupalLogin($web_user);
     $this->vocabulary = $this->createVocabulary();
 
diff --git a/web/core/modules/rest/src/Routing/ResourceRoutes.php b/web/core/modules/rest/src/Routing/ResourceRoutes.php
index 0588a012190e1697d1e44f74a23f488ea7051031..9809ee07945ccf5a133833dc5cb2d929cd614f8d 100644
--- a/web/core/modules/rest/src/Routing/ResourceRoutes.php
+++ b/web/core/modules/rest/src/Routing/ResourceRoutes.php
@@ -58,6 +58,7 @@ public function __construct(ResourcePluginManager $manager, EntityTypeManagerInt
    *
    * @param \Drupal\Core\Routing\RouteBuildEvent $event
    *   The route build event.
+   *
    * @return array
    */
   public function onDynamicRouteEvent(RouteBuildEvent $event) {
diff --git a/web/core/modules/rest/tests/src/Functional/Views/StyleSerializerTest.php b/web/core/modules/rest/tests/src/Functional/Views/StyleSerializerTest.php
index 40165c81b85999ad838336eba76a278b23e47f30..7bbfb27af6ce6565da2055eaa0cbe108f66c4124 100644
--- a/web/core/modules/rest/tests/src/Functional/Views/StyleSerializerTest.php
+++ b/web/core/modules/rest/tests/src/Functional/Views/StyleSerializerTest.php
@@ -77,7 +77,12 @@ protected function setUp($import_test_views = TRUE) {
 
     ViewTestData::createTestViews(get_class($this), ['rest_test_views']);
 
-    $this->adminUser = $this->drupalCreateUser(['administer views', 'administer entity_test content', 'access user profiles', 'view test entity']);
+    $this->adminUser = $this->drupalCreateUser([
+      'administer views',
+      'administer entity_test content',
+      'access user profiles',
+      'view test entity',
+    ]);
 
     // Save some entity_test entities.
     for ($i = 1; $i <= 10; $i++) {
diff --git a/web/core/modules/search/tests/src/Functional/SearchAdvancedSearchFormTest.php b/web/core/modules/search/tests/src/Functional/SearchAdvancedSearchFormTest.php
index 099663ed59d09d81555ca72e5d1f6a56a92587fe..9907445d80ddf46a06fa0af72b435c9b51c9fab6 100644
--- a/web/core/modules/search/tests/src/Functional/SearchAdvancedSearchFormTest.php
+++ b/web/core/modules/search/tests/src/Functional/SearchAdvancedSearchFormTest.php
@@ -35,7 +35,12 @@ protected function setUp() {
     $this->drupalCreateContentType(['type' => 'article', 'name' => 'Article']);
 
     // Create and log in user.
-    $test_user = $this->drupalCreateUser(['access content', 'search content', 'use advanced search', 'administer nodes']);
+    $test_user = $this->drupalCreateUser([
+      'access content',
+      'search content',
+      'use advanced search',
+      'administer nodes',
+    ]);
     $this->drupalLogin($test_user);
 
     // Create initial node.
diff --git a/web/core/modules/search/tests/src/Functional/SearchBlockTest.php b/web/core/modules/search/tests/src/Functional/SearchBlockTest.php
index bef164359051f765681b339b02eeb20d9f78b527..261f8d14738396e875a4d65fac456a817c67cf09 100644
--- a/web/core/modules/search/tests/src/Functional/SearchBlockTest.php
+++ b/web/core/modules/search/tests/src/Functional/SearchBlockTest.php
@@ -134,7 +134,7 @@ public function testSearchFormBlock() {
     $name = $this->adminUser->getAccountName();
     $email = $this->adminUser->getEmail();
     $this->drupalPostForm('node', ['keys' => $name], t('Search'));
-    $this->assertLink($name);
+    $this->assertSession()->linkExists($name);
   }
 
 }
diff --git a/web/core/modules/search/tests/src/Functional/SearchCommentCountToggleTest.php b/web/core/modules/search/tests/src/Functional/SearchCommentCountToggleTest.php
index 03520359ad50713f2df1569f0db69282081b3867..a6fcd2b2747aa8eaf2b1c4a515c6583b03b3f181 100644
--- a/web/core/modules/search/tests/src/Functional/SearchCommentCountToggleTest.php
+++ b/web/core/modules/search/tests/src/Functional/SearchCommentCountToggleTest.php
@@ -52,7 +52,13 @@ protected function setUp() {
     $this->drupalCreateContentType(['type' => 'article', 'name' => 'Article']);
 
     // Create searching user.
-    $this->searchingUser = $this->drupalCreateUser(['search content', 'access content', 'access comments', 'post comments', 'skip comment approval']);
+    $this->searchingUser = $this->drupalCreateUser([
+      'search content',
+      'access content',
+      'access comments',
+      'post comments',
+      'skip comment approval',
+    ]);
 
     // Log in with sufficient privileges.
     $this->drupalLogin($this->searchingUser);
diff --git a/web/core/modules/search/tests/src/Functional/SearchCommentTest.php b/web/core/modules/search/tests/src/Functional/SearchCommentTest.php
index c513be8d53792534a160649be011c5b9d5830780..9d280d4da75675b7bba1063407dc2cddc067dacf 100644
--- a/web/core/modules/search/tests/src/Functional/SearchCommentTest.php
+++ b/web/core/modules/search/tests/src/Functional/SearchCommentTest.php
@@ -173,7 +173,7 @@ public function testSearchResultsComment() {
     // Verify that comment is rendered using proper format.
     $this->assertText($comment_body, 'Comment body text found in search results.');
     $this->assertNoRaw(t('n/a'), 'HTML in comment body is not hidden.');
-    $this->assertNoEscaped($edit_comment['comment_body[0][value]'], 'HTML in comment body is not escaped.');
+    $this->assertNoEscaped($edit_comment['comment_body[0][value]']);
 
     // Search for the evil script comment subject.
     $edit = [
diff --git a/web/core/modules/search/tests/src/Functional/SearchConfigSettingsFormTest.php b/web/core/modules/search/tests/src/Functional/SearchConfigSettingsFormTest.php
index b1d119ac7b1a689b814e9e448119ed567f56ddec..9d0c1f5f8e08d6df76efc63bbd43e711daf9c2ed 100644
--- a/web/core/modules/search/tests/src/Functional/SearchConfigSettingsFormTest.php
+++ b/web/core/modules/search/tests/src/Functional/SearchConfigSettingsFormTest.php
@@ -52,7 +52,16 @@ protected function setUp() {
     $this->drupalCreateContentType(['type' => 'page', 'name' => 'Basic page']);
 
     // Log in as a user that can create and search content.
-    $this->searchUser = $this->drupalCreateUser(['search content', 'administer search', 'administer nodes', 'bypass node access', 'access user profiles', 'administer users', 'administer blocks', 'access site reports']);
+    $this->searchUser = $this->drupalCreateUser([
+      'search content',
+      'administer search',
+      'administer nodes',
+      'bypass node access',
+      'access user profiles',
+      'administer users',
+      'administer blocks',
+      'access site reports',
+    ]);
     $this->drupalLogin($this->searchUser);
 
     // Add a single piece of content and index it.
@@ -104,7 +113,7 @@ public function testSearchSettingsPage() {
     $text = $this->randomMachineName(5);
     $this->drupalPostForm('search/node', ['keys' => $text], t('Search'));
     $this->drupalGet('admin/reports/dblog');
-    $this->assertNoLink('Searched Content for ' . $text . '.', 'Search was not logged');
+    $this->assertSession()->linkNotExists('Searched Content for ' . $text . '.', 'Search was not logged');
 
     // Turn on logging.
     $edit = ['logging' => TRUE];
@@ -112,7 +121,7 @@ public function testSearchSettingsPage() {
     $text = $this->randomMachineName(5);
     $this->drupalPostForm('search/node', ['keys' => $text], t('Search'));
     $this->drupalGet('admin/reports/dblog');
-    $this->assertLink('Searched Content for ' . $text . '.', 0, 'Search was logged');
+    $this->assertSession()->linkExists('Searched Content for ' . $text . '.', 0, 'Search was logged');
 
   }
 
@@ -314,7 +323,7 @@ public function testMultipleSearchPages() {
     // Disable the first search page.
     $this->clickLink(t('Disable'));
     $this->assertSession()->statusCodeEquals(200);
-    $this->assertNoLink(t('Disable'));
+    $this->assertSession()->linkNotExists(t('Disable'));
     $this->verifySearchPageOperations($first_id, TRUE, TRUE, FALSE, TRUE);
     $this->verifySearchPageOperations($second_id, TRUE, FALSE, FALSE, FALSE);
 
diff --git a/web/core/modules/search/tests/src/Functional/SearchDateIntervalTest.php b/web/core/modules/search/tests/src/Functional/SearchDateIntervalTest.php
index f2b05c76f49e3799bab4196d5ea7f5ed9eb62233..e8d5b81c376aac2032e132f40864db1f0775506d 100644
--- a/web/core/modules/search/tests/src/Functional/SearchDateIntervalTest.php
+++ b/web/core/modules/search/tests/src/Functional/SearchDateIntervalTest.php
@@ -33,7 +33,15 @@ protected function setUp() {
     $this->drupalCreateContentType(['type' => 'page', 'name' => 'Basic page']);
 
     // Create and log in user.
-    $test_user = $this->drupalCreateUser(['access content', 'search content', 'use advanced search', 'administer nodes', 'administer languages', 'access administration pages', 'administer site configuration']);
+    $test_user = $this->drupalCreateUser([
+      'access content',
+      'search content',
+      'use advanced search',
+      'administer nodes',
+      'administer languages',
+      'access administration pages',
+      'administer site configuration',
+    ]);
     $this->drupalLogin($test_user);
 
     // Add a new language.
@@ -78,8 +86,8 @@ public function testDateIntervalQueryAlter() {
 
     // The nodes must have the same node ID but the created date is different.
     // So only the Spanish translation must appear.
-    $this->assertLink('Node ES', 0, 'Spanish translation found in search results');
-    $this->assertNoLink('Node EN', 'Search results do not contain English node');
+    $this->assertSession()->linkExists('Node ES', 0, 'Spanish translation found in search results');
+    $this->assertSession()->linkNotExists('Node EN', 'Search results do not contain English node');
   }
 
 }
diff --git a/web/core/modules/search/tests/src/Functional/SearchEmbedFormTest.php b/web/core/modules/search/tests/src/Functional/SearchEmbedFormTest.php
index 80033b4de78b4449860558169c168342faf1f5be..ad2d38504888eb76df08e0bb957f698ea5a8bfd7 100644
--- a/web/core/modules/search/tests/src/Functional/SearchEmbedFormTest.php
+++ b/web/core/modules/search/tests/src/Functional/SearchEmbedFormTest.php
@@ -41,7 +41,11 @@ protected function setUp() {
     $this->drupalCreateContentType(['type' => 'page', 'name' => 'Basic page']);
 
     // Create a user and a node, and update the search index.
-    $test_user = $this->drupalCreateUser(['access content', 'search content', 'administer nodes']);
+    $test_user = $this->drupalCreateUser([
+      'access content',
+      'search content',
+      'administer nodes',
+    ]);
     $this->drupalLogin($test_user);
 
     $this->node = $this->drupalCreateNode();
diff --git a/web/core/modules/search/tests/src/Functional/SearchKeywordsConditionsTest.php b/web/core/modules/search/tests/src/Functional/SearchKeywordsConditionsTest.php
index 58e97f1c9d789ce961ff3c320f761df0fba00752..35a4428e208d3162bed39a556c9ca1d094ad406f 100644
--- a/web/core/modules/search/tests/src/Functional/SearchKeywordsConditionsTest.php
+++ b/web/core/modules/search/tests/src/Functional/SearchKeywordsConditionsTest.php
@@ -42,7 +42,12 @@ protected function setUp() {
     parent::setUp();
 
     // Create searching user.
-    $this->searchingUser = $this->drupalCreateUser(['search content', 'access content', 'access comments', 'skip comment approval']);
+    $this->searchingUser = $this->drupalCreateUser([
+      'search content',
+      'access content',
+      'access comments',
+      'skip comment approval',
+    ]);
     // Log in with sufficient privileges.
     $this->drupalLogin($this->searchingUser);
   }
diff --git a/web/core/modules/search/tests/src/Functional/SearchLanguageTest.php b/web/core/modules/search/tests/src/Functional/SearchLanguageTest.php
index f30787ca8b39899f215f6c462d54c6f069dcfaed..63b04481b06068aa81f1df57baa85b046988f27b 100644
--- a/web/core/modules/search/tests/src/Functional/SearchLanguageTest.php
+++ b/web/core/modules/search/tests/src/Functional/SearchLanguageTest.php
@@ -37,7 +37,15 @@ protected function setUp() {
     $this->drupalCreateContentType(['type' => 'page', 'name' => 'Basic page']);
 
     // Create and log in user.
-    $test_user = $this->drupalCreateUser(['access content', 'search content', 'use advanced search', 'administer nodes', 'administer languages', 'access administration pages', 'administer site configuration']);
+    $test_user = $this->drupalCreateUser([
+      'access content',
+      'search content',
+      'use advanced search',
+      'administer nodes',
+      'administer languages',
+      'access administration pages',
+      'administer site configuration',
+    ]);
     $this->drupalLogin($test_user);
 
     // Add a new language.
@@ -121,12 +129,12 @@ public function testLanguages() {
     $edit = ['keys' => 'node', 'language[es]' => TRUE];
     $this->drupalPostForm('search/node', $edit, 'edit-submit--2');
     // Check for Spanish results.
-    $this->assertLink('Second node this is the Spanish title', 0, 'Second node Spanish title found in search results');
-    $this->assertLink('Third node es', 0, 'Third node Spanish found in search results');
+    $this->assertSession()->linkExists('Second node this is the Spanish title', 0, 'Second node Spanish title found in search results');
+    $this->assertSession()->linkExists('Third node es', 0, 'Third node Spanish found in search results');
     // Ensure that results don't contain other language nodes.
-    $this->assertNoLink('First node en', 'Search results do not contain first English node');
-    $this->assertNoLink('Second node en', 'Search results do not contain second English node');
-    $this->assertNoLink('Third node en', 'Search results do not contain third English node');
+    $this->assertSession()->linkNotExists('First node en', 'Search results do not contain first English node');
+    $this->assertSession()->linkNotExists('Second node en', 'Search results do not contain second English node');
+    $this->assertSession()->linkNotExists('Third node en', 'Search results do not contain third English node');
 
     // Change the default language and delete English.
     $path = 'admin/config/regional/language';
diff --git a/web/core/modules/search/tests/src/Functional/SearchMultilingualEntityTest.php b/web/core/modules/search/tests/src/Functional/SearchMultilingualEntityTest.php
index e3197150fb431dcf0dad6492046bfaebae68b221..ed9d9443910b2bebadff5d81f354bcb19e0a9a65 100644
--- a/web/core/modules/search/tests/src/Functional/SearchMultilingualEntityTest.php
+++ b/web/core/modules/search/tests/src/Functional/SearchMultilingualEntityTest.php
@@ -52,7 +52,14 @@ protected function setUp() {
 
     // Create a user who can administer search, do searches, see the status
     // report, and administer cron. Log in.
-    $user = $this->drupalCreateUser(['administer search', 'search content', 'use advanced search', 'access content', 'access site reports', 'administer site configuration']);
+    $user = $this->drupalCreateUser([
+      'administer search',
+      'search content',
+      'use advanced search',
+      'access content',
+      'access site reports',
+      'administer site configuration',
+    ]);
     $this->drupalLogin($user);
 
     // Set up the search plugin.
diff --git a/web/core/modules/search/tests/src/Functional/SearchNodeDiacriticsTest.php b/web/core/modules/search/tests/src/Functional/SearchNodeDiacriticsTest.php
index 2e7150d8d2d19967748e70ef35f3689703e67fe9..e9751cb0f96069fd084c563cb2687a02a36d3deb 100644
--- a/web/core/modules/search/tests/src/Functional/SearchNodeDiacriticsTest.php
+++ b/web/core/modules/search/tests/src/Functional/SearchNodeDiacriticsTest.php
@@ -36,7 +36,12 @@ protected function setUp() {
     node_access_rebuild();
 
     // Create a test user and log in.
-    $this->testUser = $this->drupalCreateUser(['access content', 'search content', 'use advanced search', 'access user profiles']);
+    $this->testUser = $this->drupalCreateUser([
+      'access content',
+      'search content',
+      'use advanced search',
+      'access user profiles',
+    ]);
     $this->drupalLogin($this->testUser);
   }
 
diff --git a/web/core/modules/search/tests/src/Functional/SearchNodePunctuationTest.php b/web/core/modules/search/tests/src/Functional/SearchNodePunctuationTest.php
index 02945562a7d7d71712e7dd7868b5d3d4eae73706..9fb4cda5d5abc4f4690859d15c850bbf25d8a9c2 100644
--- a/web/core/modules/search/tests/src/Functional/SearchNodePunctuationTest.php
+++ b/web/core/modules/search/tests/src/Functional/SearchNodePunctuationTest.php
@@ -35,7 +35,12 @@ protected function setUp() {
 
     node_access_rebuild();
     // Create a test user and log in.
-    $this->testUser = $this->drupalCreateUser(['access content', 'search content', 'use advanced search', 'access user profiles']);
+    $this->testUser = $this->drupalCreateUser([
+      'access content',
+      'search content',
+      'use advanced search',
+      'access user profiles',
+    ]);
     $this->drupalLogin($this->testUser);
   }
 
@@ -59,7 +64,7 @@ public function testPhraseSearchPunctuation() {
 
     // Check if the author is linked correctly to the user profile page.
     $username = $node->getOwner()->getAccountName();
-    $this->assertLink($username);
+    $this->assertSession()->linkExists($username);
 
     // Search for "&" and verify entities are not broken up in the output.
     $edit = ['keys' => '&'];
diff --git a/web/core/modules/search/tests/src/Functional/SearchNodeUpdateAndDeletionTest.php b/web/core/modules/search/tests/src/Functional/SearchNodeUpdateAndDeletionTest.php
index 6f2a4941ccee8de8ae2ead886dc91f59027e903a..4e984037d331a48cda8ee94b26cbb4cc1a8cd16d 100644
--- a/web/core/modules/search/tests/src/Functional/SearchNodeUpdateAndDeletionTest.php
+++ b/web/core/modules/search/tests/src/Functional/SearchNodeUpdateAndDeletionTest.php
@@ -36,7 +36,10 @@ protected function setUp() {
     $this->drupalCreateContentType(['type' => 'page', 'name' => 'Basic page']);
 
     // Create a test user and log in.
-    $this->testUser = $this->drupalCreateUser(['access content', 'search content']);
+    $this->testUser = $this->drupalCreateUser([
+      'access content',
+      'search content',
+    ]);
     $this->drupalLogin($this->testUser);
   }
 
diff --git a/web/core/modules/search/tests/src/Functional/SearchNumberMatchingTest.php b/web/core/modules/search/tests/src/Functional/SearchNumberMatchingTest.php
index 8888b4ddc521286a2bbca6d8857f60e196c779ac..f25afa3d730ab67cf6300a4765fbd05acddd5312 100644
--- a/web/core/modules/search/tests/src/Functional/SearchNumberMatchingTest.php
+++ b/web/core/modules/search/tests/src/Functional/SearchNumberMatchingTest.php
@@ -65,7 +65,12 @@ protected function setUp() {
 
     $this->drupalCreateContentType(['type' => 'page', 'name' => 'Basic page']);
 
-    $this->testUser = $this->drupalCreateUser(['search content', 'access content', 'administer nodes', 'access site reports']);
+    $this->testUser = $this->drupalCreateUser([
+      'search content',
+      'access content',
+      'administer nodes',
+      'access site reports',
+    ]);
     $this->drupalLogin($this->testUser);
 
     foreach ($this->numbers as $num) {
diff --git a/web/core/modules/search/tests/src/Functional/SearchNumbersTest.php b/web/core/modules/search/tests/src/Functional/SearchNumbersTest.php
index 43dd788d177642bc82ccfcdc1d1f226e54dc0577..f65e12e0f0f5ed2d6bfb1afc81e0896378d8d9a1 100644
--- a/web/core/modules/search/tests/src/Functional/SearchNumbersTest.php
+++ b/web/core/modules/search/tests/src/Functional/SearchNumbersTest.php
@@ -71,7 +71,12 @@ protected function setUp() {
 
     $this->drupalCreateContentType(['type' => 'page', 'name' => 'Basic page']);
 
-    $this->testUser = $this->drupalCreateUser(['search content', 'access content', 'administer nodes', 'access site reports']);
+    $this->testUser = $this->drupalCreateUser([
+      'search content',
+      'access content',
+      'administer nodes',
+      'access site reports',
+    ]);
     $this->drupalLogin($this->testUser);
 
     foreach ($this->numbers as $doc => $num) {
diff --git a/web/core/modules/search/tests/src/Functional/SearchPageCacheTagsTest.php b/web/core/modules/search/tests/src/Functional/SearchPageCacheTagsTest.php
index daa55efaee56c3d82e696e2a4a9c8c17578a0918..1e6ff7846e3a8e12002735deac46eed456cff684 100644
--- a/web/core/modules/search/tests/src/Functional/SearchPageCacheTagsTest.php
+++ b/web/core/modules/search/tests/src/Functional/SearchPageCacheTagsTest.php
@@ -53,7 +53,10 @@ protected function setUp() {
     $this->drupalCreateContentType(['type' => 'page', 'name' => 'Basic page']);
 
     // Create user.
-    $this->searchingUser = $this->drupalCreateUser(['search content', 'access user profiles']);
+    $this->searchingUser = $this->drupalCreateUser([
+      'search content',
+      'access user profiles',
+    ]);
 
     // Create a node and update the search index.
     $this->node = $this->drupalCreateNode(['title' => 'bike shed shop']);
diff --git a/web/core/modules/search/tests/src/Functional/SearchPageOverrideTest.php b/web/core/modules/search/tests/src/Functional/SearchPageOverrideTest.php
index 2faac41a5a849d15ed3574d38adcef6ab58e6095..d7cf74defea6f870c203fc1fc033a538838d6704 100644
--- a/web/core/modules/search/tests/src/Functional/SearchPageOverrideTest.php
+++ b/web/core/modules/search/tests/src/Functional/SearchPageOverrideTest.php
@@ -35,7 +35,10 @@ protected function setUp() {
     parent::setUp();
 
     // Log in as a user that can create and search content.
-    $this->searchUser = $this->drupalCreateUser(['search content', 'administer search']);
+    $this->searchUser = $this->drupalCreateUser([
+      'search content',
+      'administer search',
+    ]);
     $this->drupalLogin($this->searchUser);
   }
 
diff --git a/web/core/modules/search/tests/src/Functional/SearchPageTextTest.php b/web/core/modules/search/tests/src/Functional/SearchPageTextTest.php
index f9c8891f95c989cd6a5140a66e5654972561c353..62999854fee32e2535196f1148ca731da159a664 100644
--- a/web/core/modules/search/tests/src/Functional/SearchPageTextTest.php
+++ b/web/core/modules/search/tests/src/Functional/SearchPageTextTest.php
@@ -39,7 +39,11 @@ protected function setUp() {
     $this->drupalCreateContentType(['type' => 'page', 'name' => 'Basic page']);
 
     // Create user.
-    $this->searchingUser = $this->drupalCreateUser(['search content', 'access user profiles', 'use advanced search']);
+    $this->searchingUser = $this->drupalCreateUser([
+      'search content',
+      'access user profiles',
+      'use advanced search',
+    ]);
     $this->drupalPlaceBlock('local_tasks_block');
     $this->drupalPlaceBlock('page_title_block');
   }
diff --git a/web/core/modules/search/tests/src/Functional/SearchQueryAlterTest.php b/web/core/modules/search/tests/src/Functional/SearchQueryAlterTest.php
index bcfd7e2692dee27a0cdafeeb0464626b94d646e9..fa705b28aec6dee6366b529063a0a893d6055133 100644
--- a/web/core/modules/search/tests/src/Functional/SearchQueryAlterTest.php
+++ b/web/core/modules/search/tests/src/Functional/SearchQueryAlterTest.php
@@ -29,7 +29,10 @@ public function testQueryAlter() {
     $this->drupalCreateContentType(['type' => 'article', 'name' => 'Article']);
 
     // Log in with sufficient privileges.
-    $this->drupalLogin($this->drupalCreateUser(['create page content', 'search content']));
+    $this->drupalLogin($this->drupalCreateUser([
+      'create page content',
+      'search content',
+    ]));
 
     // Create a node and an article with the same keyword. The query alter
     // test module will alter the query so only articles should be returned.
diff --git a/web/core/modules/search/tests/src/Functional/SearchRankingTest.php b/web/core/modules/search/tests/src/Functional/SearchRankingTest.php
index 8b29beda678dc8ec9ba0ad8043ce63d22cc66962..189ffce492230f3b0f09a984b96eda6e46593efd 100644
--- a/web/core/modules/search/tests/src/Functional/SearchRankingTest.php
+++ b/web/core/modules/search/tests/src/Functional/SearchRankingTest.php
@@ -49,7 +49,12 @@ protected function setUp() {
     $this->nodeSearch = SearchPage::load('node_search');
 
     // Log in with sufficient privileges.
-    $this->drupalLogin($this->drupalCreateUser(['post comments', 'skip comment approval', 'create page content', 'administer search']));
+    $this->drupalLogin($this->drupalCreateUser([
+      'post comments',
+      'skip comment approval',
+      'create page content',
+      'administer search',
+    ]));
   }
 
   public function testRankings() {
diff --git a/web/core/modules/serialization/src/Normalizer/TimeStampItemNormalizerTrait.php b/web/core/modules/serialization/src/Normalizer/TimeStampItemNormalizerTrait.php
index 50296711f3e86667dc2db96e7c962d1b3b00be65..365e30a4e4c72e32add6f7c3e0c236228ece2404 100644
--- a/web/core/modules/serialization/src/Normalizer/TimeStampItemNormalizerTrait.php
+++ b/web/core/modules/serialization/src/Normalizer/TimeStampItemNormalizerTrait.php
@@ -37,6 +37,7 @@ trait TimeStampItemNormalizerTrait {
    *
    * @param array $normalized
    *   The normalized field data to process.
+   *
    * @return array
    *   The processed data.
    */
diff --git a/web/core/modules/shortcut/shortcut.api.php b/web/core/modules/shortcut/shortcut.api.php
index c5c609c38f54f8221c77e839c92426541eda869a..ff40a30d3fa9ea4cae803b21e5f56d770b23efa3 100644
--- a/web/core/modules/shortcut/shortcut.api.php
+++ b/web/core/modules/shortcut/shortcut.api.php
@@ -26,6 +26,7 @@
  *
  * @param $account
  *   The user account whose default shortcut set is being requested.
+ *
  * @return string
  *   The name of the shortcut set that this module recommends for that user, if
  *   there is one.
diff --git a/web/core/modules/shortcut/tests/src/Functional/ShortcutCacheTagsTest.php b/web/core/modules/shortcut/tests/src/Functional/ShortcutCacheTagsTest.php
index 52876a4e37ff71a370385165b1f1e9d21be505b8..4d0367c7b7695cec70c0f2d278f8bdb936069cfc 100644
--- a/web/core/modules/shortcut/tests/src/Functional/ShortcutCacheTagsTest.php
+++ b/web/core/modules/shortcut/tests/src/Functional/ShortcutCacheTagsTest.php
@@ -117,7 +117,7 @@ public function testToolbar() {
     // Verify that users without the 'access shortcuts' permission can't see the
     // shortcuts.
     $this->drupalLogin($this->drupalCreateUser(['access toolbar']));
-    $this->assertNoLink('Shortcuts');
+    $this->assertSession()->linkNotExists('Shortcuts');
     $this->verifyDynamicPageCache($test_page_url, 'MISS');
     $this->verifyDynamicPageCache($test_page_url, 'HIT');
 
@@ -129,8 +129,8 @@ public function testToolbar() {
     ]));
     $this->verifyDynamicPageCache($test_page_url, 'MISS');
     $this->verifyDynamicPageCache($test_page_url, 'HIT');
-    $this->assertLink('Shortcuts');
-    $this->assertNoLink('Cron');
+    $this->assertSession()->linkExists('Shortcuts');
+    $this->assertSession()->linkNotExists('Cron');
 
     // Create a role with access to shortcuts as well as the necessary
     // permissions to see specific shortcuts.
@@ -155,14 +155,14 @@ public function testToolbar() {
     $this->verifyDynamicPageCache($test_page_url, 'MISS');
     $this->verifyDynamicPageCache($test_page_url, 'HIT');
     $this->assertCacheContexts(['user', 'url.query_args:_wrapper_format']);
-    $this->assertLink('Shortcuts');
-    $this->assertLink('Cron');
+    $this->assertSession()->linkExists('Shortcuts');
+    $this->assertSession()->linkExists('Cron');
 
     $this->drupalLogin($site_configuration_user2);
     $this->verifyDynamicPageCache($test_page_url, 'HIT');
     $this->assertCacheContexts(['user', 'url.query_args:_wrapper_format']);
-    $this->assertLink('Shortcuts');
-    $this->assertLink('Cron');
+    $this->assertSession()->linkExists('Shortcuts');
+    $this->assertSession()->linkExists('Cron');
 
     // Add another shortcut.
     $shortcut = Shortcut::create([
@@ -176,21 +176,21 @@ public function testToolbar() {
     // The shortcuts are displayed in a lazy builder, so the page is still a
     // cache HIT but shows the new shortcut immediately.
     $this->verifyDynamicPageCache($test_page_url, 'HIT');
-    $this->assertLink('Cron');
-    $this->assertLink('Llama');
+    $this->assertSession()->linkExists('Cron');
+    $this->assertSession()->linkExists('Llama');
 
     // Update the shortcut title and assert that it is updated.
     $shortcut->set('title', 'Alpaca');
     $shortcut->save();
     $this->verifyDynamicPageCache($test_page_url, 'HIT');
-    $this->assertLink('Cron');
-    $this->assertLink('Alpaca');
+    $this->assertSession()->linkExists('Cron');
+    $this->assertSession()->linkExists('Alpaca');
 
     // Delete the shortcut and assert that the link is gone.
     $shortcut->delete();
     $this->verifyDynamicPageCache($test_page_url, 'HIT');
-    $this->assertLink('Cron');
-    $this->assertNoLink('Alpaca');
+    $this->assertSession()->linkExists('Cron');
+    $this->assertSession()->linkNotExists('Alpaca');
   }
 
 }
diff --git a/web/core/modules/shortcut/tests/src/Functional/ShortcutLinksTest.php b/web/core/modules/shortcut/tests/src/Functional/ShortcutLinksTest.php
index 512fd2b7b164979a67814615b7f58fe2e53f28d1..f06baa857c62f19692c2c7521c490a405cfd2444 100644
--- a/web/core/modules/shortcut/tests/src/Functional/ShortcutLinksTest.php
+++ b/web/core/modules/shortcut/tests/src/Functional/ShortcutLinksTest.php
@@ -87,10 +87,10 @@ public function testShortcutLinkAdd() {
       $this->assertContains('internal:' . $test_path, $paths, 'Shortcut created: ' . $test_path);
 
       if (in_array($test_path, $test_cases_non_access)) {
-        $this->assertNoLink($title, new FormattableMarkup('Shortcut link %url not accessible on the page.', ['%url' => $test_path]));
+        $this->assertSession()->linkNotExists($title, new FormattableMarkup('Shortcut link %url not accessible on the page.', ['%url' => $test_path]));
       }
       else {
-        $this->assertLink($title, 0, new FormattableMarkup('Shortcut link %url found on the page.', ['%url' => $test_path]));
+        $this->assertSession()->linkExists($title, 0, new FormattableMarkup('Shortcut link %url found on the page.', ['%url' => $test_path]));
       }
     }
     $saved_set = ShortcutSet::load($set->id());
@@ -121,7 +121,7 @@ public function testShortcutLinkAdd() {
       'link[0][uri]' => '/node',
     ];
     $this->drupalPostForm('admin/config/user-interface/shortcut/manage/' . $set->id() . '/add-link', $form_data, t('Save'));
-    $this->assertLink($title, 0, 'Shortcut link found on the page.');
+    $this->assertSession()->linkExists($title, 0, 'Shortcut link found on the page.');
 
     // Create a new shortcut set and add a link to it.
     $this->drupalLogin($this->adminUser);
@@ -154,19 +154,19 @@ public function testShortcutQuickLink() {
     // Test the "Add to shortcuts" link.
     $this->clickLink('Add to Default shortcuts');
     $this->assertText('Added a shortcut for Cron.');
-    $this->assertLink('Cron', 0, 'Shortcut link found on page');
+    $this->assertSession()->linkExists('Cron', 0, 'Shortcut link found on page');
 
     $this->drupalGet('admin/structure');
-    $this->assertLink('Cron', 0, 'Shortcut link found on different page');
+    $this->assertSession()->linkExists('Cron', 0, 'Shortcut link found on different page');
 
     // Test the "Remove from shortcuts" link.
     $this->clickLink('Cron');
     $this->clickLink('Remove from Default shortcuts');
     $this->assertText('The shortcut Cron has been deleted.');
-    $this->assertNoLink('Cron', 'Shortcut link removed from page');
+    $this->assertSession()->linkNotExists('Cron', 'Shortcut link removed from page');
 
     $this->drupalGet('admin/structure');
-    $this->assertNoLink('Cron', 'Shortcut link removed from different page');
+    $this->assertSession()->linkNotExists('Cron', 'Shortcut link removed from different page');
 
     $this->drupalGet('admin/people');
 
@@ -240,7 +240,7 @@ public function testShortcutLinkRename() {
     $saved_set = ShortcutSet::load($set->id());
     $titles = $this->getShortcutInformation($saved_set, 'title');
     $this->assertContains($new_link_name, $titles, 'Shortcut renamed: ' . $new_link_name);
-    $this->assertLink($new_link_name, 0, 'Renamed shortcut link appears on the page.');
+    $this->assertSession()->linkExists($new_link_name, 0, 'Renamed shortcut link appears on the page.');
     $this->assertText(t('The shortcut @link has been updated.', ['@link' => $new_link_name]));
   }
 
@@ -352,13 +352,16 @@ public function testAccessShortcutsPermission() {
     // Verify that users without the 'access shortcuts' permission can't see the
     // shortcuts.
     $this->drupalLogin($this->drupalCreateUser(['access toolbar']));
-    $this->assertNoLink('Shortcuts', 'Shortcut link not found on page.');
+    $this->assertSession()->linkNotExists('Shortcuts', 'Shortcut link not found on page.');
 
     // Verify that users without the 'administer site configuration' permission
     // can't see the cron shortcuts but can see shortcuts.
-    $this->drupalLogin($this->drupalCreateUser(['access toolbar', 'access shortcuts']));
-    $this->assertLink('Shortcuts');
-    $this->assertNoLink('Cron', 'Cron shortcut link not found on page.');
+    $this->drupalLogin($this->drupalCreateUser([
+      'access toolbar',
+      'access shortcuts',
+    ]));
+    $this->assertSession()->linkExists('Shortcuts');
+    $this->assertSession()->linkNotExists('Cron', 'Cron shortcut link not found on page.');
 
     // Verify that users with the 'access shortcuts' permission can see the
     // shortcuts.
@@ -366,7 +369,7 @@ public function testAccessShortcutsPermission() {
       'access toolbar', 'access shortcuts', 'administer site configuration',
     ]));
     $this->clickLink('Shortcuts', 0, 'Shortcut link found on page.');
-    $this->assertLink('Cron', 0, 'Cron shortcut link found on page.');
+    $this->assertSession()->linkExists('Cron', 0, 'Cron shortcut link found on page.');
 
     $this->verifyAccessShortcutsPermissionForEditPages();
   }
@@ -376,7 +379,12 @@ public function testAccessShortcutsPermission() {
    */
   public function testShortcutLinkOrder() {
     // Ensure to give permissions to access the shortcuts.
-    $this->drupalLogin($this->drupalCreateUser(['access toolbar', 'access shortcuts', 'access content overview', 'administer content types']));
+    $this->drupalLogin($this->drupalCreateUser([
+      'access toolbar',
+      'access shortcuts',
+      'access content overview',
+      'administer content types',
+    ]));
     $this->drupalGet(Url::fromRoute('<front>'));
     $shortcuts = $this->cssSelect('#toolbar-item-shortcuts-tray .toolbar-menu a');
     $this->assertEqual($shortcuts[0]->getText(), 'Add content');
diff --git a/web/core/modules/shortcut/tests/src/Functional/ShortcutSetsTest.php b/web/core/modules/shortcut/tests/src/Functional/ShortcutSetsTest.php
index 4372aeae94e969b61970740ea16694b5506e0f5e..aeedc8bf66a3ed07b9805771f8711932f0052891 100644
--- a/web/core/modules/shortcut/tests/src/Functional/ShortcutSetsTest.php
+++ b/web/core/modules/shortcut/tests/src/Functional/ShortcutSetsTest.php
@@ -83,7 +83,7 @@ public function testShortcutSetEdit() {
       $title = $shortcut->getTitle();
 
       // Confirm that a link to the shortcut is found within the table.
-      $this->assertLink($title);
+      $this->assertSession()->linkExists($title);
 
       // Look for a test shortcut weight select form element.
       $this->assertFieldByName('shortcuts[links][' . $shortcut->id() . '][weight]');
diff --git a/web/core/modules/shortcut/tests/src/Functional/ShortcutTestBase.php b/web/core/modules/shortcut/tests/src/Functional/ShortcutTestBase.php
index c11c418ae9a33d19737bdc898ac2335b1583f545..9c7aecd14f4714ffcc1c08e820695c534d3ca375 100644
--- a/web/core/modules/shortcut/tests/src/Functional/ShortcutTestBase.php
+++ b/web/core/modules/shortcut/tests/src/Functional/ShortcutTestBase.php
@@ -78,8 +78,23 @@ protected function setUp() {
     }
 
     // Create users.
-    $this->adminUser = $this->drupalCreateUser(['access toolbar', 'administer shortcuts', 'view the administration theme', 'create article content', 'create page content', 'access content overview', 'administer users', 'link to any page', 'edit any article content']);
-    $this->shortcutUser = $this->drupalCreateUser(['customize shortcut links', 'switch shortcut sets', 'access shortcuts', 'access content']);
+    $this->adminUser = $this->drupalCreateUser([
+      'access toolbar',
+      'administer shortcuts',
+      'view the administration theme',
+      'create article content',
+      'create page content',
+      'access content overview',
+      'administer users',
+      'link to any page',
+      'edit any article content',
+    ]);
+    $this->shortcutUser = $this->drupalCreateUser([
+      'customize shortcut links',
+      'switch shortcut sets',
+      'access shortcuts',
+      'access content',
+    ]);
 
     // Create a node.
     $this->node = $this->drupalCreateNode(['type' => 'article']);
diff --git a/web/core/modules/simpletest/simpletest.module b/web/core/modules/simpletest/simpletest.module
index a53857550387004cd1b4621af6e5be04d58cdd79..31749c7e90fe6d3f91de4cca4f295c3a56de28bc 100644
--- a/web/core/modules/simpletest/simpletest.module
+++ b/web/core/modules/simpletest/simpletest.module
@@ -422,6 +422,7 @@ function _simpletest_batch_finished($success, $results, $operations, $elapsed) {
  *
  * @param $test_id
  *   The test ID to get the last test from.
+ *
  * @return array
  *   Array containing the last database prefix used and the last test class
  *   that ran.
diff --git a/web/core/modules/simpletest/src/KernelTestBase.php b/web/core/modules/simpletest/src/KernelTestBase.php
index 952896a24473661d36cc4b006e7aa21340b47ae7..bd6a89e300a659dd135e96feaf31479daca85404 100644
--- a/web/core/modules/simpletest/src/KernelTestBase.php
+++ b/web/core/modules/simpletest/src/KernelTestBase.php
@@ -151,7 +151,7 @@ protected function prepareConfigDirectories() {
     $this->configDirectories = [];
     // Assign the relative path to the global variable.
     $path = $this->siteDirectory . '/config_' . CONFIG_SYNC_DIRECTORY;
-    // Ensure the directory can be created and is writeable.
+    // Ensure the directory can be created and is writable.
     if (!\Drupal::service('file_system')->prepareDirectory($path, FileSystemInterface::CREATE_DIRECTORY | FileSystemInterface::MODIFY_PERMISSIONS)) {
       throw new \RuntimeException("Failed to create '" . CONFIG_SYNC_DIRECTORY . "' config directory $path");
     }
diff --git a/web/core/modules/statistics/tests/src/Functional/StatisticsAdminTest.php b/web/core/modules/statistics/tests/src/Functional/StatisticsAdminTest.php
index b0f63344250e9b404578c81a1aaf6b0a468c7975..fc7ea25fb5d1e18f706f2d6f0c4b2d80864699f1 100644
--- a/web/core/modules/statistics/tests/src/Functional/StatisticsAdminTest.php
+++ b/web/core/modules/statistics/tests/src/Functional/StatisticsAdminTest.php
@@ -58,7 +58,11 @@ protected function setUp() {
     if ($this->profile != 'standard') {
       $this->drupalCreateContentType(['type' => 'page', 'name' => 'Basic page']);
     }
-    $this->privilegedUser = $this->drupalCreateUser(['administer statistics', 'view post access counter', 'create page content']);
+    $this->privilegedUser = $this->drupalCreateUser([
+      'administer statistics',
+      'view post access counter',
+      'create page content',
+    ]);
     $this->drupalLogin($this->privilegedUser);
     $this->testNode = $this->drupalCreateNode(['type' => 'page', 'uid' => $this->privilegedUser->id()]);
     $this->client = \Drupal::httpClient();
diff --git a/web/core/modules/statistics/tests/src/Functional/Views/IntegrationTest.php b/web/core/modules/statistics/tests/src/Functional/Views/IntegrationTest.php
index a03535f17e36a01c5718232a054fe985026ed3f4..1fa68a8055879d20fbc415b3e774fa5dbb2a1e61 100644
--- a/web/core/modules/statistics/tests/src/Functional/Views/IntegrationTest.php
+++ b/web/core/modules/statistics/tests/src/Functional/Views/IntegrationTest.php
@@ -53,7 +53,10 @@ protected function setUp($import_test_views = TRUE) {
     ViewTestData::createTestViews(get_class($this), ['statistics_test_views']);
 
     // Create a new user for viewing nodes and statistics.
-    $this->webUser = $this->drupalCreateUser(['access content', 'view post access counter']);
+    $this->webUser = $this->drupalCreateUser([
+      'access content',
+      'view post access counter',
+    ]);
 
     // Create a new user for viewing nodes only.
     $this->deniedUser = $this->drupalCreateUser(['access content']);
diff --git a/web/core/modules/system/src/Form/FileSystemForm.php b/web/core/modules/system/src/Form/FileSystemForm.php
index d81488b44e75c3e7c21bca809a2c24ee99148b7c..cad3342d6bc3a92df32741b87a7cb52ac3a29408 100644
--- a/web/core/modules/system/src/Form/FileSystemForm.php
+++ b/web/core/modules/system/src/Form/FileSystemForm.php
@@ -122,7 +122,7 @@ public function buildForm(array $form, FormStateInterface $form_state) {
       '#markup' => $this->fileSystem->getTempDirectory(),
       '#description' => t('A local file system path where temporary files will be stored. This directory should not be accessible over the web. This must be changed in settings.php.'),
     ];
-    // Any visible, writeable wrapper can potentially be used for the files
+    // Any visible, writable wrapper can potentially be used for the files
     // directory, including a remote file system that integrates with a CDN.
     $options = $this->streamWrapperManager->getDescriptions(StreamWrapperInterface::WRITE_VISIBLE);
 
diff --git a/web/core/modules/system/src/Form/ThemeSettingsForm.php b/web/core/modules/system/src/Form/ThemeSettingsForm.php
index 2a65c6b52d8d7b643313c8d36825d595fe3b9b93..e1f13a7930cd262d8ae146daea95d3638b0ba47f 100644
--- a/web/core/modules/system/src/Form/ThemeSettingsForm.php
+++ b/web/core/modules/system/src/Form/ThemeSettingsForm.php
@@ -514,6 +514,7 @@ public function submitForm(array &$form, FormStateInterface $form_state) {
    * @param string $path
    *   A path relative to the Drupal root or to the public files directory, or
    *   a stream wrapper URI.
+   *
    * @return mixed
    *   A valid path that can be displayed through the theme system, or FALSE if
    *   the path could not be validated.
diff --git a/web/core/modules/system/src/PathBasedBreadcrumbBuilder.php b/web/core/modules/system/src/PathBasedBreadcrumbBuilder.php
index 261ae32a2491184b6aa2614d037fb4b0a686bf18..609ffd515449286fdc612091a269936aed0cd6a1 100644
--- a/web/core/modules/system/src/PathBasedBreadcrumbBuilder.php
+++ b/web/core/modules/system/src/PathBasedBreadcrumbBuilder.php
@@ -207,8 +207,6 @@ protected function getRequestForPath($path, array $exclude) {
     if (!empty($exclude[$path])) {
       return NULL;
     }
-    // @todo Use the RequestHelper once https://www.drupal.org/node/2090293 is
-    //   fixed.
     $request = Request::create($path);
     // Performance optimization: set a short accept header to reduce overhead in
     // AcceptHeaderMatcher when matching the request.
diff --git a/web/core/modules/system/src/Tests/Cache/CacheTestBase.php b/web/core/modules/system/src/Tests/Cache/CacheTestBase.php
index dc2f601c5f494c0854f0fd9cffc5eea40a813941..431e72b91f86476c4a156dba8ddb4effaa14a905 100644
--- a/web/core/modules/system/src/Tests/Cache/CacheTestBase.php
+++ b/web/core/modules/system/src/Tests/Cache/CacheTestBase.php
@@ -29,6 +29,7 @@ abstract class CacheTestBase extends WebTestBase {
    *   The variable the cache should contain.
    * @param $bin
    *   The bin the cache item was stored in.
+   *
    * @return
    *   TRUE on pass, FALSE on fail.
    */
diff --git a/web/core/modules/system/src/Tests/Entity/EntityCacheTagsTestBase.php b/web/core/modules/system/src/Tests/Entity/EntityCacheTagsTestBase.php
index 625baa5a778ecfb6d24c758bae177d5155b9e973..042f287a9006cf722ac84584fff1dc85bb7ef177 100644
--- a/web/core/modules/system/src/Tests/Entity/EntityCacheTagsTestBase.php
+++ b/web/core/modules/system/src/Tests/Entity/EntityCacheTagsTestBase.php
@@ -171,6 +171,7 @@ protected function getAdditionalCacheContextsForEntity(EntityInterface $entity)
    *
    * @param \Drupal\Core\Entity\EntityInterface $entity
    *   The entity to be tested, as created by createEntity().
+   *
    * @return array
    *   An array of the additional cache tags.
    *
diff --git a/web/core/modules/system/src/Tests/Routing/MockAliasManager.php b/web/core/modules/system/src/Tests/Routing/MockAliasManager.php
index dcbfbe7162bc0832ba1c949109f340694a752384..b52b0b44c7687d9bf0cc7ea1d414d34d9b01536b 100644
--- a/web/core/modules/system/src/Tests/Routing/MockAliasManager.php
+++ b/web/core/modules/system/src/Tests/Routing/MockAliasManager.php
@@ -73,6 +73,7 @@ public function getPathByAlias($alias, $langcode = NULL) {
    * {@inheritdoc}
    * @param $path
    * @param null $langcode
+   *
    * @return
    */
   public function getAliasByPath($path, $langcode = NULL) {
diff --git a/web/core/modules/system/system.module b/web/core/modules/system/system.module
index 208372ccaadbb08d767b9a3accf668b0a8fb8693..ba714a4a4dc00b6d372a2d650ac7a22cbceba8e2 100644
--- a/web/core/modules/system/system.module
+++ b/web/core/modules/system/system.module
@@ -473,6 +473,7 @@ function template_preprocess_entity_add_list(&$variables) {
  *   object created by authorize.php when the user authorizes the operation.
  * @param $page_title
  *   Optional string to use as the page title once redirected to authorize.php.
+ *
  * @return
  *   Nothing, this function just initializes variables in the user's session.
  */
@@ -500,6 +501,7 @@ function system_authorized_init($callback, $file, $arguments = [], $page_title =
  *
  * @param array $options
  *   Optional array of options to set on the \Drupal\Core\Url object.
+ *
  * @return \Drupal\Core\Url
  *   The full URL to authorize.php, using HTTPS if available.
  *
@@ -1031,6 +1033,7 @@ function system_rebuild_module_data() {
  * @param $show
  *   Possible values: REGIONS_ALL or REGIONS_VISIBLE. Visible excludes hidden
  *   regions.
+ *
  * @return
  *   An array of regions in the form $region['name'] = 'description'.
  */
@@ -1096,6 +1099,7 @@ function system_system_info_alter(&$info, Extension $file, $type) {
  *
  * @param $theme
  *   The name of a theme.
+ *
  * @return
  *   A string that is the region name.
  */
diff --git a/web/core/modules/system/tests/modules/entity_test/src/Entity/EntityTestExternal.php b/web/core/modules/system/tests/modules/entity_test/src/Entity/EntityTestExternal.php
new file mode 100644
index 0000000000000000000000000000000000000000..b6587a9a9e151ffb41a84d3575054015ec8cc62f
--- /dev/null
+++ b/web/core/modules/system/tests/modules/entity_test/src/Entity/EntityTestExternal.php
@@ -0,0 +1,36 @@
+<?php
+
+namespace Drupal\entity_test\Entity;
+
+use Drupal\Core\Url;
+
+/**
+ * Test entity class.
+ *
+ * @ContentEntityType(
+ *   id = "entity_test_external",
+ *   label = @Translation("Entity test external"),
+ *   base_table = "entity_test_external",
+ *   entity_keys = {
+ *     "id" = "id",
+ *     "uuid" = "uuid",
+ *     "bundle" = "type",
+ *   },
+ *   links = {
+ *     "canonical" = "/entity_test_external/{entity_test_external}"
+ *   },
+ * )
+ */
+class EntityTestExternal extends EntityTest {
+
+  /**
+   * {@inheritdoc}
+   */
+  public function toUrl($rel = 'canonical', array $options = []) {
+    if ($rel === 'canonical') {
+      return Url::fromUri('http://example.com', $options);
+    }
+    return parent::toUrl($rel, $options);
+  }
+
+}
diff --git a/web/core/modules/system/tests/modules/form_test/src/Form/FormTestMachineNameValidationForm.php b/web/core/modules/system/tests/modules/form_test/src/Form/FormTestMachineNameValidationForm.php
index ff2dcaac582386cc1fbbd0682dec43d01e214689..81f3a864c8d362d0cde157e36c0eb57e9aaa33e9 100644
--- a/web/core/modules/system/tests/modules/form_test/src/Form/FormTestMachineNameValidationForm.php
+++ b/web/core/modules/system/tests/modules/form_test/src/Form/FormTestMachineNameValidationForm.php
@@ -121,6 +121,7 @@ public function buildAjaxSnackConfigureForm(array $form, FormStateInterface $for
    * Loading stub for machine name
    *
    * @param $machine_name
+   *
    * @return bool
    */
   public function load($machine_name) {
diff --git a/web/core/modules/system/tests/modules/module_autoload_test/module_autoload_test.module b/web/core/modules/system/tests/modules/module_autoload_test/module_autoload_test.module
new file mode 100644
index 0000000000000000000000000000000000000000..cf6983bc7f3e28de413d1180dce9f759b72b784d
--- /dev/null
+++ b/web/core/modules/system/tests/modules/module_autoload_test/module_autoload_test.module
@@ -0,0 +1,10 @@
+<?php
+
+/**
+ * @file
+ * Test module.
+ */
+
+use Drupal\module_autoload_test\SomeClass;
+
+define('MODULE_AUTOLOAD_TEST_CONSTANT', SomeClass::TEST);
diff --git a/web/core/modules/system/tests/modules/module_autoload_test/src/SomeClass.php b/web/core/modules/system/tests/modules/module_autoload_test/src/SomeClass.php
index 11993b71f48ec91e60da4c0104651a0a62e0c1dd..65529f23dca7e6871904b654f586198c12441699 100644
--- a/web/core/modules/system/tests/modules/module_autoload_test/src/SomeClass.php
+++ b/web/core/modules/system/tests/modules/module_autoload_test/src/SomeClass.php
@@ -4,6 +4,8 @@
 
 class SomeClass {
 
+  const TEST = '\Drupal\module_autoload_test\SomeClass::TEST';
+
   public function testMethod() {
     return 'Drupal\\module_autoload_test\\SomeClass::testMethod() was invoked.';
   }
diff --git a/web/core/modules/system/tests/modules/theme_test/src/EventSubscriber/ThemeTestSubscriber.php b/web/core/modules/system/tests/modules/theme_test/src/EventSubscriber/ThemeTestSubscriber.php
index 38fee503ec49ed84deee8ead252a604a9276c06a..53908cf158e2bdba4759bc2f202ab018caab2c94 100644
--- a/web/core/modules/system/tests/modules/theme_test/src/EventSubscriber/ThemeTestSubscriber.php
+++ b/web/core/modules/system/tests/modules/theme_test/src/EventSubscriber/ThemeTestSubscriber.php
@@ -78,11 +78,11 @@ public function onRequest(GetResponseEvent $event) {
    */
   public function onView(GetResponseEvent $event) {
     $current_route = $this->currentRouteMatch->getRouteName();
-    $entity_autcomplete_route = [
+    $entity_autocomplete_route = [
       'system.entity_autocomplete',
     ];
 
-    if (in_array($current_route, $entity_autcomplete_route)) {
+    if (in_array($current_route, $entity_autocomplete_route)) {
       if ($this->container->initialized('theme.registry')) {
         throw new \Exception('registry initialized');
       }
diff --git a/web/core/modules/system/tests/modules/token_test/token_test.routing.yml b/web/core/modules/system/tests/modules/token_test/token_test.routing.yml
index 5fc239ad491898280e7a6fa2768ccaa64de26f38..0de9339c2918d98660281899d53d555a439bcf4b 100644
--- a/web/core/modules/system/tests/modules/token_test/token_test.routing.yml
+++ b/web/core/modules/system/tests/modules/token_test/token_test.routing.yml
@@ -5,7 +5,7 @@ token_test.test:
   requirements:
     _access: 'TRUE'
 token_test.test_without_bubbleable_metadata:
-  path: token-test-without-bubleable-metadata/{node}
+  path: token-test-without-bubbleable-metadata/{node}
   defaults:
     _controller: Drupal\token_test\Controller\TestController::tokenReplaceWithoutPassedBubbleableMetadata
   requirements:
diff --git a/web/core/modules/system/tests/src/Functional/Batch/ProcessingTest.php b/web/core/modules/system/tests/src/Functional/Batch/ProcessingTest.php
index 37fd7eb1d9ee29315f7191f414dc1e68d5139f62..634c8859b8651cb60b2e549b98e3fedb75ea5dd7 100644
--- a/web/core/modules/system/tests/src/Functional/Batch/ProcessingTest.php
+++ b/web/core/modules/system/tests/src/Functional/Batch/ProcessingTest.php
@@ -54,14 +54,17 @@ public function testBatchForm() {
     // Batch 0: no operation.
     $edit = ['batch' => 'batch_0'];
     $this->drupalPostForm('batch-test', $edit, 'Submit');
-    $this->assertNoEscaped('<', 'No escaped markup is present.');
+    // If there is any escaped markup it will include at least an escaped '<'
+    // character, so assert on each page that there is no escaped '<' as a way
+    // of verifying that no markup is incorrectly escaped.
+    $this->assertNoEscaped('<');
     $this->assertBatchMessages($this->_resultMessages('batch_0'), 'Batch with no operation performed successfully.');
     $this->assertText('Redirection successful.', 'Redirection after batch execution is correct.');
 
     // Batch 1: several simple operations.
     $edit = ['batch' => 'batch_1'];
     $this->drupalPostForm('batch-test', $edit, 'Submit');
-    $this->assertNoEscaped('<', 'No escaped markup is present.');
+    $this->assertNoEscaped('<');
     $this->assertBatchMessages($this->_resultMessages('batch_1'), 'Batch with simple operations performed successfully.');
     $this->assertEqual(batch_test_stack(), $this->_resultStack('batch_1'), 'Execution order was correct.');
     $this->assertText('Redirection successful.', 'Redirection after batch execution is correct.');
@@ -69,7 +72,7 @@ public function testBatchForm() {
     // Batch 2: one multistep operation.
     $edit = ['batch' => 'batch_2'];
     $this->drupalPostForm('batch-test', $edit, 'Submit');
-    $this->assertNoEscaped('<', 'No escaped markup is present.');
+    $this->assertNoEscaped('<');
     $this->assertBatchMessages($this->_resultMessages('batch_2'), 'Batch with multistep operation performed successfully.');
     $this->assertEqual(batch_test_stack(), $this->_resultStack('batch_2'), 'Execution order was correct.');
     $this->assertText('Redirection successful.', 'Redirection after batch execution is correct.');
@@ -77,7 +80,7 @@ public function testBatchForm() {
     // Batch 3: simple + multistep combined.
     $edit = ['batch' => 'batch_3'];
     $this->drupalPostForm('batch-test', $edit, 'Submit');
-    $this->assertNoEscaped('<', 'No escaped markup is present.');
+    $this->assertNoEscaped('<');
     $this->assertBatchMessages($this->_resultMessages('batch_3'), 'Batch with simple and multistep operations performed successfully.');
     $this->assertEqual(batch_test_stack(), $this->_resultStack('batch_3'), 'Execution order was correct.');
     $this->assertText('Redirection successful.', 'Redirection after batch execution is correct.');
@@ -85,7 +88,7 @@ public function testBatchForm() {
     // Batch 4: nested batch.
     $edit = ['batch' => 'batch_4'];
     $this->drupalPostForm('batch-test', $edit, 'Submit');
-    $this->assertNoEscaped('<', 'No escaped markup is present.');
+    $this->assertNoEscaped('<');
     $this->assertBatchMessages($this->_resultMessages('batch_4'), 'Nested batch performed successfully.');
     $this->assertEqual(batch_test_stack(), $this->_resultStack('batch_4'), 'Execution order was correct.');
     $this->assertText('Redirection successful.', 'Redirection after batch execution is correct.');
@@ -121,7 +124,7 @@ public function testBatchForm() {
    */
   public function testBatchFormMultistep() {
     $this->drupalGet('batch-test/multistep');
-    $this->assertNoEscaped('<', 'No escaped markup is present.');
+    $this->assertNoEscaped('<');
     $this->assertText('step 1', 'Form is displayed in step 1.');
 
     // First step triggers batch 1.
@@ -129,14 +132,14 @@ public function testBatchFormMultistep() {
     $this->assertBatchMessages($this->_resultMessages('batch_1'), 'Batch for step 1 performed successfully.');
     $this->assertEqual(batch_test_stack(), $this->_resultStack('batch_1'), 'Execution order was correct.');
     $this->assertText('step 2', 'Form is displayed in step 2.');
-    $this->assertNoEscaped('<', 'No escaped markup is present.');
+    $this->assertNoEscaped('<');
 
     // Second step triggers batch 2.
     $this->drupalPostForm(NULL, [], 'Submit');
     $this->assertBatchMessages($this->_resultMessages('batch_2'), 'Batch for step 2 performed successfully.');
     $this->assertEqual(batch_test_stack(), $this->_resultStack('batch_2'), 'Execution order was correct.');
     $this->assertText('Redirection successful.', 'Redirection after batch execution is correct.');
-    $this->assertNoEscaped('<', 'No escaped markup is present.');
+    $this->assertNoEscaped('<');
 
     // Extra query arguments will trigger logic that will add them to the
     // redirect URL. Make sure they are persisted.
diff --git a/web/core/modules/system/tests/src/Functional/Cache/CacheTestBase.php b/web/core/modules/system/tests/src/Functional/Cache/CacheTestBase.php
index f1439eaeb22c653be7f253ab0452cd701b54dd1a..08c4db5e8ab94d19685113d95b0fd31b16e0f5c0 100644
--- a/web/core/modules/system/tests/src/Functional/Cache/CacheTestBase.php
+++ b/web/core/modules/system/tests/src/Functional/Cache/CacheTestBase.php
@@ -22,6 +22,7 @@ abstract class CacheTestBase extends BrowserTestBase {
    *   The variable the cache should contain.
    * @param $bin
    *   The bin the cache item was stored in.
+   *
    * @return
    *   TRUE on pass, FALSE on fail.
    */
diff --git a/web/core/modules/system/tests/src/Functional/Common/FormatDateTest.php b/web/core/modules/system/tests/src/Functional/Common/FormatDateTest.php
index b2ff7b1a00e1c4ea1305e20f09256ff5c36e8a1a..b0aae40e6a1b4f074581b3db31e3e5ec49da103a 100644
--- a/web/core/modules/system/tests/src/Functional/Common/FormatDateTest.php
+++ b/web/core/modules/system/tests/src/Functional/Common/FormatDateTest.php
@@ -21,7 +21,9 @@ class FormatDateTest extends BrowserTestBase {
    */
   public function testAdminDefinedFormatDate() {
     // Create and log in an admin user.
-    $this->drupalLogin($this->drupalCreateUser(['administer site configuration']));
+    $this->drupalLogin($this->drupalCreateUser([
+      'administer site configuration',
+    ]));
 
     // Add new date format.
     $edit = [
diff --git a/web/core/modules/system/tests/src/Functional/Common/UrlTest.php b/web/core/modules/system/tests/src/Functional/Common/UrlTest.php
index cc9e4fbe3c1d318f4d3428ef27072781d11b193c..693dc0162caa62cbf5cdd2f65ca44b7e158a1709 100644
--- a/web/core/modules/system/tests/src/Functional/Common/UrlTest.php
+++ b/web/core/modules/system/tests/src/Functional/Common/UrlTest.php
@@ -313,6 +313,11 @@ public function testExternalUrls() {
     $result = Url::fromUri($url)->toString();
     $this->assertEqual($url, $result);
 
+    // Verify external URL can contain a query string with an integer key.
+    $url = $test_url . '?120=1';
+    $result = Url::fromUri($url)->toString();
+    $this->assertEqual($url, $result);
+
     // Verify external URL can be extended with a query string.
     $url = $test_url;
     $query = ['awesome' => 'drupal'];
diff --git a/web/core/modules/system/tests/src/Functional/Entity/EntityAddUITest.php b/web/core/modules/system/tests/src/Functional/Entity/EntityAddUITest.php
index 747cfb639e48ad9bfb63770625d1b5bf817d0e09..f8157ca5ce2d304e4756a409dffee45f265e7b9e 100644
--- a/web/core/modules/system/tests/src/Functional/Entity/EntityAddUITest.php
+++ b/web/core/modules/system/tests/src/Functional/Entity/EntityAddUITest.php
@@ -48,7 +48,7 @@ public function testAddPageWithBundleEntities() {
     // has the necessary permissions.
     $this->drupalGet('/entity_test_with_bundle/add');
     $this->assertText('There is no test entity bundle yet.');
-    $this->assertLink('Add a new test entity bundle.');
+    $this->assertSession()->linkExists('Add a new test entity bundle.');
 
     // One bundle exists, confirm redirection to the add-form.
     EntityTestBundle::create([
@@ -67,8 +67,8 @@ public function testAddPageWithBundleEntities() {
     ])->save();
     $this->drupalGet('/entity_test_with_bundle/add');
 
-    $this->assertLink('Test label');
-    $this->assertLink('Test2 label');
+    $this->assertSession()->linkExists('Test label');
+    $this->assertSession()->linkExists('Test2 label');
     $this->assertText('My test description');
     $this->assertText('My test2 description');
 
@@ -93,9 +93,9 @@ public function testAddPageWithBundleEntities() {
       'description' => 'My test3 description',
     ])->save();
     $this->drupalGet('/entity_test_with_bundle/add');
-    $this->assertLink('Test label');
-    $this->assertLink('Test2 label');
-    $this->assertNoLink('Test3 label');
+    $this->assertSession()->linkExists('Test label');
+    $this->assertSession()->linkExists('Test2 label');
+    $this->assertSession()->linkNotExists('Test3 label');
     $this->clickLink(t('Test label'));
     $this->assertSession()->statusCodeEquals(200);
 
@@ -114,10 +114,10 @@ public function testAddPageWithBundleEntities() {
     // does not have bundle specific permissions. The add bundle message is
     // present as the user has bundle create permissions.
     $this->drupalGet('/entity_test_with_bundle/add');
-    $this->assertNoLink('Test label');
-    $this->assertNoLink('Test2 label');
-    $this->assertNoLink('Test3 label');
-    $this->assertLink('Add a new test entity bundle.');
+    $this->assertSession()->linkNotExists('Test label');
+    $this->assertSession()->linkNotExists('Test2 label');
+    $this->assertSession()->linkNotExists('Test3 label');
+    $this->assertSession()->linkExists('Add a new test entity bundle.');
   }
 
   /**
@@ -141,8 +141,8 @@ public function testAddPageWithoutBundleEntities() {
     entity_test_create_bundle('test2', 'Test2 label', 'entity_test_mul');
     $this->drupalGet('/entity_test_mul/add');
 
-    $this->assertLink('Test label');
-    $this->assertLink('Test2 label');
+    $this->assertSession()->linkExists('Test label');
+    $this->assertSession()->linkExists('Test2 label');
 
     $this->clickLink('Test2 label');
     $this->drupalGet('/entity_test_mul/add/test2');
diff --git a/web/core/modules/system/tests/src/Functional/Entity/EntityCacheTagsTestBase.php b/web/core/modules/system/tests/src/Functional/Entity/EntityCacheTagsTestBase.php
index 5ec1384a949350785fdcb5c20308c856b9f98ca4..31544aed6579e0d2941a974e54af7e571b96d8da 100644
--- a/web/core/modules/system/tests/src/Functional/Entity/EntityCacheTagsTestBase.php
+++ b/web/core/modules/system/tests/src/Functional/Entity/EntityCacheTagsTestBase.php
@@ -164,6 +164,7 @@ protected function getAdditionalCacheContextsForEntity(EntityInterface $entity)
    *
    * @param \Drupal\Core\Entity\EntityInterface $entity
    *   The entity to be tested, as created by createEntity().
+   *
    * @return array
    *   An array of the additional cache tags.
    *
diff --git a/web/core/modules/system/tests/src/Functional/Entity/EntityFormTest.php b/web/core/modules/system/tests/src/Functional/Entity/EntityFormTest.php
index 02b8929a05a219156d218224fa64a95a5c02c072..628e351cfce1564bcd4aaa362be1b1e9e9e3c186 100644
--- a/web/core/modules/system/tests/src/Functional/Entity/EntityFormTest.php
+++ b/web/core/modules/system/tests/src/Functional/Entity/EntityFormTest.php
@@ -27,7 +27,10 @@ class EntityFormTest extends BrowserTestBase {
 
   protected function setUp() {
     parent::setUp();
-    $web_user = $this->drupalCreateUser(['administer entity_test content', 'view test entity']);
+    $web_user = $this->drupalCreateUser([
+      'administer entity_test content',
+      'view test entity',
+    ]);
     $this->drupalLogin($web_user);
 
     // Add a language.
diff --git a/web/core/modules/system/tests/src/Functional/Entity/EntityOperationsTest.php b/web/core/modules/system/tests/src/Functional/Entity/EntityOperationsTest.php
index 07d58b6517dac3d50491eaabf11b53519c6ab425..d88d76879bd699a1735bfc29944e837735d7342c 100644
--- a/web/core/modules/system/tests/src/Functional/Entity/EntityOperationsTest.php
+++ b/web/core/modules/system/tests/src/Functional/Entity/EntityOperationsTest.php
@@ -42,7 +42,7 @@ public function testEntityOperationAlter() {
     $roles = user_roles();
     foreach ($roles as $role) {
       $this->assertLinkByHref($role->toUrl()->toString() . '/test_operation');
-      $this->assertLink(new FormattableMarkup('Test Operation: @label', ['@label' => $role->label()]));
+      $this->assertSession()->linkExists(new FormattableMarkup('Test Operation: @label', ['@label' => $role->label()]));
     }
   }
 
diff --git a/web/core/modules/system/tests/src/Functional/Entity/EntityTranslationFormTest.php b/web/core/modules/system/tests/src/Functional/Entity/EntityTranslationFormTest.php
index 7e206f7a575e900ed582dcf6dfa8a63f5988d071..ac3589849742977c840868c4011e5b8dc205b569 100644
--- a/web/core/modules/system/tests/src/Functional/Entity/EntityTranslationFormTest.php
+++ b/web/core/modules/system/tests/src/Functional/Entity/EntityTranslationFormTest.php
@@ -52,7 +52,11 @@ protected function setUp() {
   public function testEntityFormLanguage() {
     $this->drupalCreateContentType(['type' => 'page', 'name' => 'Basic page']);
 
-    $web_user = $this->drupalCreateUser(['create page content', 'edit own page content', 'administer content types']);
+    $web_user = $this->drupalCreateUser([
+      'create page content',
+      'edit own page content',
+      'administer content types',
+    ]);
     $this->drupalLogin($web_user);
 
     // Create a node with language LanguageInterface::LANGCODE_NOT_SPECIFIED.
diff --git a/web/core/modules/system/tests/src/Functional/File/ConfigTest.php b/web/core/modules/system/tests/src/Functional/File/ConfigTest.php
index f44e8a924a869c5951847a68bec082fddf03c18a..cac94da53ef07e45b3e6b3cc243cb49446f3221e 100644
--- a/web/core/modules/system/tests/src/Functional/File/ConfigTest.php
+++ b/web/core/modules/system/tests/src/Functional/File/ConfigTest.php
@@ -18,7 +18,9 @@ class ConfigTest extends BrowserTestBase {
 
   protected function setUp() {
     parent::setUp();
-    $this->drupalLogin($this->drupalCreateUser(['administer site configuration']));
+    $this->drupalLogin($this->drupalCreateUser([
+      'administer site configuration',
+    ]));
   }
 
   /**
diff --git a/web/core/modules/system/tests/src/Functional/Form/ElementsVerticalTabsTest.php b/web/core/modules/system/tests/src/Functional/Form/ElementsVerticalTabsTest.php
index e90c4dfe3d9904a4b47fe8b4cdb05b8f321f4482..27f18e800eca8a0c99b45124f6458c3744a425c8 100644
--- a/web/core/modules/system/tests/src/Functional/Form/ElementsVerticalTabsTest.php
+++ b/web/core/modules/system/tests/src/Functional/Form/ElementsVerticalTabsTest.php
@@ -42,7 +42,9 @@ class ElementsVerticalTabsTest extends BrowserTestBase {
   protected function setUp() {
     parent::setUp();
 
-    $this->adminUser = $this->drupalCreateUser(['access vertical_tab_test tabs']);
+    $this->adminUser = $this->drupalCreateUser([
+      'access vertical_tab_test tabs',
+    ]);
     $this->webUser = $this->drupalCreateUser();
     $this->drupalLogin($this->adminUser);
   }
diff --git a/web/core/modules/system/tests/src/Functional/Form/ModulesListFormWebTest.php b/web/core/modules/system/tests/src/Functional/Form/ModulesListFormWebTest.php
index 70af48083beb18ac383f8adb9404f17fbfe12fad..f1eeee7426a7f3f602dae3d0d4282f890d1b8625 100644
--- a/web/core/modules/system/tests/src/Functional/Form/ModulesListFormWebTest.php
+++ b/web/core/modules/system/tests/src/Functional/Form/ModulesListFormWebTest.php
@@ -27,7 +27,10 @@ class ModulesListFormWebTest extends BrowserTestBase {
   protected function setUp() {
     parent::setUp();
     \Drupal::state()->set('system_test.module_hidden', FALSE);
-    $this->drupalLogin($this->drupalCreateUser(['administer modules', 'administer permissions']));
+    $this->drupalLogin($this->drupalCreateUser([
+      'administer modules',
+      'administer permissions',
+    ]));
   }
 
   /**
diff --git a/web/core/modules/system/tests/src/Functional/Menu/BreadcrumbTest.php b/web/core/modules/system/tests/src/Functional/Menu/BreadcrumbTest.php
index b1b4fc137f4443f30e78c708b6163dbabe340311..fc4431d51bc4b82d33ca3d9d5dbcdd57378c511f 100644
--- a/web/core/modules/system/tests/src/Functional/Menu/BreadcrumbTest.php
+++ b/web/core/modules/system/tests/src/Functional/Menu/BreadcrumbTest.php
@@ -154,9 +154,9 @@ public function testBreadCrumbs() {
     $trail = $home;
     $this->assertBreadcrumb("node/$nid1", $trail);
     // Also verify that the node does not appear elsewhere (e.g., menu trees).
-    $this->assertNoLink($node1->getTitle());
+    $this->assertSession()->linkNotExists($node1->getTitle());
     // Also verify that the node does not appear elsewhere (e.g., menu trees).
-    $this->assertNoLink($node1->getTitle());
+    $this->assertSession()->linkNotExists($node1->getTitle());
 
     $trail += [
       "node/$nid1" => $node1->getTitle(),
@@ -286,7 +286,8 @@ public function testBreadCrumbs() {
         $link_path => $link->getTitle(),
       ];
       $this->assertBreadcrumb($link_path, $trail, $term->getName(), $tree);
-      $this->assertEscaped($parent->getTitle(), 'Tagged node found.');
+      // Ensure that the tagged node is found.
+      $this->assertEscaped($parent->getTitle());
 
       // Additionally make sure that this link appears only once; i.e., the
       // untranslated menu links automatically generated from menu router items
diff --git a/web/core/modules/system/tests/src/Functional/Menu/LocalTasksTest.php b/web/core/modules/system/tests/src/Functional/Menu/LocalTasksTest.php
index 3ca2fe911fae1e331c2383de5b5665d1c877039e..e0fd44abb80f953b48897c3a434c9585615802ee 100644
--- a/web/core/modules/system/tests/src/Functional/Menu/LocalTasksTest.php
+++ b/web/core/modules/system/tests/src/Functional/Menu/LocalTasksTest.php
@@ -79,7 +79,7 @@ protected function assertLocalTasks(array $routes, $level = 0) {
    * @return bool
    *   TRUE if the local task exists on the page.
    */
-  protected function assertLocalTaskAppers($title) {
+  protected function assertLocalTaskAppears($title) {
     // SimpleXML gives us the unescaped text, not the actual escaped markup,
     // so use a pattern instead to check the raw content.
     // This behavior is a bug in libxml, see
@@ -116,9 +116,9 @@ public function testPluginLocalTask() {
 
     // Verify that script tags are escaped on output.
     $title = Html::escape("Task 1 <script>alert('Welcome to the jungle!')</script>");
-    $this->assertLocalTaskAppers($title);
+    $this->assertLocalTaskAppears($title);
     $title = Html::escape("<script>alert('Welcome to the derived jungle!')</script>");
-    $this->assertLocalTaskAppers($title);
+    $this->assertLocalTaskAppears($title);
 
     // Verify that local tasks appear as defined in the router.
     $this->drupalGet(Url::fromRoute('menu_test.local_task_test_tasks_view'));
@@ -130,7 +130,7 @@ public function testPluginLocalTask() {
     ]);
 
     $title = Html::escape("<script>alert('Welcome to the jungle!')</script>");
-    $this->assertLocalTaskAppers($title);
+    $this->assertLocalTaskAppears($title);
 
     // Ensure the view tab is active.
     $result = $this->xpath('//ul[contains(@class, "tabs")]//li[contains(@class, "active")]/a');
diff --git a/web/core/modules/system/tests/src/Functional/Menu/MenuAccessTest.php b/web/core/modules/system/tests/src/Functional/Menu/MenuAccessTest.php
index 36eb42423911bb8a3f02cb3b181c5626a853649e..dadfae0dba3af9d35e59851383314a0cd1411afc 100644
--- a/web/core/modules/system/tests/src/Functional/Menu/MenuAccessTest.php
+++ b/web/core/modules/system/tests/src/Functional/Menu/MenuAccessTest.php
@@ -42,11 +42,11 @@ public function testMenuBlockLinksAccessCheck() {
     $this->drupalPlaceBlock('system_menu_block:account');
     // Test that there's link rendered on the route.
     $this->drupalGet('menu_test_access_check_session');
-    $this->assertLink('Test custom route access check');
+    $this->assertSession()->linkExists('Test custom route access check');
     // Page is still accessible but there should be no menu link.
     $this->drupalGet('menu_test_access_check_session');
     $this->assertSession()->statusCodeEquals(200);
-    $this->assertNoLink('Test custom route access check');
+    $this->assertSession()->linkNotExists('Test custom route access check');
     // Test that page is no more accessible.
     $this->drupalGet('menu_test_access_check_session');
     $this->assertSession()->statusCodeEquals(403);
diff --git a/web/core/modules/system/tests/src/Functional/Menu/MenuRouterTest.php b/web/core/modules/system/tests/src/Functional/Menu/MenuRouterTest.php
index 1da42f1371fc44640837691cf60bdb23776b8094..8c435c85b46e77b56bb8725dabfd479ec3d38452 100644
--- a/web/core/modules/system/tests/src/Functional/Menu/MenuRouterTest.php
+++ b/web/core/modules/system/tests/src/Functional/Menu/MenuRouterTest.php
@@ -65,10 +65,10 @@ protected function doTestHookMenuIntegration() {
     // Confirm correct controller activated.
     $this->assertText('test1');
     // Confirm local task links are displayed.
-    $this->assertLink('Local task A');
-    $this->assertLink('Local task B');
-    $this->assertNoLink('Local task C');
-    $this->assertEscaped("<script>alert('Welcome to the jungle!')</script>", ENT_QUOTES, 'UTF-8');
+    $this->assertSession()->linkExists('Local task A');
+    $this->assertSession()->linkExists('Local task B');
+    $this->assertSession()->linkNotExists('Local task C');
+    $this->assertEscaped("<script>alert('Welcome to the jungle!')</script>");
     // Confirm correct local task href.
     $this->assertLinkByHref(Url::fromRoute('menu_test.router_test1', ['bar' => $machine_name])->toString());
     $this->assertLinkByHref(Url::fromRoute('menu_test.router_test2', ['bar' => $machine_name])->toString());
diff --git a/web/core/modules/system/tests/src/Functional/Module/ClassLoaderTest.php b/web/core/modules/system/tests/src/Functional/Module/ClassLoaderTest.php
index cb855e34a90f92c69131c6944307f9aa1d749acb..c22247b63fa32c01440df0162c713177ef492603 100644
--- a/web/core/modules/system/tests/src/Functional/Module/ClassLoaderTest.php
+++ b/web/core/modules/system/tests/src/Functional/Module/ClassLoaderTest.php
@@ -2,6 +2,7 @@
 
 namespace Drupal\Tests\system\Functional\Module;
 
+use Drupal\module_autoload_test\SomeClass;
 use Drupal\Tests\BrowserTestBase;
 
 /**
@@ -96,4 +97,19 @@ public function testMultipleModules() {
     $this->assertTrue(\Drupal::moduleHandler()->moduleExists('module_install_class_loader_test2'), 'The module_install_class_loader_test2 module has been installed.');
   }
 
+  /**
+   * Tests that .module files can use class constants in main section.
+   */
+  public function testAutoloadFromModuleFile() {
+    $this->assertFalse(defined('MODULE_AUTOLOAD_TEST_CONSTANT'));
+    $this->drupalLogin($this->rootUser);
+    $edit = [
+      "modules[module_autoload_test][enable]" => TRUE,
+    ];
+    $this->drupalPostForm('admin/modules', $edit, t('Install'));
+    $this->assertSession()->statusCodeEquals(200);
+    $this->resetAll();
+    $this->assertSame(SomeClass::TEST, MODULE_AUTOLOAD_TEST_CONSTANT);
+  }
+
 }
diff --git a/web/core/modules/system/tests/src/Functional/Module/ExperimentalModuleTest.php b/web/core/modules/system/tests/src/Functional/Module/ExperimentalModuleTest.php
index eba632f0f9c60b87baaa4c24cca60cca793b6a79..9608ca061cb1997bcff4aa014921f382a458c5b2 100644
--- a/web/core/modules/system/tests/src/Functional/Module/ExperimentalModuleTest.php
+++ b/web/core/modules/system/tests/src/Functional/Module/ExperimentalModuleTest.php
@@ -29,7 +29,10 @@ class ExperimentalModuleTest extends BrowserTestBase {
    */
   protected function setUp() {
     parent::setUp();
-    $this->adminUser = $this->drupalCreateUser(['access administration pages', 'administer modules']);
+    $this->adminUser = $this->drupalCreateUser([
+      'access administration pages',
+      'administer modules',
+    ]);
     $this->drupalLogin($this->adminUser);
   }
 
diff --git a/web/core/modules/system/tests/src/Functional/Module/InstallUninstallTest.php b/web/core/modules/system/tests/src/Functional/Module/InstallUninstallTest.php
index 5e69fcccf7b6cdfdf51db924f7791dad27a4eccc..ce0ea8ad80a7e1e9d2441add1851589348cf7634 100644
--- a/web/core/modules/system/tests/src/Functional/Module/InstallUninstallTest.php
+++ b/web/core/modules/system/tests/src/Functional/Module/InstallUninstallTest.php
@@ -358,7 +358,7 @@ protected function assertHelp($module, $name) {
     $this->drupalGet('admin/help/' . $module);
     $this->assertSession()->statusCodeEquals(200);
     $this->assertText($name . ' module', "'$name module' is on the help page for $module");
-    $this->assertLink('online documentation for the ' . $name . ' module', 0, "Correct online documentation link is in the help page for $module");
+    $this->assertSession()->linkExists('online documentation for the ' . $name . ' module', 0, "Correct online documentation link is in the help page for $module");
   }
 
   /**
diff --git a/web/core/modules/system/tests/src/Functional/Module/ModuleTestBase.php b/web/core/modules/system/tests/src/Functional/Module/ModuleTestBase.php
index 1e681859b6dc85322e90aa602b83c79810a91446..88c8d4c860c8f966e9ec5c25a4c38784355fc773 100644
--- a/web/core/modules/system/tests/src/Functional/Module/ModuleTestBase.php
+++ b/web/core/modules/system/tests/src/Functional/Module/ModuleTestBase.php
@@ -26,7 +26,10 @@ abstract class ModuleTestBase extends BrowserTestBase {
   protected function setUp() {
     parent::setUp();
 
-    $this->adminUser = $this->drupalCreateUser(['access administration pages', 'administer modules']);
+    $this->adminUser = $this->drupalCreateUser([
+      'access administration pages',
+      'administer modules',
+    ]);
     $this->drupalLogin($this->adminUser);
   }
 
diff --git a/web/core/modules/system/tests/src/Functional/System/AccessDeniedTest.php b/web/core/modules/system/tests/src/Functional/System/AccessDeniedTest.php
index 10c48ef8041d4a2d666fdb91ece8950bc4bb4405..c61d789c423cd7783b105b9c19c4d64f0569f618 100644
--- a/web/core/modules/system/tests/src/Functional/System/AccessDeniedTest.php
+++ b/web/core/modules/system/tests/src/Functional/System/AccessDeniedTest.php
@@ -36,7 +36,12 @@ protected function setUp() {
     $this->drupalPlaceBlock('page_title_block');
 
     // Create an administrative user.
-    $this->adminUser = $this->drupalCreateUser(['access administration pages', 'administer site configuration', 'link to any page', 'administer blocks']);
+    $this->adminUser = $this->drupalCreateUser([
+      'access administration pages',
+      'administer site configuration',
+      'link to any page',
+      'administer blocks',
+    ]);
     $this->adminUser->roles[] = 'administrator';
     $this->adminUser->save();
 
diff --git a/web/core/modules/system/tests/src/Functional/System/AdminTest.php b/web/core/modules/system/tests/src/Functional/System/AdminTest.php
index 1d11616bcac4605ee39776bd3839b62ca993a755..546cc222ffc889f40729ff141b430f19d0527b55 100644
--- a/web/core/modules/system/tests/src/Functional/System/AdminTest.php
+++ b/web/core/modules/system/tests/src/Functional/System/AdminTest.php
@@ -63,7 +63,7 @@ public function testAdminPages() {
     // Verify that all visible, top-level administration links are listed on
     // the main administration page.
     foreach ($this->getTopLevelMenuLinks() as $item) {
-      $this->assertLink($item->getTitle());
+      $this->assertSession()->linkExists($item->getTitle());
       $this->assertLinkByHref($item->getUrlObject()->toString());
       // The description should appear below the link.
       $this->assertText($item->getDescription());
diff --git a/web/core/modules/system/tests/src/Functional/System/DateTimeTest.php b/web/core/modules/system/tests/src/Functional/System/DateTimeTest.php
index 10a3bd98ccf69b6e72116792d037c7379638be61..8ae1d705941280be41c11e33033a6046ccafca74 100644
--- a/web/core/modules/system/tests/src/Functional/System/DateTimeTest.php
+++ b/web/core/modules/system/tests/src/Functional/System/DateTimeTest.php
@@ -159,7 +159,8 @@ public function testDateFormatConfiguration() {
     $date_format->save();
 
     $this->drupalGet(Url::fromRoute('entity.date_format.collection'));
-    $this->assertEscaped("<script>alert('XSS');</script>", 'The date format was properly escaped');
+    // Ensure that the date format is properly escaped.
+    $this->assertEscaped("<script>alert('XSS');</script>");
 
     // Add a new date format with HTML in it.
     $date_format_id = strtolower($this->randomMachineName(8));
@@ -216,7 +217,9 @@ public function testEnteringDateTimeViaSelectors() {
     $this->drupalLogout();
 
     // Now log in as a regular editor.
-    $this->drupalLogin($this->drupalCreateUser(['create page_with_date content']));
+    $this->drupalLogin($this->drupalCreateUser([
+      'create page_with_date content',
+    ]));
 
     $this->drupalGet('node/add/page_with_date');
     $edit = [
diff --git a/web/core/modules/system/tests/src/Functional/System/PageNotFoundTest.php b/web/core/modules/system/tests/src/Functional/System/PageNotFoundTest.php
index cea415863dd3a0f859760445c6520c68a53ae20c..f869b50ae3701666ea703f739b44d812a524decf 100644
--- a/web/core/modules/system/tests/src/Functional/System/PageNotFoundTest.php
+++ b/web/core/modules/system/tests/src/Functional/System/PageNotFoundTest.php
@@ -34,7 +34,10 @@ protected function setUp() {
     parent::setUp();
 
     // Create an administrative user.
-    $this->adminUser = $this->drupalCreateUser(['administer site configuration', 'link to any page']);
+    $this->adminUser = $this->drupalCreateUser([
+      'administer site configuration',
+      'link to any page',
+    ]);
     $this->adminUser->roles[] = 'administrator';
     $this->adminUser->save();
 
diff --git a/web/core/modules/system/tests/src/Functional/System/PageTitleTest.php b/web/core/modules/system/tests/src/Functional/System/PageTitleTest.php
index bc2ed2018824aa5c237f5e2cfa8bb84fd25fe60f..21c66ad2ecdce3b5c86d5bad7f6a28fd52bc9938 100644
--- a/web/core/modules/system/tests/src/Functional/System/PageTitleTest.php
+++ b/web/core/modules/system/tests/src/Functional/System/PageTitleTest.php
@@ -39,7 +39,13 @@ protected function setUp() {
 
     $this->drupalPlaceBlock('page_title_block');
 
-    $this->contentUser = $this->drupalCreateUser(['create page content', 'access content', 'administer themes', 'administer site configuration', 'link to any page']);
+    $this->contentUser = $this->drupalCreateUser([
+      'create page content',
+      'access content',
+      'administer themes',
+      'administer site configuration',
+      'link to any page',
+    ]);
     $this->drupalLogin($this->contentUser);
   }
 
diff --git a/web/core/modules/system/tests/src/Functional/System/SiteMaintenanceTest.php b/web/core/modules/system/tests/src/Functional/System/SiteMaintenanceTest.php
index b61390a7e6ee7124b75ca44fa599441808667534..d7d2474b59c7857d170675077ecd872e123b62fa 100644
--- a/web/core/modules/system/tests/src/Functional/System/SiteMaintenanceTest.php
+++ b/web/core/modules/system/tests/src/Functional/System/SiteMaintenanceTest.php
@@ -41,7 +41,10 @@ protected function setUp() {
     // Create a user allowed to access site in maintenance mode.
     $this->user = $this->drupalCreateUser(['access site in maintenance mode']);
     // Create an administrative user.
-    $this->adminUser = $this->drupalCreateUser(['administer site configuration', 'access site in maintenance mode']);
+    $this->adminUser = $this->drupalCreateUser([
+      'administer site configuration',
+      'access site in maintenance mode',
+    ]);
     $this->drupalLogin($this->adminUser);
   }
 
diff --git a/web/core/modules/system/tests/src/Functional/System/SystemAuthorizeTest.php b/web/core/modules/system/tests/src/Functional/System/SystemAuthorizeTest.php
index a8db1d76aabe620d29eba5f751e9c7946f74aa64..32024ade4becffa1f71599252d38ee32d2c80409 100644
--- a/web/core/modules/system/tests/src/Functional/System/SystemAuthorizeTest.php
+++ b/web/core/modules/system/tests/src/Functional/System/SystemAuthorizeTest.php
@@ -27,7 +27,9 @@ protected function setUp() {
     parent::setUp();
 
     // Create an administrator user.
-    $this->drupalLogin($this->drupalCreateUser(['administer software updates']));
+    $this->drupalLogin($this->drupalCreateUser([
+      'administer software updates',
+    ]));
   }
 
   /**
diff --git a/web/core/modules/system/tests/src/Functional/System/ThemeTest.php b/web/core/modules/system/tests/src/Functional/System/ThemeTest.php
index eff90ee1a4f4293bb9113ad3fd55189f981dd946..89e1d7a89b74fba6b7a53de56e7eacb46f9236b7 100644
--- a/web/core/modules/system/tests/src/Functional/System/ThemeTest.php
+++ b/web/core/modules/system/tests/src/Functional/System/ThemeTest.php
@@ -43,7 +43,13 @@ protected function setUp() {
 
     $this->drupalCreateContentType(['type' => 'page', 'name' => 'Basic page']);
 
-    $this->adminUser = $this->drupalCreateUser(['access administration pages', 'view the administration theme', 'administer themes', 'bypass node access', 'administer blocks']);
+    $this->adminUser = $this->drupalCreateUser([
+      'access administration pages',
+      'view the administration theme',
+      'administer themes',
+      'bypass node access',
+      'administer blocks',
+    ]);
     $this->drupalLogin($this->adminUser);
     $this->node = $this->drupalCreateNode();
     $this->drupalPlaceBlock('local_tasks_block');
@@ -202,16 +208,16 @@ public function testThemeSettings() {
     $this->drupalPlaceBlock('local_tasks_block', ['region' => 'header']);
     $this->drupalGet('admin/appearance/settings');
     $theme_handler = \Drupal::service('theme_handler');
-    $this->assertLink($theme_handler->getName('classy'));
-    $this->assertLink($theme_handler->getName('bartik'));
-    $this->assertNoLink($theme_handler->getName('stable'));
+    $this->assertSession()->linkExists($theme_handler->getName('classy'));
+    $this->assertSession()->linkExists($theme_handler->getName('bartik'));
+    $this->assertSession()->linkNotExists($theme_handler->getName('stable'));
 
     // If a hidden theme is an admin theme it should be viewable.
     \Drupal::configFactory()->getEditable('system.theme')->set('admin', 'stable')->save();
     \Drupal::service('router.builder')->rebuildIfNeeded();
     $this->drupalPlaceBlock('local_tasks_block', ['region' => 'header', 'theme' => 'stable']);
     $this->drupalGet('admin/appearance/settings');
-    $this->assertLink($theme_handler->getName('stable'));
+    $this->assertSession()->linkExists($theme_handler->getName('stable'));
     $this->drupalGet('admin/appearance/settings/stable');
     $this->assertSession()->statusCodeEquals(200);
 
diff --git a/web/core/modules/system/tests/src/Functional/System/TokenReplaceWebTest.php b/web/core/modules/system/tests/src/Functional/System/TokenReplaceWebTest.php
index de6edc66c00416b670f224c491b2c6fcb4439903..2e2664a25b7201064a5ddb1efd8e79caf2f5b10d 100644
--- a/web/core/modules/system/tests/src/Functional/System/TokenReplaceWebTest.php
+++ b/web/core/modules/system/tests/src/Functional/System/TokenReplaceWebTest.php
@@ -38,7 +38,7 @@ public function testTokens() {
     $this->assertCacheTags(['node:1', 'rendered', 'user:2']);
     $this->assertCacheContexts(['languages:language_interface', 'theme', 'url.query_args:' . MainContentViewSubscriber::WRAPPER_FORMAT, 'user']);
 
-    $this->drupalGet('token-test-without-bubleable-metadata/' . $node->id());
+    $this->drupalGet('token-test-without-bubbleable-metadata/' . $node->id());
     $this->assertText("Tokens: {$node->id()} {$account->id()}");
     $this->assertCacheTags(['node:1', 'rendered', 'user:2']);
     $this->assertCacheContexts(['languages:language_interface', 'theme', 'url.query_args:' . MainContentViewSubscriber::WRAPPER_FORMAT, 'user']);
diff --git a/web/core/modules/system/tests/src/Functional/System/TrustedHostsTest.php b/web/core/modules/system/tests/src/Functional/System/TrustedHostsTest.php
index 62ed131f67c77a45d3b456e45e0dd374adca8b6a..74292c02692e04442e338bfc3441d105fd0a9130 100644
--- a/web/core/modules/system/tests/src/Functional/System/TrustedHostsTest.php
+++ b/web/core/modules/system/tests/src/Functional/System/TrustedHostsTest.php
@@ -108,7 +108,7 @@ public function testShortcut() {
     $this->drupalPlaceBlock('shortcuts');
 
     $this->drupalGet('');
-    $this->assertLink($shortcut->label());
+    $this->assertSession()->linkExists($shortcut->label());
   }
 
 }
diff --git a/web/core/modules/system/tests/src/Functional/Theme/EntityFilteringThemeTest.php b/web/core/modules/system/tests/src/Functional/Theme/EntityFilteringThemeTest.php
index 130c8c41f47e146830e3f2fd26bd3b57cdfa05c4..2e2c6b2895acc7b17f15971bc84eeff3d970d48e 100644
--- a/web/core/modules/system/tests/src/Functional/Theme/EntityFilteringThemeTest.php
+++ b/web/core/modules/system/tests/src/Functional/Theme/EntityFilteringThemeTest.php
@@ -90,7 +90,10 @@ protected function setUp() {
     \Drupal::service('theme_installer')->install(array_keys($this->themes));
 
     // Create a test user.
-    $this->user = $this->drupalCreateUser(['access content', 'access user profiles']);
+    $this->user = $this->drupalCreateUser([
+      'access content',
+      'access user profiles',
+    ]);
     $this->user->name = $this->xssLabel;
     $this->user->save();
     $this->drupalLogin($this->user);
diff --git a/web/core/modules/system/tests/src/Functional/Theme/ExperimentalThemeTest.php b/web/core/modules/system/tests/src/Functional/Theme/ExperimentalThemeTest.php
index 01409642f53f6b4e3d51eeffada1e3b026bf0edd..1fad43e7d53206d358afb142332c206470521780 100644
--- a/web/core/modules/system/tests/src/Functional/Theme/ExperimentalThemeTest.php
+++ b/web/core/modules/system/tests/src/Functional/Theme/ExperimentalThemeTest.php
@@ -28,7 +28,10 @@ class ExperimentalThemeTest extends BrowserTestBase {
    */
   protected function setUp() {
     parent::setUp();
-    $this->adminUser = $this->drupalCreateUser(['access administration pages', 'administer themes']);
+    $this->adminUser = $this->drupalCreateUser([
+      'access administration pages',
+      'administer themes',
+    ]);
     $this->drupalLogin($this->adminUser);
   }
 
diff --git a/web/core/modules/system/tests/src/Functional/Theme/ThemeTokenTest.php b/web/core/modules/system/tests/src/Functional/Theme/ThemeTokenTest.php
index fe07bb50f3288cb66afbbba068c578862a1ebf4b..d3c8b42078f3a3e89839d9b813fc952a12783fa5 100644
--- a/web/core/modules/system/tests/src/Functional/Theme/ThemeTokenTest.php
+++ b/web/core/modules/system/tests/src/Functional/Theme/ThemeTokenTest.php
@@ -28,7 +28,10 @@ class ThemeTokenTest extends BrowserTestBase {
    */
   protected function setUp() {
     parent::setUp();
-    $account = $this->drupalCreateUser(['administer blocks', 'view the administration theme']);
+    $account = $this->drupalCreateUser([
+      'administer blocks',
+      'view the administration theme',
+    ]);
     $this->drupalLogin($account);
   }
 
diff --git a/web/core/modules/system/tests/src/Functional/UpdateSystem/InvalidUpdateHookTest.php b/web/core/modules/system/tests/src/Functional/UpdateSystem/InvalidUpdateHookTest.php
index c3771718d57f80405aed1e625eed1ec3904a9d87..6edaa58b964f3379124d571191392215eef42e2d 100644
--- a/web/core/modules/system/tests/src/Functional/UpdateSystem/InvalidUpdateHookTest.php
+++ b/web/core/modules/system/tests/src/Functional/UpdateSystem/InvalidUpdateHookTest.php
@@ -50,7 +50,9 @@ protected function setUp() {
     require_once $this->root . '/core/includes/update.inc';
 
     $this->updateUrl = $GLOBALS['base_url'] . '/update.php';
-    $this->updateUser = $this->drupalCreateUser(['administer software updates']);
+    $this->updateUser = $this->drupalCreateUser([
+      'administer software updates',
+    ]);
   }
 
   public function testInvalidUpdateHook() {
diff --git a/web/core/modules/system/tests/src/Functional/UpdateSystem/UpdatePathLastRemovedTest.php b/web/core/modules/system/tests/src/Functional/UpdateSystem/UpdatePathLastRemovedTest.php
index 9b6cc77a4ef42b6e3da6fe99c0fd3870dea6fa55..f51769ac4e54708097e745ca86145360dff14b12 100644
--- a/web/core/modules/system/tests/src/Functional/UpdateSystem/UpdatePathLastRemovedTest.php
+++ b/web/core/modules/system/tests/src/Functional/UpdateSystem/UpdatePathLastRemovedTest.php
@@ -46,7 +46,9 @@ protected function setUp() {
     require_once $this->root . '/core/includes/update.inc';
 
     $this->updateUrl = Url::fromRoute('system.db_update');
-    $this->updateUser = $this->drupalCreateUser(['administer software updates']);
+    $this->updateUser = $this->drupalCreateUser([
+      'administer software updates',
+    ]);
   }
 
   /**
diff --git a/web/core/modules/system/tests/src/Functional/UpdateSystem/UpdatePathTestBaseFilledTest.php b/web/core/modules/system/tests/src/Functional/UpdateSystem/UpdatePathTestBaseFilledTest.php
index 254a9d95cee4309d1061a7eb923d1138a0dd09d8..3aa73661e595b936c32751343780a695024f1024 100644
--- a/web/core/modules/system/tests/src/Functional/UpdateSystem/UpdatePathTestBaseFilledTest.php
+++ b/web/core/modules/system/tests/src/Functional/UpdateSystem/UpdatePathTestBaseFilledTest.php
@@ -103,7 +103,7 @@ public function testUpdatedSite() {
     // now that we're logged in.
     $this->drupalGet('node/8', ['language' => $spanish]);
     $this->assertText('Test 12');
-    $this->assertLink('drupal');
+    $this->assertSession()->linkExists('drupal');
 
     // Make sure the content for node 8 is still in the edit form.
     $this->drupalGet('node/8/edit');
@@ -135,7 +135,7 @@ public function testUpdatedSite() {
     $this->assertText('usuario_test');
     $this->assertRaw('druplicon.small');
     $this->assertText('Test file field');
-    $this->assertLink('test.txt');
+    $this->assertSession()->linkExists('test.txt');
 
     // Make sure the user is translated.
     $this->drupalGet('user/3/translations');
@@ -235,24 +235,24 @@ public function testUpdatedSite() {
     $this->drupalGet('admin/structure/types/manage/test_content_type/fields');
 
     // Make sure fields are the right type.
-    $this->assertLink('Text (formatted, long, with summary)');
-    $this->assertLink('Boolean');
-    $this->assertLink('Comments');
-    $this->assertLink('Date');
-    $this->assertLink('Email');
-    $this->assertLink('Link');
-    $this->assertLink('List (float)');
-    $this->assertLink('Telephone number');
-    $this->assertLink('Entity reference');
-    $this->assertLink('File');
-    $this->assertLink('Image');
-    $this->assertLink('Text (plain, long)');
-    $this->assertLink('List (text)');
-    $this->assertLink('Text (formatted, long)');
-    $this->assertLink('Text (plain)');
-    $this->assertLink('List (integer)');
-    $this->assertLink('Number (integer)');
-    $this->assertLink('Number (float)');
+    $this->assertSession()->linkExists('Text (formatted, long, with summary)');
+    $this->assertSession()->linkExists('Boolean');
+    $this->assertSession()->linkExists('Comments');
+    $this->assertSession()->linkExists('Date');
+    $this->assertSession()->linkExists('Email');
+    $this->assertSession()->linkExists('Link');
+    $this->assertSession()->linkExists('List (float)');
+    $this->assertSession()->linkExists('Telephone number');
+    $this->assertSession()->linkExists('Entity reference');
+    $this->assertSession()->linkExists('File');
+    $this->assertSession()->linkExists('Image');
+    $this->assertSession()->linkExists('Text (plain, long)');
+    $this->assertSession()->linkExists('List (text)');
+    $this->assertSession()->linkExists('Text (formatted, long)');
+    $this->assertSession()->linkExists('Text (plain)');
+    $this->assertSession()->linkExists('List (integer)');
+    $this->assertSession()->linkExists('Number (integer)');
+    $this->assertSession()->linkExists('Number (float)');
 
     // Make sure our form mode exists.
     $this->drupalGet('admin/structure/display-modes/form');
@@ -327,7 +327,7 @@ public function testUpdatedSite() {
 
     // Make sure the terms are still translated.
     $this->drupalGet('taxonomy/term/2/translations');
-    $this->assertLink('Test root term - Spanish');
+    $this->assertSession()->linkExists('Test root term - Spanish');
 
     // Make sure our contact form exists.
     $this->drupalGet('admin/structure/contact');
diff --git a/web/core/modules/system/tests/src/Functional/UpdateSystem/UpdateRemovedPostUpdateTest.php b/web/core/modules/system/tests/src/Functional/UpdateSystem/UpdateRemovedPostUpdateTest.php
index 96f1559a0505b638cfde90af078d805ab493fc72..b6dfc1a5dee42e381c49417ad00a6d826f445c32 100644
--- a/web/core/modules/system/tests/src/Functional/UpdateSystem/UpdateRemovedPostUpdateTest.php
+++ b/web/core/modules/system/tests/src/Functional/UpdateSystem/UpdateRemovedPostUpdateTest.php
@@ -56,7 +56,9 @@ protected function setUp() {
       ->execute();
 
     $this->updateUrl = Url::fromRoute('system.db_update');
-    $this->updateUser = $this->drupalCreateUser(['administer software updates']);
+    $this->updateUser = $this->drupalCreateUser([
+      'administer software updates',
+    ]);
   }
 
   /**
diff --git a/web/core/modules/system/tests/src/Functional/UpdateSystem/UpdateSchemaTest.php b/web/core/modules/system/tests/src/Functional/UpdateSystem/UpdateSchemaTest.php
index c075e1848bc8d40f6092c58deb887cc1be7c924f..9f2811c2d61e4c19f7c08b341b76b3636aaf81ce 100644
--- a/web/core/modules/system/tests/src/Functional/UpdateSystem/UpdateSchemaTest.php
+++ b/web/core/modules/system/tests/src/Functional/UpdateSystem/UpdateSchemaTest.php
@@ -45,7 +45,10 @@ protected function setUp() {
     parent::setUp();
 
     require_once $this->root . '/core/includes/update.inc';
-    $this->user = $this->drupalCreateUser(['administer software updates', 'access site in maintenance mode']);
+    $this->user = $this->drupalCreateUser([
+      'administer software updates',
+      'access site in maintenance mode',
+    ]);
     $this->updateUrl = Url::fromRoute('system.db_update');
   }
 
diff --git a/web/core/modules/system/tests/src/Functional/UpdateSystem/UpdateScriptTest.php b/web/core/modules/system/tests/src/Functional/UpdateSystem/UpdateScriptTest.php
index 7c3c3bff158e71d0c425d1b89f16da07b8a20c2f..5cb492dfb34bbff7d4743588fc9470697329a6a0 100644
--- a/web/core/modules/system/tests/src/Functional/UpdateSystem/UpdateScriptTest.php
+++ b/web/core/modules/system/tests/src/Functional/UpdateSystem/UpdateScriptTest.php
@@ -86,7 +86,7 @@ public function testUpdateAccess() {
 
     // Check that a link to the update page is not accessible to regular users.
     $this->drupalGet('/update-script-test/database-updates-menu-item');
-    $this->assertNoLink('Run database updates');
+    $this->assertSession()->linkNotExists('Run database updates');
 
     // Try accessing update.php as an anonymous user.
     $this->drupalLogout();
@@ -96,7 +96,7 @@ public function testUpdateAccess() {
     // Check that a link to the update page is not accessible to anonymous
     // users.
     $this->drupalGet('/update-script-test/database-updates-menu-item');
-    $this->assertNoLink('Run database updates');
+    $this->assertSession()->linkNotExists('Run database updates');
 
     // Access the update page with the proper permission.
     $this->drupalLogin($this->updateUser);
@@ -106,7 +106,7 @@ public function testUpdateAccess() {
     // Check that a link to the update page is accessible to users with proper
     // permissions.
     $this->drupalGet('/update-script-test/database-updates-menu-item');
-    $this->assertLink('Run database updates');
+    $this->assertSession()->linkExists('Run database updates');
 
     // Access the update page as user 1.
     $this->drupalLogin($this->rootUser);
@@ -115,7 +115,7 @@ public function testUpdateAccess() {
 
     // Check that a link to the update page is accessible to user 1.
     $this->drupalGet('/update-script-test/database-updates-menu-item');
-    $this->assertLink('Run database updates');
+    $this->assertSession()->linkExists('Run database updates');
   }
 
   /**
@@ -519,19 +519,22 @@ public function testNoUpdateFunctionality() {
     $this->updateRequirementsProblem();
     $this->clickLink(t('Continue'));
     $this->assertText(t('No pending updates.'));
-    $this->assertNoLink('Administration pages');
+    $this->assertSession()->linkNotExists('Administration pages');
     $this->assertEmpty($this->xpath('//main//a[contains(@href, :href)]', [':href' => 'update.php']));
     $this->clickLink('Front page');
     $this->assertSession()->statusCodeEquals(200);
 
     // Click through update.php with 'access administration pages' permission.
-    $admin_user = $this->drupalCreateUser(['administer software updates', 'access administration pages']);
+    $admin_user = $this->drupalCreateUser([
+      'administer software updates',
+      'access administration pages',
+    ]);
     $this->drupalLogin($admin_user);
     $this->drupalGet($this->updateUrl, ['external' => TRUE]);
     $this->updateRequirementsProblem();
     $this->clickLink(t('Continue'));
     $this->assertText(t('No pending updates.'));
-    $this->assertLink('Administration pages');
+    $this->assertSession()->linkExists('Administration pages');
     $this->assertEmpty($this->xpath('//main//a[contains(@href, :href)]', [':href' => 'update.php']));
     $this->clickLink('Administration pages');
     $this->assertSession()->statusCodeEquals(200);
@@ -558,7 +561,12 @@ public function testSuccessfulUpdateFunctionality() {
 
     // Click through update.php with 'access administration pages' and
     // 'access site reports' permissions.
-    $admin_user = $this->drupalCreateUser(['administer software updates', 'access administration pages', 'access site reports', 'access site in maintenance mode']);
+    $admin_user = $this->drupalCreateUser([
+      'administer software updates',
+      'access administration pages',
+      'access site reports',
+      'access site in maintenance mode',
+    ]);
     $this->drupalLogin($admin_user);
     $this->drupalGet($this->updateUrl, ['external' => TRUE]);
     $this->updateRequirementsProblem();
@@ -566,8 +574,8 @@ public function testSuccessfulUpdateFunctionality() {
     $this->clickLink(t('Apply pending updates'));
     $this->checkForMetaRefresh();
     $this->assertText('Updates were attempted.');
-    $this->assertLink('logged');
-    $this->assertLink('Administration pages');
+    $this->assertSession()->linkExists('logged');
+    $this->assertSession()->linkExists('Administration pages');
     $this->assertEmpty($this->xpath('//main//a[contains(@href, :href)]', [':href' => 'update.php']));
     $this->clickLink('Administration pages');
     $this->assertSession()->statusCodeEquals(200);
@@ -617,7 +625,13 @@ public function testSuccessfulMultilingualUpdateFunctionality() {
     $this->assertEqual($schema_version, 8000, 'update_script_test schema version overridden to 8000.');
 
     // Create admin user.
-    $admin_user = $this->drupalCreateUser(['administer software updates', 'access administration pages', 'access site reports', 'access site in maintenance mode', 'administer site configuration']);
+    $admin_user = $this->drupalCreateUser([
+      'administer software updates',
+      'access administration pages',
+      'access site reports',
+      'access site in maintenance mode',
+      'administer site configuration',
+    ]);
     $this->drupalLogin($admin_user);
 
     // Visit status report page and ensure, that link to update.php has no path prefix set.
@@ -634,8 +648,8 @@ public function testSuccessfulMultilingualUpdateFunctionality() {
     $this->clickLink(t('Apply pending updates'));
     $this->checkForMetaRefresh();
     $this->assertText('Updates were attempted.');
-    $this->assertLink('logged');
-    $this->assertLink('Administration pages');
+    $this->assertSession()->linkExists('logged');
+    $this->assertSession()->linkExists('Administration pages');
     $this->assertEmpty($this->xpath('//main//a[contains(@href, :href)]', [':href' => 'update.php']));
     $this->clickLink('Administration pages');
     $this->assertSession()->statusCodeEquals(200);
@@ -686,7 +700,7 @@ protected function runUpdates($maintenance_mode) {
 
     // Verify that updates were completed successfully.
     $this->assertText('Updates were attempted.');
-    $this->assertLink('site');
+    $this->assertSession()->linkExists('site');
     $this->assertText('The update_script_test_update_8001() update was executed successfully.');
 
     // Verify that no 7.x updates were run.
@@ -694,9 +708,9 @@ protected function runUpdates($maintenance_mode) {
     $this->assertNoText('The update_script_test_update_7201() update was executed successfully.');
 
     // Verify that there are no links to different parts of the workflow.
-    $this->assertNoLink('Administration pages');
+    $this->assertSession()->linkNotExists('Administration pages');
     $this->assertEmpty($this->xpath('//main//a[contains(@href, :href)]', [':href' => 'update.php']));
-    $this->assertNoLink('logged');
+    $this->assertSession()->linkNotExists('logged');
 
     // Verify the front page can be visited following the upgrade.
     $this->clickLink('Front page');
diff --git a/web/core/modules/system/tests/src/Functional/UpdateSystem/UpdatesWith7xTest.php b/web/core/modules/system/tests/src/Functional/UpdateSystem/UpdatesWith7xTest.php
index 0eda9dd86d4d4bc94991a9c4993f187e61dfd545..7dca8dc9b3a6d90d6968591d3762262a9d14a756 100644
--- a/web/core/modules/system/tests/src/Functional/UpdateSystem/UpdatesWith7xTest.php
+++ b/web/core/modules/system/tests/src/Functional/UpdateSystem/UpdatesWith7xTest.php
@@ -43,7 +43,9 @@ protected function setUp() {
     parent::setUp();
     require_once $this->root . '/core/includes/update.inc';
     $this->updateUrl = $GLOBALS['base_url'] . '/update.php';
-    $this->updateUser = $this->drupalCreateUser(['administer software updates']);
+    $this->updateUser = $this->drupalCreateUser([
+      'administer software updates',
+    ]);
   }
 
   public function testWith7x() {
diff --git a/web/core/modules/system/tests/src/FunctionalJavascript/System/DateFormatTest.php b/web/core/modules/system/tests/src/FunctionalJavascript/System/DateFormatTest.php
index 3460f15b3b815eddf68744797a779cb15084254e..cd7890302b0c5ef98193a2429e6b8f4dd78657a0 100644
--- a/web/core/modules/system/tests/src/FunctionalJavascript/System/DateFormatTest.php
+++ b/web/core/modules/system/tests/src/FunctionalJavascript/System/DateFormatTest.php
@@ -29,7 +29,9 @@ protected function setUp() {
     parent::setUp();
 
     // Create admin user and log in admin user.
-    $this->drupalLogin($this->drupalCreateUser(['administer site configuration']));
+    $this->drupalLogin($this->drupalCreateUser([
+      'administer site configuration',
+    ]));
     $this->drupalPlaceBlock('local_actions_block');
   }
 
diff --git a/web/core/modules/taxonomy/tests/src/Functional/EarlyDateTest.php b/web/core/modules/taxonomy/tests/src/Functional/EarlyDateTest.php
index 74b0093738bdd9743b52863a93df2a7d03337a7f..211e3e57321dbea1a278c5179ec55e8bee6a3e50 100644
--- a/web/core/modules/taxonomy/tests/src/Functional/EarlyDateTest.php
+++ b/web/core/modules/taxonomy/tests/src/Functional/EarlyDateTest.php
@@ -51,7 +51,11 @@ protected function setUp() {
       ])
       ->save();
 
-    $this->drupalLogin($this->drupalCreateUser(['administer taxonomy', 'administer nodes', 'bypass node access']));
+    $this->drupalLogin($this->drupalCreateUser([
+      'administer taxonomy',
+      'administer nodes',
+      'bypass node access',
+    ]));
   }
 
   /**
diff --git a/web/core/modules/taxonomy/tests/src/Functional/RssTest.php b/web/core/modules/taxonomy/tests/src/Functional/RssTest.php
index d208a3a4e1bcd4a659f1d0a2a0bdacb22b6de966..ae80adb5b4d7cbf12c471bf16a6b087ba06af1cd 100644
--- a/web/core/modules/taxonomy/tests/src/Functional/RssTest.php
+++ b/web/core/modules/taxonomy/tests/src/Functional/RssTest.php
@@ -42,7 +42,12 @@ class RssTest extends TaxonomyTestBase {
   protected function setUp() {
     parent::setUp();
 
-    $this->drupalLogin($this->drupalCreateUser(['administer taxonomy', 'bypass node access', 'administer content types', 'administer node display']));
+    $this->drupalLogin($this->drupalCreateUser([
+      'administer taxonomy',
+      'bypass node access',
+      'administer content types',
+      'administer node display',
+    ]));
     $this->vocabulary = $this->createVocabulary();
     $this->fieldName = 'taxonomy_' . $this->vocabulary->id();
 
diff --git a/web/core/modules/taxonomy/tests/src/Functional/TaxonomyImageTest.php b/web/core/modules/taxonomy/tests/src/Functional/TaxonomyImageTest.php
index 4c3265192fd9ddd755f62049620f8eb058ceb301..747a4c041f212f4802ba575837bb1aa7d28eada7 100644
--- a/web/core/modules/taxonomy/tests/src/Functional/TaxonomyImageTest.php
+++ b/web/core/modules/taxonomy/tests/src/Functional/TaxonomyImageTest.php
@@ -80,7 +80,11 @@ protected function setUp() {
   }
 
   public function testTaxonomyImageAccess() {
-    $user = $this->drupalCreateUser(['administer site configuration', 'administer taxonomy', 'access user profiles']);
+    $user = $this->drupalCreateUser([
+      'administer site configuration',
+      'administer taxonomy',
+      'access user profiles',
+    ]);
     $this->drupalLogin($user);
 
     // Create a term and upload the image.
diff --git a/web/core/modules/taxonomy/tests/src/Functional/TaxonomyTermIndentationTest.php b/web/core/modules/taxonomy/tests/src/Functional/TaxonomyTermIndentationTest.php
index 8e580023e79e324a87a066a1e2576fa454b4fad5..74d10f55bcdaef8b13c80f3fe65a869f2713884e 100644
--- a/web/core/modules/taxonomy/tests/src/Functional/TaxonomyTermIndentationTest.php
+++ b/web/core/modules/taxonomy/tests/src/Functional/TaxonomyTermIndentationTest.php
@@ -30,7 +30,10 @@ class TaxonomyTermIndentationTest extends TaxonomyTestBase {
 
   protected function setUp() {
     parent::setUp();
-    $this->drupalLogin($this->drupalCreateUser(['administer taxonomy', 'bypass node access']));
+    $this->drupalLogin($this->drupalCreateUser([
+      'administer taxonomy',
+      'bypass node access',
+    ]));
     $this->vocabulary = $this->createVocabulary();
   }
 
diff --git a/web/core/modules/taxonomy/tests/src/Functional/TaxonomyTermPagerTest.php b/web/core/modules/taxonomy/tests/src/Functional/TaxonomyTermPagerTest.php
index 99c80db177bac3cf9e45002437ee2ec581462445..c5866fddbe8118e3b39050e5383ebc7eab212b8d 100644
--- a/web/core/modules/taxonomy/tests/src/Functional/TaxonomyTermPagerTest.php
+++ b/web/core/modules/taxonomy/tests/src/Functional/TaxonomyTermPagerTest.php
@@ -33,7 +33,10 @@ class TaxonomyTermPagerTest extends TaxonomyTestBase {
    */
   protected function setUp() {
     parent::setUp();
-    $this->drupalLogin($this->drupalCreateUser(['administer taxonomy', 'bypass node access']));
+    $this->drupalLogin($this->drupalCreateUser([
+      'administer taxonomy',
+      'bypass node access',
+    ]));
     $this->vocabulary = $this->createVocabulary();
   }
 
diff --git a/web/core/modules/taxonomy/tests/src/Functional/TermIndexTest.php b/web/core/modules/taxonomy/tests/src/Functional/TermIndexTest.php
index dd240bee6dbcee2d25cc10a41250b02702b580e6..f83313d77f193afc2f23a44d57016d8b034a832d 100644
--- a/web/core/modules/taxonomy/tests/src/Functional/TermIndexTest.php
+++ b/web/core/modules/taxonomy/tests/src/Functional/TermIndexTest.php
@@ -50,7 +50,10 @@ protected function setUp() {
     parent::setUp();
 
     // Create an administrative user.
-    $this->drupalLogin($this->drupalCreateUser(['administer taxonomy', 'bypass node access']));
+    $this->drupalLogin($this->drupalCreateUser([
+      'administer taxonomy',
+      'bypass node access',
+    ]));
 
     // Create a vocabulary and add two term reference fields to article nodes.
     $this->vocabulary = $this->createVocabulary();
diff --git a/web/core/modules/taxonomy/tests/src/Functional/TermTest.php b/web/core/modules/taxonomy/tests/src/Functional/TermTest.php
index 9c5b993916310f1472f92ee165ccff77dbee6869..3c8e2ee004d8bd8ce81007f0c3268e4a5e80a668 100644
--- a/web/core/modules/taxonomy/tests/src/Functional/TermTest.php
+++ b/web/core/modules/taxonomy/tests/src/Functional/TermTest.php
@@ -51,7 +51,10 @@ protected function setUp() {
     $this->drupalPlaceBlock('local_tasks_block');
     $this->drupalPlaceBlock('page_title_block');
 
-    $this->drupalLogin($this->drupalCreateUser(['administer taxonomy', 'bypass node access']));
+    $this->drupalLogin($this->drupalCreateUser([
+      'administer taxonomy',
+      'bypass node access',
+    ]));
     $this->vocabulary = $this->createVocabulary();
 
     $field_name = 'taxonomy_' . $this->vocabulary->id();
@@ -355,7 +358,7 @@ public function testTermInterface() {
     // Check that the term is still present at admin UI after edit.
     $this->drupalGet('admin/structure/taxonomy/manage/' . $this->vocabulary->id() . '/overview');
     $this->assertText($edit['name[0][value]'], 'The randomly generated term name is present.');
-    $this->assertLink(t('Edit'));
+    $this->assertSession()->linkExists(t('Edit'));
 
     // Check the term link can be clicked through to the term page.
     $this->clickLink($edit['name[0][value]']);
@@ -601,7 +604,7 @@ public function testTermBreadcrumbs() {
     $this->assertCount(2, $breadcrumbs, 'The breadcrumbs are present on the page.');
     $this->assertIdentical($breadcrumbs[0]->getText(), 'Home', 'First breadcrumb text is Home');
     $this->assertIdentical($breadcrumbs[1]->getText(), $term->label(), 'Second breadcrumb text is term name on term edit page.');
-    $this->assertEscaped($breadcrumbs[1]->getText(), 'breadcrumbs displayed and escaped.');
+    $this->assertEscaped($breadcrumbs[1]->getText());
 
     // Check the breadcrumb on the term delete page.
     $this->drupalGet('taxonomy/term/' . $term->id() . '/delete');
@@ -609,7 +612,7 @@ public function testTermBreadcrumbs() {
     $this->assertCount(2, $breadcrumbs, 'The breadcrumbs are present on the page.');
     $this->assertIdentical($breadcrumbs[0]->getText(), 'Home', 'First breadcrumb text is Home');
     $this->assertIdentical($breadcrumbs[1]->getText(), $term->label(), 'Second breadcrumb text is term name on term delete page.');
-    $this->assertEscaped($breadcrumbs[1]->getText(), 'breadcrumbs displayed and escaped.');
+    $this->assertEscaped($breadcrumbs[1]->getText());
   }
 
 }
diff --git a/web/core/modules/taxonomy/tests/src/Functional/ThemeTest.php b/web/core/modules/taxonomy/tests/src/Functional/ThemeTest.php
index e0a8774fc92df0338f0e1312ae1feca3ca71dc30..2fd550efcc7088f2e193853066e8b85fbca03262 100644
--- a/web/core/modules/taxonomy/tests/src/Functional/ThemeTest.php
+++ b/web/core/modules/taxonomy/tests/src/Functional/ThemeTest.php
@@ -27,7 +27,10 @@ protected function setUp() {
 
     // Create and log in as a user who has permission to add and edit taxonomy
     // terms and view the administrative theme.
-    $admin_user = $this->drupalCreateUser(['administer taxonomy', 'view the administration theme']);
+    $admin_user = $this->drupalCreateUser([
+      'administer taxonomy',
+      'view the administration theme',
+    ]);
     $this->drupalLogin($admin_user);
   }
 
diff --git a/web/core/modules/taxonomy/tests/src/Functional/TokenReplaceTest.php b/web/core/modules/taxonomy/tests/src/Functional/TokenReplaceTest.php
index 7474cee2d1aef72dc78bd5bbb1311c5bf2c80959..c21001366008dca8e445f347ef72e92064bb47b1 100644
--- a/web/core/modules/taxonomy/tests/src/Functional/TokenReplaceTest.php
+++ b/web/core/modules/taxonomy/tests/src/Functional/TokenReplaceTest.php
@@ -35,7 +35,10 @@ class TokenReplaceTest extends TaxonomyTestBase {
 
   protected function setUp() {
     parent::setUp();
-    $this->drupalLogin($this->drupalCreateUser(['administer taxonomy', 'bypass node access']));
+    $this->drupalLogin($this->drupalCreateUser([
+      'administer taxonomy',
+      'bypass node access',
+    ]));
     $this->vocabulary = $this->createVocabulary();
     $this->fieldName = 'taxonomy_' . $this->vocabulary->id();
 
diff --git a/web/core/modules/taxonomy/tests/src/Functional/Views/TaxonomyIndexTidUiTest.php b/web/core/modules/taxonomy/tests/src/Functional/Views/TaxonomyIndexTidUiTest.php
index df286a331deb5aec42aec959a06010b80c3c6b20..eb0774abb3f1f2bcf33c73668a024e0966ae57d4 100644
--- a/web/core/modules/taxonomy/tests/src/Functional/Views/TaxonomyIndexTidUiTest.php
+++ b/web/core/modules/taxonomy/tests/src/Functional/Views/TaxonomyIndexTidUiTest.php
@@ -57,7 +57,10 @@ class TaxonomyIndexTidUiTest extends UITestBase {
   protected function setUp($import_test_views = TRUE) {
     parent::setUp($import_test_views);
 
-    $this->adminUser = $this->drupalCreateUser(['administer taxonomy', 'administer views']);
+    $this->adminUser = $this->drupalCreateUser([
+      'administer taxonomy',
+      'administer views',
+    ]);
     $this->drupalLogin($this->adminUser);
 
     Vocabulary::create([
diff --git a/web/core/modules/taxonomy/tests/src/Functional/Views/TaxonomyTermViewTest.php b/web/core/modules/taxonomy/tests/src/Functional/Views/TaxonomyTermViewTest.php
index e1b7f3f1c997ea39472b22b091f35405a5c61464..f1ac4414bfc5e9f020145c47a30bed77a4220f55 100644
--- a/web/core/modules/taxonomy/tests/src/Functional/Views/TaxonomyTermViewTest.php
+++ b/web/core/modules/taxonomy/tests/src/Functional/Views/TaxonomyTermViewTest.php
@@ -49,7 +49,10 @@ protected function setUp($import_test_views = TRUE) {
     parent::setUp($import_test_views);
 
     // Create an administrative user.
-    $this->adminUser = $this->drupalCreateUser(['administer taxonomy', 'bypass node access']);
+    $this->adminUser = $this->drupalCreateUser([
+      'administer taxonomy',
+      'bypass node access',
+    ]);
     $this->drupalLogin($this->adminUser);
 
     // Create a vocabulary and add two term reference fields to article nodes.
diff --git a/web/core/modules/telephone/tests/src/Functional/TelephoneFieldTest.php b/web/core/modules/telephone/tests/src/Functional/TelephoneFieldTest.php
index 40607d2359b32ef78443ad187bbd5f261a9f6b4a..447d26c3c441517876ef8e7456c37700f914d8db 100644
--- a/web/core/modules/telephone/tests/src/Functional/TelephoneFieldTest.php
+++ b/web/core/modules/telephone/tests/src/Functional/TelephoneFieldTest.php
@@ -43,7 +43,10 @@ protected function setUp() {
     parent::setUp();
 
     $this->drupalCreateContentType(['type' => 'article']);
-    $this->webUser = $this->drupalCreateUser(['create article content', 'edit own article content']);
+    $this->webUser = $this->drupalCreateUser([
+      'create article content',
+      'edit own article content',
+    ]);
     $this->drupalLogin($this->webUser);
 
     // Add the telephone field to the article content type.
diff --git a/web/core/modules/text/tests/src/FunctionalJavascript/TextareaWithSummaryTest.php b/web/core/modules/text/tests/src/FunctionalJavascript/TextareaWithSummaryTest.php
index 9d939eead4e41da65a43f2db860066d34ff871b0..c3682771d33c3788786cd46480cd36e35ab77320 100644
--- a/web/core/modules/text/tests/src/FunctionalJavascript/TextareaWithSummaryTest.php
+++ b/web/core/modules/text/tests/src/FunctionalJavascript/TextareaWithSummaryTest.php
@@ -30,7 +30,10 @@ protected function setUp() {
 
     $this->drupalCreateContentType(['type' => 'page']);
 
-    $account = $this->drupalCreateUser(['create page content', 'edit own page content']);
+    $account = $this->drupalCreateUser([
+      'create page content',
+      'edit own page content',
+    ]);
     $this->drupalLogin($account);
   }
 
diff --git a/web/core/modules/toolbar/tests/src/Functional/ToolbarAdminMenuTest.php b/web/core/modules/toolbar/tests/src/Functional/ToolbarAdminMenuTest.php
index 8a0a3bb7fd2136983bd36807cc9a74bbabbce333..2afaeaebb372808de14b0d95e020706efb8db336 100644
--- a/web/core/modules/toolbar/tests/src/Functional/ToolbarAdminMenuTest.php
+++ b/web/core/modules/toolbar/tests/src/Functional/ToolbarAdminMenuTest.php
@@ -262,7 +262,10 @@ public function testNonCurrentUserAccountUpdates() {
   public function testLocaleTranslationSubtreesHashCacheClear() {
     $admin_user = $this->adminUser;
     // User to translate and delete string.
-    $translate_user = $this->drupalCreateUser(['translate interface', 'access administration pages']);
+    $translate_user = $this->drupalCreateUser([
+      'translate interface',
+      'access administration pages',
+    ]);
 
     // Create a new language with the langcode 'xx'.
     $langcode = 'xx';
diff --git a/web/core/modules/toolbar/tests/src/Functional/ToolbarMenuTranslationTest.php b/web/core/modules/toolbar/tests/src/Functional/ToolbarMenuTranslationTest.php
index 8ff8fd8a5d9eadcae4b850d685c2e93b9195da3b..1b1a24cb4060b11b187dfad1bde189aa975cff67 100644
--- a/web/core/modules/toolbar/tests/src/Functional/ToolbarMenuTranslationTest.php
+++ b/web/core/modules/toolbar/tests/src/Functional/ToolbarMenuTranslationTest.php
@@ -39,7 +39,12 @@ protected function setUp() {
     parent::setUp();
 
     // Create an administrative user and log it in.
-    $this->adminUser = $this->drupalCreateUser(['access toolbar', 'translate interface', 'administer languages', 'access administration pages']);
+    $this->adminUser = $this->drupalCreateUser([
+      'access toolbar',
+      'translate interface',
+      'administer languages',
+      'access administration pages',
+    ]);
     $this->drupalLogin($this->adminUser);
   }
 
diff --git a/web/core/modules/tour/tests/src/Functional/TourHelpPageTest.php b/web/core/modules/tour/tests/src/Functional/TourHelpPageTest.php
index a88da72cb9aa0acfcf7bc5f158828aeffea483a7..d3d109485e4993b34541b6c33a4ccc2044e1763f 100644
--- a/web/core/modules/tour/tests/src/Functional/TourHelpPageTest.php
+++ b/web/core/modules/tour/tests/src/Functional/TourHelpPageTest.php
@@ -46,8 +46,14 @@ protected function setUp() {
     // Create users. For the Tour user, include permissions for the language
     // tours' parent pages, but not the translation tour's parent page. See
     // self:getTourList().
-    $this->tourUser = $this->drupalCreateUser(['access administration pages', 'access tour', 'administer languages']);
-    $this->noTourUser = $this->drupalCreateUser(['access administration pages']);
+    $this->tourUser = $this->drupalCreateUser([
+      'access administration pages',
+      'access tour',
+      'administer languages',
+    ]);
+    $this->noTourUser = $this->drupalCreateUser([
+      'access administration pages',
+    ]);
   }
 
   /**
@@ -73,7 +79,7 @@ protected function verifyHelp($tours_ok = TRUE) {
     // All users should be able to see the module section.
     $this->assertText('Module overviews are provided by modules');
     foreach ($this->getModuleList() as $name) {
-      $this->assertLink($name);
+      $this->assertSession()->linkExists($name);
     }
 
     // Some users should be able to see the tour section.
@@ -89,10 +95,10 @@ protected function verifyHelp($tours_ok = TRUE) {
     // Test the titles that should be links.
     foreach ($titles[0] as $title) {
       if ($tours_ok) {
-        $this->assertLink($title);
+        $this->assertSession()->linkExists($title);
       }
       else {
-        $this->assertNoLink($title);
+        $this->assertSession()->linkNotExists($title);
         // Just test the first item in the list of links that should not
         // be there, because the second matches the name of a module that is
         // in the Module overviews section, so the link will be there and
diff --git a/web/core/modules/tracker/tests/src/Functional/TrackerNodeAccessTest.php b/web/core/modules/tracker/tests/src/Functional/TrackerNodeAccessTest.php
index 990612d0beb8d2e8c8153ab8b8cdba324718ab9e..1a7304f3b1ae8f65f046f1659a09df82cb352c28 100644
--- a/web/core/modules/tracker/tests/src/Functional/TrackerNodeAccessTest.php
+++ b/web/core/modules/tracker/tests/src/Functional/TrackerNodeAccessTest.php
@@ -42,7 +42,10 @@ protected function setUp() {
    */
   public function testTrackerNodeAccess() {
     // Create user with node test view permission.
-    $access_user = $this->drupalCreateUser(['node test view', 'access user profiles']);
+    $access_user = $this->drupalCreateUser([
+      'node test view',
+      'access user profiles',
+    ]);
 
     // Create user without node test view permission.
     $no_access_user = $this->drupalCreateUser(['access user profiles']);
diff --git a/web/core/modules/tracker/tests/src/Functional/TrackerRecentContentLinkTest.php b/web/core/modules/tracker/tests/src/Functional/TrackerRecentContentLinkTest.php
new file mode 100644
index 0000000000000000000000000000000000000000..f0b85b34decff3d4747d238892690a2e9d3d2fdd
--- /dev/null
+++ b/web/core/modules/tracker/tests/src/Functional/TrackerRecentContentLinkTest.php
@@ -0,0 +1,47 @@
+<?php
+
+namespace Drupal\Tests\tracker\Functional;
+
+use Drupal\Tests\BrowserTestBase;
+
+/**
+ * Tests recent content link.
+ *
+ * @group tracker
+ */
+class TrackerRecentContentLinkTest extends BrowserTestBase {
+
+  /**
+   * {@inheritdoc}
+   */
+  protected static $modules = ['block', 'tracker'];
+
+  /**
+   * {@inheritdoc}
+   */
+  protected $defaultTheme = 'stark';
+
+  /**
+   * Tests the recent content link in menu block.
+   */
+  public function testRecentContentLink() {
+    $this->drupalGet('<front>');
+    $this->assertSession()->linkNotExists('Recent content');
+    $this->drupalPlaceBlock('system_menu_block:tools');
+
+    // Create a regular user.
+    $user = $this->drupalCreateUser();
+
+    // Log in and get the homepage.
+    $this->drupalLogin($user);
+    $this->drupalGet('<front>');
+
+    $link = $this->xpath('//ul/li/a[contains(@href, :href) and text()=:text]', [
+      ':menu_class' => 'menu-item',
+      ':href' => '/activity',
+      ':text' => 'Recent content',
+    ]);
+    $this->assertCount(1, $link);
+  }
+
+}
diff --git a/web/core/modules/tracker/tests/src/Functional/TrackerTest.php b/web/core/modules/tracker/tests/src/Functional/TrackerTest.php
index 8a8c378b9904844c679a547fb21b784add592f8d..0e98d86de5e9293d9b2cb49ef58395ac030fe678 100644
--- a/web/core/modules/tracker/tests/src/Functional/TrackerTest.php
+++ b/web/core/modules/tracker/tests/src/Functional/TrackerTest.php
@@ -215,7 +215,11 @@ public function testTrackerUser() {
     $this->assertTitle($this->user->getAccountName() . ' | Drupal');
 
     // Verify that unpublished comments are removed from the tracker.
-    $admin_user = $this->drupalCreateUser(['post comments', 'administer comments', 'access user profiles']);
+    $admin_user = $this->drupalCreateUser([
+      'post comments',
+      'administer comments',
+      'access user profiles',
+    ]);
     $this->drupalLogin($admin_user);
     $this->drupalPostForm('comment/1/edit', ['status' => CommentInterface::NOT_PUBLISHED], t('Save'));
     $this->drupalGet('user/' . $this->user->id() . '/activity');
@@ -418,7 +422,11 @@ public function testTrackerCronIndexing() {
   public function testTrackerAdminUnpublish() {
     \Drupal::service('module_installer')->install(['views']);
     \Drupal::service('router.builder')->rebuild();
-    $admin_user = $this->drupalCreateUser(['access content overview', 'administer nodes', 'bypass node access']);
+    $admin_user = $this->drupalCreateUser([
+      'access content overview',
+      'administer nodes',
+      'bypass node access',
+    ]);
     $this->drupalLogin($admin_user);
 
     $node = $this->drupalCreateNode([
diff --git a/web/core/modules/update/tests/src/Functional/FileTransferAuthorizeFormTest.php b/web/core/modules/update/tests/src/Functional/FileTransferAuthorizeFormTest.php
index 2d7d7805197de50cce05dfa055c5942d1bd36bf7..ac483cb21de0c948805832a598ae19dca321f232 100644
--- a/web/core/modules/update/tests/src/Functional/FileTransferAuthorizeFormTest.php
+++ b/web/core/modules/update/tests/src/Functional/FileTransferAuthorizeFormTest.php
@@ -23,7 +23,11 @@ class FileTransferAuthorizeFormTest extends UpdateTestBase {
 
   protected function setUp() {
     parent::setUp();
-    $admin_user = $this->drupalCreateUser(['administer modules', 'administer software updates', 'administer site configuration']);
+    $admin_user = $this->drupalCreateUser([
+      'administer modules',
+      'administer software updates',
+      'administer site configuration',
+    ]);
     $this->drupalLogin($admin_user);
 
     // Create a local cache so the module is not downloaded from drupal.org.
diff --git a/web/core/modules/update/tests/src/Functional/UpdateContribTest.php b/web/core/modules/update/tests/src/Functional/UpdateContribTest.php
index 6410f5fde31a17a2083da88e6fccde504c15e78b..dc2907ffa159922ad8f30775ffc66a571c579cf9 100644
--- a/web/core/modules/update/tests/src/Functional/UpdateContribTest.php
+++ b/web/core/modules/update/tests/src/Functional/UpdateContribTest.php
@@ -507,7 +507,10 @@ public function testUpdateBrokenFetchURL() {
    */
   public function testHookUpdateStatusAlter() {
     $update_test_config = $this->config('update_test.settings');
-    $update_admin_user = $this->drupalCreateUser(['administer site configuration', 'administer software updates']);
+    $update_admin_user = $this->drupalCreateUser([
+      'administer site configuration',
+      'administer software updates',
+    ]);
     $this->drupalLogin($update_admin_user);
 
     $system_info = [
diff --git a/web/core/modules/update/tests/src/Functional/UpdateCoreTest.php b/web/core/modules/update/tests/src/Functional/UpdateCoreTest.php
index a7a982f1c04b40b34e4181f49422988b640a217f..f01e9b2dd88b4fb9df79a179c129280987fda1ed 100644
--- a/web/core/modules/update/tests/src/Functional/UpdateCoreTest.php
+++ b/web/core/modules/update/tests/src/Functional/UpdateCoreTest.php
@@ -40,7 +40,11 @@ class UpdateCoreTest extends UpdateTestBase {
 
   protected function setUp() {
     parent::setUp();
-    $admin_user = $this->drupalCreateUser(['administer site configuration', 'administer modules', 'administer themes']);
+    $admin_user = $this->drupalCreateUser([
+      'administer site configuration',
+      'administer modules',
+      'administer themes',
+      ]);
     $this->drupalLogin($admin_user);
     $this->drupalPlaceBlock('local_actions_block');
   }
@@ -814,7 +818,12 @@ public function testLanguageModuleUpdate() {
    * Ensures that the local actions appear.
    */
   public function testLocalActions() {
-    $admin_user = $this->drupalCreateUser(['administer site configuration', 'administer modules', 'administer software updates', 'administer themes']);
+    $admin_user = $this->drupalCreateUser([
+      'administer site configuration',
+      'administer modules',
+      'administer software updates',
+      'administer themes',
+    ]);
     $this->drupalLogin($admin_user);
 
     $this->drupalGet('admin/modules');
diff --git a/web/core/modules/update/tests/src/Functional/UpdateUploadTest.php b/web/core/modules/update/tests/src/Functional/UpdateUploadTest.php
index c3da558329eb6851348188bd652a4a012552648a..f71b3430e9459ee45b33c5ece0dcadd47ecad516 100644
--- a/web/core/modules/update/tests/src/Functional/UpdateUploadTest.php
+++ b/web/core/modules/update/tests/src/Functional/UpdateUploadTest.php
@@ -32,7 +32,11 @@ class UpdateUploadTest extends UpdateTestBase {
 
   protected function setUp() {
     parent::setUp();
-    $admin_user = $this->drupalCreateUser(['administer modules', 'administer software updates', 'administer site configuration']);
+    $admin_user = $this->drupalCreateUser([
+      'administer modules',
+      'administer software updates',
+      'administer site configuration',
+    ]);
     $this->drupalLogin($admin_user);
   }
 
@@ -88,11 +92,11 @@ public function testUploadModule() {
     $this->assertFileExists($installedInfoFilePath);
     // Ensure the links are relative to the site root and not
     // core/authorize.php.
-    $this->assertLink(t('Install another module'));
+    $this->assertSession()->linkExists(t('Install another module'));
     $this->assertLinkByHref(Url::fromRoute('update.module_install')->toString());
-    $this->assertLink(t('Enable newly added modules'));
+    $this->assertSession()->linkExists(t('Enable newly added modules'));
     $this->assertLinkByHref(Url::fromRoute('system.modules_list')->toString());
-    $this->assertLink(t('Administration pages'));
+    $this->assertSession()->linkExists(t('Administration pages'));
     $this->assertLinkByHref(Url::fromRoute('system.admin')->toString());
     // Ensure we can reach the "Install another module" link.
     $this->clickLink(t('Install another module'));
diff --git a/web/core/modules/user/src/UserAuthInterface.php b/web/core/modules/user/src/UserAuthInterface.php
index 38cffc03912ef395e17546511885241b24d3884f..91f2cc342c69b4354f41cf4db8adedb4e1fe11bb 100644
--- a/web/core/modules/user/src/UserAuthInterface.php
+++ b/web/core/modules/user/src/UserAuthInterface.php
@@ -14,6 +14,7 @@ interface UserAuthInterface {
    *   The user name to authenticate.
    * @param string $password
    *   A plain-text password, such as trimmed text from form values.
+   *
    * @return int|bool
    *   The user's uid on success, or FALSE on failure to authenticate.
    */
diff --git a/web/core/modules/user/tests/src/Functional/UserAccountLinksTest.php b/web/core/modules/user/tests/src/Functional/UserAccountLinksTest.php
index 25b4df1ef6d80a8d0c03a369f7105df02051a8be..456b1ee2fa39426acadaecc2a30d9e2ef8adcf63 100644
--- a/web/core/modules/user/tests/src/Functional/UserAccountLinksTest.php
+++ b/web/core/modules/user/tests/src/Functional/UserAccountLinksTest.php
@@ -78,7 +78,10 @@ public function testSecondaryMenu() {
    */
   public function testDisabledAccountLink() {
     // Create an admin user and log in.
-    $this->drupalLogin($this->drupalCreateUser(['access administration pages', 'administer menu']));
+    $this->drupalLogin($this->drupalCreateUser([
+      'access administration pages',
+      'administer menu',
+    ]));
 
     // Verify that the 'My account' link exists before we check for its
     // disappearance.
@@ -134,7 +137,7 @@ public function testAccountPageTitles() {
     // Check the page title for registered users is "My Account" in menus.
     $this->drupalLogin($this->drupalCreateUser());
     // After login, the client is redirected to /user.
-    $this->assertLink(t('My account'), 0, "Page title of /user is 'My Account' in menus for registered users");
+    $this->assertSession()->linkExists(t('My account'), 0, "Page title of /user is 'My Account' in menus for registered users");
     $this->assertLinkByHref(\Drupal::urlGenerator()->generate('user.page'), 0);
   }
 
diff --git a/web/core/modules/user/tests/src/Functional/UserAdminLanguageTest.php b/web/core/modules/user/tests/src/Functional/UserAdminLanguageTest.php
index a99017730ce3facf44ef1b536f81ca94714d534b..30f03fea0f7971ff227ec6ef3778cabbe61a91c2 100644
--- a/web/core/modules/user/tests/src/Functional/UserAdminLanguageTest.php
+++ b/web/core/modules/user/tests/src/Functional/UserAdminLanguageTest.php
@@ -41,7 +41,10 @@ class UserAdminLanguageTest extends BrowserTestBase {
   protected function setUp() {
     parent::setUp();
     // User to add and remove language.
-    $this->adminUser = $this->drupalCreateUser(['administer languages', 'access administration pages']);
+    $this->adminUser = $this->drupalCreateUser([
+      'administer languages',
+      'access administration pages',
+    ]);
     // User to check non-admin access.
     $this->regularUser = $this->drupalCreateUser();
   }
diff --git a/web/core/modules/user/tests/src/Functional/UserAdminTest.php b/web/core/modules/user/tests/src/Functional/UserAdminTest.php
index c67dd6b162e212aac0d2a332d05183bc515b2e25..ede9088c95b997992253c07ba9213fb89e122de9 100644
--- a/web/core/modules/user/tests/src/Functional/UserAdminTest.php
+++ b/web/core/modules/user/tests/src/Functional/UserAdminTest.php
@@ -162,7 +162,10 @@ public function testUserAdmin() {
    */
   public function testNotificationEmailAddress() {
     // Test that the Notification Email address field is on the config page.
-    $admin_user = $this->drupalCreateUser(['administer users', 'administer account settings']);
+    $admin_user = $this->drupalCreateUser([
+      'administer users',
+      'administer account settings',
+    ]);
     $this->drupalLogin($admin_user);
     $this->drupalGet('admin/config/people/accounts');
     $this->assertRaw('id="edit-mail-notification-address"', 'Notification Email address field exists');
diff --git a/web/core/modules/user/tests/src/Functional/UserCancelTest.php b/web/core/modules/user/tests/src/Functional/UserCancelTest.php
index b800a5c2e9d63ab90db34857b5cc4be1fc1bd7cb..b714ff42790ade7896fec8dca81d0fca9a1020f9 100644
--- a/web/core/modules/user/tests/src/Functional/UserCancelTest.php
+++ b/web/core/modules/user/tests/src/Functional/UserCancelTest.php
@@ -420,7 +420,11 @@ public function testUserDelete() {
     $user_storage = $this->container->get('entity_type.manager')->getStorage('user');
 
     // Create a user.
-    $account = $this->drupalCreateUser(['cancel account', 'post comments', 'skip comment approval']);
+    $account = $this->drupalCreateUser([
+      'cancel account',
+      'post comments',
+      'skip comment approval',
+    ]);
     $this->drupalLogin($account);
     // Load a real user object.
     $user_storage->resetCache([$account->id()]);
diff --git a/web/core/modules/user/tests/src/Functional/UserLanguageCreationTest.php b/web/core/modules/user/tests/src/Functional/UserLanguageCreationTest.php
index d19ae76a2fe0d9647f9563ab3f3297ce9e018137..e6f8870b4e16d72971fdcc4530f40f1b0aac052b 100644
--- a/web/core/modules/user/tests/src/Functional/UserLanguageCreationTest.php
+++ b/web/core/modules/user/tests/src/Functional/UserLanguageCreationTest.php
@@ -30,7 +30,11 @@ class UserLanguageCreationTest extends BrowserTestBase {
    */
   public function testLocalUserCreation() {
     // User to add and remove language and create new users.
-    $admin_user = $this->drupalCreateUser(['administer languages', 'access administration pages', 'administer users']);
+    $admin_user = $this->drupalCreateUser([
+      'administer languages',
+      'access administration pages',
+      'administer users',
+    ]);
     $this->drupalLogin($admin_user);
 
     // Add predefined language.
diff --git a/web/core/modules/user/tests/src/Functional/UserLanguageTest.php b/web/core/modules/user/tests/src/Functional/UserLanguageTest.php
index d221a61c1eb6d80111b65b5be6d78012d53d6368..b0bd1e4151d7af60047ed12b9bd9f819e8f12284 100644
--- a/web/core/modules/user/tests/src/Functional/UserLanguageTest.php
+++ b/web/core/modules/user/tests/src/Functional/UserLanguageTest.php
@@ -29,7 +29,10 @@ class UserLanguageTest extends BrowserTestBase {
    */
   public function testUserLanguageConfiguration() {
     // User to add and remove language.
-    $admin_user = $this->drupalCreateUser(['administer languages', 'access administration pages']);
+    $admin_user = $this->drupalCreateUser([
+      'administer languages',
+      'access administration pages',
+    ]);
     // User to change their default language.
     $web_user = $this->drupalCreateUser();
 
diff --git a/web/core/modules/user/tests/src/Functional/UserPasswordResetTest.php b/web/core/modules/user/tests/src/Functional/UserPasswordResetTest.php
index 7828e328d5e3f8fc197e296ed9c81fb2c7f92a25..11a37c27c3bbfe72f635f2e7fdbb1f8fc37afaa9 100644
--- a/web/core/modules/user/tests/src/Functional/UserPasswordResetTest.php
+++ b/web/core/modules/user/tests/src/Functional/UserPasswordResetTest.php
@@ -391,28 +391,28 @@ public function assertNoValidPasswordReset($name) {
   }
 
   /**
-   * Helper function to make assertions about a password reset triggering user flood cotrol.
+   * Makes assertions about a password reset triggering user flood control.
    */
   public function assertPasswordUserFlood() {
     $this->assertText(t('Too many password recovery requests for this account. It is temporarily blocked. Try again later or contact the site administrator.'), 'User password reset flood error message shown.');
   }
 
   /**
-   * Helper function to make assertions about a password reset not triggering user flood control.
+   * Makes assertions about a password reset not triggering user flood control.
    */
   public function assertNoPasswordUserFlood() {
     $this->assertNoText(t('Too many password recovery requests for this account. It is temporarily blocked. Try again later or contact the site administrator.'), 'User password reset flood error message not shown.');
   }
 
   /**
-   * Helper function to make assertions about a password reset triggering IP flood cotrol.
+   * Makes assertions about a password reset triggering IP flood control.
    */
   public function assertPasswordIpFlood() {
     $this->assertText(t('Too many password recovery requests from your IP address. It is temporarily blocked. Try again later or contact the site administrator.'), 'IP password reset flood error message shown.');
   }
 
   /**
-   * Helper function to make assertions about a password reset not triggering IP flood control.
+   * Makes assertions about a password reset not triggering IP flood control.
    */
   public function assertNoPasswordIpFlood() {
     $this->assertNoText(t('Too many password recovery requests from your IP address. It is temporarily blocked. Try again later or contact the site administrator.'), 'IP password reset flood error message not shown.');
diff --git a/web/core/modules/user/tests/src/Functional/UserPermissionsTest.php b/web/core/modules/user/tests/src/Functional/UserPermissionsTest.php
index 0eb453fc2678297d382a87a30887f1d86df33770..df8289797fe94d59de628a77630591d9348e1881 100644
--- a/web/core/modules/user/tests/src/Functional/UserPermissionsTest.php
+++ b/web/core/modules/user/tests/src/Functional/UserPermissionsTest.php
@@ -36,7 +36,13 @@ class UserPermissionsTest extends BrowserTestBase {
   protected function setUp() {
     parent::setUp();
 
-    $this->adminUser = $this->drupalCreateUser(['administer permissions', 'access user profiles', 'administer site configuration', 'administer modules', 'administer account settings']);
+    $this->adminUser = $this->drupalCreateUser([
+      'administer permissions',
+      'access user profiles',
+      'administer site configuration',
+      'administer modules',
+      'administer account settings',
+    ]);
 
     // Find the new role ID.
     $all_rids = $this->adminUser->getRoles();
diff --git a/web/core/modules/user/tests/src/Functional/UserPictureTest.php b/web/core/modules/user/tests/src/Functional/UserPictureTest.php
index 7c8c8975ff9276ffc045fb502692549c9f8be24b..0b6940eceef3b22acb708a468684c92c5a5b0470 100644
--- a/web/core/modules/user/tests/src/Functional/UserPictureTest.php
+++ b/web/core/modules/user/tests/src/Functional/UserPictureTest.php
@@ -3,6 +3,7 @@
 namespace Drupal\Tests\user\Functional;
 
 use Drupal\Core\Database\Database;
+use Drupal\Core\Entity\Entity\EntityViewDisplay;
 use Drupal\Core\StreamWrapper\StreamWrapperManager;
 use Drupal\file\Entity\File;
 use Drupal\image\Entity\ImageStyle;
@@ -159,4 +160,21 @@ public function saveUserPicture($image) {
     return File::load($account->user_picture->target_id);
   }
 
+  /**
+   * Tests user picture field with a non-standard field formatter.
+   *
+   * @see user_user_view_alter()
+   */
+  public function testUserViewAlter() {
+    \Drupal::service('module_installer')->install(['image_module_test']);
+    // Set dummy_image_formatter to the default view mode of user entity.
+    EntityViewDisplay::load('user.user.default')->setComponent('user_picture', [
+      'region' => 'content',
+      'type' => 'dummy_image_formatter',
+    ])->save();
+    $this->drupalLogin($this->webUser);
+    $this->assertSession()->statusCodeEquals(200);
+    $this->assertSession()->pageTextContains('Dummy');
+  }
+
 }
diff --git a/web/core/modules/user/tests/src/Functional/UserRoleAdminTest.php b/web/core/modules/user/tests/src/Functional/UserRoleAdminTest.php
index 1ac9f214b8854efc6c118ccf877e634165975323..29b7a6001a43c342d735bb7ca6c167ffff499229 100644
--- a/web/core/modules/user/tests/src/Functional/UserRoleAdminTest.php
+++ b/web/core/modules/user/tests/src/Functional/UserRoleAdminTest.php
@@ -37,7 +37,10 @@ class UserRoleAdminTest extends BrowserTestBase {
    */
   protected function setUp() {
     parent::setUp();
-    $this->adminUser = $this->drupalCreateUser(['administer permissions', 'administer users']);
+    $this->adminUser = $this->drupalCreateUser([
+      'administer permissions',
+      'administer users',
+    ]);
     $this->drupalPlaceBlock('local_tasks_block');
   }
 
diff --git a/web/core/modules/user/tests/src/Functional/UserRolesAssignmentTest.php b/web/core/modules/user/tests/src/Functional/UserRolesAssignmentTest.php
index bbda4c79143c58cea89c2b6ca8a88d12ac4ce434..c7eb970cb0268de12df179d80b74f3a933710b21 100644
--- a/web/core/modules/user/tests/src/Functional/UserRolesAssignmentTest.php
+++ b/web/core/modules/user/tests/src/Functional/UserRolesAssignmentTest.php
@@ -13,7 +13,10 @@ class UserRolesAssignmentTest extends BrowserTestBase {
 
   protected function setUp() {
     parent::setUp();
-    $admin_user = $this->drupalCreateUser(['administer permissions', 'administer users']);
+    $admin_user = $this->drupalCreateUser([
+      'administer permissions',
+      'administer users',
+    ]);
     $this->drupalLogin($admin_user);
   }
 
diff --git a/web/core/modules/user/tests/src/Functional/UserSearchTest.php b/web/core/modules/user/tests/src/Functional/UserSearchTest.php
index 1c5aa6ae1f4fc143668b07cba17705b8835db6e7..13c49e0fb4c856bc2cc0beba8e65c6b4e16d153d 100644
--- a/web/core/modules/user/tests/src/Functional/UserSearchTest.php
+++ b/web/core/modules/user/tests/src/Functional/UserSearchTest.php
@@ -28,7 +28,10 @@ public function testUserSearch() {
     // Verify that a user without 'administer users' permission cannot search
     // for users by email address. Additionally, ensure that the username has a
     // plus sign to ensure searching works with that.
-    $user1 = $this->drupalCreateUser(['access user profiles', 'search content'], "foo+bar");
+    $user1 = $this->drupalCreateUser([
+      'access user profiles',
+      'search content',
+    ], "foo+bar");
     $this->drupalLogin($user1);
     $keys = $user1->getEmail();
     $edit = ['keys' => $keys];
@@ -46,23 +49,27 @@ public function testUserSearch() {
     $keys = $user1->getAccountName();
     $edit = ['keys' => $keys];
     $this->drupalPostForm('search/user', $edit, t('Search'));
-    $this->assertLink($keys, 0, 'Search by username worked for non-admin user');
+    $this->assertSession()->linkExists($keys, 0, 'Search by username worked for non-admin user');
 
     // Verify that searching by sub-string works too.
     $subkey = substr($keys, 1, 5);
     $edit = ['keys' => $subkey];
     $this->drupalPostForm('search/user', $edit, t('Search'));
-    $this->assertLink($keys, 0, 'Search by username substring worked for non-admin user');
+    $this->assertSession()->linkExists($keys, 0, 'Search by username substring worked for non-admin user');
 
     // Verify that wildcard search works.
     $subkey = substr($keys, 0, 2) . '*' . substr($keys, 4, 2);
     $edit = ['keys' => $subkey];
     $this->drupalPostForm('search/user', $edit, t('Search'));
-    $this->assertLink($keys, 0, 'Search with wildcard worked for non-admin user');
+    $this->assertSession()->linkExists($keys, 0, 'Search with wildcard worked for non-admin user');
 
     // Verify that a user with 'administer users' permission can search by
     // email.
-    $user2 = $this->drupalCreateUser(['administer users', 'access user profiles', 'search content']);
+    $user2 = $this->drupalCreateUser([
+      'administer users',
+      'access user profiles',
+      'search content',
+    ]);
     $this->drupalLogin($user2);
     $keys = $user2->getEmail();
     $edit = ['keys' => $keys];
diff --git a/web/core/modules/user/tests/src/Functional/Views/AccessTestBase.php b/web/core/modules/user/tests/src/Functional/Views/AccessTestBase.php
index 36f2334f1166a5d71550ae5f14625399494e1016..cc0de2a623a7e83de86df66bbd0c62121613ba65 100644
--- a/web/core/modules/user/tests/src/Functional/Views/AccessTestBase.php
+++ b/web/core/modules/user/tests/src/Functional/Views/AccessTestBase.php
@@ -56,7 +56,9 @@ protected function setUp($import_test_views = TRUE) {
     $this->webRole = $roles[0];
 
     $this->normalRole = $this->drupalCreateRole([]);
-    $this->normalUser = $this->drupalCreateUser(['views_test_data test permission']);
+    $this->normalUser = $this->drupalCreateUser([
+      'views_test_data test permission',
+    ]);
     $this->normalUser->addRole($this->normalRole);
     $this->normalUser->save();
     // @todo when all the plugin information is cached make a reset function and
diff --git a/web/core/modules/user/tests/src/Functional/Views/BulkFormTest.php b/web/core/modules/user/tests/src/Functional/Views/BulkFormTest.php
index f7cb4f3fe04334ae70f25352c646c08ec0bd9d6d..87142c1c0344481e7bee8adef26f60bcce1ecac8 100644
--- a/web/core/modules/user/tests/src/Functional/Views/BulkFormTest.php
+++ b/web/core/modules/user/tests/src/Functional/Views/BulkFormTest.php
@@ -114,7 +114,11 @@ public function testBulkForm() {
     $this->assertTrue($anonymous_account->isBlocked(), 'Ensure the anonymous user got blocked.');
 
     // Test the list of available actions with a value that contains a dot.
-    $this->drupalLogin($this->drupalCreateUser(['administer permissions', 'administer views', 'administer users']));
+    $this->drupalLogin($this->drupalCreateUser([
+      'administer permissions',
+      'administer views',
+      'administer users',
+    ]));
     $action_id = 'user_add_role_action.' . $role;
     $edit = [
       'options[include_exclude]' => 'exclude',
diff --git a/web/core/modules/user/tests/src/Functional/Views/FilterPermissionUiTest.php b/web/core/modules/user/tests/src/Functional/Views/FilterPermissionUiTest.php
index 18358585835b6c17741766c23f6dafb5ecf672b6..ad21dd2155aec166123bf13825b85deefaac71d4 100644
--- a/web/core/modules/user/tests/src/Functional/Views/FilterPermissionUiTest.php
+++ b/web/core/modules/user/tests/src/Functional/Views/FilterPermissionUiTest.php
@@ -43,12 +43,15 @@ protected function setUp($import_test_views = TRUE) {
    * Tests basic filter handler settings in the UI.
    */
   public function testHandlerUI() {
-    $this->drupalLogin($this->drupalCreateUser(['administer views', 'administer users']));
+    $this->drupalLogin($this->drupalCreateUser([
+      'administer views',
+      'administer users',
+    ]));
 
     $this->drupalGet('admin/structure/views/view/test_filter_permission/edit/default');
     // Verify that the handler summary is correctly displaying the selected
     // permission.
-    $this->assertLink('User: Permission (= View user information)');
+    $this->assertSession()->linkExists('User: Permission (= View user information)');
     $this->drupalPostForm(NULL, [], 'Save');
     // Verify that we can save the view.
     $this->assertNoText('No valid values found on filter: User: Permission.');
@@ -63,7 +66,7 @@ public function testHandlerUI() {
       ],
     ];
     $this->drupalPostForm('admin/structure/views/nojs/handler/test_filter_permission/default/filter/permission', $edit, 'Apply');
-    $this->assertLink('User: Permission (or View us…)');
+    $this->assertSession()->linkExists('User: Permission (or View us…)');
     $this->drupalPostForm(NULL, [], 'Save');
     // Verify that we can save the view.
     $this->assertNoText('No valid values found on filter: User: Permission.');
diff --git a/web/core/modules/user/tests/src/Functional/Views/HandlerFilterUserNameTest.php b/web/core/modules/user/tests/src/Functional/Views/HandlerFilterUserNameTest.php
index dbb8fc56c43652d456c81d170fbd7afdb8bd2247..2660593f5ec112088accab73d1a19934e9c1b579 100644
--- a/web/core/modules/user/tests/src/Functional/Views/HandlerFilterUserNameTest.php
+++ b/web/core/modules/user/tests/src/Functional/Views/HandlerFilterUserNameTest.php
@@ -90,7 +90,10 @@ public function testUserNameApi() {
    * Tests using the user interface.
    */
   public function testAdminUserInterface() {
-    $admin_user = $this->drupalCreateUser(['administer views', 'administer site configuration']);
+    $admin_user = $this->drupalCreateUser([
+      'administer views',
+      'administer site configuration',
+    ]);
     $this->drupalLogin($admin_user);
 
     $path = 'admin/structure/views/nojs/handler/test_user_name/default/filter/uid';
diff --git a/web/core/modules/user/tests/src/Kernel/TempStoreDatabaseTest.php b/web/core/modules/user/tests/src/Kernel/TempStoreDatabaseTest.php
index 5a41180276dc0d9bcb98e879b03462ca81703a02..318bbe098cb1aae55e0a09bb08bc9e0a5a577a2f 100644
--- a/web/core/modules/user/tests/src/Kernel/TempStoreDatabaseTest.php
+++ b/web/core/modules/user/tests/src/Kernel/TempStoreDatabaseTest.php
@@ -96,24 +96,24 @@ public function testUserTempStore() {
       $this->assertEqual(!$i, $stores[0]->setIfNotExists($key, $this->objects[$i]));
       $metadata = $stores[0]->getMetadata($key);
       $this->assertEqual($users[0], $metadata->owner);
-      $this->assertIdenticalObject($this->objects[0], $stores[0]->get($key));
+      $this->assertEquals($this->objects[0], $stores[0]->get($key));
       // Another user should get the same result.
       $metadata = $stores[1]->getMetadata($key);
       $this->assertEqual($users[0], $metadata->owner);
-      $this->assertIdenticalObject($this->objects[0], $stores[1]->get($key));
+      $this->assertEquals($this->objects[0], $stores[1]->get($key));
     }
 
     // Remove the item and try to set it again.
     $stores[0]->delete($key);
     $stores[0]->setIfNotExists($key, $this->objects[1]);
     // This time it should succeed.
-    $this->assertIdenticalObject($this->objects[1], $stores[0]->get($key));
+    $this->assertEquals($this->objects[1], $stores[0]->get($key));
 
     // This user can update the object.
     $stores[0]->set($key, $this->objects[2]);
-    $this->assertIdenticalObject($this->objects[2], $stores[0]->get($key));
+    $this->assertEquals($this->objects[2], $stores[0]->get($key));
     // The object is the same when another user loads it.
-    $this->assertIdenticalObject($this->objects[2], $stores[1]->get($key));
+    $this->assertEquals($this->objects[2], $stores[1]->get($key));
 
     // This user should be allowed to get, update, delete.
     $this->assertTrue($stores[0]->getIfOwner($key) instanceof \stdClass);
@@ -122,8 +122,8 @@ public function testUserTempStore() {
 
     // Another user can update the object and become the owner.
     $stores[1]->set($key, $this->objects[3]);
-    $this->assertIdenticalObject($this->objects[3], $stores[0]->get($key));
-    $this->assertIdenticalObject($this->objects[3], $stores[1]->get($key));
+    $this->assertEquals($this->objects[3], $stores[0]->get($key));
+    $this->assertEquals($this->objects[3], $stores[1]->get($key));
     $metadata = $stores[1]->getMetadata($key);
     $this->assertEqual($users[1], $metadata->owner);
 
diff --git a/web/core/modules/user/tests/src/Kernel/UserAccountFormFieldsTest.php b/web/core/modules/user/tests/src/Kernel/UserAccountFormFieldsTest.php
index 2e44cf4c251e6b05f604ddd4099f929e804d6c73..3c4fbeebc68b100e23e7c7cf8f7b39053007f470 100644
--- a/web/core/modules/user/tests/src/Kernel/UserAccountFormFieldsTest.php
+++ b/web/core/modules/user/tests/src/Kernel/UserAccountFormFieldsTest.php
@@ -135,9 +135,6 @@ protected function buildAccountForm($operation) {
     $entity = $this->container->get('entity_type.manager')
       ->getStorage($entity_type)
       ->create($fields);
-    $this->container->get('entity_type.manager')
-      ->getFormObject($entity_type, $operation)
-      ->setEntity($entity);
 
     // @see EntityFormBuilder::getForm()
     return $this->container->get('entity.form_builder')->getForm($entity, $operation);
diff --git a/web/core/modules/user/tests/src/Kernel/UserInstallTest.php b/web/core/modules/user/tests/src/Kernel/UserInstallTest.php
index 3e9282b5d9cb0ddedcb4bc5d47ca8858133b6212..e8f1620856a4e7c467dc108edcadd2b0e11480c3 100644
--- a/web/core/modules/user/tests/src/Kernel/UserInstallTest.php
+++ b/web/core/modules/user/tests/src/Kernel/UserInstallTest.php
@@ -2,7 +2,6 @@
 
 namespace Drupal\Tests\user\Kernel;
 
-use Drupal\Core\Database\Database;
 use Drupal\KernelTests\KernelTestBase;
 
 /**
@@ -33,22 +32,22 @@ protected function setUp() {
    * Test that the initial users have correct values.
    */
   public function testUserInstall() {
-    $result = Database::getConnection()->query('SELECT u.uid, u.uuid, u.langcode, uf.status FROM {users} u INNER JOIN {users_field_data} uf ON u.uid=uf.uid ORDER BY u.uid')
-      ->fetchAllAssoc('uid');
-    $anon = $result[0];
-    $admin = $result[1];
-    $this->assertFalse(empty($anon->uuid), 'Anon user has a UUID');
-    $this->assertFalse(empty($admin->uuid), 'Admin user has a UUID');
+    $user_ids = \Drupal::entityQuery('user')->sort('uid')->execute();
+    $users = \Drupal::entityTypeManager()->getStorage('user')->loadMultiple($user_ids);
+    $anon = $users[0];
+    $admin = $users[1];
+    $this->assertNotEmpty($anon->uuid(), 'Anon user has a UUID');
+    $this->assertNotEmpty($admin->uuid(), 'Admin user has a UUID');
 
     // Test that the anonymous and administrators languages are equal to the
     // site's default language.
-    $this->assertEqual($anon->langcode, \Drupal::languageManager()->getDefaultLanguage()->getId());
-    $this->assertEqual($admin->langcode, \Drupal::languageManager()->getDefaultLanguage()->getId());
+    $this->assertEquals('en', $anon->language()->getId());
+    $this->assertEquals('en', $admin->language()->getId());
 
     // Test that the administrator is active.
-    $this->assertEqual($admin->status, 1);
+    $this->assertTrue($admin->isActive());
     // Test that the anonymous user is blocked.
-    $this->assertEqual($anon->status, 0);
+    $this->assertTrue($anon->isBlocked());
   }
 
 }
diff --git a/web/core/modules/user/user.module b/web/core/modules/user/user.module
index 74ce5de07c797064d65b489e14c3d4b824c10f4d..a76615bc9507233669c887f2784cb8a0b33530e5 100644
--- a/web/core/modules/user/user.module
+++ b/web/core/modules/user/user.module
@@ -19,6 +19,7 @@
 use Drupal\Core\Session\AnonymousUserSession;
 use Drupal\Core\Site\Settings;
 use Drupal\Core\Url;
+use Drupal\image\Plugin\Field\FieldType\ImageItem;
 use Drupal\system\Entity\Action;
 use Drupal\user\Entity\Role;
 use Drupal\user\Entity\User;
@@ -414,8 +415,15 @@ function user_user_view(array &$build, UserInterface $account, EntityViewDisplay
  * accessibility.
  */
 function user_user_view_alter(array &$build, UserInterface $account, EntityViewDisplayInterface $display) {
-  if (user_picture_enabled() && !empty($build['user_picture'])) {
+  if (!empty($build['user_picture']) && user_picture_enabled()) {
     foreach (Element::children($build['user_picture']) as $key) {
+      if (!isset($build['user_picture'][$key]['#item']) || !($build['user_picture'][$key]['#item'] instanceof ImageItem)) {
+        // User picture field is provided by standard profile install. If the
+        // display is configured to use a different formatter, the #item render
+        // key may not exist, or may not be an image field.
+        continue;
+      }
+      /** @var \Drupal\image\Plugin\Field\FieldType\ImageItem $item */
       $item = $build['user_picture'][$key]['#item'];
       if (!$item->get('alt')->getValue()) {
         $item->get('alt')->setValue(\Drupal::translation()->translate('Profile picture for user @username', ['@username' => $account->getAccountName()]));
diff --git a/web/core/modules/views/src/Plugin/views/field/BulkForm.php b/web/core/modules/views/src/Plugin/views/field/BulkForm.php
index b6f28d4b60ba020a7a7acfd3ed04bf668fe545e8..0f114952933f1d656c06c2d338b599ed2eec39c3 100644
--- a/web/core/modules/views/src/Plugin/views/field/BulkForm.php
+++ b/web/core/modules/views/src/Plugin/views/field/BulkForm.php
@@ -355,6 +355,7 @@ public function viewsForm(&$form, FormStateInterface $form_state) {
    *
    * @param bool $filtered
    *   (optional) Whether to filter actions to selected actions.
+   *
    * @return array
    *   An associative array of operations, suitable for a select element.
    */
diff --git a/web/core/modules/views/src/Plugin/views/style/StylePluginBase.php b/web/core/modules/views/src/Plugin/views/style/StylePluginBase.php
index c23dccd7890ba0093092b10a929cdcb46abb5c1c..f031a32f6d676bf2c927a3e9606fd600988b9510 100644
--- a/web/core/modules/views/src/Plugin/views/style/StylePluginBase.php
+++ b/web/core/modules/views/src/Plugin/views/style/StylePluginBase.php
@@ -537,6 +537,7 @@ public function renderGroupingSets($sets) {
    *   Views 7.x-3.0-rc2. After Views 7.x-3.0 this boolean is only used if
    *   $groupings is an old-style string or if the rendered option is missing
    *   for a grouping instruction.
+   *
    * @return
    *   The grouped record set.
    *   A nested set structure is generated if multiple grouping fields are used.
diff --git a/web/core/modules/views/src/Views.php b/web/core/modules/views/src/Views.php
index 86dcdf7a9a013fe89d04c44c7c0b535bbac6b784..42ae43118a888551fd371571861baebd64448f41 100644
--- a/web/core/modules/views/src/Views.php
+++ b/web/core/modules/views/src/Views.php
@@ -115,14 +115,15 @@ public static function handlerManager($type) {
    * @param string $id
    *   The view ID to load.
    *
-   * @return \Drupal\views\ViewExecutable
-   *   A view executable instance, from the loaded entity.
+   * @return \Drupal\views\ViewExecutable|null
+   *   A view executable instance or NULL if the view does not exist.
    */
   public static function getView($id) {
     $view = \Drupal::entityTypeManager()->getStorage('view')->load($id);
     if ($view) {
       return static::executableFactory()->get($view);
     }
+    return NULL;
   }
 
   /**
diff --git a/web/core/modules/views/src/ViewsConfigUpdater.php b/web/core/modules/views/src/ViewsConfigUpdater.php
index af3260405add9838dbf4a08008559dcfb36f9f1e..2555dbc97fee452a3bd0805eb15c85a6b6ecd907 100644
--- a/web/core/modules/views/src/ViewsConfigUpdater.php
+++ b/web/core/modules/views/src/ViewsConfigUpdater.php
@@ -8,6 +8,7 @@
 use Drupal\Core\DependencyInjection\ContainerInjectionInterface;
 use Drupal\Core\Entity\EntityFieldManagerInterface;
 use Drupal\Core\Entity\EntityTypeManagerInterface;
+use Drupal\Core\Entity\FieldableEntityInterface;
 use Drupal\Core\Entity\Sql\DefaultTableMapping;
 use Symfony\Component\DependencyInjection\ContainerInterface;
 
@@ -285,7 +286,7 @@ protected function getMultivalueBaseFieldUpdateTableInfo() {
       $table_info = [];
 
       foreach ($this->entityTypeManager->getDefinitions() as $entity_type_id => $entity_type) {
-        if ($entity_type->hasHandlerClass('views_data')) {
+        if ($entity_type->hasHandlerClass('views_data') && $entity_type->entityClassImplements(FieldableEntityInterface::class)) {
           $base_field_definitions = $this->entityFieldManager->getBaseFieldDefinitions($entity_type_id);
 
           $entity_storage = $this->entityTypeManager->getStorage($entity_type_id);
diff --git a/web/core/modules/views/tests/modules/views_config_entity_test/config/schema/views_config_entity_test.schema.yml b/web/core/modules/views/tests/modules/views_config_entity_test/config/schema/views_config_entity_test.schema.yml
new file mode 100644
index 0000000000000000000000000000000000000000..8ea57d875970f4e0b6174cf0d9fd6a2cfe4d186c
--- /dev/null
+++ b/web/core/modules/views/tests/modules/views_config_entity_test/config/schema/views_config_entity_test.schema.yml
@@ -0,0 +1,9 @@
+views_config_entity_test.type.*:
+  type: config_entity
+  label: 'Config entity type with Views data'
+  mapping:
+    id:
+      type: string
+    name:
+      type: label
+      label: 'Name'
diff --git a/web/core/modules/views/tests/modules/views_config_entity_test/src/Entity/ViewsConfigEntityTest.php b/web/core/modules/views/tests/modules/views_config_entity_test/src/Entity/ViewsConfigEntityTest.php
new file mode 100644
index 0000000000000000000000000000000000000000..2649e76ad4e70ec4b6569fed5f87766e6d50f65e
--- /dev/null
+++ b/web/core/modules/views/tests/modules/views_config_entity_test/src/Entity/ViewsConfigEntityTest.php
@@ -0,0 +1,26 @@
+<?php
+
+namespace Drupal\views_config_entity_test\Entity;
+
+use Drupal\Core\Config\Entity\ConfigEntityBase;
+
+/**
+ * Defines a configuration-based entity type used for testing Views data.
+ *
+ * @ConfigEntityType(
+ *   id = "views_config_entity_test",
+ *   label = @Translation("Test config entity type with Views data"),
+ *   handlers = {
+ *     "list_builder" = "Drupal\Core\Entity\EntityListBuilder",
+ *     "views_data" = "Drupal\views_config_entity_test\ViewsConfigEntityTestViewsData"
+ *   },
+ *   admin_permission = "administer modules",
+ *   config_prefix = "type",
+ *   entity_keys = {
+ *     "id" = "id",
+ *     "label" = "name"
+ *   }
+ * )
+ */
+class ViewsConfigEntityTest extends ConfigEntityBase {
+}
diff --git a/web/core/modules/views/tests/modules/views_config_entity_test/src/ViewsConfigEntityTestViewsData.php b/web/core/modules/views/tests/modules/views_config_entity_test/src/ViewsConfigEntityTestViewsData.php
new file mode 100644
index 0000000000000000000000000000000000000000..97138f1c404aa7cb89c3128fde57a34fa6fb26d7
--- /dev/null
+++ b/web/core/modules/views/tests/modules/views_config_entity_test/src/ViewsConfigEntityTestViewsData.php
@@ -0,0 +1,27 @@
+<?php
+
+namespace Drupal\views_config_entity_test;
+
+use Drupal\Core\Entity\EntityTypeInterface;
+use Drupal\views\EntityViewsDataInterface;
+
+/**
+ * Provides a view to override views data for config test entity types.
+ */
+class ViewsConfigEntityTestViewsData implements EntityViewsDataInterface {
+
+  /**
+   * {@inheritdoc}
+   */
+  public function getViewsData() {
+    return [];
+  }
+
+  /**
+   * @inheritDoc
+   */
+  public function getViewsTableForEntityType(EntityTypeInterface $entity_type) {
+    return 'views_config_entity_test';
+  }
+
+}
diff --git a/web/core/modules/views/tests/modules/views_config_entity_test/views_config_entity_test.info.yml b/web/core/modules/views/tests/modules/views_config_entity_test/views_config_entity_test.info.yml
new file mode 100644
index 0000000000000000000000000000000000000000..95962a12625dd46f2d5c6e0372048b307b809253
--- /dev/null
+++ b/web/core/modules/views/tests/modules/views_config_entity_test/views_config_entity_test.info.yml
@@ -0,0 +1,5 @@
+name: 'views_config_entity_test'
+description: 'Adds a Config Entity with views data'
+type: module
+package: Testing
+version: VERSION
diff --git a/web/core/modules/views/tests/src/Functional/BulkFormTest.php b/web/core/modules/views/tests/src/Functional/BulkFormTest.php
index 8d72267d54485c34143b72b86ef9fe8e6ae08c72..1a6a8d6aaa84b8a72ca51ffc1bbd7f64ac11fd3d 100644
--- a/web/core/modules/views/tests/src/Functional/BulkFormTest.php
+++ b/web/core/modules/views/tests/src/Functional/BulkFormTest.php
@@ -68,7 +68,11 @@ public function testBulkForm() {
     // Log in as a user with 'administer nodes' permission to have access to the
     // bulk operation.
     $this->drupalCreateContentType(['type' => 'page']);
-    $admin_user = $this->drupalCreateUser(['administer nodes', 'edit any page content', 'delete any page content']);
+    $admin_user = $this->drupalCreateUser([
+      'administer nodes',
+      'edit any page content',
+      'delete any page content',
+    ]);
     $this->drupalLogin($admin_user);
 
     $this->drupalGet('test_bulk_form');
diff --git a/web/core/modules/views/tests/src/Functional/Handler/AreaTest.php b/web/core/modules/views/tests/src/Functional/Handler/AreaTest.php
index cb6ce55183e4b99372c0e81150430b860d240366..30dcaeb7d3f7ad0076607a67a4b4f2c9245d0003 100644
--- a/web/core/modules/views/tests/src/Functional/Handler/AreaTest.php
+++ b/web/core/modules/views/tests/src/Functional/Handler/AreaTest.php
@@ -57,7 +57,10 @@ protected function viewsData() {
    * Tests the generic UI of a area handler.
    */
   public function testUI() {
-    $admin_user = $this->drupalCreateUser(['administer views', 'administer site configuration']);
+    $admin_user = $this->drupalCreateUser([
+      'administer views',
+      'administer site configuration',
+    ]);
     $this->drupalLogin($admin_user);
 
     $types = ['header', 'footer', 'empty'];
@@ -158,7 +161,10 @@ public function testAreaAccess() {
    * Tests global tokens.
    */
   public function testRenderAreaToken() {
-    $admin_user = $this->drupalCreateUser(['administer views', 'administer site configuration']);
+    $admin_user = $this->drupalCreateUser([
+      'administer views',
+      'administer site configuration',
+    ]);
     $this->drupalLogin($admin_user);
 
     $view = Views::getView('test_example_area');
diff --git a/web/core/modules/views/tests/src/Functional/Handler/FieldDropButtonTest.php b/web/core/modules/views/tests/src/Functional/Handler/FieldDropButtonTest.php
index 1762ed5a514db80886ef684b9ed75af96651acb3..2605dd7258f84fe82bb663bbae44a914f9d53f07 100644
--- a/web/core/modules/views/tests/src/Functional/Handler/FieldDropButtonTest.php
+++ b/web/core/modules/views/tests/src/Functional/Handler/FieldDropButtonTest.php
@@ -37,7 +37,11 @@ class FieldDropButtonTest extends ViewTestBase {
   protected function setUp($import_test_views = TRUE) {
     parent::setUp($import_test_views);
 
-    $admin_user = $this->drupalCreateUser(['access content overview', 'administer nodes', 'bypass node access']);
+    $admin_user = $this->drupalCreateUser([
+      'access content overview',
+      'administer nodes',
+      'bypass node access',
+    ]);
     $this->drupalLogin($admin_user);
   }
 
diff --git a/web/core/modules/views/tests/src/Functional/Handler/FieldEntityOperationsTest.php b/web/core/modules/views/tests/src/Functional/Handler/FieldEntityOperationsTest.php
index 99db5e1adb03c4ae4a66c97535c9863bc56925da..c7e89f963096c6239b5b2eb2d50673e72dca269a 100644
--- a/web/core/modules/views/tests/src/Functional/Handler/FieldEntityOperationsTest.php
+++ b/web/core/modules/views/tests/src/Functional/Handler/FieldEntityOperationsTest.php
@@ -66,7 +66,11 @@ public function testEntityOperations() {
       $entities[$i] = $entity;
     }
 
-    $admin_user = $this->drupalCreateUser(['access administration pages', 'administer nodes', 'bypass node access']);
+    $admin_user = $this->drupalCreateUser([
+      'access administration pages',
+      'administer nodes',
+      'bypass node access',
+    ]);
     $this->drupalLogin($this->rootUser);
     $this->drupalGet('test-entity-operations');
     /** @var $entity \Drupal\entity_test\Entity\EntityTest */
diff --git a/web/core/modules/views/tests/src/Functional/Handler/FieldWebTest.php b/web/core/modules/views/tests/src/Functional/Handler/FieldWebTest.php
index b61204e1f9bdffbb322c27c9177c54bab4ff2b5d..4d2bb7fd7b954e379215afcdf318277e0742df0c 100644
--- a/web/core/modules/views/tests/src/Functional/Handler/FieldWebTest.php
+++ b/web/core/modules/views/tests/src/Functional/Handler/FieldWebTest.php
@@ -125,6 +125,7 @@ protected function clickSortLoadIdsFromOutput() {
    *   The message to display along with the assertion.
    * @param string $group
    *   The type of assertion - examples are "Browser", "PHP".
+   *
    * @return bool
    *   TRUE if the assertion succeeded, FALSE otherwise.
    */
@@ -143,6 +144,7 @@ protected function assertSubString($haystack, $needle, $message = '', $group = '
    *   The message to display along with the assertion.
    * @param string $group
    *   The type of assertion - examples are "Browser", "PHP".
+   *
    * @return bool
    *   TRUE if the assertion succeeded, FALSE otherwise.
    */
diff --git a/web/core/modules/views/tests/src/Functional/Handler/FilterDateTest.php b/web/core/modules/views/tests/src/Functional/Handler/FilterDateTest.php
index e1d3f439a914b38c3d0d62bf141f8291cbb4fba0..8d325e5c01ec6d1d29c64408a38e1c929c0a5eb4 100644
--- a/web/core/modules/views/tests/src/Functional/Handler/FilterDateTest.php
+++ b/web/core/modules/views/tests/src/Functional/Handler/FilterDateTest.php
@@ -184,7 +184,10 @@ protected function _testBetween() {
    */
   protected function _testUiValidation() {
 
-    $this->drupalLogin($this->drupalCreateUser(['administer views', 'administer site configuration']));
+    $this->drupalLogin($this->drupalCreateUser([
+      'administer views',
+      'administer site configuration',
+    ]));
 
     $this->drupalGet('admin/structure/views/view/test_filter_date_between/edit');
     $this->drupalGet('admin/structure/views/nojs/handler/test_filter_date_between/default/filter/created');
diff --git a/web/core/modules/views/tests/src/Functional/Plugin/AccessTest.php b/web/core/modules/views/tests/src/Functional/Plugin/AccessTest.php
index 1fca2def69730e2478e9369e1a1a996ae765f1ec..de12c0eb74c18b943c1a3b41d6c911cc066d5d75 100644
--- a/web/core/modules/views/tests/src/Functional/Plugin/AccessTest.php
+++ b/web/core/modules/views/tests/src/Functional/Plugin/AccessTest.php
@@ -58,7 +58,9 @@ protected function setUp($import_test_views = TRUE) {
     $this->webUser = $this->drupalCreateUser();
 
     $normal_role = $this->drupalCreateRole([]);
-    $this->normalUser = $this->drupalCreateUser(['views_test_data test permission']);
+    $this->normalUser = $this->drupalCreateUser([
+      'views_test_data test permission',
+    ]);
     $this->normalUser->addRole($normal_role);
     // @todo when all the plugin information is cached make a reset function and
     // call it here.
diff --git a/web/core/modules/views/tests/src/Functional/Plugin/ArgumentDefaultTest.php b/web/core/modules/views/tests/src/Functional/Plugin/ArgumentDefaultTest.php
index 2ee68ea6162635c9ec3ff4576486549815d7c337..1306b92a4737a0c6f40bdd984c240f88a10270c3 100644
--- a/web/core/modules/views/tests/src/Functional/Plugin/ArgumentDefaultTest.php
+++ b/web/core/modules/views/tests/src/Functional/Plugin/ArgumentDefaultTest.php
@@ -91,7 +91,10 @@ public function testArgumentDefaultPlugin() {
    * Tests the use of a default argument plugin that provides no options.
    */
   public function testArgumentDefaultNoOptions() {
-    $admin_user = $this->drupalCreateUser(['administer views', 'administer site configuration']);
+    $admin_user = $this->drupalCreateUser([
+      'administer views',
+      'administer site configuration',
+    ]);
     $this->drupalLogin($admin_user);
 
     // The current_user plugin has no options form, and should pass validation.
diff --git a/web/core/modules/views/tests/src/Functional/Plugin/ContextualFiltersBlockContextTest.php b/web/core/modules/views/tests/src/Functional/Plugin/ContextualFiltersBlockContextTest.php
index c41edf53c01bf2efbe452dc6cc764abbee1627ac..508a61a5eaf73e065b7a99e9c91000b79f232faf 100644
--- a/web/core/modules/views/tests/src/Functional/Plugin/ContextualFiltersBlockContextTest.php
+++ b/web/core/modules/views/tests/src/Functional/Plugin/ContextualFiltersBlockContextTest.php
@@ -81,7 +81,10 @@ protected function setUp($import_test_views = TRUE) {
    * Tests exposed context.
    */
   public function testBlockContext() {
-    $this->drupalLogin($this->drupalCreateUser(['administer views', 'administer blocks']));
+    $this->drupalLogin($this->drupalCreateUser([
+      'administer views',
+      'administer blocks',
+    ]));
 
     // Check if context was correctly propagated to the block.
     $definition = $this->container->get('plugin.manager.block')
diff --git a/web/core/modules/views/tests/src/Functional/Plugin/DisabledDisplayTest.php b/web/core/modules/views/tests/src/Functional/Plugin/DisabledDisplayTest.php
index 5f3f3705bb5d1cdfb328dab73060203c35cd4429..0f6680af5b9966665ecfd6fd0feeccbe9698704a 100644
--- a/web/core/modules/views/tests/src/Functional/Plugin/DisabledDisplayTest.php
+++ b/web/core/modules/views/tests/src/Functional/Plugin/DisabledDisplayTest.php
@@ -38,7 +38,9 @@ protected function setUp($import_test_views = TRUE) {
 
     $this->drupalPlaceBlock('page_title_block');
 
-    $admin_user = $this->drupalCreateUser(['administer site configuration']);
+    $admin_user = $this->drupalCreateUser([
+      'administer site configuration',
+    ]);
     $this->drupalLogin($admin_user);
   }
 
diff --git a/web/core/modules/views/tests/src/Functional/Plugin/DisplayTest.php b/web/core/modules/views/tests/src/Functional/Plugin/DisplayTest.php
index 515a9179e385ebc6ac1347c6f72b06244cdcac78..d828a4ce48297ded26dd140f9c23cd1a643fcdf9 100644
--- a/web/core/modules/views/tests/src/Functional/Plugin/DisplayTest.php
+++ b/web/core/modules/views/tests/src/Functional/Plugin/DisplayTest.php
@@ -136,7 +136,7 @@ public function testDisplayPlugin() {
 
     // Check the new value has been saved by checking the UI summary text.
     $this->drupalGet('admin/structure/views/view/test_view/edit/display_test_1');
-    $this->assertLink($test_option);
+    $this->assertSession()->linkExists($test_option);
 
     // Test the enable/disable status of a display.
     $view->display_handler->setOption('enabled', FALSE);
diff --git a/web/core/modules/views/tests/src/Functional/Plugin/MenuLinkTest.php b/web/core/modules/views/tests/src/Functional/Plugin/MenuLinkTest.php
index 9d58f4a4974de7c3b5cb36ed274e279acd548484..f38003126e90a64ecc7c29406e89b6ef032b40e0 100644
--- a/web/core/modules/views/tests/src/Functional/Plugin/MenuLinkTest.php
+++ b/web/core/modules/views/tests/src/Functional/Plugin/MenuLinkTest.php
@@ -53,7 +53,10 @@ protected function setUp($import_test_views = TRUE) {
 
     $this->enableViewsTestModule();
 
-    $this->adminUser = $this->drupalCreateUser(['administer views', 'administer menu']);
+    $this->adminUser = $this->drupalCreateUser([
+      'administer views',
+      'administer menu',
+    ]);
     $this->drupalPlaceBlock('system_menu_block:main');
     $this->drupalCreateContentType(['type' => 'page']);
   }
diff --git a/web/core/modules/views/tests/src/Functional/Plugin/NumericFormatPluralTest.php b/web/core/modules/views/tests/src/Functional/Plugin/NumericFormatPluralTest.php
index 57a2f8befe42109a235a8566bb481e2aff391cc6..bd29a17328f5fdfeef6dcd40792627ac99af4260 100644
--- a/web/core/modules/views/tests/src/Functional/Plugin/NumericFormatPluralTest.php
+++ b/web/core/modules/views/tests/src/Functional/Plugin/NumericFormatPluralTest.php
@@ -36,7 +36,10 @@ class NumericFormatPluralTest extends ViewTestBase {
   protected function setUp($import_test_views = TRUE) {
     parent::setUp($import_test_views);
 
-    $web_user = $this->drupalCreateUser(['administer views', 'administer languages']);
+    $web_user = $this->drupalCreateUser([
+      'administer views',
+      'administer languages',
+    ]);
     $this->drupalLogin($web_user);
   }
 
diff --git a/web/core/modules/views/tests/src/Functional/Plugin/PagerTest.php b/web/core/modules/views/tests/src/Functional/Plugin/PagerTest.php
index 81a0fa50486d4a59d0dd8af837aca67324d4f589..3cae40c6d159de37dfdd1c62f2893685beacf856 100644
--- a/web/core/modules/views/tests/src/Functional/Plugin/PagerTest.php
+++ b/web/core/modules/views/tests/src/Functional/Plugin/PagerTest.php
@@ -51,7 +51,10 @@ public function testStorePagerSettings() {
     // Show the master display so the override selection is shown.
     \Drupal::configFactory()->getEditable('views.settings')->set('ui.show.master_display', TRUE)->save();
 
-    $admin_user = $this->drupalCreateUser(['administer views', 'administer site configuration']);
+    $admin_user = $this->drupalCreateUser([
+      'administer views',
+      'administer site configuration',
+    ]);
     $this->drupalLogin($admin_user);
     // Test behavior described in
     //   https://www.drupal.org/node/652712#comment-2354918.
@@ -384,7 +387,12 @@ public function testPagerConfigTranslation() {
     $this->container->get('module_installer')->install(['locale', 'language', 'config_translation']);
     $this->resetAll();
 
-    $admin_user = $this->drupalCreateUser(['access content overview', 'administer nodes', 'bypass node access', 'translate configuration']);
+    $admin_user = $this->drupalCreateUser([
+      'access content overview',
+      'administer nodes',
+      'bypass node access',
+      'translate configuration',
+    ]);
     $this->drupalLogin($admin_user);
 
     $langcode = 'nl';
diff --git a/web/core/modules/views/tests/src/Functional/Plugin/StyleTableTest.php b/web/core/modules/views/tests/src/Functional/Plugin/StyleTableTest.php
index bcd8cf8566046fe205e2d1a69d4d538be1e44eb8..e81c213fde9a567afba3cb3d7b4507afd0278bec 100644
--- a/web/core/modules/views/tests/src/Functional/Plugin/StyleTableTest.php
+++ b/web/core/modules/views/tests/src/Functional/Plugin/StyleTableTest.php
@@ -211,6 +211,8 @@ public function testGrouping() {
 
     // Ensure that we don't find the caption containing unsafe markup.
     $this->assertNoRaw($unsafe_markup, "Didn't find caption containing unsafe markup.");
+    // Ensure that the summary isn't shown.
+    $this->assertEmpty($this->xpath('//caption/details'));
 
     // Ensure that all expected captions are found.
     foreach ($expected_captions as $raw_caption) {
diff --git a/web/core/modules/views/tests/src/Functional/SearchIntegrationTest.php b/web/core/modules/views/tests/src/Functional/SearchIntegrationTest.php
index 134417329d1b87bf1521d4239d3681fa2abcb48c..233cbabd489b9a00959771ea1da538b954a2ede2 100644
--- a/web/core/modules/views/tests/src/Functional/SearchIntegrationTest.php
+++ b/web/core/modules/views/tests/src/Functional/SearchIntegrationTest.php
@@ -69,21 +69,21 @@ public function testSearchIntegration() {
 
     // Page with a keyword filter of 'pizza'.
     $this->drupalGet('test-filter');
-    $this->assertLink('pizza');
-    $this->assertNoLink('sandwich');
-    $this->assertLink('cola');
+    $this->assertSession()->linkExists('pizza');
+    $this->assertSession()->linkNotExists('sandwich');
+    $this->assertSession()->linkExists('cola');
 
     // Page with a keyword argument, various argument values.
     // Verify that the correct nodes are shown, and only once.
     $this->drupalGet('test-arg/pizza');
     $this->assertOneLink('pizza');
-    $this->assertNoLink('sandwich');
+    $this->assertSession()->linkNotExists('sandwich');
     $this->assertOneLink('cola');
 
     $this->drupalGet('test-arg/sandwich');
-    $this->assertNoLink('pizza');
+    $this->assertSession()->linkNotExists('pizza');
     $this->assertOneLink('sandwich');
-    $this->assertNoLink('cola');
+    $this->assertSession()->linkNotExists('cola');
 
     $this->drupalGet('test-arg/pizza OR sandwich');
     $this->assertOneLink('pizza');
@@ -91,18 +91,18 @@ public function testSearchIntegration() {
     $this->assertOneLink('cola');
 
     $this->drupalGet('test-arg/pizza sandwich OR cola');
-    $this->assertNoLink('pizza');
-    $this->assertNoLink('sandwich');
+    $this->assertSession()->linkNotExists('pizza');
+    $this->assertSession()->linkNotExists('sandwich');
     $this->assertOneLink('cola');
 
     $this->drupalGet('test-arg/cola pizza');
-    $this->assertNoLink('pizza');
-    $this->assertNoLink('sandwich');
+    $this->assertSession()->linkNotExists('pizza');
+    $this->assertSession()->linkNotExists('sandwich');
     $this->assertOneLink('cola');
 
     $this->drupalGet('test-arg/"cola is good"');
-    $this->assertNoLink('pizza');
-    $this->assertNoLink('sandwich');
+    $this->assertSession()->linkNotExists('pizza');
+    $this->assertSession()->linkNotExists('sandwich');
     $this->assertOneLink('cola');
 
     // Test sorting.
diff --git a/web/core/modules/views/tests/src/Functional/SearchMultilingualTest.php b/web/core/modules/views/tests/src/Functional/SearchMultilingualTest.php
index d7e209aebdfc55cff8f6d2702cc707100f684a2e..d2d2fb05d7e5e6b14322ee22cb93f6613e694ccd 100644
--- a/web/core/modules/views/tests/src/Functional/SearchMultilingualTest.php
+++ b/web/core/modules/views/tests/src/Functional/SearchMultilingualTest.php
@@ -45,7 +45,14 @@ class SearchMultilingualTest extends ViewTestBase {
   public function testMultilingualSearchFilter() {
     // Create a user with admin for languages, content, and content types, plus
     // the ability to access content and searches.
-    $user = $this->drupalCreateUser(['administer nodes', 'administer content types', 'administer languages', 'administer content translation', 'access content', 'search content']);
+    $user = $this->drupalCreateUser([
+      'administer nodes',
+      'administer content types',
+      'administer languages',
+      'administer content translation',
+      'access content',
+      'search content',
+    ]);
     $this->drupalLogin($user);
 
     // Add Spanish language programmatically.
@@ -87,8 +94,8 @@ public function testMultilingualSearchFilter() {
     // translated node, which has 'pizza' in the title, but not the English
     // one, which does not have the word 'pizza' in it.
     $this->drupalGet('test-filter');
-    $this->assertLink('pizza', 0, 'Found translation with matching title');
-    $this->assertNoLink('sandwich', 'Did not find translation with non-matching title');
+    $this->assertSession()->linkExists('pizza', 0, 'Found translation with matching title');
+    $this->assertSession()->linkNotExists('sandwich', 'Did not find translation with non-matching title');
   }
 
 }
diff --git a/web/core/modules/views/tests/src/Functional/Wizard/MenuTest.php b/web/core/modules/views/tests/src/Functional/Wizard/MenuTest.php
index f35b851ea4dbdc99d9b1c6d168d9ccfedf68ac18..e9483c30df3cd593abae8a910f8dded03f554d08 100644
--- a/web/core/modules/views/tests/src/Functional/Wizard/MenuTest.php
+++ b/web/core/modules/views/tests/src/Functional/Wizard/MenuTest.php
@@ -40,7 +40,7 @@ public function testMenus() {
     // expect the main menu to display).
     $this->drupalGet('');
     $this->assertSession()->statusCodeEquals(200);
-    $this->assertLink($view['page[link_properties][title]']);
+    $this->assertSession()->linkExists($view['page[link_properties][title]']);
     $this->assertLinkByHref(Url::fromUri('base:' . $view['page[path]'])->toString());
 
     // Make sure the link is associated with the main menu.
diff --git a/web/core/modules/views/tests/src/Functional/Wizard/WizardTestBase.php b/web/core/modules/views/tests/src/Functional/Wizard/WizardTestBase.php
index 0178c08c25e9314a95e5ef9050c42e0f33041083..482e07de557d574af79bc348cba6d843c32cc27e 100644
--- a/web/core/modules/views/tests/src/Functional/Wizard/WizardTestBase.php
+++ b/web/core/modules/views/tests/src/Functional/Wizard/WizardTestBase.php
@@ -20,7 +20,13 @@ protected function setUp($import_test_views = TRUE) {
     parent::setUp($import_test_views);
 
     // Create and log in a user with administer views permission.
-    $views_admin = $this->drupalCreateUser(['administer views', 'administer blocks', 'bypass node access', 'access user profiles', 'view all revisions']);
+    $views_admin = $this->drupalCreateUser([
+      'administer views',
+      'administer blocks',
+      'bypass node access',
+      'access user profiles',
+      'view all revisions',
+    ]);
     $this->drupalLogin($views_admin);
     $this->drupalPlaceBlock('local_actions_block');
   }
diff --git a/web/core/modules/views/tests/src/Kernel/ModuleTest.php b/web/core/modules/views/tests/src/Kernel/ModuleTest.php
index 219d3ae3b8168d4381b2780e56f0128b7f334cfb..a37446e24d5082e46a54f74f4b8f316a6fc9eb73 100644
--- a/web/core/modules/views/tests/src/Kernel/ModuleTest.php
+++ b/web/core/modules/views/tests/src/Kernel/ModuleTest.php
@@ -2,15 +2,19 @@
 
 namespace Drupal\Tests\views\Kernel;
 
+use Drupal\Component\Render\FormattableMarkup;
+use Drupal\Core\Form\FormState;
+use Drupal\views\Plugin\views\area\Broken as BrokenArea;
+use Drupal\views\Plugin\views\field\Broken as BrokenField;
+use Drupal\views\Plugin\views\filter\Broken as BrokenFilter;
+use Drupal\views\Plugin\views\filter\Standard;
+use Drupal\views\Views;
+
 /**
  * Tests basic functions from the Views module.
  *
  * @group views
  */
-use Drupal\views\Plugin\views\filter\Standard;
-use Drupal\views\Views;
-use Drupal\Component\Render\FormattableMarkup;
-
 class ModuleTest extends ViewsKernelTestBase {
 
   /**
@@ -42,14 +46,41 @@ class ModuleTest extends ViewsKernelTestBase {
    * @see \Drupal\views\Plugin\ViewsHandlerManager::getHandler()
    */
   public function testViewsGetHandler() {
-    $types = ['field', 'area', 'filter'];
-    foreach ($types as $type) {
-      $item = [
-        'table' => $this->randomMachineName(),
-        'field' => $this->randomMachineName(),
-      ];
-      $handler = $this->container->get('plugin.manager.views.' . $type)->getHandler($item);
-      $this->assertEqual('Drupal\views\Plugin\views\\' . $type . '\Broken', get_class($handler), new FormattableMarkup('Make sure that a broken handler of type: @type is created.', ['@type' => $type]));
+    $types = [
+      'field' => BrokenField::class,
+      'area' => BrokenArea::class,
+      'filter' => BrokenFilter::class,
+    ];
+    // Test non-existent tables/fields.
+    $items = [
+      [
+        'table' => 'table_invalid',
+        'field' => 'id',
+      ],
+      [
+        'table' => 'views_test_data',
+        'field' => 'field_invalid',
+      ],
+    ];
+    $form_state = new FormState();
+    $description_top = '<p>' . t('The handler for this item is broken or missing. The following details are available:') . '</p>';
+    $description_bottom = '<p>' . t('Enabling the appropriate module may solve this issue. Otherwise, check to see if there is a module update available.') . '</p>';
+    foreach ($types as $type => $class) {
+      foreach ($items as $item) {
+        $handler = $this->container->get('plugin.manager.views.' . $type)
+          ->getHandler($item);
+        $this->assertTrue($handler instanceof $class);
+        // Make sure details available at edit form.
+        $form = [];
+        $handler->buildOptionsForm($form, $form_state);
+        $this->assertEquals($description_top, $form['description']['description_top']['#markup']);
+        $this->assertEquals($description_bottom, $form['description']['description_bottom']['#markup']);
+        $details = [];
+        foreach ($item as $key => $value) {
+          $details[] = new FormattableMarkup('@key: @value', ['@key' => $key, '@value' => $value]);
+        }
+        $this->assertEquals($details, $form['description']['detail_list']['#items']);
+      }
     }
 
     $views_data = $this->viewsData();
@@ -77,61 +108,6 @@ public function testViewsGetHandler() {
     ];
     $handler = $this->container->get('plugin.manager.views.filter')->getHandler($item, 'standard');
     $this->assertInstanceOf(Standard::class, $handler);
-
-    // @todo Reinstate these tests when the debug() in views_get_handler() is
-    //   restored.
-    return;
-
-    // Test non-existent tables/fields.
-    set_error_handler([$this, 'customErrorHandler']);
-    $item = [
-      'table' => 'views_test_data',
-      'field' => 'field_invalid',
-    ];
-    $this->container->get('plugin.manager.views.field')->getHandler($item);
-    $this->assertStringContainsString(new FormattableMarkup("Missing handler: @table @field @type", ['@table' => 'views_test_data', '@field' => 'field_invalid', '@type' => 'field']), $this->lastErrorMessage, 'An invalid field name throws a debug message.');
-    unset($this->lastErrorMessage);
-
-    $item = [
-      'table' => 'table_invalid',
-      'field' => 'id',
-    ];
-    $this->container->get('plugin.manager.views.filter')->getHandler($item);
-    $this->assertStringContainsString(new FormattableMarkup("Missing handler: @table @field @type", ['@table' => 'table_invalid', '@field' => 'id', '@type' => 'filter']), $this->lastErrorMessage, 'An invalid table name throws a debug message.');
-    unset($this->lastErrorMessage);
-
-    $item = [
-      'table' => 'table_invalid',
-      'field' => 'id',
-    ];
-    $this->container->get('plugin.manager.views.filter')->getHandler($item);
-    $this->assertStringContainsString(new FormattableMarkup("Missing handler: @table @field @type", ['@table' => 'table_invalid', '@field' => 'id', '@type' => 'filter']), $this->lastErrorMessage, 'An invalid table name throws a debug message.');
-    unset($this->lastErrorMessage);
-
-    restore_error_handler();
-  }
-
-  /**
-   * Defines an error handler which is used in the test.
-   *
-   * Because this is registered in set_error_handler(), it has to be public.
-   *
-   * @param int $error_level
-   *   The level of the error raised.
-   * @param string $message
-   *   The error message.
-   * @param string $filename
-   *   The filename that the error was raised in.
-   * @param int $line
-   *   The line number the error was raised at.
-   * @param array $context
-   *   An array that points to the active symbol table at the point the error
-   *   occurred.
-   *
-   * @see set_error_handler()
-   */
-  public function customErrorHandler($error_level, $message, $filename, $line, $context) {
-    $this->lastErrorMessage = $message;
   }
 
   /**
diff --git a/web/core/modules/views/tests/src/Kernel/ViewsConfigUpdaterTest.php b/web/core/modules/views/tests/src/Kernel/ViewsConfigUpdaterTest.php
index d17e60ac333bfacfb02bc1d2672b95f68cfccfce..f8c416f95ab79c3089bbba9fdac87f60893d2ac0 100644
--- a/web/core/modules/views/tests/src/Kernel/ViewsConfigUpdaterTest.php
+++ b/web/core/modules/views/tests/src/Kernel/ViewsConfigUpdaterTest.php
@@ -19,6 +19,11 @@ class ViewsConfigUpdaterTest extends ViewsKernelTestBase {
    */
   protected $configUpdater;
 
+  /**
+   * {@inheritdoc}
+   */
+  public static $modules = ['views_config_entity_test'];
+
   /**
    * {@inheritdoc}
    */
diff --git a/web/core/modules/views/tests/src/Unit/ViewsTest.php b/web/core/modules/views/tests/src/Unit/ViewsTest.php
index f6dbaadb2a98459484d49f8237a6dde08aafda79..f14adae2715639542e942ac33b985f83bb42e1ed 100644
--- a/web/core/modules/views/tests/src/Unit/ViewsTest.php
+++ b/web/core/modules/views/tests/src/Unit/ViewsTest.php
@@ -2,6 +2,7 @@
 
 namespace Drupal\Tests\views\Unit;
 
+use Drupal\Core\Entity\EntityStorageInterface;
 use Drupal\Core\Entity\EntityTypeManagerInterface;
 use Drupal\Tests\UnitTestCase;
 use Drupal\views\Views;
@@ -72,6 +73,21 @@ public function testGetView() {
     $this->assertEquals(spl_object_hash($view), spl_object_hash($executable->storage));
   }
 
+  /**
+   * Tests the getView() method against a non-existent view.
+   *
+   * @covers ::getView
+   */
+  public function testGetNonExistentView() {
+    $entity_type_manager = $this->prophesize(EntityTypeManagerInterface::class);
+    $storage = $this->prophesize(EntityStorageInterface::class);
+    $storage->load('test_view_non_existent')->willReturn(NULL);
+    $entity_type_manager->getStorage('view')->willReturn($storage->reveal());
+    $this->container->set('entity_type.manager', $entity_type_manager->reveal());
+    $executable_does_not_exist = Views::getView('test_view_non_existent');
+    $this->assertNull($executable_does_not_exist);
+  }
+
   /**
    * @covers ::getApplicableViews
    *
diff --git a/web/core/modules/views/views.module b/web/core/modules/views/views.module
index 398b670f683b78d8b296de20bf5df1df5e6ef972..f9f2946c5ddf819533bf20001c89c320dfe50279 100644
--- a/web/core/modules/views/views.module
+++ b/web/core/modules/views/views.module
@@ -624,6 +624,7 @@ function views_disable_view(View $view) {
  * @param array $element
  *   An associative array containing the properties of the element.
  *   Properties used: #substitutions, #children.
+ *
  * @return array
  *   The $element with prepared variables ready for #theme 'form'
  *   in views_form_views_form.
@@ -777,6 +778,7 @@ function views_embed_view($name, $display_id = 'default') {
  *   Everything after #views-tab- is the display ID, e.g. page_1.
  * @param ...
  *   Any additional parameters will be passed as arguments.
+ *
  * @return array
  *   An array containing an object for each view item.
  */
diff --git a/web/core/modules/views/views.theme.inc b/web/core/modules/views/views.theme.inc
index ba955976088731e837b88be1a4c088e785f3d9c9..019899ada4a433e83e1c132f458f4b8115174ca0 100644
--- a/web/core/modules/views/views.theme.inc
+++ b/web/core/modules/views/views.theme.inc
@@ -664,20 +664,22 @@ function template_preprocess_views_view_table(&$variables) {
   // variables, although core templates now all use 'summary_element' instead.
   $variables['summary'] = $handler->options['summary'];
   $variables['description'] = $handler->options['description'];
-  $variables['summary_element'] = [
-    '#type' => 'details',
-    '#title' => $handler->options['summary'],
-    // To ensure that the description is properly escaped during rendering, use
-    // an 'inline_template' to let Twig do its magic, instead of 'markup'.
-    'description' => [
-      '#type' => 'inline_template',
-      '#template' => '{{ description }}',
-      '#context' => [
-        'description' => $handler->options['description'],
+  if (!empty($handler->options['summary']) || !empty($handler->options['description'])) {
+    $variables['summary_element'] = [
+      '#type' => 'details',
+      '#title' => $handler->options['summary'],
+      // To ensure that the description is properly escaped during rendering,
+      // use an 'inline_template' to let Twig do its magic, instead of 'markup'.
+      'description' => [
+        '#type' => 'inline_template',
+        '#template' => '{{ description }}',
+        '#context' => [
+          'description' => $handler->options['description'],
+        ],
       ],
-    ],
-  ];
-  $variables['caption_needed'] |= !empty($variables['summary']) || !empty($variables['description']);
+    ];
+    $variables['caption_needed'] = TRUE;
+  }
 
   $variables['responsive'] = FALSE;
   // If the table has headers and it should react responsively to columns hidden
diff --git a/web/core/modules/views_ui/tests/src/Functional/AnalyzeTest.php b/web/core/modules/views_ui/tests/src/Functional/AnalyzeTest.php
index 2ad5adc5f27981f8b3953782ded99eabd239ef8b..fcf0d850fc08e3711b0dbc66340bc48428df5c0f 100644
--- a/web/core/modules/views_ui/tests/src/Functional/AnalyzeTest.php
+++ b/web/core/modules/views_ui/tests/src/Functional/AnalyzeTest.php
@@ -35,7 +35,7 @@ public function testAnalyzeBasic() {
     $this->drupalLogin($this->adminUser);
 
     $this->drupalGet('admin/structure/views/view/test_view/edit');
-    $this->assertLink(t('Analyze view'));
+    $this->assertSession()->linkExists(t('Analyze view'));
 
     // This redirects the user to the analyze form.
     $this->clickLink(t('Analyze view'));
diff --git a/web/core/modules/views_ui/tests/src/Functional/DefaultViewsTest.php b/web/core/modules/views_ui/tests/src/Functional/DefaultViewsTest.php
index 6a5a75f036b6a5e7053fd0d9a26b4c44252b6a96..7a356d00c26b268bae7b926665b43158829e77e4 100644
--- a/web/core/modules/views_ui/tests/src/Functional/DefaultViewsTest.php
+++ b/web/core/modules/views_ui/tests/src/Functional/DefaultViewsTest.php
@@ -53,7 +53,7 @@ public function testDefaultViews() {
 
     // It should not be possible to revert the view yet.
     // @todo Figure out how to handle this with the new configuration system.
-    // $this->assertNoLink(t('Revert'));
+    // $this->assertSession()->linkNotExists(t('Revert'));
     // $revert_href = 'admin/structure/views/view/glossary/revert';
     // $this->assertNoLinkByHref($revert_href);
 
@@ -81,7 +81,7 @@ public function testDefaultViews() {
     // It should now be possible to revert the view. Do that, and make sure the
     // view title we added above no longer is displayed.
     // $this->drupalGet('admin/structure/views');
-    // $this->assertLink(t('Revert'));
+    // $this->assertSession()->linkExists(t('Revert'));
     // $this->assertLinkByHref($revert_href);
     // $this->drupalPostForm($revert_href, array(), t('Revert'));
     // $this->drupalGet('glossary');
diff --git a/web/core/modules/views_ui/tests/src/Functional/DisplayCRUDTest.php b/web/core/modules/views_ui/tests/src/Functional/DisplayCRUDTest.php
index b24efd5e87d2c49d7d0f29ad56f26642c6920698..f510041484174baa58da7df3dd0861a448a12ab0 100644
--- a/web/core/modules/views_ui/tests/src/Functional/DisplayCRUDTest.php
+++ b/web/core/modules/views_ui/tests/src/Functional/DisplayCRUDTest.php
@@ -47,8 +47,8 @@ public function testAddDisplay() {
     $this->drupalPostForm(NULL, [], 'Add Page');
     $this->assertLinkByHref($path_prefix . '/page_1', 0, 'Make sure after adding a display the new display appears in the UI');
 
-    $this->assertNoLink('Master*', 'Make sure the master display is not marked as changed.');
-    $this->assertLink('Page*', 0, 'Make sure the added display is marked as changed.');
+    $this->assertSession()->linkNotExists('Master*', 'Make sure the master display is not marked as changed.');
+    $this->assertSession()->linkExists('Page*', 0, 'Make sure the added display is marked as changed.');
 
     $this->drupalPostForm("admin/structure/views/nojs/display/{$view['id']}/page_1/path", ['path' => 'test/path'], t('Apply'));
     $this->drupalPostForm(NULL, [], t('Save'));
diff --git a/web/core/modules/views_ui/tests/src/Functional/DisplayExtenderUITest.php b/web/core/modules/views_ui/tests/src/Functional/DisplayExtenderUITest.php
index 9a4edbc3b6b672dcfa5ee6a259d6c0ff4df646c8..5b01e7f591b69fb28d3b36f9bf1fcdd523a761af 100644
--- a/web/core/modules/views_ui/tests/src/Functional/DisplayExtenderUITest.php
+++ b/web/core/modules/views_ui/tests/src/Functional/DisplayExtenderUITest.php
@@ -38,7 +38,7 @@ public function testDisplayExtenderUI() {
 
     $random_text = $this->randomMachineName();
     $this->drupalPostForm($display_option_url, ['test_extender_test_option' => $random_text], t('Apply'));
-    $this->assertLink($random_text);
+    $this->assertSession()->linkExists($random_text);
     $this->drupalPostForm(NULL, [], t('Save'));
     $view = Views::getView($view->storage->id());
     $view->initDisplay();
diff --git a/web/core/modules/views_ui/tests/src/Functional/DisplayPathTest.php b/web/core/modules/views_ui/tests/src/Functional/DisplayPathTest.php
index e4ba28fad8107773f6df62543f908ed6028ec42b..d73df00a33634ba078abfe920ae3e4615a782796 100644
--- a/web/core/modules/views_ui/tests/src/Functional/DisplayPathTest.php
+++ b/web/core/modules/views_ui/tests/src/Functional/DisplayPathTest.php
@@ -57,7 +57,7 @@ protected function doBasicPathUITest() {
     // Add a new page display and check the appearing text.
     $this->drupalPostForm(NULL, [], 'Add Page');
     $this->assertText(t('No path is set'), 'The right text appears if no path was set.');
-    $this->assertNoLink(t('View @display', ['@display' => 'page']), 'No view page link found on the page.');
+    $this->assertSession()->linkNotExists(t('View @display', ['@display' => 'page']), 'No view page link found on the page.');
 
     // Save a path and make sure the summary appears as expected.
     $random_path = $this->randomMachineName();
@@ -68,7 +68,7 @@ protected function doBasicPathUITest() {
     $this->drupalPostForm('admin/structure/views/nojs/display/test_view/page_1/path', ['path' => $random_path], t('Apply'));
     $this->assertText('/' . $random_path, 'The custom path appears in the summary.');
     $display_link_text = t('View @display', ['@display' => 'Page']);
-    $this->assertLink($display_link_text, 0, 'view page link found on the page.');
+    $this->assertSession()->linkExists($display_link_text, 0, 'view page link found on the page.');
     $this->clickLink($display_link_text);
     $this->assertUrl($random_path);
   }
@@ -159,7 +159,7 @@ public function testMenuOptions() {
     $this->assertUrl('admin/structure/views/view/test_view/edit/page_1');
 
     $this->drupalGet('admin/structure/views/view/test_view');
-    $this->assertLink(t('Tab: @title', ['@title' => 'Test tab title']));
+    $this->assertSession()->linkExists(t('Tab: @title', ['@title' => 'Test tab title']));
     // If it's a default tab, it should also have an additional settings link.
     $this->assertLinkByHref('admin/structure/views/nojs/display/test_view/page_1/tab_options');
 
diff --git a/web/core/modules/views_ui/tests/src/Functional/DisplayTest.php b/web/core/modules/views_ui/tests/src/Functional/DisplayTest.php
index d2b03327eb0cdd23b65912f991891864a9f3354a..d3577f8a1fda383793d7a4cbd269cd7f8f7414d2 100644
--- a/web/core/modules/views_ui/tests/src/Functional/DisplayTest.php
+++ b/web/core/modules/views_ui/tests/src/Functional/DisplayTest.php
@@ -173,7 +173,7 @@ public function testLinkDisplay() {
     // The form redirects to the master display.
     $this->drupalGet($path);
 
-    $this->assertLink(t('Custom URL'), 0, 'The link option has custom URL as summary.');
+    $this->assertSession()->linkExists(t('Custom URL'), 0, 'The link option has custom URL as summary.');
 
     // Test the default link_url value for new display
     $this->drupalPostForm(NULL, [], t('Add Block'));
diff --git a/web/core/modules/views_ui/tests/src/Functional/FilterUITest.php b/web/core/modules/views_ui/tests/src/Functional/FilterUITest.php
index 6422bb4863ea7a1d68e291081fa6e76b567e7bb6..dc43ab9993013d23c244a3d0e9f9c2d86405e695 100644
--- a/web/core/modules/views_ui/tests/src/Functional/FilterUITest.php
+++ b/web/core/modules/views_ui/tests/src/Functional/FilterUITest.php
@@ -41,7 +41,10 @@ protected function setUp($import_test_views = TRUE) {
    * Tests that an option for a filter is saved as expected from the UI.
    */
   public function testFilterInOperatorUi() {
-    $admin_user = $this->drupalCreateUser(['administer views', 'administer site configuration']);
+    $admin_user = $this->drupalCreateUser([
+      'administer views',
+      'administer site configuration',
+    ]);
     $this->drupalLogin($admin_user);
 
     $path = 'admin/structure/views/nojs/handler/test_filter_in_operator_ui/default/filter/type';
@@ -64,12 +67,15 @@ public function testFilterInOperatorUi() {
    * Tests the filters from the UI.
    */
   public function testFiltersUI() {
-    $admin_user = $this->drupalCreateUser(['administer views', 'administer site configuration']);
+    $admin_user = $this->drupalCreateUser([
+      'administer views',
+      'administer site configuration',
+    ]);
     $this->drupalLogin($admin_user);
 
     $this->drupalGet('admin/structure/views/view/test_filter_groups');
 
-    $this->assertLink('Content: ID (= 1)', 0, 'Content: ID (= 1) link appears correctly.');
+    $this->assertSession()->linkExists('Content: ID (= 1)', 0, 'Content: ID (= 1) link appears correctly.');
 
     // Tests that we can create a new filter group from UI.
     $this->drupalGet('admin/structure/views/nojs/rearrange-filter/test_filter_groups/page');
@@ -96,7 +102,10 @@ public function testFiltersUI() {
    * Tests the identifier settings and restrictions.
    */
   public function testFilterIdentifier() {
-    $admin_user = $this->drupalCreateUser(['administer views', 'administer site configuration']);
+    $admin_user = $this->drupalCreateUser([
+      'administer views',
+      'administer site configuration',
+    ]);
     $this->drupalLogin($admin_user);
     $path = 'admin/structure/views/nojs/handler/test_filter_in_operator_ui/default/filter/type';
 
diff --git a/web/core/modules/views_ui/tests/src/Functional/GroupByTest.php b/web/core/modules/views_ui/tests/src/Functional/GroupByTest.php
index e79ff9d20892b5e7e15638383aed58be394ff912..b393411d690e6ada3614d7774884b0dd9f43c225 100644
--- a/web/core/modules/views_ui/tests/src/Functional/GroupByTest.php
+++ b/web/core/modules/views_ui/tests/src/Functional/GroupByTest.php
@@ -42,7 +42,7 @@ public function testGroupBySave() {
 
     // Change the groupby type in the UI.
     $this->drupalPostForm($edit_groupby_url, ['options[group_type]' => 'count'], t('Apply'));
-    $this->assertLink('COUNT(Views test: ID)', 0, 'The count setting is displayed in the UI');
+    $this->assertSession()->linkExists('COUNT(Views test: ID)', 0, 'The count setting is displayed in the UI');
 
     $this->drupalPostForm(NULL, [], t('Save'));
 
diff --git a/web/core/modules/views_ui/tests/src/Functional/RowUITest.php b/web/core/modules/views_ui/tests/src/Functional/RowUITest.php
index 53c74ea4dd9f00e8047b186e5d1ae646f4c73419..bff992f5673e321c84fa58416f1b4469d4e6514b 100644
--- a/web/core/modules/views_ui/tests/src/Functional/RowUITest.php
+++ b/web/core/modules/views_ui/tests/src/Functional/RowUITest.php
@@ -52,7 +52,7 @@ public function testRowUI() {
     $this->assertFieldByName('row_options[test_option]', $random_name, 'Make sure the custom settings form field has the expected value stored.');
 
     $this->drupalPostForm($view_edit_url, [], t('Save'));
-    $this->assertLink(t('Test row plugin'), 0, 'Make sure the test row plugin is shown in the UI');
+    $this->assertSession()->linkExists(t('Test row plugin'), 0, 'Make sure the test row plugin is shown in the UI');
 
     $view = Views::getView($view_name);
     $view->initDisplay();
diff --git a/web/core/modules/views_ui/tests/src/Functional/SettingsTest.php b/web/core/modules/views_ui/tests/src/Functional/SettingsTest.php
index 955a7c18140666056c1055e28eb513860eaf9135..436c43bc91a9fcb2cb904abb07c6d967b9bea32c 100644
--- a/web/core/modules/views_ui/tests/src/Functional/SettingsTest.php
+++ b/web/core/modules/views_ui/tests/src/Functional/SettingsTest.php
@@ -74,7 +74,7 @@ public function testEditUI() {
     $view['id'] = strtolower($this->randomMachineName());
     $this->drupalPostForm('admin/structure/views/add', $view, t('Save and edit'));
 
-    $this->assertNoLink(t('Master'));
+    $this->assertSession()->linkNotExists(t('Master'));
 
     // Configure to always show the advanced settings.
     // @todo It doesn't seem to be a way to test this as this works just on js.
diff --git a/web/core/modules/views_ui/tests/src/Functional/StyleUITest.php b/web/core/modules/views_ui/tests/src/Functional/StyleUITest.php
index 0bd7e98639c21bfbc31324d79126c37d0df80101..b85c65c56a350c90ac26d34825d07facc9ee1a66 100644
--- a/web/core/modules/views_ui/tests/src/Functional/StyleUITest.php
+++ b/web/core/modules/views_ui/tests/src/Functional/StyleUITest.php
@@ -51,7 +51,7 @@ public function testStyleUI() {
     $this->assertFieldByName('style_options[test_option]', $random_name, 'Make sure the custom settings form field has the expected value stored.');
 
     $this->drupalPostForm($view_edit_url, [], t('Save'));
-    $this->assertLink(t('Test style plugin'), 0, 'Make sure the test style plugin is shown in the UI');
+    $this->assertSession()->linkExists(t('Test style plugin'), 0, 'Make sure the test style plugin is shown in the UI');
 
     $view = Views::getView($view_name);
     $view->initDisplay();
diff --git a/web/core/modules/views_ui/tests/src/Functional/ViewEditTest.php b/web/core/modules/views_ui/tests/src/Functional/ViewEditTest.php
index c5cef7402cc1a551e33806178ee8ee37a961a450..029ac924ef9f3dddc7ba5adfc9e850d1d6691e07 100644
--- a/web/core/modules/views_ui/tests/src/Functional/ViewEditTest.php
+++ b/web/core/modules/views_ui/tests/src/Functional/ViewEditTest.php
@@ -29,7 +29,7 @@ class ViewEditTest extends UITestBase {
    */
   public function testDeleteLink() {
     $this->drupalGet('admin/structure/views/view/test_view');
-    $this->assertLink(t('Delete view'), 0, 'Ensure that the view delete link appears');
+    $this->assertSession()->linkExists(t('Delete view'), 0, 'Ensure that the view delete link appears');
 
     $view = $this->container->get('entity_type.manager')->getStorage('view')->load('test_view');
     $this->assertInstanceOf(View::class, $view);
@@ -59,7 +59,7 @@ public function testOtherOptions() {
     // Change the machine name for the display from page_1 to test_1.
     $edit = ['display_id' => 'test_1'];
     $this->drupalPostForm('admin/structure/views/nojs/display/test_view/attachment_1/display_id', $edit, 'Apply');
-    $this->assertLink(t('test_1'));
+    $this->assertSession()->linkExists(t('test_1'));
 
     // Save the view, and test the new ID has been saved.
     $this->drupalPostForm(NULL, [], 'Save');
@@ -73,7 +73,7 @@ public function testOtherOptions() {
     $edit = ['display_id' => 'test_1'];
     $this->drupalPostForm('admin/structure/views/nojs/display/test_view/test_1/display_id', $edit, 'Apply');
     $this->drupalPostForm(NULL, [], 'Save');
-    $this->assertLink(t('test_1'));
+    $this->assertSession()->linkExists(t('test_1'));
 
     // Test the form validation with invalid IDs.
     $machine_name_edit_url = 'admin/structure/views/nojs/display/test_view/test_1/display_id';
@@ -103,7 +103,7 @@ public function testOtherOptions() {
 
     // Test that the display ID has not been changed.
     $this->drupalGet('admin/structure/views/view/test_view/edit/test_1');
-    $this->assertLink(t('test_1'));
+    $this->assertSession()->linkExists(t('test_1'));
 
     // Test that validation does not run on cancel.
     $this->drupalGet('admin/structure/views/view/test_view');
@@ -136,7 +136,7 @@ public function testEditFormLanguageOptions() {
       $langcode_url = 'admin/structure/views/nojs/display/' . $view_name . '/' . $display . '/rendering_language';
       $this->assertNoLinkByHref($langcode_url);
       $assert_session->linkNotExistsExact(t('@type language selected for page', ['@type' => t('Content')]));
-      $this->assertNoLink(t('Content language of view row'));
+      $this->assertSession()->linkNotExists(t('Content language of view row'));
     }
 
     // Make the site multilingual and test the options again.
@@ -153,12 +153,12 @@ public function testEditFormLanguageOptions() {
       if ($view_name == 'test_view') {
         $this->assertNoLinkByHref($langcode_url);
         $assert_session->linkNotExistsExact(t('@type language selected for page', ['@type' => t('Content')]));
-        $this->assertNoLink(t('Content language of view row'));
+        $this->assertSession()->linkNotExists(t('Content language of view row'));
       }
       else {
         $this->assertLinkByHref($langcode_url);
         $assert_session->linkNotExistsExact(t('@type language selected for page', ['@type' => t('Content')]));
-        $this->assertLink(t('Content language of view row'));
+        $this->assertSession()->linkExists(t('Content language of view row'));
       }
 
       $this->drupalGet($langcode_url);
diff --git a/web/core/modules/views_ui/tests/src/Functional/ViewsListTest.php b/web/core/modules/views_ui/tests/src/Functional/ViewsListTest.php
index d5ac50f7934ff685592ad97b04ac5ebc26efe703..ac4ebb4680e033d33324a8a9dedb71ada58c42b3 100644
--- a/web/core/modules/views_ui/tests/src/Functional/ViewsListTest.php
+++ b/web/core/modules/views_ui/tests/src/Functional/ViewsListTest.php
@@ -50,7 +50,7 @@ public function testViewsListLimit() {
     // Check if we can access the main views admin page.
     $this->drupalGet('admin/structure/views');
     $this->assertSession()->statusCodeEquals(200);
-    $this->assertLink(t('Add view'));
+    $this->assertSession()->linkExists(t('Add view'));
 
     // Check that there is a link to the content view without a destination
     // parameter.
diff --git a/web/core/modules/views_ui/tests/src/Functional/ViewsUITourTest.php b/web/core/modules/views_ui/tests/src/Functional/ViewsUITourTest.php
index 2dd089da7b3c1c77fe3ed2b071d787a38a9f7b49..7c2d9d3660236e84974cc8d1d0167b3165be2acb 100644
--- a/web/core/modules/views_ui/tests/src/Functional/ViewsUITourTest.php
+++ b/web/core/modules/views_ui/tests/src/Functional/ViewsUITourTest.php
@@ -40,7 +40,10 @@ class ViewsUITourTest extends TourTestBase {
 
   protected function setUp() {
     parent::setUp();
-    $this->adminUser = $this->drupalCreateUser(['administer views', 'access tour']);
+    $this->adminUser = $this->drupalCreateUser([
+      'administer views',
+      'access tour',
+    ]);
     $this->drupalLogin($this->adminUser);
   }
 
diff --git a/web/core/modules/views_ui/tests/src/Functional/XssTest.php b/web/core/modules/views_ui/tests/src/Functional/XssTest.php
index 3e7fc34b14e130b27d3d468c3231bc0426edf1bf..1af89e392f97a3d03285f940aa009695dd5670ee 100644
--- a/web/core/modules/views_ui/tests/src/Functional/XssTest.php
+++ b/web/core/modules/views_ui/tests/src/Functional/XssTest.php
@@ -23,11 +23,13 @@ class XssTest extends UITestBase {
 
   public function testViewsUi() {
     $this->drupalGet('admin/structure/views/view/sa_contrib_2013_035');
-    $this->assertEscaped('<marquee>test</marquee>', 'Field admin label is properly escaped.');
+    // Verify that the field admin label is properly escaped.
+    $this->assertEscaped('<marquee>test</marquee>');
 
     $this->drupalGet('admin/structure/views/nojs/handler/sa_contrib_2013_035/page_1/header/area');
-    $this->assertEscaped('{{ title }} == <marquee>test</marquee>', 'Token label is properly escaped.');
-    $this->assertEscaped('{{ title_1 }} == <script>alert("XSS")</script>', 'Token label is properly escaped.');
+    // Verify that the token label is properly escaped.
+    $this->assertEscaped('{{ title }} == <marquee>test</marquee>');
+    $this->assertEscaped('{{ title_1 }} == <script>alert("XSS")</script>');
   }
 
   /**
diff --git a/web/core/modules/views_ui/tests/src/FunctionalJavascript/ViewsListingTest.php b/web/core/modules/views_ui/tests/src/FunctionalJavascript/ViewsListingTest.php
index f6a9976dcf9a1ba4fdc7cfb152fb037785340419..8d839e3c432085bb2bf166389368c7aa3a1763d3 100644
--- a/web/core/modules/views_ui/tests/src/FunctionalJavascript/ViewsListingTest.php
+++ b/web/core/modules/views_ui/tests/src/FunctionalJavascript/ViewsListingTest.php
@@ -133,6 +133,7 @@ public function testFilterViewsListing() {
    * Removes any non-visible elements from the passed array.
    *
    * @param array $elements
+   *
    * @return array
    */
   protected function filterVisibleElements($elements) {
diff --git a/web/core/modules/workspaces/src/ViewsQueryAlter.php b/web/core/modules/workspaces/src/ViewsQueryAlter.php
index 485f51a81e57a0d2d675a609b74bd508c88f7c95..2548db4efe103ca211865cc422953375237bd31b 100644
--- a/web/core/modules/workspaces/src/ViewsQueryAlter.php
+++ b/web/core/modules/workspaces/src/ViewsQueryAlter.php
@@ -378,6 +378,7 @@ protected function ensureRevisionTable(EntityTypeInterface $entity_type, Sql $qu
    *
    * @return \Drupal\views\Plugin\views\join\JoinPluginInterface
    *   An adjusted views join object to add to the query.
+   *
    * @throws \Drupal\Component\Plugin\Exception\PluginException
    */
   protected function getRevisionTableJoin($relationship, $table, $field, $workspace_association_table, EntityTypeInterface $entity_type) {
diff --git a/web/core/phpcs.xml.dist b/web/core/phpcs.xml.dist
index 645e4e0f2da9d8f503b2981d963883472b50a3c2..623ef14cc9b8f1f34a9c548d2372a228a8a0ec3b 100644
--- a/web/core/phpcs.xml.dist
+++ b/web/core/phpcs.xml.dist
@@ -59,7 +59,6 @@
     <exclude name="Drupal.Commenting.DocComment.TagsNotGrouped"/>
     <exclude name="Drupal.Commenting.DocComment.ParamGroup"/>
     <exclude name="Drupal.Commenting.DocComment.ShortSingleLine"/>
-    <exclude name="Drupal.Commenting.DocComment.TagGroupSpacing"/>
     <exclude name="Drupal.Commenting.DocComment.MissingShort"/>
   </rule>
   <rule ref="Drupal.Commenting.DocCommentStar"/>
diff --git a/web/core/profiles/demo_umami/tests/src/Functional/UmamiMultilingualInstallTest.php b/web/core/profiles/demo_umami/tests/src/Functional/UmamiMultilingualInstallTest.php
index 1f70df4581af5465d43064cfd20bc28c3c341353..4736be9f36502860c813cc8e3996ee8f380a0749 100644
--- a/web/core/profiles/demo_umami/tests/src/Functional/UmamiMultilingualInstallTest.php
+++ b/web/core/profiles/demo_umami/tests/src/Functional/UmamiMultilingualInstallTest.php
@@ -46,6 +46,7 @@ protected function setUpLanguage() {
    *
    * @param string $langcode
    *   The language code.
+   *
    * @return string
    *   Contents for the test .po file.
    */
diff --git a/web/core/profiles/minimal/tests/src/Functional/MinimalTest.php b/web/core/profiles/minimal/tests/src/Functional/MinimalTest.php
index 48894a13b713f1f49741cb6834892fcb8359a165..6b3baa14df4be518ee702294dbdebf354e8141bc 100644
--- a/web/core/profiles/minimal/tests/src/Functional/MinimalTest.php
+++ b/web/core/profiles/minimal/tests/src/Functional/MinimalTest.php
@@ -28,12 +28,15 @@ class MinimalTest extends BrowserTestBase {
   public function testMinimal() {
     $this->drupalGet('');
     // Check the login block is present.
-    $this->assertLink(t('Create new account'));
+    $this->assertSession()->linkExists(t('Create new account'));
     $this->assertSession()->statusCodeEquals(200);
 
     // Create a user to test tools and navigation blocks for logged in users
     // with appropriate permissions.
-    $user = $this->drupalCreateUser(['access administration pages', 'administer content types']);
+    $user = $this->drupalCreateUser([
+      'access administration pages',
+      'administer content types',
+    ]);
     $this->drupalLogin($user);
     $this->drupalGet('');
     $this->assertText(t('Tools'));
diff --git a/web/core/profiles/standard/tests/src/Functional/StandardTest.php b/web/core/profiles/standard/tests/src/Functional/StandardTest.php
index 2acd63c7bb1231c8554fded99d0e1d520fe5c8b5..82d16326268d623de4c14003c6c2aa2828f407f8 100644
--- a/web/core/profiles/standard/tests/src/Functional/StandardTest.php
+++ b/web/core/profiles/standard/tests/src/Functional/StandardTest.php
@@ -38,7 +38,7 @@ class StandardTest extends BrowserTestBase {
    */
   public function testStandard() {
     $this->drupalGet('');
-    $this->assertLink(t('Contact'));
+    $this->assertSession()->linkExists(t('Contact'));
     $this->clickLink(t('Contact'));
     $this->assertSession()->statusCodeEquals(200);
 
diff --git a/web/core/tests/Drupal/FunctionalTests/Entity/DeleteMultipleFormTest.php b/web/core/tests/Drupal/FunctionalTests/Entity/DeleteMultipleFormTest.php
index ef57bd72af354f8101bbb0dd630213eb2fa4cc4b..1933778d3f61564229366ef72bcafa109b87b0de 100644
--- a/web/core/tests/Drupal/FunctionalTests/Entity/DeleteMultipleFormTest.php
+++ b/web/core/tests/Drupal/FunctionalTests/Entity/DeleteMultipleFormTest.php
@@ -46,7 +46,9 @@ protected function setUp() {
       'id' => 'default',
       'label' => 'Default',
     ])->save();
-    $this->account = $this->drupalCreateUser(['administer entity_test content']);
+    $this->account = $this->drupalCreateUser([
+      'administer entity_test content',
+    ]);
     $this->drupalLogin($this->account);
   }
 
diff --git a/web/core/tests/Drupal/FunctionalTests/Installer/DistributionProfileTranslationQueryTest.php b/web/core/tests/Drupal/FunctionalTests/Installer/DistributionProfileTranslationQueryTest.php
index 7345b744c043f9ffb637fabca51c8c99ca449b9d..c7508811a6775eace57dbfc03b8160cba108836f 100644
--- a/web/core/tests/Drupal/FunctionalTests/Installer/DistributionProfileTranslationQueryTest.php
+++ b/web/core/tests/Drupal/FunctionalTests/Installer/DistributionProfileTranslationQueryTest.php
@@ -128,6 +128,7 @@ public function testInstalled() {
    *
    * @param string $langcode
    *   The language code.
+   *
    * @return string
    *   Contents for the test .po file.
    */
diff --git a/web/core/tests/Drupal/FunctionalTests/Installer/DistributionProfileTranslationTest.php b/web/core/tests/Drupal/FunctionalTests/Installer/DistributionProfileTranslationTest.php
index c6eadd6ea6794725b8e6407b154130842e5ebf23..0a0f66f8758e5661f29aea7489f59b7a161f7f36 100644
--- a/web/core/tests/Drupal/FunctionalTests/Installer/DistributionProfileTranslationTest.php
+++ b/web/core/tests/Drupal/FunctionalTests/Installer/DistributionProfileTranslationTest.php
@@ -119,6 +119,7 @@ public function testInstalled() {
    *
    * @param string $langcode
    *   The language code.
+   *
    * @return string
    *   Contents for the test .po file.
    */
diff --git a/web/core/tests/Drupal/FunctionalTests/Installer/InstallerTranslationMultipleLanguageTest.php b/web/core/tests/Drupal/FunctionalTests/Installer/InstallerTranslationMultipleLanguageTest.php
index 0f06d17a5cf3deb0080bd17e89993f4cada74c73..19d851359099edc4388e038c99f88343ff1e6e0b 100644
--- a/web/core/tests/Drupal/FunctionalTests/Installer/InstallerTranslationMultipleLanguageTest.php
+++ b/web/core/tests/Drupal/FunctionalTests/Installer/InstallerTranslationMultipleLanguageTest.php
@@ -38,6 +38,7 @@ protected function setUpLanguage() {
    *
    * @param string $langcode
    *   The language code.
+   *
    * @return string
    *   Contents for the test .po file.
    */
diff --git a/web/core/tests/Drupal/FunctionalTests/Installer/InstallerTranslationQueryTest.php b/web/core/tests/Drupal/FunctionalTests/Installer/InstallerTranslationQueryTest.php
index b94647ee13535ea19023cb559818c98eb5eeba9d..4601653bdc27dbe9b73240a196ad9acf6dab03c7 100644
--- a/web/core/tests/Drupal/FunctionalTests/Installer/InstallerTranslationQueryTest.php
+++ b/web/core/tests/Drupal/FunctionalTests/Installer/InstallerTranslationQueryTest.php
@@ -72,6 +72,7 @@ public function testInstaller() {
    *
    * @param string $langcode
    *   The language code.
+   *
    * @return string
    *   Contents for the test .po file.
    */
diff --git a/web/core/tests/Drupal/FunctionalTests/Installer/InstallerTranslationTest.php b/web/core/tests/Drupal/FunctionalTests/Installer/InstallerTranslationTest.php
index 1eec26e7fb6a410313d9253482e16c3afd717628..fb69ea772d66bf1e7e2fff86e9914b0794c71e61 100644
--- a/web/core/tests/Drupal/FunctionalTests/Installer/InstallerTranslationTest.php
+++ b/web/core/tests/Drupal/FunctionalTests/Installer/InstallerTranslationTest.php
@@ -134,6 +134,7 @@ public function testInstaller() {
    *
    * @param string $langcode
    *   The language code.
+   *
    * @return string
    *   Contents for the test .po file.
    */
diff --git a/web/core/tests/Drupal/FunctionalTests/Routing/CaseInsensitivePathTest.php b/web/core/tests/Drupal/FunctionalTests/Routing/CaseInsensitivePathTest.php
index a5532b24ad13da55be3573c8b28c0fa6554c6a40..b961f2ffaea16f7856ef4f1f5d116eb59396e360 100644
--- a/web/core/tests/Drupal/FunctionalTests/Routing/CaseInsensitivePathTest.php
+++ b/web/core/tests/Drupal/FunctionalTests/Routing/CaseInsensitivePathTest.php
@@ -43,7 +43,11 @@ public function testMixedCasePaths() {
     $this->assertSession()->pageTextMatches('/Log in/');
 
     // Tests paths defined by routes from the Views module.
-    $admin = $this->drupalCreateUser(['access administration pages', 'administer nodes', 'access content overview']);
+    $admin = $this->drupalCreateUser([
+      'access administration pages',
+      'administer nodes',
+      'access content overview',
+    ]);
     $this->drupalLogin($admin);
 
     $this->drupalGet('admin/content');
diff --git a/web/core/tests/Drupal/FunctionalTests/Routing/RouteCachingNonPathLanguageNegotiationTest.php b/web/core/tests/Drupal/FunctionalTests/Routing/RouteCachingNonPathLanguageNegotiationTest.php
index 43e5845306b42d2f90a02958ea2e8d08ed977831..20ddb1dfd92dcd3b3c7a1278873b737a993b8ceb 100644
--- a/web/core/tests/Drupal/FunctionalTests/Routing/RouteCachingNonPathLanguageNegotiationTest.php
+++ b/web/core/tests/Drupal/FunctionalTests/Routing/RouteCachingNonPathLanguageNegotiationTest.php
@@ -39,7 +39,11 @@ protected function setUp() {
     parent::setUp();
 
     // Create and log in user.
-    $this->adminUser = $this->drupalCreateUser(['administer blocks', 'administer languages', 'access administration pages']);
+    $this->adminUser = $this->drupalCreateUser([
+      'administer blocks',
+      'administer languages',
+      'access administration pages',
+    ]);
     $this->drupalLogin($this->adminUser);
 
     // Add language.
diff --git a/web/core/tests/Drupal/KernelTests/Core/Cache/EndOfTransactionQueriesTest.php b/web/core/tests/Drupal/KernelTests/Core/Cache/EndOfTransactionQueriesTest.php
index 885498fcd2ba064cdcccb23213282d6ca1951daf..3bc2c8f6caff3df75d9e68be0d93c4a789aad85b 100644
--- a/web/core/tests/Drupal/KernelTests/Core/Cache/EndOfTransactionQueriesTest.php
+++ b/web/core/tests/Drupal/KernelTests/Core/Cache/EndOfTransactionQueriesTest.php
@@ -31,12 +31,14 @@ class EndOfTransactionQueriesTest extends KernelTestBase {
    * {@inheritdoc}
    */
   protected function setUp() {
+    parent::setUp();
+
+    // This can only be checked after installing Drupal as it requires functions
+    // from bootstrap.inc.
     if (!class_exists($this->getDatabaseConnectionInfo()['default']['namespace'] . '\Connection')) {
       $this->markTestSkipped(sprintf('No logging override exists for the %s database driver. Create it, subclass this test class and override ::getDatabaseConnectionInfo().', $this->getDatabaseConnectionInfo()['default']['driver']));
     }
 
-    parent::setUp();
-
     $this->installSchema('system', 'sequences');
     $this->installEntitySchema('entity_test');
     $this->installEntitySchema('user');
diff --git a/web/core/tests/Drupal/KernelTests/Core/File/DirectoryTest.php b/web/core/tests/Drupal/KernelTests/Core/File/DirectoryTest.php
index a0b5af5fca0f1da94526cc420cefb16a350f9248..e10520b2f583152bfa6d72083f056577419b2cc0 100644
--- a/web/core/tests/Drupal/KernelTests/Core/File/DirectoryTest.php
+++ b/web/core/tests/Drupal/KernelTests/Core/File/DirectoryTest.php
@@ -98,11 +98,11 @@ public function testFileCheckDirectoryHandling() {
 
       // Make directory read only.
       @$file_system->chmod($directory, 0444);
-      $this->assertFalse($file_system->prepareDirectory($directory, 0), 'Error reported for a non-writeable directory.', 'File');
+      $this->assertFalse($file_system->prepareDirectory($directory, 0), 'Error reported for a non-writable directory.', 'File');
 
       // Test directory permission modification.
       $this->setSetting('file_chmod_directory', 0777);
-      $this->assertTrue($file_system->prepareDirectory($directory, FileSystemInterface::MODIFY_PERMISSIONS), 'No error reported when making directory writeable.', 'File');
+      $this->assertTrue($file_system->prepareDirectory($directory, FileSystemInterface::MODIFY_PERMISSIONS), 'No error reported when making directory writable.', 'File');
     }
 
     // Test that the directory has the correct permissions.
diff --git a/web/core/tests/Drupal/KernelTests/Core/File/FileTestBase.php b/web/core/tests/Drupal/KernelTests/Core/File/FileTestBase.php
index 27a78a1e980298fd79781080b9ff5da506554ef2..e17e427cbf8c536185e567ef0d83a77576739261 100644
--- a/web/core/tests/Drupal/KernelTests/Core/File/FileTestBase.php
+++ b/web/core/tests/Drupal/KernelTests/Core/File/FileTestBase.php
@@ -153,6 +153,7 @@ public function assertDirectoryPermissions($directory, $expected_mode, $message
    * @param $path
    *   Optional string with a directory path. If none is provided, a random
    *   name in the site's files directory will be used.
+   *
    * @return
    *   The path to the directory.
    */
@@ -178,6 +179,7 @@ public function createDirectory($path = NULL) {
    * @param $scheme
    *   Optional string indicating the stream scheme to use. Drupal core includes
    *   public, private, and temporary. The public wrapper is the default.
+   *
    * @return
    *   File URI.
    */
diff --git a/web/core/tests/Drupal/KernelTests/Core/File/NameMungingTest.php b/web/core/tests/Drupal/KernelTests/Core/File/NameMungingTest.php
index 892fa3c60005704d29c87869a368ece846d302cb..644375a02985de5c923fac8fbbd6ae0bbb8a8554 100644
--- a/web/core/tests/Drupal/KernelTests/Core/File/NameMungingTest.php
+++ b/web/core/tests/Drupal/KernelTests/Core/File/NameMungingTest.php
@@ -66,16 +66,16 @@ public function testMungeIgnoreInsecure() {
   }
 
   /**
-   * White listed extensions are ignored by file_munge_filename().
+   * Tests that allowed extensions are ignored by file_munge_filename().
    */
-  public function testMungeIgnoreWhitelisted() {
-    // Declare our extension as whitelisted. The declared extensions should
-    // be case insensitive so test using one with a different case.
+  public function testMungeIgnoreAllowedExtensions() {
+    // Declare that our extension is allowed. The declared extensions should be
+    // case insensitive, so test using one with a different case.
     $munged_name = file_munge_filename($this->nameWithUcExt, $this->badExtension);
-    $this->assertSame($munged_name, $this->nameWithUcExt, new FormattableMarkup('The new filename (%munged) matches the original (%original) once the extension has been whitelisted.', ['%munged' => $munged_name, '%original' => $this->nameWithUcExt]));
+    $this->assertSame($munged_name, $this->nameWithUcExt);
     // The allowed extensions should also be normalized.
     $munged_name = file_munge_filename($this->name, strtoupper($this->badExtension));
-    $this->assertSame($munged_name, $this->name, new FormattableMarkup('The new filename (%munged) matches the original (%original) also when the whitelisted extension is in uppercase.', ['%munged' => $munged_name, '%original' => $this->name]));
+    $this->assertSame($munged_name, $this->name);
   }
 
   /**
diff --git a/web/core/tests/Drupal/KernelTests/Core/KeyValueStore/DatabaseStorageExpirableTest.php b/web/core/tests/Drupal/KernelTests/Core/KeyValueStore/DatabaseStorageExpirableTest.php
index e87abcb8460850add96852d9cbaf8cfaf1dcd1bd..23d1f00afe6681ac744c9c7ba551babec34ffd25 100644
--- a/web/core/tests/Drupal/KernelTests/Core/KeyValueStore/DatabaseStorageExpirableTest.php
+++ b/web/core/tests/Drupal/KernelTests/Core/KeyValueStore/DatabaseStorageExpirableTest.php
@@ -44,20 +44,20 @@ public function testCRUDWithExpiration() {
     // Verify that an item can be stored with setWithExpire().
     // Use a random expiration in each test.
     $stores[0]->setWithExpire('foo', $this->objects[0], rand(500, 100000));
-    $this->assertIdenticalObject($this->objects[0], $stores[0]->get('foo'));
+    $this->assertEquals($this->objects[0], $stores[0]->get('foo'));
     // Verify that the other collection is not affected.
     $this->assertNull($stores[1]->get('foo'));
 
     // Verify that an item can be updated with setWithExpire().
     $stores[0]->setWithExpire('foo', $this->objects[1], rand(500, 100000));
-    $this->assertIdenticalObject($this->objects[1], $stores[0]->get('foo'));
+    $this->assertEquals($this->objects[1], $stores[0]->get('foo'));
     // Verify that the other collection is still not affected.
     $this->assertNull($stores[1]->get('foo'));
 
     // Verify that the expirable data key is unique.
     $stores[1]->setWithExpire('foo', $this->objects[2], rand(500, 100000));
-    $this->assertIdenticalObject($this->objects[1], $stores[0]->get('foo'));
-    $this->assertIdenticalObject($this->objects[2], $stores[1]->get('foo'));
+    $this->assertEquals($this->objects[1], $stores[0]->get('foo'));
+    $this->assertEquals($this->objects[2], $stores[1]->get('foo'));
 
     // Verify that multiple items can be stored with setMultipleWithExpire().
     $values = [
@@ -67,11 +67,11 @@ public function testCRUDWithExpiration() {
     $stores[0]->setMultipleWithExpire($values, rand(500, 100000));
     $result = $stores[0]->getMultiple(['foo', 'bar']);
     foreach ($values as $j => $value) {
-      $this->assertIdenticalObject($value, $result[$j]);
+      $this->assertEquals($value, $result[$j]);
     }
 
     // Verify that the other collection was not affected.
-    $this->assertIdenticalObject($stores[1]->get('foo'), $this->objects[2]);
+    $this->assertEquals($this->objects[2], $stores[1]->get('foo'));
     $this->assertNull($stores[1]->get('bar'));
 
     // Verify that all items in a collection can be retrieved.
@@ -93,7 +93,7 @@ public function testCRUDWithExpiration() {
     $this->assertNull($stores[0]->get('bar'));
     $this->assertEmpty($stores[0]->getMultiple(['foo', 'bar']));
     // Verify that the item in the other collection still exists.
-    $this->assertIdenticalObject($this->objects[5], $stores[1]->get('foo'));
+    $this->assertEquals($this->objects[5], $stores[1]->get('foo'));
 
     // Test that setWithExpireIfNotExists() succeeds only the first time.
     $key = $this->randomMachineName();
@@ -101,7 +101,7 @@ public function testCRUDWithExpiration() {
       // setWithExpireIfNotExists() should be TRUE the first time (when $i is
       // 0) and FALSE the second time (when $i is 1).
       $this->assertEqual(!$i, $stores[0]->setWithExpireIfNotExists($key, $this->objects[$i], rand(500, 100000)));
-      $this->assertIdenticalObject($this->objects[0], $stores[0]->get($key));
+      $this->assertEquals($this->objects[0], $stores[0]->get($key));
       // Verify that the other collection is not affected.
       $this->assertNull($stores[1]->get($key));
     }
@@ -110,7 +110,7 @@ public function testCRUDWithExpiration() {
     $stores[0]->delete($key);
     $stores[0]->setWithExpireIfNotExists($key, $this->objects[1], rand(500, 100000));
     // This time it should succeed.
-    $this->assertIdenticalObject($this->objects[1], $stores[0]->get($key));
+    $this->assertEquals($this->objects[1], $stores[0]->get($key));
     // Verify that the other collection is still not affected.
     $this->assertNull($stores[1]->get($key));
 
diff --git a/web/core/tests/Drupal/KernelTests/Core/KeyValueStore/StorageTestBase.php b/web/core/tests/Drupal/KernelTests/Core/KeyValueStore/StorageTestBase.php
index c7ba82478e7d2cacb5d3f2f277613c8f216628de..78e6ca83f30df98d5c3567ce20e4a28d477cc7a2 100644
--- a/web/core/tests/Drupal/KernelTests/Core/KeyValueStore/StorageTestBase.php
+++ b/web/core/tests/Drupal/KernelTests/Core/KeyValueStore/StorageTestBase.php
@@ -54,21 +54,21 @@ public function testCRUD() {
     // Verify that an item can be stored.
     $stores[0]->set('foo', $this->objects[0]);
     $this->assertTrue($stores[0]->has('foo'));
-    $this->assertIdenticalObject($this->objects[0], $stores[0]->get('foo'));
+    $this->assertEquals($this->objects[0], $stores[0]->get('foo'));
     // Verify that the other collection is not affected.
     $this->assertFalse($stores[1]->has('foo'));
     $this->assertNull($stores[1]->get('foo'));
 
     // Verify that an item can be updated.
     $stores[0]->set('foo', $this->objects[1]);
-    $this->assertIdenticalObject($this->objects[1], $stores[0]->get('foo'));
+    $this->assertEquals($this->objects[1], $stores[0]->get('foo'));
     // Verify that the other collection is still not affected.
     $this->assertNull($stores[1]->get('foo'));
 
     // Verify that a collection/name pair is unique.
     $stores[1]->set('foo', $this->objects[2]);
-    $this->assertIdenticalObject($this->objects[1], $stores[0]->get('foo'));
-    $this->assertIdenticalObject($this->objects[2], $stores[1]->get('foo'));
+    $this->assertEquals($this->objects[1], $stores[0]->get('foo'));
+    $this->assertEquals($this->objects[2], $stores[1]->get('foo'));
 
     // Verify that an item can be deleted.
     $stores[0]->delete('foo');
@@ -77,7 +77,7 @@ public function testCRUD() {
 
     // Verify that the other collection is not affected.
     $this->assertTrue($stores[1]->has('foo'));
-    $this->assertIdenticalObject($this->objects[2], $stores[1]->get('foo'));
+    $this->assertEquals($this->objects[2], $stores[1]->get('foo'));
     $stores[1]->delete('foo');
     $this->assertNull($stores[1]->get('foo'));
 
@@ -91,7 +91,7 @@ public function testCRUD() {
     // Verify that multiple items can be retrieved.
     $result = $stores[0]->getMultiple(['foo', 'bar']);
     foreach ($values as $j => $value) {
-      $this->assertIdenticalObject($value, $result[$j]);
+      $this->assertEquals($value, $result[$j]);
     }
 
     // Verify that the other collection was not affected.
@@ -119,7 +119,7 @@ public function testCRUD() {
     // Verify that deleting no items does not cause an error.
     $stores[0]->deleteMultiple([]);
     // Verify that the item in the other collection still exists.
-    $this->assertIdenticalObject($this->objects[5], $stores[1]->get('foo'));
+    $this->assertEquals($this->objects[5], $stores[1]->get('foo'));
 
   }
 
@@ -163,7 +163,7 @@ public function testSetIfNotExists() {
       // setIfNotExists() should be TRUE the first time (when $i is 0) and
       // FALSE the second time (when $i is 1).
       $this->assertEqual(!$i, $stores[0]->setIfNotExists($key, $this->objects[$i]));
-      $this->assertIdenticalObject($this->objects[0], $stores[0]->get($key));
+      $this->assertEquals($this->objects[0], $stores[0]->get($key));
       // Verify that the other collection is not affected.
       $this->assertNull($stores[1]->get($key));
     }
@@ -172,7 +172,7 @@ public function testSetIfNotExists() {
     $stores[0]->delete($key);
     $stores[0]->setIfNotExists($key, $this->objects[1]);
     // This time it should succeed.
-    $this->assertIdenticalObject($this->objects[1], $stores[0]->get($key));
+    $this->assertEquals($this->objects[1], $stores[0]->get($key));
     // Verify that the other collection is still not affected.
     $this->assertNull($stores[1]->get($key));
   }
diff --git a/web/core/tests/Drupal/KernelTests/Core/Routing/ExceptionHandlingTest.php b/web/core/tests/Drupal/KernelTests/Core/Routing/ExceptionHandlingTest.php
index 0b955fd1c260299242c40aab796cb97526a2ff25..d13829b8b28628b9cdf36f7e836f5b3e055d8a27 100644
--- a/web/core/tests/Drupal/KernelTests/Core/Routing/ExceptionHandlingTest.php
+++ b/web/core/tests/Drupal/KernelTests/Core/Routing/ExceptionHandlingTest.php
@@ -128,6 +128,7 @@ public function testExceptionResponseGeneratedForOriginalRequest() {
    * Sets the given path to use as the 404 page and triggers a 404.
    *
    * @param string $path
+   *
    * @return \Drupal\Core\Render\HtmlResponse
    *
    * @see \Drupal\system\Tests\Routing\ExceptionHandlingTest::testExceptionResponseGeneratedForOriginalRequest()
diff --git a/web/core/tests/Drupal/KernelTests/Core/TempStore/TempStoreDatabaseTest.php b/web/core/tests/Drupal/KernelTests/Core/TempStore/TempStoreDatabaseTest.php
index b4c8a4000ef13df62ae813cd26e03fc5dd958c50..da24101dcee2050f3edc981257df9005a984f19c 100644
--- a/web/core/tests/Drupal/KernelTests/Core/TempStore/TempStoreDatabaseTest.php
+++ b/web/core/tests/Drupal/KernelTests/Core/TempStore/TempStoreDatabaseTest.php
@@ -87,24 +87,24 @@ public function testSharedTempStore() {
       $this->assertEqual(!$i, $stores[0]->setIfNotExists($key, $this->objects[$i]));
       $metadata = $stores[0]->getMetadata($key);
       $this->assertEqual($users[0], $metadata->getOwnerId());
-      $this->assertIdenticalObject($this->objects[0], $stores[0]->get($key));
+      $this->assertEquals($this->objects[0], $stores[0]->get($key));
       // Another user should get the same result.
       $metadata = $stores[1]->getMetadata($key);
       $this->assertEqual($users[0], $metadata->getOwnerId());
-      $this->assertIdenticalObject($this->objects[0], $stores[1]->get($key));
+      $this->assertEquals($this->objects[0], $stores[1]->get($key));
     }
 
     // Remove the item and try to set it again.
     $stores[0]->delete($key);
     $stores[0]->setIfNotExists($key, $this->objects[1]);
     // This time it should succeed.
-    $this->assertIdenticalObject($this->objects[1], $stores[0]->get($key));
+    $this->assertEquals($this->objects[1], $stores[0]->get($key));
 
     // This user can update the object.
     $stores[0]->set($key, $this->objects[2]);
-    $this->assertIdenticalObject($this->objects[2], $stores[0]->get($key));
+    $this->assertEquals($this->objects[2], $stores[0]->get($key));
     // The object is the same when another user loads it.
-    $this->assertIdenticalObject($this->objects[2], $stores[1]->get($key));
+    $this->assertEquals($this->objects[2], $stores[1]->get($key));
 
     // This user should be allowed to get, update, delete.
     $this->assertInstanceOf(\stdClass::class, $stores[0]->getIfOwner($key));
@@ -113,8 +113,8 @@ public function testSharedTempStore() {
 
     // Another user can update the object and become the owner.
     $stores[1]->set($key, $this->objects[3]);
-    $this->assertIdenticalObject($this->objects[3], $stores[0]->get($key));
-    $this->assertIdenticalObject($this->objects[3], $stores[1]->get($key));
+    $this->assertEquals($this->objects[3], $stores[0]->get($key));
+    $this->assertEquals($this->objects[3], $stores[1]->get($key));
     $metadata = $stores[1]->getMetadata($key);
     $this->assertEqual($users[1], $metadata->getOwnerId());
 
diff --git a/web/core/tests/Drupal/KernelTests/FileSystemModuleDiscoveryDataProviderTrait.php b/web/core/tests/Drupal/KernelTests/FileSystemModuleDiscoveryDataProviderTrait.php
index 02d63841e22ae272625ddeddcc72c44f59918498..c955289fcfc79aa09865d726dc77b3df37c00d6b 100644
--- a/web/core/tests/Drupal/KernelTests/FileSystemModuleDiscoveryDataProviderTrait.php
+++ b/web/core/tests/Drupal/KernelTests/FileSystemModuleDiscoveryDataProviderTrait.php
@@ -14,9 +14,10 @@ trait FileSystemModuleDiscoveryDataProviderTrait {
    *   An array of module names to test.
    */
   public function coreModuleListDataProvider() {
-    $module_dirs = array_keys(iterator_to_array(new \FilesystemIterator(__DIR__ . '/../../../modules/')));
-    $module_names = array_map(function ($path) {
-      return str_replace(__DIR__ . '/../../../modules/', '', $path);
+    $prefix = dirname(__DIR__, 3) . DIRECTORY_SEPARATOR . 'modules';
+    $module_dirs = array_keys(iterator_to_array(new \FilesystemIterator($prefix)));
+    $module_names = array_map(function ($path) use ($prefix) {
+      return str_replace($prefix . DIRECTORY_SEPARATOR, '', $path);
     }, $module_dirs);
     $modules_keyed = array_combine($module_names, $module_names);
 
diff --git a/web/core/tests/Drupal/Tests/Component/Annotation/PluginTest.php b/web/core/tests/Drupal/Tests/Component/Annotation/PluginTest.php
index d942764005faefbc1d6aa4fc4d332d22f99c25f1..554ed8dbeccd4ee868cc04c51b5e89d2621b2ae8 100644
--- a/web/core/tests/Drupal/Tests/Component/Annotation/PluginTest.php
+++ b/web/core/tests/Drupal/Tests/Component/Annotation/PluginTest.php
@@ -20,6 +20,7 @@ public function testGet() {
     // Assert all values are accepted through constructor and default value is
     // used for non existent but defined property.
     $plugin = new PluginStub([
+      1 => 'oak',
       'foo' => 'bar',
       'biz' => [
         'baz' => 'boom',
@@ -32,6 +33,7 @@ public function testGet() {
       // This property wasn't in our definition but is defined as a property on
       // our plugin class.
       'defaultProperty' => 'testvalue',
+      1 => 'oak',
       'foo' => 'bar',
       'biz' => [
         'baz' => 'boom',
diff --git a/web/core/tests/Drupal/Tests/Composer/Plugin/Scaffold/Functional/ScaffoldUpgradeTest.php b/web/core/tests/Drupal/Tests/Composer/Plugin/Scaffold/Functional/ScaffoldUpgradeTest.php
index b5af25fc6ba4f49f80f22ab6ae012855568e3bcd..f21cf5bf53722eebfd55243ecce60c2878829d3b 100644
--- a/web/core/tests/Drupal/Tests/Composer/Plugin/Scaffold/Functional/ScaffoldUpgradeTest.php
+++ b/web/core/tests/Drupal/Tests/Composer/Plugin/Scaffold/Functional/ScaffoldUpgradeTest.php
@@ -103,6 +103,7 @@ public function testScaffoldUpgrade() {
    *   Path to location to create git repository.
    * @param string $version
    *   Version to tag the repository with.
+   *
    * @return string
    *   Path to temporary git repository.
    */
diff --git a/web/core/tests/Drupal/Tests/ComposerIntegrationTest.php b/web/core/tests/Drupal/Tests/ComposerIntegrationTest.php
index 89294f3a44e63ded949ea2ec02ac16ef9e74671c..5c33b4e08ed9ac717e3b8be6e6b88bc62f19aa50 100644
--- a/web/core/tests/Drupal/Tests/ComposerIntegrationTest.php
+++ b/web/core/tests/Drupal/Tests/ComposerIntegrationTest.php
@@ -20,6 +20,19 @@ public function testComposerLockHash() {
     $content_hash = self::getContentHash(file_get_contents($this->root . '/composer.json'));
     $lock = json_decode(file_get_contents($this->root . '/composer.lock'), TRUE);
     $this->assertSame($content_hash, $lock['content-hash']);
+
+    // @see \Composer\Repository\PathRepository::initialize()
+    $core_lock_file_hash = '';
+    $options = [];
+    foreach ($lock['packages'] as $package) {
+      if ($package['name'] === 'drupal/core') {
+        $core_lock_file_hash = $package['dist']['reference'];
+        $options = $package['transport-options'] ?? [];
+        break;
+      }
+    }
+    $core_content_hash = sha1(file_get_contents($this->root . '/core/composer.json') . serialize($options));
+    $this->assertSame($core_content_hash, $core_lock_file_hash);
   }
 
   /**
diff --git a/web/core/tests/Drupal/Tests/Core/Batch/BatchBuilderTest.php b/web/core/tests/Drupal/Tests/Core/Batch/BatchBuilderTest.php
index 4e273b2910925964008842d63d82129a68203bd2..e0ac9089c5f2e424dd166fa548e1d31b68b7d898 100644
--- a/web/core/tests/Drupal/Tests/Core/Batch/BatchBuilderTest.php
+++ b/web/core/tests/Drupal/Tests/Core/Batch/BatchBuilderTest.php
@@ -113,11 +113,20 @@ public function testSetErrorMessage() {
    * @covers ::setFile
    */
   public function testSetFile() {
+    $filename = dirname(__DIR__, 6) . '/core/modules/system/tests/modules/batch_test/batch_test.callbacks.inc';
+    $this->assertIsNotCallable('_batch_test_callback_1');
+    $this->assertIsNotCallable('_batch_test_finished_1');
+
     $batch = (new BatchBuilder())
-      ->setFile('filename.php')
+      ->setFile($filename)
+      ->setFinishCallback('_batch_test_finished_1')
+      ->addOperation('_batch_test_callback_1', [])
       ->toArray();
-
-    $this->assertEquals('filename.php', $batch['file']);
+    $this->assertEquals($filename, $batch['file']);
+    $this->assertEquals([['_batch_test_callback_1', []]], $batch['operations']);
+    $this->assertEquals('_batch_test_finished_1', $batch['finished']);
+    $this->assertIsCallable('_batch_test_callback_1');
+    $this->assertIsCallable('_batch_test_finished_1');
   }
 
   /**
diff --git a/web/core/tests/Drupal/Tests/Core/DependencyInjection/Compiler/BackendCompilerPassTest.php b/web/core/tests/Drupal/Tests/Core/DependencyInjection/Compiler/BackendCompilerPassTest.php
index a77ad091644775080e91c7e2e70afd40c74af4b0..fa4cde64560cabdfb6aa577cd21cab0a0098effc 100644
--- a/web/core/tests/Drupal/Tests/Core/DependencyInjection/Compiler/BackendCompilerPassTest.php
+++ b/web/core/tests/Drupal/Tests/Core/DependencyInjection/Compiler/BackendCompilerPassTest.php
@@ -97,6 +97,7 @@ public function providerTestProcess() {
    * bag so the setParameter() call effects the parent container as well.
    *
    * @param $service
+   *
    * @return \Symfony\Component\DependencyInjection\ContainerBuilder
    */
   protected function getSqliteContainer($service) {
@@ -115,6 +116,7 @@ protected function getSqliteContainer($service) {
    * bag so the setParameter() call effects the parent container as well.
    *
    * @param $service
+   *
    * @return \Symfony\Component\DependencyInjection\ContainerBuilder
    */
   protected function getMysqlContainer($service) {
diff --git a/web/core/tests/Drupal/Tests/Core/Entity/EntityAccessCheckTest.php b/web/core/tests/Drupal/Tests/Core/Entity/EntityAccessCheckTest.php
index daa9dcb56a14c03b8d90af823f4c74ae8f474d54..4ac74d78ef6f462230f886f2f333128ac757958c 100644
--- a/web/core/tests/Drupal/Tests/Core/Entity/EntityAccessCheckTest.php
+++ b/web/core/tests/Drupal/Tests/Core/Entity/EntityAccessCheckTest.php
@@ -112,6 +112,7 @@ public function testAccessWithDifferentRouteParameters() {
    *
    * @param object $object
    *   Any object, including prophesized mocks based on interfaces.
+   *
    * @return \Drupal\Core\Routing\RouteMatchInterface
    *   A prophesized RouteMatchInterface.
    */
diff --git a/web/core/tests/Drupal/Tests/Core/EventSubscriber/RssResponseRelativeUrlFilterTest.php b/web/core/tests/Drupal/Tests/Core/EventSubscriber/RssResponseRelativeUrlFilterTest.php
index e9c9549f2b09e345c5faa45819d21625c13db3f1..3a1f5f2ecf10a03ab74c03f5ffc9ce677b2fee8d 100644
--- a/web/core/tests/Drupal/Tests/Core/EventSubscriber/RssResponseRelativeUrlFilterTest.php
+++ b/web/core/tests/Drupal/Tests/Core/EventSubscriber/RssResponseRelativeUrlFilterTest.php
@@ -25,7 +25,7 @@ public function providerTestOnResponse() {
   <title>Drupal.org</title>
   <link>https://www.drupal.org</link>
   <description>Come for the software, stay for the community
-D rupal is an open source content management platform powering millions of websites and applications. It’s built, used, and supported by an active and diverse community of people around the world.</description>
+Drupal is an open source content management platform powering millions of websites and applications. It’s built, used, and supported by an active and diverse community of people around the world.</description>
   <language>en</language>
   <item>
      <title>Drupal 8 turns one!</title>
@@ -44,7 +44,7 @@ public function providerTestOnResponse() {
   <title>Drupal.org</title>
   <link>https://www.drupal.org</link>
   <description>Come for the software, stay for the community
-D rupal is an open source content management platform powering millions of websites and applications. It’s built, used, and supported by an active and diverse community of people around the world.</description>
+Drupal is an open source content management platform powering millions of websites and applications. It’s built, used, and supported by an active and diverse community of people around the world.</description>
   <language>en</language>
   <item>
      <title>Drupal 8 turns one!</title>
@@ -66,7 +66,7 @@ public function providerTestOnResponse() {
   <title>Drupal.org</title>
   <link>https://www.drupal.org</link>
   <description>Come for the software, stay for the community
-D rupal is an open source content management platform powering millions of websites and applications. It’s built, used, and supported by an active and diverse community of people around the world.</description>
+Drupal is an open source content management platform powering millions of websites and applications. It’s built, used, and supported by an active and diverse community of people around the world.</description>
   <language>en</language>
   <item>
      <title>Drupal 8 turns one!</title>
diff --git a/web/core/tests/Drupal/Tests/Core/Plugin/Discovery/TestDerivativeDiscoveryWithObject.php b/web/core/tests/Drupal/Tests/Core/Plugin/Discovery/TestDerivativeDiscoveryWithObject.php
index 353b21d48a4f3c1cda6613024b5cade2eb99436a..1bb64cc5cc24feecf276df51e5445b87e1e2729c 100644
--- a/web/core/tests/Drupal/Tests/Core/Plugin/Discovery/TestDerivativeDiscoveryWithObject.php
+++ b/web/core/tests/Drupal/Tests/Core/Plugin/Discovery/TestDerivativeDiscoveryWithObject.php
@@ -13,6 +13,7 @@ class TestDerivativeDiscoveryWithObject implements DeriverInterface {
    * {@inheritdoc}
    * @param string $derivative_id
    * @param array $base_plugin_definition
+   *
    * @return array
    */
   public function getDerivativeDefinition($derivative_id, $base_plugin_definition) {
@@ -23,6 +24,7 @@ public function getDerivativeDefinition($derivative_id, $base_plugin_definition)
   /**
    * {@inheritdoc}
    * @param array $base_plugin_definition
+   *
    * @return array
    */
   public function getDerivativeDefinitions($base_plugin_definition) {
diff --git a/web/core/tests/Drupal/Tests/Core/Routing/RouteMatchTestBase.php b/web/core/tests/Drupal/Tests/Core/Routing/RouteMatchTestBase.php
index a47ec73210fa51c50f6527238705fdb990393eff..6f9848a7ed7d3f9e2b52f3a6a3fc61a1b9594484 100644
--- a/web/core/tests/Drupal/Tests/Core/Routing/RouteMatchTestBase.php
+++ b/web/core/tests/Drupal/Tests/Core/Routing/RouteMatchTestBase.php
@@ -22,6 +22,7 @@ abstract class RouteMatchTestBase extends UnitTestCase {
    *   Parameters array
    * @param $raw_parameters
    *   Raw parameters array
+   *
    * @return \Drupal\Core\Routing\RouteMatchInterface
    */
   abstract protected function getRouteMatch($name, Route $route, array $parameters, array $raw_parameters);
diff --git a/web/core/tests/Drupal/Tests/Core/Utility/UnroutedUrlAssemblerTest.php b/web/core/tests/Drupal/Tests/Core/Utility/UnroutedUrlAssemblerTest.php
index f0511e0c4993f0056a6f850f99526105c3695b81..3da4c012728f3d6d51ed24e8438c84ebcb6aa0b0 100644
--- a/web/core/tests/Drupal/Tests/Core/Utility/UnroutedUrlAssemblerTest.php
+++ b/web/core/tests/Drupal/Tests/Core/Utility/UnroutedUrlAssemblerTest.php
@@ -99,6 +99,7 @@ public function providerTestAssembleWithExternalUrl() {
       'override-query' => ['https://example.com/test?foo=1#bar', ['query' => ['foo' => 2]], 'https://example.com/test?foo=2#bar'],
       'override-query-merge' => ['https://example.com/test?foo=1#bar', ['query' => ['bar' => 2]], 'https://example.com/test?foo=1&bar=2#bar'],
       'override-deep-query-merge' => ['https://example.com/test?foo=1#bar', ['query' => ['bar' => ['baz' => 'foo']]], 'https://example.com/test?foo=1&bar%5Bbaz%5D=foo#bar'],
+      'override-deep-query-merge-int-ket' => ['https://example.com/test?120=1', ['query' => ['bar' => ['baz' => 'foo']]], 'https://example.com/test?120=1&bar%5Bbaz%5D=foo'],
       'override-fragment' => ['https://example.com/test?foo=1#bar', ['fragment' => 'baz'], 'https://example.com/test?foo=1#baz'],
       ['//www.drupal.org', [], '//www.drupal.org'],
     ];
diff --git a/web/core/tests/Drupal/Tests/EntityViewTrait.php b/web/core/tests/Drupal/Tests/EntityViewTrait.php
index 155d2b6fb2ec962ab11d71fd943b96e25f031eee..41581a5f306681b3a0c7365e1e04e9249eb215e3 100644
--- a/web/core/tests/Drupal/Tests/EntityViewTrait.php
+++ b/web/core/tests/Drupal/Tests/EntityViewTrait.php
@@ -30,6 +30,7 @@ trait EntityViewTrait {
    *   the current content language.
    * @param bool $reset
    *   (optional) Whether to clear the cache for this entity.
+   *
    * @return array
    *
    * @see \Drupal\Core\Render\RendererInterface::render()
diff --git a/web/core/tests/bootstrap.php b/web/core/tests/bootstrap.php
index 6d27ec01daf484df341f701c32b0b582563369ee..a77a991191d4e366c1c718ccb7fd5aad3b72abc4 100644
--- a/web/core/tests/bootstrap.php
+++ b/web/core/tests/bootstrap.php
@@ -25,6 +25,7 @@
  *
  * @param string $scan_directory
  *   The directory that should be recursively scanned.
+ *
  * @return array
  *   An associative array of extension directories found within the scanned
  *   directory, keyed by extension name.
diff --git a/web/core/themes/claro/css/components/form.css b/web/core/themes/claro/css/components/form.css
index ca6f8f302f2308ffbef214f965fc1a591687b338..78dc419d1c8e94a619c3382059ccbe88c41c6471 100644
--- a/web/core/themes/claro/css/components/form.css
+++ b/web/core/themes/claro/css/components/form.css
@@ -185,6 +185,19 @@ tr .form-item,
   color: #82828c;
 }
 
+/* Add some spacing so that the focus ring and suffix don't overlap. */
+
+@media screen and (min-width: 601px) {
+  .form-item__suffix {
+    margin-left: 0.5rem; /* LTR */
+  }
+
+  [dir="rtl"] .form-item__suffix {
+    margin-right: 0.5rem;
+    margin-left: 0;
+  }
+}
+
 /**
  * Form actions.
  */
diff --git a/web/core/themes/claro/css/components/form.pcss.css b/web/core/themes/claro/css/components/form.pcss.css
index a39ea94255968e74423aaafee6f8445925b939c3..554df9c9d1100efaf736a69a7d8c0117253ea467 100644
--- a/web/core/themes/claro/css/components/form.pcss.css
+++ b/web/core/themes/claro/css/components/form.pcss.css
@@ -114,6 +114,18 @@ tr .form-item,
   color: var(--input--disabled-fg-color);
 }
 
+/* Add some spacing so that the focus ring and suffix don't overlap. */
+@media screen and (min-width: 601px) {
+  .form-item__suffix {
+    margin-left: var(--space-xs); /* LTR */
+  }
+
+  [dir="rtl"] .form-item__suffix {
+    margin-right: var(--space-xs);
+    margin-left: 0;
+  }
+}
+
 /**
  * Form actions.
  */