annotate core/modules/jsonapi/tests/src/Unit/JsonApiSpecTest.php @ 5:12f9dff5fda9 tip

Update to Drupal core 8.7.1
author Chris Cannam
date Thu, 09 May 2019 15:34:47 +0100
parents
children
rev   line source
Chris@5 1 <?php
Chris@5 2
Chris@5 3 namespace Drupal\Tests\jsonapi\Unit;
Chris@5 4
Chris@5 5 use Drupal\jsonapi\JsonApiSpec;
Chris@5 6 use Drupal\Tests\UnitTestCase;
Chris@5 7
Chris@5 8 /**
Chris@5 9 * @coversDefaultClass \Drupal\jsonapi\JsonApiSpec
Chris@5 10 * @group jsonapi
Chris@5 11 *
Chris@5 12 * @internal
Chris@5 13 */
Chris@5 14 class JsonApiSpecTest extends UnitTestCase {
Chris@5 15
Chris@5 16 /**
Chris@5 17 * Ensures that member names are properly validated.
Chris@5 18 *
Chris@5 19 * @dataProvider providerTestIsValidMemberName
Chris@5 20 * @covers ::isValidMemberName
Chris@5 21 */
Chris@5 22 public function testIsValidMemberName($member_name, $expected) {
Chris@5 23 $this->assertSame($expected, JsonApiSpec::isValidMemberName($member_name));
Chris@5 24 }
Chris@5 25
Chris@5 26 /**
Chris@5 27 * Data provider for testIsValidMemberName.
Chris@5 28 */
Chris@5 29 public function providerTestIsValidMemberName() {
Chris@5 30 // Copied from http://jsonapi.org/format/upcoming/#document-member-names.
Chris@5 31 $data = [];
Chris@5 32 $data['alphanumeric-lowercase'] = ['12kittens', TRUE];
Chris@5 33 $data['alphanumeric-uppercase'] = ['12KITTENS', TRUE];
Chris@5 34 $data['alphanumeric-mixed'] = ['12KiTtEnS', TRUE];
Chris@5 35 $data['unicode-above-u+0080'] = ['12🐱🐱', TRUE];
Chris@5 36 $data['hyphen-start'] = ['-kittens', FALSE];
Chris@5 37 $data['hyphen-middle'] = ['kitt-ens', TRUE];
Chris@5 38 $data['hyphen-end'] = ['kittens-', FALSE];
Chris@5 39 $data['lowline-start'] = ['_kittens', FALSE];
Chris@5 40 $data['lowline-middle'] = ['kitt_ens', TRUE];
Chris@5 41 $data['lowline-end'] = ['kittens_', FALSE];
Chris@5 42 $data['space-start'] = [' kittens', FALSE];
Chris@5 43 $data['space-middle'] = ['kitt ens', TRUE];
Chris@5 44 $data['space-end'] = ['kittens ', FALSE];
Chris@5 45
Chris@5 46 // Additional test cases.
Chris@5 47 // @todo When D8 requires PHP >= 7, convert to \u{10FFFF}.
Chris@5 48 $data['unicode-above-u+0080-highest-allowed'] = ["12􏿿", TRUE];
Chris@5 49 $data['single-character'] = ['a', TRUE];
Chris@5 50
Chris@5 51 $unsafe_chars = [
Chris@5 52 '+',
Chris@5 53 ',',
Chris@5 54 '.',
Chris@5 55 '[',
Chris@5 56 ']',
Chris@5 57 '!',
Chris@5 58 '"',
Chris@5 59 '#',
Chris@5 60 '$',
Chris@5 61 '%',
Chris@5 62 '&',
Chris@5 63 '\'',
Chris@5 64 '(',
Chris@5 65 ')',
Chris@5 66 '*',
Chris@5 67 '/',
Chris@5 68 ':',
Chris@5 69 ';',
Chris@5 70 '<',
Chris@5 71 '=',
Chris@5 72 '>',
Chris@5 73 '?',
Chris@5 74 '@',
Chris@5 75 '\\',
Chris@5 76 '^',
Chris@5 77 '`',
Chris@5 78 '{',
Chris@5 79 '|',
Chris@5 80 '}',
Chris@5 81 '~',
Chris@5 82 ];
Chris@5 83 foreach ($unsafe_chars as $unsafe_char) {
Chris@5 84 $data['unsafe-' . $unsafe_char] = ['kitt' . $unsafe_char . 'ens', FALSE];
Chris@5 85 }
Chris@5 86
Chris@5 87 // The ASCII control characters are in the range 0x00 to 0x1F plus 0x7F.
Chris@5 88 for ($ascii = 0; $ascii <= 0x1F; $ascii++) {
Chris@5 89 $data['unsafe-ascii-control-' . $ascii] = ['kitt' . chr($ascii) . 'ens', FALSE];
Chris@5 90 }
Chris@5 91 $data['unsafe-ascii-control-' . 0x7F] = ['kitt' . chr(0x7F) . 'ens', FALSE];
Chris@5 92
Chris@5 93 return $data;
Chris@5 94 }
Chris@5 95
Chris@5 96 /**
Chris@5 97 * Provides test cases.
Chris@5 98 *
Chris@5 99 * @dataProvider providerTestIsValidCustomQueryParameter
Chris@5 100 * @covers ::isValidCustomQueryParameter
Chris@5 101 * @covers ::isValidMemberName
Chris@5 102 */
Chris@5 103 public function testIsValidCustomQueryParameter($custom_query_parameter, $expected) {
Chris@5 104 $this->assertSame($expected, JsonApiSpec::isValidCustomQueryParameter($custom_query_parameter));
Chris@5 105 }
Chris@5 106
Chris@5 107 /**
Chris@5 108 * Data provider for testIsValidCustomQueryParameter.
Chris@5 109 */
Chris@5 110 public function providerTestIsValidCustomQueryParameter() {
Chris@5 111 $data = $this->providerTestIsValidMemberName();
Chris@5 112
Chris@5 113 // All valid member names are also valid custom query parameters, except for
Chris@5 114 // single-character ones.
Chris@5 115 $data['single-character'][1] = FALSE;
Chris@5 116
Chris@5 117 // Custom query parameter test cases.
Chris@5 118 $data['custom-query-parameter-lowercase'] = ['foobar', FALSE];
Chris@5 119 $data['custom-query-parameter-dash'] = ['foo-bar', TRUE];
Chris@5 120 $data['custom-query-parameter-underscore'] = ['foo_bar', TRUE];
Chris@5 121 $data['custom-query-parameter-camelcase'] = ['fooBar', TRUE];
Chris@5 122
Chris@5 123 return $data;
Chris@5 124 }
Chris@5 125
Chris@5 126 }