diff core/modules/jsonapi/tests/src/Unit/JsonApiSpecTest.php @ 18:af1871eacc83

Update to Drupal core 8.7.1
author Chris Cannam
date Thu, 09 May 2019 15:33:08 +0100
parents
children
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/core/modules/jsonapi/tests/src/Unit/JsonApiSpecTest.php	Thu May 09 15:33:08 2019 +0100
@@ -0,0 +1,126 @@
+<?php
+
+namespace Drupal\Tests\jsonapi\Unit;
+
+use Drupal\jsonapi\JsonApiSpec;
+use Drupal\Tests\UnitTestCase;
+
+/**
+ * @coversDefaultClass \Drupal\jsonapi\JsonApiSpec
+ * @group jsonapi
+ *
+ * @internal
+ */
+class JsonApiSpecTest extends UnitTestCase {
+
+  /**
+   * Ensures that member names are properly validated.
+   *
+   * @dataProvider providerTestIsValidMemberName
+   * @covers ::isValidMemberName
+   */
+  public function testIsValidMemberName($member_name, $expected) {
+    $this->assertSame($expected, JsonApiSpec::isValidMemberName($member_name));
+  }
+
+  /**
+   * Data provider for testIsValidMemberName.
+   */
+  public function providerTestIsValidMemberName() {
+    // Copied from http://jsonapi.org/format/upcoming/#document-member-names.
+    $data = [];
+    $data['alphanumeric-lowercase'] = ['12kittens', TRUE];
+    $data['alphanumeric-uppercase'] = ['12KITTENS', TRUE];
+    $data['alphanumeric-mixed'] = ['12KiTtEnS', TRUE];
+    $data['unicode-above-u+0080'] = ['12🐱🐱', TRUE];
+    $data['hyphen-start'] = ['-kittens', FALSE];
+    $data['hyphen-middle'] = ['kitt-ens', TRUE];
+    $data['hyphen-end'] = ['kittens-', FALSE];
+    $data['lowline-start'] = ['_kittens', FALSE];
+    $data['lowline-middle'] = ['kitt_ens', TRUE];
+    $data['lowline-end'] = ['kittens_', FALSE];
+    $data['space-start'] = [' kittens', FALSE];
+    $data['space-middle'] = ['kitt ens', TRUE];
+    $data['space-end'] = ['kittens ', FALSE];
+
+    // Additional test cases.
+    // @todo When D8 requires PHP >= 7, convert to \u{10FFFF}.
+    $data['unicode-above-u+0080-highest-allowed'] = ["12􏿿", TRUE];
+    $data['single-character'] = ['a', TRUE];
+
+    $unsafe_chars = [
+      '+',
+      ',',
+      '.',
+      '[',
+      ']',
+      '!',
+      '"',
+      '#',
+      '$',
+      '%',
+      '&',
+      '\'',
+      '(',
+      ')',
+      '*',
+      '/',
+      ':',
+      ';',
+      '<',
+      '=',
+      '>',
+      '?',
+      '@',
+      '\\',
+      '^',
+      '`',
+      '{',
+      '|',
+      '}',
+      '~',
+    ];
+    foreach ($unsafe_chars as $unsafe_char) {
+      $data['unsafe-' . $unsafe_char] = ['kitt' . $unsafe_char . 'ens', FALSE];
+    }
+
+    // The ASCII control characters are in the range 0x00 to 0x1F plus 0x7F.
+    for ($ascii = 0; $ascii <= 0x1F; $ascii++) {
+      $data['unsafe-ascii-control-' . $ascii] = ['kitt' . chr($ascii) . 'ens', FALSE];
+    }
+    $data['unsafe-ascii-control-' . 0x7F] = ['kitt' . chr(0x7F) . 'ens', FALSE];
+
+    return $data;
+  }
+
+  /**
+   * Provides test cases.
+   *
+   * @dataProvider providerTestIsValidCustomQueryParameter
+   * @covers ::isValidCustomQueryParameter
+   * @covers ::isValidMemberName
+   */
+  public function testIsValidCustomQueryParameter($custom_query_parameter, $expected) {
+    $this->assertSame($expected, JsonApiSpec::isValidCustomQueryParameter($custom_query_parameter));
+  }
+
+  /**
+   * Data provider for testIsValidCustomQueryParameter.
+   */
+  public function providerTestIsValidCustomQueryParameter() {
+    $data = $this->providerTestIsValidMemberName();
+
+    // All valid member names are also valid custom query parameters, except for
+    // single-character ones.
+    $data['single-character'][1] = FALSE;
+
+    // Custom query parameter test cases.
+    $data['custom-query-parameter-lowercase'] = ['foobar', FALSE];
+    $data['custom-query-parameter-dash'] = ['foo-bar', TRUE];
+    $data['custom-query-parameter-underscore'] = ['foo_bar', TRUE];
+    $data['custom-query-parameter-camelcase'] = ['fooBar', TRUE];
+
+    return $data;
+  }
+
+}