You are here

class SortArrayTest in Drupal 8

Same name and namespace in other branches
  1. 9 core/tests/Drupal/Tests/Component/Utility/SortArrayTest.php \Drupal\Tests\Component\Utility\SortArrayTest
  2. 10 core/tests/Drupal/Tests/Component/Utility/SortArrayTest.php \Drupal\Tests\Component\Utility\SortArrayTest

Tests the SortArray component.

@group Utility

@coversDefaultClass \Drupal\Component\Utility\SortArray

Hierarchy

Expanded class hierarchy of SortArrayTest

File

core/tests/Drupal/Tests/Component/Utility/SortArrayTest.php, line 16

Namespace

Drupal\Tests\Component\Utility
View source
class SortArrayTest extends TestCase {
  use PhpunitCompatibilityTrait;

  /**
   * Tests SortArray::sortByWeightElement() input against expected output.
   *
   * @dataProvider providerSortByWeightElement
   * @covers ::sortByWeightElement
   * @covers ::sortByKeyInt
   *
   * @param array $a
   *   The first input array for the SortArray::sortByWeightElement() method.
   * @param array $b
   *   The second input array for the SortArray::sortByWeightElement().
   * @param int $expected
   *   The expected output from calling the method.
   */
  public function testSortByWeightElement($a, $b, $expected) {
    $result = SortArray::sortByWeightElement($a, $b);
    $this
      ->assertBothNegativePositiveOrZero($expected, $result);
  }

  /**
   * Data provider for SortArray::sortByWeightElement().
   *
   * @return array
   *   An array of tests, matching the parameter inputs for
   *   testSortByWeightElement.
   *
   * @see \Drupal\Tests\Component\Utility\SortArrayTest::testSortByWeightElement()
   */
  public function providerSortByWeightElement() {
    $tests = [];

    // Weights set and equal.
    $tests[] = [
      [
        'weight' => 1,
      ],
      [
        'weight' => 1,
      ],
      0,
    ];

    // Weights set and $a is less (lighter) than $b.
    $tests[] = [
      [
        'weight' => 1,
      ],
      [
        'weight' => 2,
      ],
      -1,
    ];

    // Weights set and $a is greater (heavier) than $b.
    $tests[] = [
      [
        'weight' => 2,
      ],
      [
        'weight' => 1,
      ],
      1,
    ];

    // Weights not set.
    $tests[] = [
      [],
      [],
      0,
    ];

    // Weights for $b not set.
    $tests[] = [
      [
        'weight' => 1,
      ],
      [],
      1,
    ];

    // Weights for $a not set.
    $tests[] = [
      [],
      [
        'weight' => 1,
      ],
      -1,
    ];
    return $tests;
  }

  /**
   * Tests SortArray::sortByWeightProperty() input against expected output.
   *
   * @dataProvider providerSortByWeightProperty
   * @covers ::sortByWeightProperty
   * @covers ::sortByKeyInt
   *
   * @param array $a
   *   The first input array for the SortArray::sortByWeightProperty() method.
   * @param array $b
   *   The second input array for the SortArray::sortByWeightProperty().
   * @param int $expected
   *   The expected output from calling the method.
   */
  public function testSortByWeightProperty($a, $b, $expected) {
    $result = SortArray::sortByWeightProperty($a, $b);
    $this
      ->assertBothNegativePositiveOrZero($expected, $result);
  }

  /**
   * Data provider for SortArray::sortByWeightProperty().
   *
   * @return array
   *   An array of tests, matching the parameter inputs for
   *   testSortByWeightProperty.
   *
   * @see \Drupal\Tests\Component\Utility\SortArrayTest::testSortByWeightProperty()
   */
  public function providerSortByWeightProperty() {
    $tests = [];

    // Weights set and equal.
    $tests[] = [
      [
        '#weight' => 1,
      ],
      [
        '#weight' => 1,
      ],
      0,
    ];

    // Weights set and $a is less (lighter) than $b.
    $tests[] = [
      [
        '#weight' => 1,
      ],
      [
        '#weight' => 2,
      ],
      -1,
    ];

    // Weights set and $a is greater (heavier) than $b.
    $tests[] = [
      [
        '#weight' => 2,
      ],
      [
        '#weight' => 1,
      ],
      1,
    ];

    // Weights not set.
    $tests[] = [
      [],
      [],
      0,
    ];

    // Weights for $b not set.
    $tests[] = [
      [
        '#weight' => 1,
      ],
      [],
      1,
    ];

    // Weights for $a not set.
    $tests[] = [
      [],
      [
        '#weight' => 1,
      ],
      -1,
    ];
    return $tests;
  }

  /**
   * Tests SortArray::sortByTitleElement() input against expected output.
   *
   * @dataProvider providerSortByTitleElement
   * @covers ::sortByTitleElement
   * @covers ::sortByKeyString
   *
   * @param array $a
   *   The first input item for comparison.
   * @param array $b
   *   The second item for comparison.
   * @param int $expected
   *   The expected output from calling the method.
   */
  public function testSortByTitleElement($a, $b, $expected) {
    $result = SortArray::sortByTitleElement($a, $b);
    $this
      ->assertBothNegativePositiveOrZero($expected, $result);
  }

