Issue #3308449 by owenbush: CategorizingPluginManagerTrait::getSortedDefinitions() sometimes returns plugins in the incorrect order if they have categories or labels translated
parent
243783522d
commit
d3cf1e9277
|
@ -91,7 +91,7 @@ trait CategorizingPluginManagerTrait {
|
|||
/** @var \Drupal\Core\Plugin\CategorizingPluginManagerTrait|\Drupal\Component\Plugin\PluginManagerInterface $this */
|
||||
$definitions = $definitions ?? $this->getDefinitions();
|
||||
uasort($definitions, function ($a, $b) use ($label_key) {
|
||||
if ($a['category'] != $b['category']) {
|
||||
if ((string) $a['category'] != (string) $b['category']) {
|
||||
return strnatcasecmp($a['category'], $b['category']);
|
||||
}
|
||||
return strnatcasecmp($a[$label_key], $b[$label_key]);
|
||||
|
|
|
@ -11,6 +11,7 @@ use Drupal\Core\Session\AccountInterface;
|
|||
use Drupal\Tests\UnitTestCase;
|
||||
use Psr\Log\LoggerInterface;
|
||||
use Drupal\Core\DependencyInjection\ContainerBuilder;
|
||||
use Drupal\Core\StringTranslation\StringTranslationTrait;
|
||||
|
||||
/**
|
||||
* @coversDefaultClass \Drupal\Core\Block\BlockManager
|
||||
|
@ -19,6 +20,8 @@ use Drupal\Core\DependencyInjection\ContainerBuilder;
|
|||
*/
|
||||
class BlockManagerTest extends UnitTestCase {
|
||||
|
||||
use StringTranslationTrait;
|
||||
|
||||
/**
|
||||
* The block manager under test.
|
||||
*
|
||||
|
@ -42,6 +45,7 @@ class BlockManagerTest extends UnitTestCase {
|
|||
$container = new ContainerBuilder();
|
||||
$current_user = $this->prophesize(AccountInterface::class);
|
||||
$container->set('current_user', $current_user->reveal());
|
||||
$container->set('string_translation', $this->getStringTranslationStub());
|
||||
\Drupal::setContainer($container);
|
||||
|
||||
$cache_backend = $this->prophesize(CacheBackendInterface::class);
|
||||
|
@ -55,22 +59,22 @@ class BlockManagerTest extends UnitTestCase {
|
|||
// that are purposefully not in alphabetical order.
|
||||
$discovery->getDefinitions()->willReturn([
|
||||
'broken' => [
|
||||
'admin_label' => 'Broken/Missing',
|
||||
'category' => 'Block',
|
||||
'admin_label' => $this->t('Broken/Missing'),
|
||||
'category' => $this->t('Block'),
|
||||
'class' => Broken::class,
|
||||
'provider' => 'core',
|
||||
],
|
||||
'block1' => [
|
||||
'admin_label' => 'Coconut',
|
||||
'category' => 'Group 2',
|
||||
'admin_label' => $this->t('Coconut'),
|
||||
'category' => $this->t('Group 2'),
|
||||
],
|
||||
'block2' => [
|
||||
'admin_label' => 'Apple',
|
||||
'category' => 'Group 1',
|
||||
'admin_label' => $this->t('Apple'),
|
||||
'category' => $this->t('Group 1'),
|
||||
],
|
||||
'block3' => [
|
||||
'admin_label' => 'Banana',
|
||||
'category' => 'Group 2',
|
||||
'admin_label' => $this->t('Banana'),
|
||||
'category' => $this->t('Group 2'),
|
||||
],
|
||||
]);
|
||||
// Force the discovery object onto the block manager.
|
||||
|
|
Loading…
Reference in New Issue