From 7ab4b0e73ce48ff0b257afe3c075c4934b58ec15 Mon Sep 17 00:00:00 2001
From: catch <catch@35733.no-reply.drupal.org>
Date: Fri, 12 Apr 2024 21:42:24 +0100
Subject: [PATCH] Issue #3439738 by mondrake, longwave: Change remaining
 Jsonapi module test dataproviders to static

---
 .../src/Unit/JsonApiResource/LinkTest.php     | 149 +++++++++---------
 1 file changed, 74 insertions(+), 75 deletions(-)

diff --git a/core/modules/jsonapi/tests/src/Unit/JsonApiResource/LinkTest.php b/core/modules/jsonapi/tests/src/Unit/JsonApiResource/LinkTest.php
index fb5a075550bb..6c5916bb4d2e 100644
--- a/core/modules/jsonapi/tests/src/Unit/JsonApiResource/LinkTest.php
+++ b/core/modules/jsonapi/tests/src/Unit/JsonApiResource/LinkTest.php
@@ -24,66 +24,68 @@ class LinkTest extends UnitTestCase {
    * @covers ::compare
    * @dataProvider linkComparisonProvider
    */
-  public function testLinkComparison(Link $a, Link $b, $expected) {
-    $actual = Link::compare($a, $b);
+  public function testLinkComparison(array $a, array $b, bool $expected): void {
+    $this->mockUrlAssembler();
+
+    $link_a = new Link(new CacheableMetadata(), Url::fromUri($a[0]), $a[1], $a[2] ?? []);
+    $link_b = new Link(new CacheableMetadata(), Url::fromUri($b[0]), $b[1], $b[2] ?? []);
+
+    $actual = Link::compare($link_a, $link_b);
     $this->assertSame($expected, $actual === 0);
   }
 
   /**
    * Provides test data for link comparison.
    */
-  public function linkComparisonProvider() {
-    $this->mockUrlAssembler();
-    return [
-      'same href and same link relation type' => [
-        new Link(new CacheableMetadata(), Url::fromUri('https://jsonapi.org/foo'), 'self'),
-        new Link(new CacheableMetadata(), Url::fromUri('https://jsonapi.org/foo'), 'self'),
-        TRUE,
-      ],
-      'different href and same link relation type' => [
-        new Link(new CacheableMetadata(), Url::fromUri('https://jsonapi.org/foo'), 'self'),
-        new Link(new CacheableMetadata(), Url::fromUri('https://jsonapi.org/bar'), 'self'),
-        FALSE,
-      ],
-      'same href and different link relation type' => [
-        new Link(new CacheableMetadata(), Url::fromUri('https://jsonapi.org/foo'), 'self'),
-        new Link(new CacheableMetadata(), Url::fromUri('https://jsonapi.org/foo'), 'related'),
-        FALSE,
-      ],
-      'same href and same link relation type and empty target attributes' => [
-        new Link(new CacheableMetadata(), Url::fromUri('https://jsonapi.org/foo'), 'self', []),
-        new Link(new CacheableMetadata(), Url::fromUri('https://jsonapi.org/foo'), 'self', []),
-        TRUE,
-      ],
-      'same href and same link relation type and same target attributes' => [
-        new Link(new CacheableMetadata(), Url::fromUri('https://jsonapi.org/foo'), 'self', ['anchor' => 'https://jsonapi.org']),
-        new Link(new CacheableMetadata(), Url::fromUri('https://jsonapi.org/foo'), 'self', ['anchor' => 'https://jsonapi.org']),
-        TRUE,
-      ],
-      // These links are not considered equivalent because it would while the
-      // `href` remains the same, the anchor changes the context of the link.
-      'same href and same link relation type and different target attributes' => [
-        new Link(new CacheableMetadata(), Url::fromUri('https://jsonapi.org/boy'), 'self', ['title' => 'sue']),
-        new Link(new CacheableMetadata(), Url::fromUri('https://jsonapi.org/boy'), 'self', ['anchor' => '/sob', 'title' => 'pa']),
-        FALSE,
-      ],
-      'same href and same link relation type and same nested target attributes' => [
-        new Link(new CacheableMetadata(), Url::fromUri('https://jsonapi.org/foo'), 'self', ['data' => ['foo' => 'bar']]),
-        new Link(new CacheableMetadata(), Url::fromUri('https://jsonapi.org/foo'), 'self', ['data' => ['foo' => 'bar']]),
-        TRUE,
-      ],
-      'same href and same link relation type and different nested target attributes' => [
-        new Link(new CacheableMetadata(), Url::fromUri('https://jsonapi.org/foo'), 'self', ['data' => ['foo' => 'bar']]),
-        new Link(new CacheableMetadata(), Url::fromUri('https://jsonapi.org/foo'), 'self', ['data' => ['foo' => 'baz']]),
-        FALSE,
-      ],
-      // These links are not considered equivalent because it would be unclear
-      // which title corresponds to which link relation type.
-      'same href and different link relation types and different target attributes' => [
-        new Link(new CacheableMetadata(), Url::fromUri('https://jsonapi.org/boy'), 'self', ['title' => 'A boy named Sue']),
-        new Link(new CacheableMetadata(), Url::fromUri('https://jsonapi.org/boy'), 'edit', ['title' => 'Change name to Bill or George']),
-        FALSE,
-      ],
+  public static function linkComparisonProvider(): \Generator {
+    yield 'same href and same link relation type' => [
+      ['https://jsonapi.org/foo', 'self'],
+      ['https://jsonapi.org/foo', 'self'],
+      TRUE,
+    ];
+    yield 'different href and same link relation type' => [
+      ['https://jsonapi.org/foo', 'self'],
+      ['https://jsonapi.org/bar', 'self'],
+      FALSE,
+    ];
+    yield 'same href and different link relation type' => [
+      ['https://jsonapi.org/foo', 'self'],
+      ['https://jsonapi.org/foo', 'related'],
+      FALSE,
+    ];
+    yield 'same href and same link relation type and empty target attributes' => [
+      ['https://jsonapi.org/foo', 'self', []],
+      ['https://jsonapi.org/foo', 'self', []],
+      TRUE,
+    ];
+    yield 'same href and same link relation type and same target attributes' => [
+      ['https://jsonapi.org/foo', 'self', ['anchor' => 'https://jsonapi.org']],
+      ['https://jsonapi.org/foo', 'self', ['anchor' => 'https://jsonapi.org']],
+      TRUE,
+    ];
+    // These links are not considered equivalent because it would while the
+    // `href` remains the same, the anchor changes the context of the link.
+    yield 'same href and same link relation type and different target attributes' => [
+      ['https://jsonapi.org/boy', 'self', ['title' => 'sue']],
+      ['https://jsonapi.org/boy', 'self', ['anchor' => '/sob', 'title' => 'pa']],
+      FALSE,
+    ];
+    yield 'same href and same link relation type and same nested target attributes' => [
+      ['https://jsonapi.org/foo', 'self', ['data' => ['foo' => 'bar']]],
+      ['https://jsonapi.org/foo', 'self', ['data' => ['foo' => 'bar']]],
+      TRUE,
+    ];
+    yield 'same href and same link relation type and different nested target attributes' => [
+      ['https://jsonapi.org/foo', 'self', ['data' => ['foo' => 'bar']]],
+      ['https://jsonapi.org/foo', 'self', ['data' => ['foo' => 'baz']]],
+      FALSE,
+    ];
+    // These links are not considered equivalent because it would be unclear
+    // which title corresponds to which link relation type.
+    yield 'same href and different link relation types and different target attributes' => [
+      ['https://jsonapi.org/boy', 'self', ['title' => 'A boy named Sue']],
+      ['https://jsonapi.org/boy', 'edit', ['title' => 'Change name to Bill or George']],
+      FALSE,
     ];
   }
 
@@ -91,32 +93,29 @@ public function linkComparisonProvider() {
    * @covers ::merge
    * @dataProvider linkMergeProvider
    */
-  public function testLinkMerge(Link $a, Link $b, $expected) {
-    if ($expected instanceof Link) {
-      $this->assertSame($expected->getCacheTags(), Link::merge($a, $b)->getCacheTags());
-    }
-    else {
-      $this->expectExceptionObject($expected);
-      Link::merge($a, $b);
-    }
+  public function testLinkMerge(array $a, array $b, array $expected): void {
+    $this->mockUrlAssembler();
+
+    $link_a = new Link((new CacheableMetadata())->addCacheTags($a[0]), Url::fromUri($a[1]), $a[2]);
+    $link_b = new Link((new CacheableMetadata())->addCacheTags($b[0]), Url::fromUri($b[1]), $b[2]);
+    $link_expected = new Link((new CacheableMetadata())->addCacheTags($expected[0]), Url::fromUri($expected[1]), $expected[2]);
+
+    $this->assertSame($link_expected->getCacheTags(), Link::merge($link_a, $link_b)->getCacheTags());
   }
 
   /**
    * Provides test data for link merging.
    */
-  public function linkMergeProvider() {
-    $this->mockUrlAssembler();
-    return [
-      'same everything' => [
-        new Link((new CacheableMetadata())->addCacheTags(['foo']), Url::fromUri('https://jsonapi.org/foo'), 'self'),
-        new Link((new CacheableMetadata())->addCacheTags(['foo']), Url::fromUri('https://jsonapi.org/foo'), 'self'),
-        new Link((new CacheableMetadata())->addCacheTags(['foo']), Url::fromUri('https://jsonapi.org/foo'), 'self'),
-      ],
-      'different cache tags' => [
-        new Link((new CacheableMetadata())->addCacheTags(['foo']), Url::fromUri('https://jsonapi.org/foo'), 'self'),
-        new Link((new CacheableMetadata())->addCacheTags(['bar']), Url::fromUri('https://jsonapi.org/foo'), 'self'),
-        new Link((new CacheableMetadata())->addCacheTags(['foo', 'bar']), Url::fromUri('https://jsonapi.org/foo'), 'self'),
-      ],
+  public static function linkMergeProvider(): \Generator {
+    yield 'same everything' => [
+      [['foo'], 'https://jsonapi.org/foo', 'self'],
+      [['foo'], 'https://jsonapi.org/foo', 'self'],
+      [['foo'], 'https://jsonapi.org/foo', 'self'],
+    ];
+    yield 'different cache tags' => [
+      [['foo'], 'https://jsonapi.org/foo', 'self'],
+      [['bar'], 'https://jsonapi.org/foo', 'self'],
+      [['foo', 'bar'], 'https://jsonapi.org/foo', 'self'],
     ];
   }
 
-- 
GitLab