  /**
   * Data provider for SortArray::sortByTitleElement().
   *
   * @return array
   *   An array of tests, matching the parameter inputs for
   *   testSortByTitleElement.
   *
   * @see \Drupal\Tests\Component\Utility\SortArrayTest::testSortByTitleElement()
   */
  public function providerSortByTitleElement() {
    $tests = [];

    // Titles set and equal.
    $tests[] = [
      [
        'title' => 'test',
      ],
      [
        'title' => 'test',
      ],
      0,
    ];

    // Title $a not set.
    $tests[] = [
      [],
      [
        'title' => 'test',
      ],
      -4,
    ];

    // Title $b not set.
    $tests[] = [
      [
        'title' => 'test',
      ],
      [],
      4,
    ];

    // Titles set but not equal.
    $tests[] = [
      [
        'title' => 'test',
      ],
      [
        'title' => 'testing',
      ],
      -1,
    ];

    // Titles set but not equal.
    $tests[] = [
      [
        'title' => 'testing',
      ],
      [
        'title' => 'test',
      ],
      1,
    ];
    return $tests;
  }

  /**
   * Tests SortArray::sortByTitleProperty() input against expected output.
   *
   * @dataProvider providerSortByTitleProperty
   * @covers ::sortByTitleProperty
   * @covers ::sortByKeyString
   *
   * @param array $a
   *   The first input item for comparison.
   * @param array $b
   *   The second item for comparison.
   * @param int $expected
   *   The expected output from calling the method.
   */
  public function testSortByTitleProperty($a, $b, $expected) {
    $result = SortArray::sortByTitleProperty($a, $b);
    $this
      ->assertBothNegativePositiveOrZero($expected, $result);
  }

  /**
   * Data provider for SortArray::sortByTitleProperty().
   *
   * @return array
   *   An array of tests, matching the parameter inputs for
   *   testSortByTitleProperty.
   *
   * @see \Drupal\Tests\Component\Utility\SortArrayTest::testSortByTitleProperty()
   */
  public function providerSortByTitleProperty() {
    $tests = [];

    // Titles set and equal.
    $tests[] = [
      [
        '#title' => 'test',
      ],
      [
        '#title' => 'test',
      ],
      0,
    ];

    // Title $a not set.
    $tests[] = [
      [],
      [
        '#title' => 'test',
      ],
      -4,
    ];

    // Title $b not set.
    $tests[] = [
      [
        '#title' => 'test',
      ],
      [],
      4,
    ];

    // Titles set but not equal.
    $tests[] = [
      [
        '#title' => 'test',
      ],
      [
        '#title' => 'testing',
      ],
      -1,
    ];

    // Titles set but not equal.
    $tests[] = [
      [
        '#title' => 'testing',
      ],
      [
        '#title' => 'test',
      ],
      1,
    ];
    return $tests;
  }

  /**
   * Asserts that numbers are either both negative, both positive or both zero.
   *
   * The exact values returned by comparison functions differ between PHP
   * versions and are considered an "implementation detail".
   *
   * @param int $expected
   *   Expected comparison function return value.
   * @param int $result
   *   Actual comparison function return value.
   */
  protected function assertBothNegativePositiveOrZero($expected, $result) {
    $this
      ->assertIsNumeric($expected);
    $this
      ->assertIsNumeric($result);
    $this
      ->assertTrue($expected < 0 && $result < 0 || $expected > 0 && $result > 0 || $expected === 0 && $result === 0, 'Numbers are either both negative, both positive or both zero.');
  }

}

Members

Namesort descending Modifiers Type Description Overrides
PhpunitCompatibilityTrait::getMock Deprecated public function Returns a mock object for the specified class using the available method.
PhpunitCompatibilityTrait::setExpectedException Deprecated public function Compatibility layer for PHPUnit 6 to support PHPUnit 4 code.
SortArrayTest::assertBothNegativePositiveOrZero protected function Asserts that numbers are either both negative, both positive or both zero.
SortArrayTest::providerSortByTitleElement public function Data provider for SortArray::sortByTitleElement().
SortArrayTest::providerSortByTitleProperty public function Data provider for SortArray::sortByTitleProperty().
SortArrayTest::providerSortByWeightElement public function Data provider for SortArray::sortByWeightElement().
SortArrayTest::providerSortByWeightProperty public function Data provider for SortArray::sortByWeightProperty().
SortArrayTest::testSortByTitleElement public function Tests SortArray::sortByTitleElement() input against expected output.
SortArrayTest::testSortByTitleProperty public function Tests SortArray::sortByTitleProperty() input against expected output.
SortArrayTest::testSortByWeightElement public function Tests SortArray::sortByWeightElement() input against expected output.
SortArrayTest::testSortByWeightProperty public function Tests SortArray::sortByWeightProperty() input against expected output.