Loading core/lib/Drupal/Core/Language/Language.php +5 −1 Changes for core/lib/Drupal/Core/Language/Language.php: 5 added lines, 1 removed line. Original line number Diff line number Diff line Loading @@ -7,6 +7,8 @@ namespace Drupal\Core\Language; use Drupal\Component\Utility\SortArray; /** * An object containing the information for an interface language. * Loading Loading @@ -217,7 +219,9 @@ public function setNegotiationMethodId($method_id) { * The array of language objects keyed by langcode. */ public static function sort(&$languages) { uasort($languages, 'Drupal\Component\Utility\SortArray::sortByWeightAndTitleKey'); uasort($languages, function ($a, $b) { return SortArray::sortByWeightAndTitleKey($a, $b, 'weight', 'name'); }); } } core/tests/Drupal/Tests/Core/Language/LanguageUnitTest.php +89 −0 Changes for core/tests/Drupal/Tests/Core/Language/LanguageUnitTest.php: 89 added lines, 0 removed lines. Original line number Diff line number Diff line Loading @@ -91,4 +91,93 @@ public function testGetNegotiationMethodId() { $this->assertSame($method_id, $this->language->getNegotiationMethodId()); } /** * Tests sorting an array of Language objects. * * @covers ::sort() * * @dataProvider providerTestSortArrayOfLanguages * * @param \Drupal\Core\Language\Language[] $languages * An array of \Drupal\Core\Language\Language objects. * @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(); $language9A->setName('A'); $language9A->setWeight(9); $language9A->setId('dd'); $language10A = new Language(); $language10A->setName('A'); $language10A->setWeight(10); $language10A->setId('ee'); $language10B = new Language(); $language10B->setName('B'); $language10B->setWeight(10); $language10B->setId('ff'); return array( // Set up data set #0, already ordered by weight. array( // Set the data. array( $language9A->getId() => $language9A, $language10B->getId() => $language10B, ), // Set the expected key order. array( $language9A->getId(), $language10B->getId(), ), ), // Set up data set #1, out of order by weight. array( array( $language10B->getId() => $language10B, $language9A->getId() => $language9A, ), array( $language9A->getId(), $language10B->getId(), ), ), // Set up data set #2, tied by weight, already ordered by name. array( array( $language10A->getId() => $language10A, $language10B->getId() => $language10B, ), array( $language10A->getId(), $language10B->getId(), ), ), // Set up data set #3, tied by weight, out of order by name. array( array( $language10B->getId() => $language10B, $language10A->getId() => $language10A, ), array( $language10A->getId(), $language10B->getId(), ), ), ); } } Loading
core/lib/Drupal/Core/Language/Language.php +5 −1 Changes for core/lib/Drupal/Core/Language/Language.php: 5 added lines, 1 removed line. Original line number Diff line number Diff line Loading @@ -7,6 +7,8 @@ namespace Drupal\Core\Language; use Drupal\Component\Utility\SortArray; /** * An object containing the information for an interface language. * Loading Loading @@ -217,7 +219,9 @@ public function setNegotiationMethodId($method_id) { * The array of language objects keyed by langcode. */ public static function sort(&$languages) { uasort($languages, 'Drupal\Component\Utility\SortArray::sortByWeightAndTitleKey'); uasort($languages, function ($a, $b) { return SortArray::sortByWeightAndTitleKey($a, $b, 'weight', 'name'); }); } }
core/tests/Drupal/Tests/Core/Language/LanguageUnitTest.php +89 −0 Changes for core/tests/Drupal/Tests/Core/Language/LanguageUnitTest.php: 89 added lines, 0 removed lines. Original line number Diff line number Diff line Loading @@ -91,4 +91,93 @@ public function testGetNegotiationMethodId() { $this->assertSame($method_id, $this->language->getNegotiationMethodId()); } /** * Tests sorting an array of Language objects. * * @covers ::sort() * * @dataProvider providerTestSortArrayOfLanguages * * @param \Drupal\Core\Language\Language[] $languages * An array of \Drupal\Core\Language\Language objects. * @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(); $language9A->setName('A'); $language9A->setWeight(9); $language9A->setId('dd'); $language10A = new Language(); $language10A->setName('A'); $language10A->setWeight(10); $language10A->setId('ee'); $language10B = new Language(); $language10B->setName('B'); $language10B->setWeight(10); $language10B->setId('ff'); return array( // Set up data set #0, already ordered by weight. array( // Set the data. array( $language9A->getId() => $language9A, $language10B->getId() => $language10B, ), // Set the expected key order. array( $language9A->getId(), $language10B->getId(), ), ), // Set up data set #1, out of order by weight. array( array( $language10B->getId() => $language10B, $language9A->getId() => $language9A, ), array( $language9A->getId(), $language10B->getId(), ), ), // Set up data set #2, tied by weight, already ordered by name. array( array( $language10A->getId() => $language10A, $language10B->getId() => $language10B, ), array( $language10A->getId(), $language10B->getId(), ), ), // Set up data set #3, tied by weight, out of order by name. array( array( $language10B->getId() => $language10B, $language10A->getId() => $language10A, ), array( $language10A->getId(), $language10B->getId(), ), ), ); } }