Updated to Drupal 8.5. Core Media not yet in use.
[yaffs-website] / vendor / consolidation / log / tests / src / TestDataPermuter.php
diff --git a/vendor/consolidation/log/tests/src/TestDataPermuter.php b/vendor/consolidation/log/tests/src/TestDataPermuter.php
new file mode 100644 (file)
index 0000000..c44ef53
--- /dev/null
@@ -0,0 +1,81 @@
+<?php
+namespace Consolidation\TestUtils;
+
+class TestDataPermuter
+{
+  /**
+   * Given an array of test data, where each element is
+   * data to pass to a unit test AND each unit test requires
+   * only scalar or object test value, find each array
+   * in each test, and build all of the permutations for all
+   * of the data provided in arrays.
+   */
+  public static function expandProviderDataArrays($tests)
+  {
+    $result = [];
+
+    foreach($tests as $test) {
+      $subsitutionIndex = 1;
+      $permutationData = [];
+      $replacements = [];
+
+      foreach($test as $testValue) {
+        if (is_array($testValue)) {
+          $key = "{SUB$subsitutionIndex}";
+          $replacements[$key] = $testValue;
+          $permutationData[] = $key;
+        }
+        else {
+          $permutationData[] = $testValue;
+        }
+      }
+
+      $permuted = static::expandDataMatrix([$permutationData], $replacements);
+      $result = array_merge($result, $permuted);
+    }
+
+    return $result;
+  }
+
+  /**
+   * Given an array of test data, where each element is
+   * data to pass to a unit test, expand all of the
+   * permutations of $replacements, where each key
+   * holds the placeholder value, and the value holds
+   * an array of replacement values.
+   */
+  public static function expandDataMatrix($tests, $replacements)
+  {
+    foreach($replacements as $substitute => $values) {
+      $tests = static::expandOneValue($tests, $substitute, $values);
+    }
+    return $tests;
+  }
+
+  /**
+   * Given an array of test data, where each element is
+   * data to pass to a unit test, find any element in any
+   * one test item whose value is exactly $substitute.
+   * Make a new test item for every item in $values, using
+   * each as the substitution for $substitute.
+   */
+  public static function expandOneValue($tests, $substitute, $values)
+  {
+    $result = [];
+
+    foreach($tests as $test) {
+      $position = array_search($substitute, $test);
+      if ($position === FALSE) {
+        $result[] = $test;
+      }
+      else {
+        foreach($values as $replacement) {
+          $test[$position] = $replacement;
+          $result[] = $test;
+        }
+      }
+    }
+
+    return $result;
+  }
+}