external_entities-8.x-2.x-dev/tests/src/Unit/DataAggregatorUnitTest.php

tests/src/Unit/DataAggregatorUnitTest.php
<?php

namespace Drupal\Tests\external_entities\Unit;

use Drupal\Tests\UnitTestCase;
use Drupal\external_entities\Plugin\ExternalEntities\DataAggregator\GroupAggregator;

/**
 * The class to test data aggregator.
 *
 * @group ExternalEntities
 */
class DataAggregatorUnitTest extends UnitTestCase {

  /**
   * Data provider for testMergeArray().
   *
   * Structure:
   * - expected_array
   * - array a
   * - array b
   * - merge_subarrays
   * - only_empty
   * - preserve_integer_keys
   * - no_new_keys
   * - test name.
   */
  public static function provideTestMergeArray() {
    return [
      // Full override.
      [
        ['id' => 'b'],
        ['id' => 'a'],
        ['id' => 'b'],
        FALSE,
        FALSE,
        FALSE,
        FALSE,
        'Merge full override 1',
      ],
      [
        ['id' => 'b', 'other_a' => 1],
        ['id' => 'a', 'other_a' => 1],
        ['id' => 'b'],
        FALSE,
        FALSE,
        FALSE,
        FALSE,
        'Merge full override 2',
      ],
      [
        ['id' => 'b', 'other_b' => 2],
        ['id' => 'a'],
        ['id' => 'b', 'other_b' => 2],
        FALSE,
        FALSE,
        FALSE,
        FALSE,
        'Merge full override 3',
      ],
      [
        ['id' => 'b', 'other_a' => 1, 'other_b' => 2],
        ['id' => 'a', 'other_a' => 1],
        ['id' => 'b', 'other_b' => 2],
        FALSE,
        FALSE,
        FALSE,
        FALSE,
        'Merge full override 4',
      ],
      [
        ['id' => 'b', 'field1' => ['d']],
        ['id' => 'a', 'field1' => 'c'],
        ['id' => 'b', 'field1' => ['d']],
        FALSE,
        FALSE,
        FALSE,
        FALSE,
        'Merge full override 5',
      ],
      [
        ['id' => 'b', 'field1' => 'd'],
        ['id' => 'a', 'field1' => ['c']],
        ['id' => 'b', 'field1' => 'd'],
        FALSE,
        FALSE,
        FALSE,
        FALSE,
        'Merge full override 6',
      ],
      [
        ['id' => 'b', 'field1' => ['d']],
        ['id' => 'a', 'field1' => ['c']],
        ['id' => 'b', 'field1' => ['d']],
        FALSE,
        FALSE,
        FALSE,
        FALSE,
        'Merge full override 7',
      ],
      [
        ['id' => 'b', 'field1' => 42, 'field2' => [66]],
        ['id' => 'a', 'field1' => NULL, 'field2' => []],
        ['id' => 'b', 'field1' => 42, 'field2' => [66]],
        FALSE,
        FALSE,
        FALSE,
        FALSE,
        'Merge full override 8',
      ],
      [
        ['id' => 'b', 'field1' => NULL, 'field2' => []],
        ['id' => 'a', 'field1' => 42, 'field2' => [66]],
        ['id' => 'b', 'field1' => NULL, 'field2' => []],
        FALSE,
        FALSE,
        FALSE,
        FALSE,
        'Merge full override 9',
      ],
      [
        ['id' => 'b', 'field1' => NULL],
        ['id' => 'a', 'field1' => ''],
        ['id' => 'b', 'field1' => NULL],
        FALSE,
        FALSE,
        FALSE,
        FALSE,
        'Merge full override 10',
      ],
      [
        ['id' => 'b', 'field1' => ['A' => 'beta']],
        ['id' => 'a', 'field1' => ['A' => 'alpha']],
        ['id' => 'b', 'field1' => ['A' => 'beta']],
        FALSE,
        FALSE,
        FALSE,
        FALSE,
        'Merge full override 11',
      ],
      [
        ['id' => 'b', 'field1' => ['B' => 'beta']],
        ['id' => 'a', 'field1' => ['A' => 'alpha']],
        ['id' => 'b', 'field1' => ['B' => 'beta']],
        FALSE,
        FALSE,
        FALSE,
        FALSE,
        'Merge full override 12',
      ],
      [
        ['id' => 'b', 'field1' => ['A' => 'alpha', 'B' => 'beta', 'C' => 'gamma']],
        ['id' => 'a', 'field1' => ['A' => 'abc', 'C' => '', 'D' => 'delta']],
        ['id' => 'b', 'field1' => ['A' => 'alpha', 'B' => 'beta', 'C' => 'gamma']],
        FALSE,
        FALSE,
        FALSE,
        FALSE,
        'Merge full override 13',
      ],
      [
        ['id' => 'b', 'field1' => ['c', 'd']],
        ['id' => 'a', 'field1' => ['a', 'b']],
        ['id' => 'b', 'field1' => ['c', 'd']],
        FALSE,
        FALSE,
        FALSE,
        FALSE,
        'Merge full override 14',
      ],
      [
        ['id' => 'b', 'field1' => [2 => 'c', 4 => 'd']],
        ['id' => 'a', 'field1' => [2 => 'a', 5 => 'b']],
        ['id' => 'b', 'field1' => [2 => 'c', 4 => 'd']],
        FALSE,
        FALSE,
        FALSE,
        FALSE,
        'Merge full override 15',
      ],
      [
        ['id' => 'b', 'field1' => ['a' => ['b' => 806, 'd' => 42]]],
        ['id' => 'a', 'field1' => ['a' => ['b' => 33, 'c' => 7]]],
        ['id' => 'b', 'field1' => ['a' => ['b' => 806, 'd' => 42]]],
        FALSE,
        FALSE,
        FALSE,
        FALSE,
        'Merge full override 16',
      ],
      // Deep merge.
      [
        ['id' => 'b'],
        ['id' => 'a'],
        ['id' => 'b'],
        TRUE,
        FALSE,
        FALSE,
        FALSE,
        'Merge deep 1',
      ],
      [
        ['id' => 'b', 'other_a' => 1],
        ['id' => 'a', 'other_a' => 1],
        ['id' => 'b'],
        TRUE,
        FALSE,
        FALSE,
        FALSE,
        'Merge deep 2',
      ],
      [
        ['id' => 'b', 'other_b' => 2],
        ['id' => 'a'],
        ['id' => 'b', 'other_b' => 2],
        TRUE,
        FALSE,
        FALSE,
        FALSE,
        'Merge deep 3',
      ],
      [
        ['id' => 'b', 'other_a' => 1, 'other_b' => 2],
        ['id' => 'a', 'other_a' => 1],
        ['id' => 'b', 'other_b' => 2],
        TRUE,
        FALSE,
        FALSE,
        FALSE,
        'Merge deep 4',
      ],
      [
        ['id' => 'b', 'field1' => ['c', 'd']],
        ['id' => 'a', 'field1' => 'c'],
        ['id' => 'b', 'field1' => ['d']],
        TRUE,
        FALSE,
        FALSE,
        FALSE,
        'Merge deep 5',
      ],
      [
        ['id' => 'b', 'field1' => ['c', 'd']],
        ['id' => 'a', 'field1' => ['c']],
        ['id' => 'b', 'field1' => 'd'],
        TRUE,
        FALSE,
        FALSE,
        FALSE,
        'Merge deep 6',
      ],
      [
        ['id' => 'b', 'field1' => ['c', 'd']],
        ['id' => 'a', 'field1' => ['c']],
        ['id' => 'b', 'field1' => ['d']],
        TRUE,
        FALSE,
        FALSE,
        FALSE,
        'Merge deep 7',
      ],
      [
        ['id' => 'b', 'field1' => 42, 'field2' => [66]],
        ['id' => 'a', 'field1' => NULL, 'field2' => []],
        ['id' => 'b', 'field1' => 42, 'field2' => [66]],
        TRUE,
        FALSE,
        FALSE,
        FALSE,
        'Merge deep 8',
      ],
      [
        ['id' => 'b', 'field1' => NULL, 'field2' => [66]],
        ['id' => 'a', 'field1' => 42, 'field2' => [66]],
        ['id' => 'b', 'field1' => NULL, 'field2' => []],
        TRUE,
        FALSE,
        FALSE,
        FALSE,
        'Merge deep 9',
      ],
      [
        ['id' => 'b', 'field1' => NULL],
        ['id' => 'a', 'field1' => ''],
        ['id' => 'b', 'field1' => NULL],
        TRUE,
        FALSE,
        FALSE,
        FALSE,
        'Merge deep 10',
      ],
      [
        ['id' => 'b', 'field1' => ['A' => 'beta']],
        ['id' => 'a', 'field1' => ['A' => 'alpha']],
        ['id' => 'b', 'field1' => ['A' => 'beta']],
        TRUE,
        FALSE,
        FALSE,
        FALSE,
        'Merge deep 11',
      ],
      [
        ['id' => 'b', 'field1' => ['A' => 'alpha', 'B' => 'beta']],
        ['id' => 'a', 'field1' => ['A' => 'alpha']],
        ['id' => 'b', 'field1' => ['B' => 'beta']],
        TRUE,
        FALSE,
        FALSE,
        FALSE,
        'Merge deep 12',
      ],
      [
        ['id' => 'b', 'field1' => ['A' => 'alpha', 'B' => 'beta', 'C' => 'gamma', 'D' => 'delta']],
        ['id' => 'a', 'field1' => ['A' => 'abc', 'C' => '', 'D' => 'delta']],
        ['id' => 'b', 'field1' => ['A' => 'alpha', 'B' => 'beta', 'C' => 'gamma']],
        TRUE,
        FALSE,
        FALSE,
        FALSE,
        'Merge deep 13',
      ],
      [
        ['id' => 'b', 'field1' => ['a', 'b', 'c', 'd']],
        ['id' => 'a', 'field1' => ['a', 'b']],
        ['id' => 'b', 'field1' => ['c', 'd']],
        TRUE,
        FALSE,
        FALSE,
        FALSE,
        'Merge deep 14',
      ],
      [
        ['id' => 'b', 'field1' => ['a', 'b', 'c', 'd']],
        ['id' => 'a', 'field1' => [2 => 'a', 5 => 'b']],
        ['id' => 'b', 'field1' => [2 => 'c', 4 => 'd']],
        TRUE,
        FALSE,
        FALSE,
        FALSE,
        'Merge deep 15',
      ],
      [
        ['id' => 'b', 'field1' => ['a' => ['b' => 806, 'c' => 7, 'd' => 42]]],
        ['id' => 'a', 'field1' => ['a' => ['b' => 33, 'c' => 7]]],
        ['id' => 'b', 'field1' => ['a' => ['b' => 806, 'd' => 42]]],
        TRUE,
        FALSE,
        FALSE,
        FALSE,
        'Merge deep 16',
      ],
      // Override empty.
      [
        ['id' => 'a'],
        ['id' => 'a'],
        ['id' => 'b'],
        FALSE,
        TRUE,
        FALSE,
        FALSE,
        'Merge override empty 1',
      ],
      [
        ['id' => 'a', 'other_a' => 1],
        ['id' => 'a', 'other_a' => 1],
        ['id' => 'b'],
        FALSE,
        TRUE,
        FALSE,
        FALSE,
        'Merge override empty 2',
      ],
      [
        ['id' => 'a', 'other_b' => 2],
        ['id' => 'a'],
        ['id' => 'b', 'other_b' => 2],
        FALSE,
        TRUE,
        FALSE,
        FALSE,
        'Merge override empty 3',
      ],
      [
        ['id' => 'a', 'other_a' => 1, 'other_b' => 2],
        ['id' => 'a', 'other_a' => 1],
        ['id' => 'b', 'other_b' => 2],
        FALSE,
        TRUE,
        FALSE,
        FALSE,
        'Merge override empty 4',
      ],
      [
        ['id' => 'a', 'field1' => 'c'],
        ['id' => 'a', 'field1' => 'c'],
        ['id' => 'b', 'field1' => ['d']],
        FALSE,
        TRUE,
        FALSE,
        FALSE,
        'Merge override empty 5',
      ],
      [
        ['id' => 'a', 'field1' => ['c']],
        ['id' => 'a', 'field1' => ['c']],
        ['id' => 'b', 'field1' => 'd'],
        FALSE,
        TRUE,
        FALSE,
        FALSE,
        'Merge override empty 6',
      ],
      [
        ['id' => 'a', 'field1' => ['c']],
        ['id' => 'a', 'field1' => ['c']],
        ['id' => 'b', 'field1' => ['d']],
        FALSE,
        TRUE,
        FALSE,
        FALSE,
        'Merge override empty 7',
      ],
      [
        ['id' => 'a', 'field1' => 42, 'field2' => [66]],
        ['id' => 'a', 'field1' => NULL, 'field2' => []],
        ['id' => 'b', 'field1' => 42, 'field2' => [66]],
        FALSE,
        TRUE,
        FALSE,
        FALSE,
        'Merge override empty 8',
      ],
      [
        ['id' => 'a', 'field1' => 42, 'field2' => [66]],
        ['id' => 'a', 'field1' => 42, 'field2' => [66]],
        ['id' => 'b', 'field1' => NULL, 'field2' => []],
        FALSE,
        TRUE,
        FALSE,
        FALSE,
        'Merge override empty 9',
      ],
      [
        ['id' => 'a', 'field1' => ''],
        ['id' => 'a', 'field1' => ''],
        ['id' => 'b', 'field1' => NULL],
        FALSE,
        TRUE,
        FALSE,
        FALSE,
        'Merge override empty 10',
      ],
      [
        ['id' => 'a', 'field1' => ['A' => 'alpha']],
        ['id' => 'a', 'field1' => ['A' => 'alpha']],
        ['id' => 'b', 'field1' => ['A' => 'beta']],
        FALSE,
        TRUE,
        FALSE,
        FALSE,
        'Merge override empty 11',
      ],
      [
        ['id' => 'a', 'field1' => ['A' => 'alpha']],
        ['id' => 'a', 'field1' => ['A' => 'alpha']],
        ['id' => 'b', 'field1' => ['B' => 'beta']],
        FALSE,
        TRUE,
        FALSE,
        FALSE,
        'Merge override empty 12',
      ],
      [
        ['id' => 'a', 'field1' => ['A' => 'abc', 'C' => '', 'D' => 'delta']],
        ['id' => 'a', 'field1' => ['A' => 'abc', 'C' => '', 'D' => 'delta']],
        ['id' => 'b', 'field1' => ['A' => 'alpha', 'B' => 'beta', 'C' => 'gamma']],
        FALSE,
        TRUE,
        FALSE,
        FALSE,
        'Merge override empty 13',
      ],
      [
        ['id' => 'a', 'field1' => ['a', 'b']],
        ['id' => 'a', 'field1' => ['a', 'b']],
        ['id' => 'b', 'field1' => ['c', 'd']],
        FALSE,
        TRUE,
        FALSE,
        FALSE,
        'Merge override empty 14',
      ],
      [
        ['id' => 'a', 'field1' => [2 => 'a', 5 => 'b']],
        ['id' => 'a', 'field1' => [2 => 'a', 5 => 'b']],
        ['id' => 'b', 'field1' => [2 => 'c', 4 => 'd']],
        FALSE,
        TRUE,
        FALSE,
        FALSE,
        'Merge override empty 15',
      ],
      [
        ['id' => 'a', 'field1' => ['a' => ['b' => 33, 'c' => 7]]],
        ['id' => 'a', 'field1' => ['a' => ['b' => 33, 'c' => 7]]],
        ['id' => 'b', 'field1' => ['a' => ['b' => 806, 'd' => 42]]],
        FALSE,
        TRUE,
        FALSE,
        FALSE,
        'Merge override empty 16',
      ],
      // Deep merge empty.
      [
        ['id' => 'a'],
        ['id' => 'a'],
        ['id' => 'b'],
        TRUE,
        TRUE,
        FALSE,
        FALSE,
        'Merge deep empty 1',
      ],
      [
        ['id' => 'a', 'other_a' => 1],
        ['id' => 'a', 'other_a' => 1],
        ['id' => 'b'],
        TRUE,
        TRUE,
        FALSE,
        FALSE,
        'Merge deep empty 2',
      ],
      [
        ['id' => 'a', 'other_b' => 2],
        ['id' => 'a'],
        ['id' => 'b', 'other_b' => 2],
        TRUE,
        TRUE,
        FALSE,
        FALSE,
        'Merge deep empty 3',
      ],
      [
        ['id' => 'a', 'other_a' => 1, 'other_b' => 2],
        ['id' => 'a', 'other_a' => 1],
        ['id' => 'b', 'other_b' => 2],
        TRUE,
        TRUE,
        FALSE,
        FALSE,
        'Merge deep empty 4',
      ],
      [
        ['id' => 'a', 'field1' => ['c', 'd']],
        ['id' => 'a', 'field1' => 'c'],
        ['id' => 'b', 'field1' => ['d']],
        TRUE,
        TRUE,
        FALSE,
        FALSE,
        'Merge deep empty 5',
      ],
      [
        ['id' => 'a', 'field1' => ['c', 'd']],
        ['id' => 'a', 'field1' => ['c']],
        ['id' => 'b', 'field1' => 'd'],
        TRUE,
        TRUE,
        FALSE,
        FALSE,
        'Merge deep empty 6',
      ],
      [
        ['id' => 'a', 'field1' => ['c', 'd']],
        ['id' => 'a', 'field1' => ['c']],
        ['id' => 'b', 'field1' => ['d']],
        TRUE,
        TRUE,
        FALSE,
        FALSE,
        'Merge deep empty 7',
      ],
      [
        ['id' => 'a', 'field1' => 42, 'field2' => [66]],
        ['id' => 'a', 'field1' => NULL, 'field2' => []],
        ['id' => 'b', 'field1' => 42, 'field2' => [66]],
        TRUE,
        TRUE,
        FALSE,
        FALSE,
        'Merge deep empty 8',
      ],
      [
        ['id' => 'a', 'field1' => 42, 'field2' => [66]],
        ['id' => 'a', 'field1' => 42, 'field2' => [66]],
        ['id' => 'b', 'field1' => NULL, 'field2' => []],
        TRUE,
        TRUE,
        FALSE,
        FALSE,
        'Merge deep empty 9',
      ],
      [
        ['id' => 'a', 'field1' => ''],
        ['id' => 'a', 'field1' => ''],
        ['id' => 'b', 'field1' => NULL],
        TRUE,
        TRUE,
        FALSE,
        FALSE,
        'Merge deep empty 10',
      ],
      [
        ['id' => 'a', 'field1' => ['A' => 'alpha']],
        ['id' => 'a', 'field1' => ['A' => 'alpha']],
        ['id' => 'b', 'field1' => ['A' => 'beta']],
        TRUE,
        TRUE,
        FALSE,
        FALSE,
        'Merge deep empty 11',
      ],
      [
        ['id' => 'a', 'field1' => ['A' => 'alpha', 'B' => 'beta']],
        ['id' => 'a', 'field1' => ['A' => 'alpha']],
        ['id' => 'b', 'field1' => ['B' => 'beta']],
        TRUE,
        TRUE,
        FALSE,
        FALSE,
        'Merge deep empty 12',
      ],
      [
        ['id' => 'a', 'field1' => ['A' => 'abc', 'B' => 'beta', 'C' => 'gamma', 'D' => 'delta']],
        ['id' => 'a', 'field1' => ['A' => 'abc', 'C' => '', 'D' => 'delta']],
        ['id' => 'b', 'field1' => ['A' => 'alpha', 'B' => 'beta', 'C' => 'gamma']],
        TRUE,
        TRUE,
        FALSE,
        FALSE,
        'Merge deep empty 13',
      ],
      [
        ['id' => 'a', 'field1' => ['a', 'b', 'c', 'd']],
        ['id' => 'a', 'field1' => ['a', 'b']],
        ['id' => 'b', 'field1' => ['c', 'd']],
        TRUE,
        TRUE,
        FALSE,
        FALSE,
        'Merge deep empty 14',
      ],
      [
        ['id' => 'a', 'field1' => ['a', 'b', 'c', 'd']],
        ['id' => 'a', 'field1' => [2 => 'a', 5 => 'b']],
        ['id' => 'b', 'field1' => [2 => 'c', 4 => 'd']],
        TRUE,
        TRUE,
        FALSE,
        FALSE,
        'Merge deep empty 15',
      ],
      [
        ['id' => 'a', 'field1' => ['a' => ['b' => 33, 'c' => 7, 'd' => 42]]],
        ['id' => 'a', 'field1' => ['a' => ['b' => 33, 'c' => 7]]],
        ['id' => 'b', 'field1' => ['a' => ['b' => 806, 'd' => 42]]],
        TRUE,
        TRUE,
        FALSE,
        FALSE,
        'Merge deep empty 16',
      ],
      // Preserve int keys.
      [
        ['id' => 'b'],
        ['id' => 'a'],
        ['id' => 'b'],
        FALSE,
        FALSE,
        TRUE,
        FALSE,
        'Merge preserve int keys 1',
      ],
      [
        ['b'],
        ['a'],
        ['b'],
        FALSE,
        FALSE,
        TRUE,
        FALSE,
        'Merge preserve int keys 2',
      ],
      [
        ['b', 'a'],
        [1 => 'a'],
        ['b'],
        FALSE,
        FALSE,
        TRUE,
        FALSE,
        'Merge preserve int keys 3',
      ],
      [
        ['b', 'c', 'd'],
        ['a', 'c'],
        ['b', 2 => 'd'],
        FALSE,
        FALSE,
        TRUE,
        FALSE,
        'Merge preserve int keys 4',
      ],
      [
        ['id' => 'b', 'field1' => ['d']],
        ['id' => 'a', 'field1' => 'c'],
        ['id' => 'b', 'field1' => ['d']],
        FALSE,
        FALSE,
        TRUE,
        FALSE,
        'Merge preserve int keys 5',
      ],
      [
        ['id' => 'b', 'field1' => 'd'],
        ['id' => 'a', 'field1' => ['c']],
        ['id' => 'b', 'field1' => 'd'],
        FALSE,
        FALSE,
        TRUE,
        FALSE,
        'Merge preserve int keys 6',
      ],
      [
        ['id' => 'b', 'field1' => ['d']],
        ['id' => 'a', 'field1' => ['c']],
        ['id' => 'b', 'field1' => ['d']],
        FALSE,
        FALSE,
        TRUE,
        FALSE,
        'Merge preserve int keys 7',
      ],
      [
        ['id' => 'b', 'field1' => 42, 'field2' => [66]],
        ['id' => 'a', 'field1' => NULL, 'field2' => []],
        ['id' => 'b', 'field1' => 42, 'field2' => [66]],
        FALSE,
        FALSE,
        TRUE,
        FALSE,
        'Merge preserve int keys 8',
      ],
      [
        ['id' => 'b', 'field1' => NULL, 'field2' => []],
        ['id' => 'a', 'field1' => 42, 'field2' => [66]],
        ['id' => 'b', 'field1' => NULL, 'field2' => []],
        FALSE,
        FALSE,
        TRUE,
        FALSE,
        'Merge preserve int keys 9',
      ],
      [
        ['id' => 'b', 'field1' => NULL],
        ['id' => 'a', 'field1' => ''],
        ['id' => 'b', 'field1' => NULL],
        FALSE,
        FALSE,
        TRUE,
        FALSE,
        'Merge preserve int keys 10',
      ],
      [
        ['id' => 'b', 'field1' => ['A' => 'beta']],
        ['id' => 'a', 'field1' => ['A' => 'alpha']],
        ['id' => 'b', 'field1' => ['A' => 'beta']],
        FALSE,
        FALSE,
        TRUE,
        FALSE,
        'Merge preserve int keys 11',
      ],
      [
        ['id' => 'b', 'field1' => ['B' => 'beta']],
        ['id' => 'a', 'field1' => ['A' => 'alpha']],
        ['id' => 'b', 'field1' => ['B' => 'beta']],
        FALSE,
        FALSE,
        TRUE,
        FALSE,
        'Merge preserve int keys 12',
      ],
      [
        ['id' => 'b', 'field1' => ['A' => 'alpha', 'B' => 'beta', 'C' => 'gamma']],
        ['id' => 'a', 'field1' => ['A' => 'abc', 'C' => '', 'D' => 'delta']],
        ['id' => 'b', 'field1' => ['A' => 'alpha', 'B' => 'beta', 'C' => 'gamma']],
        FALSE,
        FALSE,
        TRUE,
        FALSE,
        'Merge preserve int keys 13',
      ],
      [
        ['id' => 'b', 'field1' => ['c', 'd']],
        ['id' => 'a', 'field1' => ['a', 'b']],
        ['id' => 'b', 'field1' => ['c', 'd']],
        FALSE,
        FALSE,
        TRUE,
        FALSE,
        'Merge preserve int keys 14',
      ],
      [
        ['id' => 'b', 'field1' => [2 => 'c', 4 => 'd']],
        ['id' => 'a', 'field1' => [2 => 'a', 5 => 'b']],
        ['id' => 'b', 'field1' => [2 => 'c', 4 => 'd']],
        FALSE,
        FALSE,
        TRUE,
        FALSE,
        'Merge preserve int keys 15',
      ],
      [
        ['id' => 'b', 'field1' => ['a' => ['b' => 806, 'd' => 42]]],
        ['id' => 'a', 'field1' => ['a' => ['b' => 33, 'c' => 7]]],
        ['id' => 'b', 'field1' => ['a' => ['b' => 806, 'd' => 42]]],
        FALSE,
        FALSE,
        TRUE,
        FALSE,
        'Merge preserve int keys 16',
      ],
      // Preserve int keys deep.
      [
        ['id' => 'b'],
        ['id' => 'a'],
        ['id' => 'b'],
        TRUE,
        FALSE,
        TRUE,
        FALSE,
        'Merge preserve int keys deep 1',
      ],
      [
        ['b'],
        ['a'],
        ['b'],
        TRUE,
        FALSE,
        TRUE,
        FALSE,
        'Merge preserve int keys deep 2',
      ],
      [
        ['b', 'a'],
        [1 => 'a'],
        ['b'],
        TRUE,
        FALSE,
        TRUE,
        FALSE,
        'Merge preserve int keys deep 3',
      ],
      [
        ['b', 'c', 'd'],
        ['a', 'c'],
        ['b', 2 => 'd'],
        TRUE,
        FALSE,
        TRUE,
        FALSE,
        'Merge preserve int keys deep 4',
      ],
      [
        ['id' => 'b', 'field1' => ['d']],
        ['id' => 'a', 'field1' => 'c'],
        ['id' => 'b', 'field1' => ['d']],
        TRUE,
        FALSE,
        TRUE,
        FALSE,
        'Merge preserve int keys deep 5',
      ],
      [
        ['id' => 'b', 'field1' => ['d']],
        ['id' => 'a', 'field1' => ['c']],
        ['id' => 'b', 'field1' => 'd'],
        TRUE,
        FALSE,
        TRUE,
        FALSE,
        'Merge preserve int keys deep 6',
      ],
      [
        ['id' => 'b', 'field1' => ['d']],
        ['id' => 'a', 'field1' => ['c']],
        ['id' => 'b', 'field1' => ['d']],
        TRUE,
        FALSE,
        TRUE,
        FALSE,
        'Merge preserve int keys deep 7',
      ],
      [
        ['id' => 'b', 'field1' => 42, 'field2' => [66]],
        ['id' => 'a', 'field1' => NULL, 'field2' => []],
        ['id' => 'b', 'field1' => 42, 'field2' => [66]],
        TRUE,
        FALSE,
        TRUE,
        FALSE,
        'Merge preserve int keys deep 8',
      ],
      [
        ['id' => 'b', 'field1' => NULL, 'field2' => [66]],
        ['id' => 'a', 'field1' => 42, 'field2' => [66]],
        ['id' => 'b', 'field1' => NULL, 'field2' => []],
        TRUE,
        FALSE,
        TRUE,
        FALSE,
        'Merge preserve int keys deep 9',
      ],
      [
        ['id' => 'b', 'field1' => NULL],
        ['id' => 'a', 'field1' => ''],
        ['id' => 'b', 'field1' => NULL],
        TRUE,
        FALSE,
        TRUE,
        FALSE,
        'Merge preserve int keys deep 10',
      ],
      [
        ['id' => 'b', 'field1' => ['A' => 'beta']],
        ['id' => 'a', 'field1' => ['A' => 'alpha']],
        ['id' => 'b', 'field1' => ['A' => 'beta']],
        TRUE,
        FALSE,
        TRUE,
        FALSE,
        'Merge preserve int keys deep 11',
      ],
      [
        ['id' => 'b', 'field1' => ['A' => 'alpha', 'B' => 'beta']],
        ['id' => 'a', 'field1' => ['A' => 'alpha']],
        ['id' => 'b', 'field1' => ['B' => 'beta']],
        TRUE,
        FALSE,
        TRUE,
        FALSE,
        'Merge preserve int keys deep 12',
      ],
      [
        ['id' => 'b', 'field1' => ['A' => 'alpha', 'B' => 'beta', 'C' => 'gamma', 'D' => 'delta']],
        ['id' => 'a', 'field1' => ['A' => 'abc', 'C' => '', 'D' => 'delta']],
        ['id' => 'b', 'field1' => ['A' => 'alpha', 'B' => 'beta', 'C' => 'gamma']],
        TRUE,
        FALSE,
        TRUE,
        FALSE,
        'Merge preserve int keys deep 13',
      ],
      [
        ['id' => 'b', 'field1' => ['c', 'd']],
        ['id' => 'a', 'field1' => ['a', 'b']],
        ['id' => 'b', 'field1' => ['c', 'd']],
        TRUE,
        FALSE,
        TRUE,
        FALSE,
        'Merge preserve int keys deep 14',
      ],
      [
        ['id' => 'b', 'field1' => [2 => 'c', 4 => 'd', 5 => 'b']],
        ['id' => 'a', 'field1' => [2 => 'a', 5 => 'b']],
        ['id' => 'b', 'field1' => [2 => 'c', 4 => 'd']],
        TRUE,
        FALSE,
        TRUE,
        FALSE,
        'Merge preserve int keys deep 15',
      ],
      [
        ['id' => 'b', 'field1' => ['a' => ['b' => 806, 'c' => 7, 'd' => 42]]],
        ['id' => 'a', 'field1' => ['a' => ['b' => 33, 'c' => 7]]],
        ['id' => 'b', 'field1' => ['a' => ['b' => 806, 'd' => 42]]],
        TRUE,
        FALSE,
        TRUE,
        FALSE,
        'Merge preserve int keys deep 16',
      ],
      // Deep merge no new keys.
      [
        ['id' => 'b'],
        ['id' => 'a'],
        ['id' => 'b'],
        TRUE,
        FALSE,
        FALSE,
        TRUE,
        'Merge deep no new keys 1',
      ],
      [
        ['id' => 'b', 'other_a' => 1],
        ['id' => 'a', 'other_a' => 1],
        ['id' => 'b'],
        TRUE,
        FALSE,
        FALSE,
        TRUE,
        'Merge deep no new keys 2',
      ],
      [
        ['id' => 'b'],
        ['id' => 'a'],
        ['id' => 'b', 'other_b' => 2],
        TRUE,
        FALSE,
        FALSE,
        TRUE,
        'Merge deep no new keys 3',
      ],
      [
        ['id' => 'b', 'other_a' => 1],
        ['id' => 'a', 'other_a' => 1],
        ['id' => 'b', 'other_b' => 2],
        TRUE,
        FALSE,
        FALSE,
        TRUE,
        'Merge deep no new keys 4',
      ],
      [
        ['id' => 'b', 'field1' => ['d']],
        ['id' => 'a', 'field1' => 'c'],
        ['id' => 'b', 'field1' => ['d']],
        TRUE,
        FALSE,
        FALSE,
        TRUE,
        'Merge deep no new keys 5',
      ],
      [
        ['id' => 'b', 'field1' => ['d']],
        ['id' => 'a', 'field1' => ['c']],
        ['id' => 'b', 'field1' => 'd'],
        TRUE,
        FALSE,
        FALSE,
        TRUE,
        'Merge deep no new keys 6',
      ],
      [
        ['id' => 'b', 'field1' => ['d']],
        ['id' => 'a', 'field1' => ['c']],
        ['id' => 'b', 'field1' => ['d']],
        TRUE,
        FALSE,
        FALSE,
        TRUE,
        'Merge deep no new keys 7',
      ],
      [
        ['id' => 'b', 'field1' => 42, 'field2' => []],
        ['id' => 'a', 'field1' => NULL, 'field2' => []],
        ['id' => 'b', 'field1' => 42, 'field2' => [66]],
        TRUE,
        FALSE,
        FALSE,
        TRUE,
        'Merge deep no new keys 8',
      ],
      [
        ['id' => 'b', 'field1' => NULL, 'field2' => [66]],
        ['id' => 'a', 'field1' => 42, 'field2' => [66]],
        ['id' => 'b', 'field1' => NULL, 'field2' => []],
        TRUE,
        FALSE,
        FALSE,
        TRUE,
        'Merge deep no new keys 9',
      ],
      [
        ['id' => 'b', 'field1' => NULL],
        ['id' => 'a', 'field1' => ''],
        ['id' => 'b', 'field1' => NULL],
        TRUE,
        FALSE,
        FALSE,
        TRUE,
        'Merge deep no new keys 10',
      ],
      [
        ['id' => 'b', 'field1' => ['A' => 'beta']],
        ['id' => 'a', 'field1' => ['A' => 'alpha']],
        ['id' => 'b', 'field1' => ['A' => 'beta']],
        TRUE,
        FALSE,
        FALSE,
        TRUE,
        'Merge deep no new keys 11',
      ],
      [
        ['id' => 'b', 'field1' => ['A' => 'alpha']],
        ['id' => 'a', 'field1' => ['A' => 'alpha']],
        ['id' => 'b', 'field1' => ['B' => 'beta']],
        TRUE,
        FALSE,
        FALSE,
        TRUE,
        'Merge deep no new keys 12',
      ],
      [
        ['id' => 'b', 'field1' => ['A' => 'alpha', 'C' => 'gamma', 'D' => 'delta']],
        ['id' => 'a', 'field1' => ['A' => 'abc', 'C' => '', 'D' => 'delta']],
        ['id' => 'b', 'field1' => ['A' => 'alpha', 'B' => 'beta', 'C' => 'gamma']],
        TRUE,
        FALSE,
        FALSE,
        TRUE,
        'Merge deep no new keys 13',
      ],
      [
        ['id' => 'b', 'field1' => ['c', 'd']],
        ['id' => 'a', 'field1' => ['a', 'b']],
        ['id' => 'b', 'field1' => ['c', 'd']],
        TRUE,
        FALSE,
        FALSE,
        TRUE,
        'Merge deep no new keys 14',
      ],
      [
        ['id' => 'b', 'field1' => [2 => 'c', 5 => 'b']],
        ['id' => 'a', 'field1' => [2 => 'a', 5 => 'b']],
        ['id' => 'b', 'field1' => [2 => 'c', 4 => 'd']],
        TRUE,
        FALSE,
        FALSE,
        TRUE,
        'Merge deep no new keys 15',
      ],
      [
        ['id' => 'b', 'field1' => ['a' => ['b' => 806, 'c' => 7]]],
        ['id' => 'a', 'field1' => ['a' => ['b' => 33, 'c' => 7]]],
        ['id' => 'b', 'field1' => ['a' => ['b' => 806, 'd' => 42]]],
        TRUE,
        FALSE,
        FALSE,
        TRUE,
        'Merge deep no new keys 16',
      ],
    ];
  }

  /**
   * Tests multi-storages.
   *
   * @dataProvider provideTestMergeArray
   */
  public function testMergeArray(
    array $expected_array,
    array $a,
    array $b,
    bool $merge_subarrays,
    bool $only_empty,
    bool $preserve_integer_keys,
    bool $no_new_keys,
    string $test_name,
  ) {
    $result = GroupAggregator::mergeArrays($a, $b, $merge_subarrays, $only_empty, $preserve_integer_keys, $no_new_keys);
    $this->assertEquals($expected_array, $result, $test_name);
  }

}

Главная | Обратная связь

drupal hosting | друпал хостинг | it patrol .inc