function FrameworkTest::assertCommand

Same name in other branches
  1. 8.9.x core/modules/system/tests/src/Functional/Ajax/FrameworkTest.php \Drupal\Tests\system\Functional\Ajax\FrameworkTest::assertCommand()
  2. 10 core/modules/system/tests/src/Functional/Ajax/FrameworkTest.php \Drupal\Tests\system\Functional\Ajax\FrameworkTest::assertCommand()
  3. 11.x core/modules/system/tests/src/Functional/Ajax/FrameworkTest.php \Drupal\Tests\system\Functional\Ajax\FrameworkTest::assertCommand()

Asserts the array of Ajax commands contains the searched command.

An AjaxResponse object stores an array of Ajax commands. This array sometimes includes commands automatically provided by the framework in addition to commands returned by a particular controller. During testing, we're usually interested that a particular command is present, and don't care whether other commands precede or follow the one we're interested in. Additionally, the command we're interested in may include additional data that we're not interested in. Therefore, this function simply asserts that one of the commands in $haystack contains all of the keys and values in $needle. Furthermore, if $needle contains a 'settings' key with an array value, we simply assert that all keys and values within that array are present in the command we're checking, and do not consider it a failure if the actual command contains additional settings that aren't part of $needle.

@internal

Parameters

array $haystack: An array of rendered Ajax commands returned by the server.

array $needle: Array of info we're expecting in one of those commands.

3 calls to FrameworkTest::assertCommand()
FrameworkTest::testAJAXRender in core/modules/system/tests/src/Functional/Ajax/FrameworkTest.php
Verifies the Ajax rendering of a command in the settings.
FrameworkTest::testAJAXRenderError in core/modules/system/tests/src/Functional/Ajax/FrameworkTest.php
Tests the behavior of an error alert command.
FrameworkTest::testOrder in core/modules/system/tests/src/Functional/Ajax/FrameworkTest.php
Tests AjaxResponse::prepare() AJAX commands ordering.

File

core/modules/system/tests/src/Functional/Ajax/FrameworkTest.php, line 116

Class

FrameworkTest
Performs tests on AJAX framework functions.

Namespace

Drupal\Tests\system\Functional\Ajax

Code

protected function assertCommand(array $haystack, array $needle) : void {
    $found = FALSE;
    foreach ($haystack as $command) {
        // If the command has additional settings that we're not testing for, do
        // not consider that a failure.
        if (isset($command['settings']) && is_array($command['settings']) && isset($needle['settings']) && is_array($needle['settings'])) {
            $command['settings'] = array_intersect_key($command['settings'], $needle['settings']);
        }
        // If the command has additional data that we're not testing for, do not
        // consider that a failure. Also, == instead of ===, because we don't
        // require the key/value pairs to be in any particular order
        // (http://php.net/manual/language.operators.array.php).
        if (array_intersect_key($command, $needle) == $needle) {
            $found = TRUE;
            break;
        }
    }
    $this->assertTrue($found);
}

Buggy or inaccurate documentation? Please file an issue. Need support? Need help programming? Connect with the Drupal community.