123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327 |
- <?php
- namespace Drupal\Tests\Component\Utility;
- use Drupal\Component\Utility\SortArray;
- use Drupal\Tests\PhpunitCompatibilityTrait;
- use PHPUnit\Framework\TestCase;
- /**
- * Tests the SortArray component.
- *
- * @group Utility
- *
- * @coversDefaultClass \Drupal\Component\Utility\SortArray
- */
- 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.');
- }
- }
|