diff --git a/core/modules/language/tests/src/Unit/ConfigurableLanguageUnitTest.php b/core/modules/language/tests/src/Unit/ConfigurableLanguageUnitTest.php index f3d8d38..74426aa 100644 --- a/core/modules/language/tests/src/Unit/ConfigurableLanguageUnitTest.php +++ b/core/modules/language/tests/src/Unit/ConfigurableLanguageUnitTest.php @@ -6,6 +6,7 @@ namespace Drupal\Tests\language\Unit; +use Drupal\Core\Language\Language; use Drupal\language\Entity\ConfigurableLanguage; use Drupal\Tests\UnitTestCase; @@ -77,4 +78,107 @@ public function testNegotiationMethodId(){ $this->assertEquals($this->configurableLanguage->getNegotiationMethodId(), $set_method_id, 'Negotiation Method Identifier written and read correctly.'); } + /** + * Tests sorting an array of language objects. + * + * @covers ::sort() + * + * @dataProvider providerTestSortArrayOfLanguages + * + * @param \Drupal\Core\Language\LanguageInterface[] $languages + * An array of language objects: a mix of \Drupal\Core\Language\Language and + * \Drupal\language\Entity\ConfigurableLanguage. + * @param array $expected + * The expected array of keys. + */ + public function testSortArrayOfLanguages(array $languages, array $expected) { + Language::sort($languages); + $this->assertSame($expected, array_keys($languages)); + } + + /** + * Provides data for testSortArrayOfLanguages. + * + * @return array + * An array of test data. + */ + public function providerTestSortArrayOfLanguages() { + $language9A = new Language(array('id' => 'dd')); + $language9A->setName('A'); + $language9A->setWeight(9); + + $language10A = new Language(array('id' => 'ee')); + $language10A->setName('A'); + $language10A->setWeight(10); + + $language10B = new Language(array('id' => 'ff')); + $language10B->setName('B'); + $language10B->setWeight(10); + + $language8A = new ConfigurableLanguage(array('id' => 'hh'), 'configurable_language'); + $language8A->setName('A'); + $language8A->setWeight(8); + + $language10C = new ConfigurableLanguage(array('id' => 'hh'), 'configurable_language'); + $language10C->setName('C'); + $language10C->setWeight(10); + + return array( + // Set up data set #0, already ordered by weight. + array( + // Set the data. + array( + $language8A->getId() => $language8A, + $language9A->getId() => $language9A, + $language10B->getId() => $language10B, + ), + // Set the expected key order. + array( + $language8A->getId(), + $language9A->getId(), + $language10B->getId(), + ), + ), + // Set up data set #1, out of order by weight. + array( + array( + $language10B->getId() => $language10B, + $language10C->getId() => $language8A, + $language9A->getId() => $language9A, + ), + array( + $language8A->getId(), + $language9A->getId(), + $language10B->getId(), + ), + ), + // Set up data set #2, tied by weight, already ordered by name. + array( + array( + $language10A->getId() => $language10A, + $language10B->getId() => $language10B, + $language10C->getId() => $language10C, + ), + array( + $language10A->getId(), + $language10B->getId(), + $language10C->getId(), + ), + ), + // Set up data set #3, tied by weight, out of order by name. + array( + array( + $language10B->getId() => $language10B, + $language10C->getId() => $language10C, + $language10A->getId() => $language10A, + ), + array( + $language10A->getId(), + $language10B->getId(), + $language10C->getId(), + ), + ), + ); + } + }