From 279b57d1adfd6e67bc6a04bc2455980283ca29f2 Mon Sep 17 00:00:00 2001
From: Lauri Eskola <lauriii@1078742.no-reply.drupal.org>
Date: Tue, 1 Aug 2017 17:03:35 +0300
Subject: [PATCH] Issue #2892942 by Wim Leers, Chi, tedbow: Contextual links
 support options but not use them to generate links

(cherry picked from commit 4c8c5e1f0f85f0c8858265084664e04b80265e13)
---
 .../contextual/src/Element/ContextualLinks.php   |  2 +-
 .../src/Tests/ContextualDynamicContextTest.php   |  2 +-
 .../menu_test/menu_test.links.contextual.yml     |  5 +++++
 .../Core/Menu/ContextualLinkManagerTest.php      | 16 ++--------------
 4 files changed, 9 insertions(+), 16 deletions(-)

diff --git a/core/modules/contextual/src/Element/ContextualLinks.php b/core/modules/contextual/src/Element/ContextualLinks.php
index 62e8966afae7..e5b58fb35bb5 100644
--- a/core/modules/contextual/src/Element/ContextualLinks.php
+++ b/core/modules/contextual/src/Element/ContextualLinks.php
@@ -78,7 +78,7 @@ public static function preRenderLinks(array $element) {
       $class = Html::getClass($class);
       $links[$class] = [
         'title' => $item['title'],
-        'url' => Url::fromRoute(isset($item['route_name']) ? $item['route_name'] : '', isset($item['route_parameters']) ? $item['route_parameters'] : []),
+        'url' => Url::fromRoute(isset($item['route_name']) ? $item['route_name'] : '', isset($item['route_parameters']) ? $item['route_parameters'] : [], $item['localized_options']),
       ];
     }
     $element['#links'] = $links;
diff --git a/core/modules/contextual/src/Tests/ContextualDynamicContextTest.php b/core/modules/contextual/src/Tests/ContextualDynamicContextTest.php
index 90b73d7006d1..00ade5a5ac9f 100644
--- a/core/modules/contextual/src/Tests/ContextualDynamicContextTest.php
+++ b/core/modules/contextual/src/Tests/ContextualDynamicContextTest.php
@@ -137,7 +137,7 @@ public function testDifferentPermissions() {
     // Get a page where contextual links are directly rendered.
     $this->drupalGet(Url::fromRoute('menu_test.contextual_test'));
     $this->assertEscaped("<script>alert('Welcome to the jungle!')</script>");
-    $this->assertLink('Edit menu - contextual');
+    $this->assertRaw('<li class="menu-testcontextual-hidden-manage-edit"><a href="' . base_path() . 'menu-test-contextual/1/edit" class="use-ajax" data-dialog-type="modal" data-is-something>Edit menu - contextual</a></li>');
   }
 
   /**
diff --git a/core/modules/system/tests/modules/menu_test/menu_test.links.contextual.yml b/core/modules/system/tests/modules/menu_test/menu_test.links.contextual.yml
index 9a8d8adca845..2849592433d6 100644
--- a/core/modules/system/tests/modules/menu_test/menu_test.links.contextual.yml
+++ b/core/modules/system/tests/modules/menu_test/menu_test.links.contextual.yml
@@ -8,6 +8,11 @@ menu_test.contextual_hidden_manage_edit:
   title: 'Edit menu - contextual'
   group: menu_test_menu
   route_name: menu_test.contextual_hidden_manage_edit
+  options:
+    attributes:
+      class: ['use-ajax']
+      data-dialog-type: 'modal'
+      data-is-something: TRUE
 
 menu_test.hidden_block_configure:
   title: 'Configure block'
diff --git a/core/tests/Drupal/Tests/Core/Menu/ContextualLinkManagerTest.php b/core/tests/Drupal/Tests/Core/Menu/ContextualLinkManagerTest.php
index bebc935bb572..ddc0fbd4154e 100644
--- a/core/tests/Drupal/Tests/Core/Menu/ContextualLinkManagerTest.php
+++ b/core/tests/Drupal/Tests/Core/Menu/ContextualLinkManagerTest.php
@@ -278,20 +278,7 @@ public function testGetContextualLinksArrayByGroup() {
     // Set up mocking of the plugin factory.
     $map = [];
     foreach ($definitions as $plugin_id => $definition) {
-      $plugin = $this->getMock('Drupal\Core\Menu\ContextualLinkInterface');
-      $plugin->expects($this->any())
-        ->method('getRouteName')
-        ->will($this->returnValue($definition['route_name']));
-      $plugin->expects($this->any())
-        ->method('getTitle')
-        ->will($this->returnValue($definition['title']));
-      $plugin->expects($this->any())
-        ->method('getWeight')
-        ->will($this->returnValue($definition['weight']));
-      $plugin->expects($this->any())
-        ->method('getOptions')
-        ->will($this->returnValue($definition['options']));
-      $map[] = [$plugin_id, [], $plugin];
+      $map[] = [$plugin_id, [], new ContextualLinkDefault([], $plugin_id, $definition)];
     }
     $this->factory->expects($this->any())
       ->method('createInstance')
@@ -308,6 +295,7 @@ public function testGetContextualLinksArrayByGroup() {
       $this->assertEquals($definition['weight'], $result[$plugin_id]['weight']);
       $this->assertEquals($definition['title'], $result[$plugin_id]['title']);
       $this->assertEquals($definition['route_name'], $result[$plugin_id]['route_name']);
+      $this->assertEquals($definition['options'], $result[$plugin_id]['localized_options']);
     }
   }
 
-- 
GitLab