Version 1
[yaffs-website] / web / core / tests / Drupal / KernelTests / Core / Common / SizeTest.php
diff --git a/web/core/tests/Drupal/KernelTests/Core/Common/SizeTest.php b/web/core/tests/Drupal/KernelTests/Core/Common/SizeTest.php
new file mode 100644 (file)
index 0000000..9829b26
--- /dev/null
@@ -0,0 +1,69 @@
+<?php
+
+namespace Drupal\KernelTests\Core\Common;
+
+use Drupal\Component\Utility\Bytes;
+use Drupal\KernelTests\KernelTestBase;
+
+/**
+ * Parse a predefined amount of bytes and compare the output with the expected
+ * value.
+ *
+ * @group Common
+ */
+class SizeTest extends KernelTestBase {
+  protected $exactTestCases;
+  protected $roundedTestCases;
+
+  protected function setUp() {
+    parent::setUp();
+    $kb = Bytes::KILOBYTE;
+    $this->exactTestCases = [
+      '1 byte' => 1,
+      '1 KB'   => $kb,
+      '1 MB'   => $kb * $kb,
+      '1 GB'   => $kb * $kb * $kb,
+      '1 TB'   => $kb * $kb * $kb * $kb,
+      '1 PB'   => $kb * $kb * $kb * $kb * $kb,
+      '1 EB'   => $kb * $kb * $kb * $kb * $kb * $kb,
+      '1 ZB'   => $kb * $kb * $kb * $kb * $kb * $kb * $kb,
+      '1 YB'   => $kb * $kb * $kb * $kb * $kb * $kb * $kb * $kb,
+    ];
+    $this->roundedTestCases = [
+      '2 bytes' => 2,
+      '1 MB' => ($kb * $kb) - 1, // rounded to 1 MB (not 1000 or 1024 kilobyte!)
+      round(3623651 / ($this->exactTestCases['1 MB']), 2) . ' MB' => 3623651, // megabytes
+      round(67234178751368124 / ($this->exactTestCases['1 PB']), 2) . ' PB' => 67234178751368124, // petabytes
+      round(235346823821125814962843827 / ($this->exactTestCases['1 YB']), 2) . ' YB' => 235346823821125814962843827, // yottabytes
+    ];
+  }
+
+  /**
+   * Checks that format_size() returns the expected string.
+   */
+  public function testCommonFormatSize() {
+    foreach ([$this->exactTestCases, $this->roundedTestCases] as $test_cases) {
+      foreach ($test_cases as $expected => $input) {
+        $this->assertEqual(
+          ($result = format_size($input, NULL)),
+          $expected,
+          $expected . ' == ' . $result . ' (' . $input . ' bytes)'
+        );
+      }
+    }
+  }
+
+  /**
+   * Cross-tests Bytes::toInt() and format_size().
+   */
+  public function testCommonParseSizeFormatSize() {
+    foreach ($this->exactTestCases as $size) {
+      $this->assertEqual(
+        $size,
+        ($parsed_size = Bytes::toInt($string = format_size($size, NULL))),
+        $size . ' == ' . $parsed_size . ' (' . $string . ')'
+      );
+    }
+  }
+
+}