annotate core/modules/jsonapi/tests/src/Unit/JsonApiSpecTest.php @ 19:fa3358dc1485 tip

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