@@ -78,7 +78,7 @@ |
||
| 78 | 78 | $pairs = null === $query ? [] : explode('&', $query); |
| 79 | 79 | sort($pairs, SORT_REGULAR); |
| 80 | 80 | |
| 81 | - $replace = static function (array $matches): string { |
|
| 81 | + $replace = static function(array $matches): string { |
|
| 82 | 82 | return rawurldecode($matches[0]); |
| 83 | 83 | }; |
| 84 | 84 | |
@@ -961,7 +961,7 @@ |
||
| 961 | 961 | return $path; |
| 962 | 962 | } |
| 963 | 963 | |
| 964 | - $replace = static function (array $matches): string { |
|
| 964 | + $replace = static function(array $matches): string { |
|
| 965 | 965 | return $matches['delim'].str_replace('|', ':', $matches['root']).$matches['rest']; |
| 966 | 966 | }; |
| 967 | 967 | |
@@ -1191,10 +1191,10 @@ discard block |
||
| 1191 | 1191 | * |
| 1192 | 1192 | * @link https://tools.ietf.org/html/rfc3986#section-5.3 |
| 1193 | 1193 | * |
| 1194 | - * @param ?string $scheme |
|
| 1195 | - * @param ?string $authority |
|
| 1196 | - * @param ?string $query |
|
| 1197 | - * @param ?string $fragment |
|
| 1194 | + * @param string|null $scheme |
|
| 1195 | + * @param string|null $authority |
|
| 1196 | + * @param string|null $query |
|
| 1197 | + * @param string|null $fragment |
|
| 1198 | 1198 | */ |
| 1199 | 1199 | private function getUriString( |
| 1200 | 1200 | ?string $scheme, |
@@ -1330,6 +1330,7 @@ discard block |
||
| 1330 | 1330 | |
| 1331 | 1331 | /** |
| 1332 | 1332 | * {@inheritDoc} |
| 1333 | + * @param string|null $scheme |
|
| 1333 | 1334 | */ |
| 1334 | 1335 | public function withScheme($scheme): UriInterface |
| 1335 | 1336 | { |
@@ -1378,6 +1379,8 @@ discard block |
||
| 1378 | 1379 | |
| 1379 | 1380 | /** |
| 1380 | 1381 | * {@inheritDoc} |
| 1382 | + * @param string|null $user |
|
| 1383 | + * @param string $password |
|
| 1381 | 1384 | */ |
| 1382 | 1385 | public function withUserInfo($user, $password = null): UriInterface |
| 1383 | 1386 | { |
@@ -1405,6 +1408,7 @@ discard block |
||
| 1405 | 1408 | |
| 1406 | 1409 | /** |
| 1407 | 1410 | * {@inheritDoc} |
| 1411 | + * @param string|null $host |
|
| 1408 | 1412 | */ |
| 1409 | 1413 | public function withHost($host): UriInterface |
| 1410 | 1414 | { |
@@ -1423,6 +1427,7 @@ discard block |
||
| 1423 | 1427 | |
| 1424 | 1428 | /** |
| 1425 | 1429 | * {@inheritDoc} |
| 1430 | + * @param null|integer $port |
|
| 1426 | 1431 | */ |
| 1427 | 1432 | public function withPort($port): UriInterface |
| 1428 | 1433 | { |
@@ -1441,6 +1446,7 @@ discard block |
||
| 1441 | 1446 | |
| 1442 | 1447 | /** |
| 1443 | 1448 | * {@inheritDoc} |
| 1449 | + * @param string $path |
|
| 1444 | 1450 | */ |
| 1445 | 1451 | public function withPath($path): UriInterface |
| 1446 | 1452 | { |
@@ -1463,6 +1469,7 @@ discard block |
||
| 1463 | 1469 | |
| 1464 | 1470 | /** |
| 1465 | 1471 | * {@inheritDoc} |
| 1472 | + * @param string|null $query |
|
| 1466 | 1473 | */ |
| 1467 | 1474 | public function withQuery($query): UriInterface |
| 1468 | 1475 | { |
@@ -1480,6 +1487,7 @@ discard block |
||
| 1480 | 1487 | |
| 1481 | 1488 | /** |
| 1482 | 1489 | * {@inheritDoc} |
| 1490 | + * @param string|null $fragment |
|
| 1483 | 1491 | */ |
| 1484 | 1492 | public function withFragment($fragment): UriInterface |
| 1485 | 1493 | { |
@@ -54,8 +54,8 @@ discard block |
||
| 54 | 54 | * @link https://tools.ietf.org/html/rfc6570#appendix-A |
| 55 | 55 | */ |
| 56 | 56 | private const OPERATOR_HASH_LOOKUP = [ |
| 57 | - '' => ['prefix' => '', 'joiner' => ',', 'query' => false], |
|
| 58 | - '+' => ['prefix' => '', 'joiner' => ',', 'query' => false], |
|
| 57 | + '' => ['prefix' => '', 'joiner' => ',', 'query' => false], |
|
| 58 | + '+' => ['prefix' => '', 'joiner' => ',', 'query' => false], |
|
| 59 | 59 | '#' => ['prefix' => '#', 'joiner' => ',', 'query' => false], |
| 60 | 60 | '.' => ['prefix' => '.', 'joiner' => '.', 'query' => false], |
| 61 | 61 | '/' => ['prefix' => '/', 'joiner' => '/', 'query' => false], |
@@ -103,7 +103,7 @@ discard block |
||
| 103 | 103 | */ |
| 104 | 104 | private function setVariableNames(): array |
| 105 | 105 | { |
| 106 | - $mapper = static function (VarSpecifier $varSpecifier): string { |
|
| 106 | + $mapper = static function(VarSpecifier $varSpecifier): string { |
|
| 107 | 107 | return $varSpecifier->name(); |
| 108 | 108 | }; |
| 109 | 109 | |
@@ -112,7 +112,7 @@ discard block |
||
| 112 | 112 | |
| 113 | 113 | private function setExpressionString(): string |
| 114 | 114 | { |
| 115 | - $mapper = static function (VarSpecifier $variable): string { |
|
| 115 | + $mapper = static function(VarSpecifier $variable): string { |
|
| 116 | 116 | return $variable->toString(); |
| 117 | 117 | }; |
| 118 | 118 | |
@@ -146,7 +146,7 @@ discard block |
||
| 146 | 146 | throw new SyntaxError('The operator used in the expression "'.$expression.'" is reserved.'); |
| 147 | 147 | } |
| 148 | 148 | |
| 149 | - $mapper = static function (string $varSpec): VarSpecifier { |
|
| 149 | + $mapper = static function(string $varSpec): VarSpecifier { |
|
| 150 | 150 | return VarSpecifier::createFromString($varSpec); |
| 151 | 151 | }; |
| 152 | 152 | |
@@ -177,7 +177,7 @@ discard block |
||
| 177 | 177 | $parts[] = $this->replace($varSpecifier, $variables); |
| 178 | 178 | } |
| 179 | 179 | |
| 180 | - $nullFilter = static function ($value): bool { |
|
| 180 | + $nullFilter = static function($value): bool { |
|
| 181 | 181 | return '' !== $value; |
| 182 | 182 | }; |
| 183 | 183 | |
@@ -61,7 +61,6 @@ |
||
| 61 | 61 | } |
| 62 | 62 | |
| 63 | 63 | /** |
| 64 | - |
|
| 65 | 64 | * |
| 66 | 65 | * @dataProvider invalidUrlProvider |
| 67 | 66 | */ |
@@ -172,7 +172,7 @@ |
||
| 172 | 172 | 'without fragment' => [Http::createFromString('https://a:b@c:442/d?q=r')], |
| 173 | 173 | 'without pass' => [Http::createFromString('https://a@c:442/d?q=r#f')], |
| 174 | 174 | 'without authority' => [Http::createFromString('/d?q=r#f')], |
| 175 | - ]; |
|
| 175 | + ]; |
|
| 176 | 176 | } |
| 177 | 177 | |
| 178 | 178 | /** |
@@ -380,44 +380,44 @@ |
||
| 380 | 380 | $base_uri = 'http://a/b/c/d;p?q'; |
| 381 | 381 | |
| 382 | 382 | return [ |
| 383 | - 'base uri' => [$base_uri, '', $base_uri], |
|
| 384 | - 'scheme' => [$base_uri, 'http://d/e/f', 'http://d/e/f'], |
|
| 385 | - 'path 1' => [$base_uri, 'g', 'http://a/b/c/g'], |
|
| 386 | - 'path 2' => [$base_uri, './g', 'http://a/b/c/g'], |
|
| 387 | - 'path 3' => [$base_uri, 'g/', 'http://a/b/c/g/'], |
|
| 388 | - 'path 4' => [$base_uri, '/g', 'http://a/g'], |
|
| 389 | - 'authority' => [$base_uri, '//g', 'http://g'], |
|
| 390 | - 'query' => [$base_uri, '?y', 'http://a/b/c/d;p?y'], |
|
| 391 | - 'path + query' => [$base_uri, 'g?y', 'http://a/b/c/g?y'], |
|
| 392 | - 'fragment' => [$base_uri, '#s', 'http://a/b/c/d;p?q#s'], |
|
| 393 | - 'path + fragment' => [$base_uri, 'g#s', 'http://a/b/c/g#s'], |
|
| 394 | - 'path + query + fragment' => [$base_uri, 'g?y#s', 'http://a/b/c/g?y#s'], |
|
| 395 | - 'single dot 1' => [$base_uri, '.', 'http://a/b/c/'], |
|
| 396 | - 'single dot 2' => [$base_uri, './', 'http://a/b/c/'], |
|
| 397 | - 'single dot 3' => [$base_uri, './g/.', 'http://a/b/c/g/'], |
|
| 398 | - 'single dot 4' => [$base_uri, 'g/./h', 'http://a/b/c/g/h'], |
|
| 399 | - 'double dot 1' => [$base_uri, '..', 'http://a/b/'], |
|
| 400 | - 'double dot 2' => [$base_uri, '../', 'http://a/b/'], |
|
| 401 | - 'double dot 3' => [$base_uri, '../g', 'http://a/b/g'], |
|
| 402 | - 'double dot 4' => [$base_uri, '../..', 'http://a/'], |
|
| 403 | - 'double dot 5' => [$base_uri, '../../', 'http://a/'], |
|
| 404 | - 'double dot 6' => [$base_uri, '../../g', 'http://a/g'], |
|
| 405 | - 'double dot 7' => [$base_uri, '../../../g', 'http://a/g'], |
|
| 383 | + 'base uri' => [$base_uri, '', $base_uri], |
|
| 384 | + 'scheme' => [$base_uri, 'http://d/e/f', 'http://d/e/f'], |
|
| 385 | + 'path 1' => [$base_uri, 'g', 'http://a/b/c/g'], |
|
| 386 | + 'path 2' => [$base_uri, './g', 'http://a/b/c/g'], |
|
| 387 | + 'path 3' => [$base_uri, 'g/', 'http://a/b/c/g/'], |
|
| 388 | + 'path 4' => [$base_uri, '/g', 'http://a/g'], |
|
| 389 | + 'authority' => [$base_uri, '//g', 'http://g'], |
|
| 390 | + 'query' => [$base_uri, '?y', 'http://a/b/c/d;p?y'], |
|
| 391 | + 'path + query' => [$base_uri, 'g?y', 'http://a/b/c/g?y'], |
|
| 392 | + 'fragment' => [$base_uri, '#s', 'http://a/b/c/d;p?q#s'], |
|
| 393 | + 'path + fragment' => [$base_uri, 'g#s', 'http://a/b/c/g#s'], |
|
| 394 | + 'path + query + fragment' => [$base_uri, 'g?y#s', 'http://a/b/c/g?y#s'], |
|
| 395 | + 'single dot 1' => [$base_uri, '.', 'http://a/b/c/'], |
|
| 396 | + 'single dot 2' => [$base_uri, './', 'http://a/b/c/'], |
|
| 397 | + 'single dot 3' => [$base_uri, './g/.', 'http://a/b/c/g/'], |
|
| 398 | + 'single dot 4' => [$base_uri, 'g/./h', 'http://a/b/c/g/h'], |
|
| 399 | + 'double dot 1' => [$base_uri, '..', 'http://a/b/'], |
|
| 400 | + 'double dot 2' => [$base_uri, '../', 'http://a/b/'], |
|
| 401 | + 'double dot 3' => [$base_uri, '../g', 'http://a/b/g'], |
|
| 402 | + 'double dot 4' => [$base_uri, '../..', 'http://a/'], |
|
| 403 | + 'double dot 5' => [$base_uri, '../../', 'http://a/'], |
|
| 404 | + 'double dot 6' => [$base_uri, '../../g', 'http://a/g'], |
|
| 405 | + 'double dot 7' => [$base_uri, '../../../g', 'http://a/g'], |
|
| 406 | 406 | 'double dot 8' => [$base_uri, '../../../../g', 'http://a/g'], |
| 407 | - 'double dot 9' => [$base_uri, 'g/../h' , 'http://a/b/c/h'], |
|
| 408 | - 'mulitple slashes' => [$base_uri, 'foo////g', 'http://a/b/c/foo////g'], |
|
| 409 | - 'complex path 1' => [$base_uri, ';x', 'http://a/b/c/;x'], |
|
| 410 | - 'complex path 2' => [$base_uri, 'g;x', 'http://a/b/c/g;x'], |
|
| 411 | - 'complex path 3' => [$base_uri, 'g;x?y#s', 'http://a/b/c/g;x?y#s'], |
|
| 412 | - 'complex path 4' => [$base_uri, 'g;x=1/./y', 'http://a/b/c/g;x=1/y'], |
|
| 413 | - 'complex path 5' => [$base_uri, 'g;x=1/../y', 'http://a/b/c/y'], |
|
| 414 | - 'dot segments presence 1' => [$base_uri, '/./g', 'http://a/g'], |
|
| 415 | - 'dot segments presence 2' => [$base_uri, '/../g', 'http://a/g'], |
|
| 416 | - 'dot segments presence 3' => [$base_uri, 'g.', 'http://a/b/c/g.'], |
|
| 417 | - 'dot segments presence 4' => [$base_uri, '.g', 'http://a/b/c/.g'], |
|
| 418 | - 'dot segments presence 5' => [$base_uri, 'g..', 'http://a/b/c/g..'], |
|
| 419 | - 'dot segments presence 6' => [$base_uri, '..g', 'http://a/b/c/..g'], |
|
| 420 | - 'origin uri without path' => ['http://h:b@a', 'b/../y', 'http://h:b@a/y'], |
|
| 407 | + 'double dot 9' => [$base_uri, 'g/../h', 'http://a/b/c/h'], |
|
| 408 | + 'mulitple slashes' => [$base_uri, 'foo////g', 'http://a/b/c/foo////g'], |
|
| 409 | + 'complex path 1' => [$base_uri, ';x', 'http://a/b/c/;x'], |
|
| 410 | + 'complex path 2' => [$base_uri, 'g;x', 'http://a/b/c/g;x'], |
|
| 411 | + 'complex path 3' => [$base_uri, 'g;x?y#s', 'http://a/b/c/g;x?y#s'], |
|
| 412 | + 'complex path 4' => [$base_uri, 'g;x=1/./y', 'http://a/b/c/g;x=1/y'], |
|
| 413 | + 'complex path 5' => [$base_uri, 'g;x=1/../y', 'http://a/b/c/y'], |
|
| 414 | + 'dot segments presence 1' => [$base_uri, '/./g', 'http://a/g'], |
|
| 415 | + 'dot segments presence 2' => [$base_uri, '/../g', 'http://a/g'], |
|
| 416 | + 'dot segments presence 3' => [$base_uri, 'g.', 'http://a/b/c/g.'], |
|
| 417 | + 'dot segments presence 4' => [$base_uri, '.g', 'http://a/b/c/.g'], |
|
| 418 | + 'dot segments presence 5' => [$base_uri, 'g..', 'http://a/b/c/g..'], |
|
| 419 | + 'dot segments presence 6' => [$base_uri, '..g', 'http://a/b/c/..g'], |
|
| 420 | + 'origin uri without path' => ['http://h:b@a', 'b/../y', 'http://h:b@a/y'], |
|
| 421 | 421 | 'uri without auhtority' => ['mailto:[email protected]', '[email protected]?subject=baz', 'mailto:[email protected]?subject=baz'], |
| 422 | 422 | ]; |
| 423 | 423 | } |
@@ -101,13 +101,13 @@ discard block |
||
| 101 | 101 | 'missing starting braces' => ['/id*}'], |
| 102 | 102 | 'multiple starting operators' => ['{/?id}'], |
| 103 | 103 | 'invalid prefix' => ['{var:prefix}'], |
| 104 | - 'multiple operator modifiers (1)' => ['{hello:2*}'] , |
|
| 105 | - 'duplicate operator' => ['{??hello}'] , |
|
| 106 | - 'reserved operator !' => ['{!hello}'] , |
|
| 104 | + 'multiple operator modifiers (1)' => ['{hello:2*}'], |
|
| 105 | + 'duplicate operator' => ['{??hello}'], |
|
| 106 | + 'reserved operator !' => ['{!hello}'], |
|
| 107 | 107 | 'space inside variable name' => ['{with space}'], |
| 108 | 108 | 'leading space in variable name (1)' => ['{ leading_space}'], |
| 109 | 109 | 'trailing space in variable name' => ['{trailing_space }'], |
| 110 | - 'reserved operator =' => ['{=path}'] , |
|
| 110 | + 'reserved operator =' => ['{=path}'], |
|
| 111 | 111 | 'forbidden operator $' => ['{$var}'], |
| 112 | 112 | 'reserved operator |' => ['{|var*}'], |
| 113 | 113 | 'using an operator modifier as an operator' => ['{*keys?}'], |
@@ -165,83 +165,83 @@ discard block |
||
| 165 | 165 | |
| 166 | 166 | $templateAndExpansionData = [ |
| 167 | 167 | 'level 1' => [ |
| 168 | - ['{var}', 'value'], |
|
| 169 | - ['{hello}', 'Hello%20World%21'], |
|
| 170 | - ['{bool}', '1'], |
|
| 168 | + ['{var}', 'value'], |
|
| 169 | + ['{hello}', 'Hello%20World%21'], |
|
| 170 | + ['{bool}', '1'], |
|
| 171 | 171 | ], |
| 172 | 172 | 'level 2' => [ |
| 173 | - ['{+var}', 'value'], |
|
| 174 | - ['{+hello}', 'Hello%20World!'], |
|
| 175 | - ['{+path}', '/foo/bar'], |
|
| 173 | + ['{+var}', 'value'], |
|
| 174 | + ['{+hello}', 'Hello%20World!'], |
|
| 175 | + ['{+path}', '/foo/bar'], |
|
| 176 | 176 | ], |
| 177 | 177 | 'level 3' => [ |
| 178 | - ['{#var}', '#value'], |
|
| 179 | - ['{#hello}', '#Hello%20World!'], |
|
| 180 | - ['{x,y}', '1024,768'], |
|
| 181 | - ['{x,hello,y}', '1024,Hello%20World%21,768'], |
|
| 182 | - ['{+x,hello,y}', '1024,Hello%20World!,768'], |
|
| 183 | - ['{+path,x}', '/foo/bar,1024'], |
|
| 184 | - ['{#x,hello,y}', '#1024,Hello%20World!,768'], |
|
| 185 | - ['{#path,x}', '#/foo/bar,1024'], |
|
| 186 | - ['{.var}', '.value'], |
|
| 187 | - ['{.x,y}', '.1024.768'], |
|
| 188 | - ['{/var}', '/value'], |
|
| 189 | - ['{/var,x}', '/value/1024'], |
|
| 190 | - ['{;x,y}', ';x=1024;y=768'], |
|
| 191 | - ['{;x,y,empty}', ';x=1024;y=768;empty'], |
|
| 192 | - ['{?x,y}', '?x=1024&y=768'], |
|
| 193 | - ['{?x,y,empty}', '?x=1024&y=768&empty='], |
|
| 194 | - ['{?x,y,undef}', '?x=1024&y=768'], |
|
| 195 | - ['{&x}', '&x=1024'], |
|
| 196 | - ['{&x,y,empty}', '&x=1024&y=768&empty='], |
|
| 178 | + ['{#var}', '#value'], |
|
| 179 | + ['{#hello}', '#Hello%20World!'], |
|
| 180 | + ['{x,y}', '1024,768'], |
|
| 181 | + ['{x,hello,y}', '1024,Hello%20World%21,768'], |
|
| 182 | + ['{+x,hello,y}', '1024,Hello%20World!,768'], |
|
| 183 | + ['{+path,x}', '/foo/bar,1024'], |
|
| 184 | + ['{#x,hello,y}', '#1024,Hello%20World!,768'], |
|
| 185 | + ['{#path,x}', '#/foo/bar,1024'], |
|
| 186 | + ['{.var}', '.value'], |
|
| 187 | + ['{.x,y}', '.1024.768'], |
|
| 188 | + ['{/var}', '/value'], |
|
| 189 | + ['{/var,x}', '/value/1024'], |
|
| 190 | + ['{;x,y}', ';x=1024;y=768'], |
|
| 191 | + ['{;x,y,empty}', ';x=1024;y=768;empty'], |
|
| 192 | + ['{?x,y}', '?x=1024&y=768'], |
|
| 193 | + ['{?x,y,empty}', '?x=1024&y=768&empty='], |
|
| 194 | + ['{?x,y,undef}', '?x=1024&y=768'], |
|
| 195 | + ['{&x}', '&x=1024'], |
|
| 196 | + ['{&x,y,empty}', '&x=1024&y=768&empty='], |
|
| 197 | 197 | ], |
| 198 | 198 | 'level 4' => [ |
| 199 | - ['{var:3}', 'val'], |
|
| 200 | - ['{var:30}', 'value'], |
|
| 201 | - ['{list}', 'red,green,blue'], |
|
| 202 | - ['{list*}', 'red,green,blue'], |
|
| 203 | - ['{keys}', 'semi,%3B,dot,.,comma,%2C'], |
|
| 204 | - ['{keys*}', 'semi=%3B,dot=.,comma=%2C'], |
|
| 205 | - ['{+path:6}', '/foo/b'], |
|
| 206 | - ['{+list}', 'red,green,blue'], |
|
| 207 | - ['{+list*}', 'red,green,blue'], |
|
| 208 | - ['{+keys}', 'semi,;,dot,.,comma,,'], |
|
| 209 | - ['{+keys*}', 'semi=;,dot=.,comma=,'], |
|
| 210 | - ['{#path:6}', '#/foo/b'], |
|
| 211 | - ['{#list}', '#red,green,blue'], |
|
| 212 | - ['{#list*}', '#red,green,blue'], |
|
| 213 | - ['{#keys}', '#semi,;,dot,.,comma,,'], |
|
| 214 | - ['{#keys*}', '#semi=;,dot=.,comma=,'], |
|
| 215 | - ['{.var:3}', '.val'], |
|
| 216 | - ['{.list}', '.red,green,blue'], |
|
| 217 | - ['{.list*}', '.red.green.blue'], |
|
| 218 | - ['{.keys}', '.semi,%3B,dot,.,comma,%2C'], |
|
| 219 | - ['{.keys*}', '.semi=%3B.dot=..comma=%2C'], |
|
| 220 | - ['{/var:1,var}', '/v/value'], |
|
| 221 | - ['{/list}', '/red,green,blue'], |
|
| 222 | - ['{/list*}', '/red/green/blue'], |
|
| 199 | + ['{var:3}', 'val'], |
|
| 200 | + ['{var:30}', 'value'], |
|
| 201 | + ['{list}', 'red,green,blue'], |
|
| 202 | + ['{list*}', 'red,green,blue'], |
|
| 203 | + ['{keys}', 'semi,%3B,dot,.,comma,%2C'], |
|
| 204 | + ['{keys*}', 'semi=%3B,dot=.,comma=%2C'], |
|
| 205 | + ['{+path:6}', '/foo/b'], |
|
| 206 | + ['{+list}', 'red,green,blue'], |
|
| 207 | + ['{+list*}', 'red,green,blue'], |
|
| 208 | + ['{+keys}', 'semi,;,dot,.,comma,,'], |
|
| 209 | + ['{+keys*}', 'semi=;,dot=.,comma=,'], |
|
| 210 | + ['{#path:6}', '#/foo/b'], |
|
| 211 | + ['{#list}', '#red,green,blue'], |
|
| 212 | + ['{#list*}', '#red,green,blue'], |
|
| 213 | + ['{#keys}', '#semi,;,dot,.,comma,,'], |
|
| 214 | + ['{#keys*}', '#semi=;,dot=.,comma=,'], |
|
| 215 | + ['{.var:3}', '.val'], |
|
| 216 | + ['{.list}', '.red,green,blue'], |
|
| 217 | + ['{.list*}', '.red.green.blue'], |
|
| 218 | + ['{.keys}', '.semi,%3B,dot,.,comma,%2C'], |
|
| 219 | + ['{.keys*}', '.semi=%3B.dot=..comma=%2C'], |
|
| 220 | + ['{/var:1,var}', '/v/value'], |
|
| 221 | + ['{/list}', '/red,green,blue'], |
|
| 222 | + ['{/list*}', '/red/green/blue'], |
|
| 223 | 223 | ['{/list*,path:4}', '/red/green/blue/%2Ffoo'], |
| 224 | - ['{/keys}', '/semi,%3B,dot,.,comma,%2C'], |
|
| 225 | - ['{/keys*}', '/semi=%3B/dot=./comma=%2C'], |
|
| 226 | - ['{;hello:5}', ';hello=Hello'], |
|
| 227 | - ['{;list}', ';list=red,green,blue'], |
|
| 228 | - ['{;list*}', ';list=red;list=green;list=blue'], |
|
| 229 | - ['{;keys}', ';keys=semi,%3B,dot,.,comma,%2C'], |
|
| 230 | - ['{;keys*}', ';semi=%3B;dot=.;comma=%2C'], |
|
| 231 | - ['{?var:3}', '?var=val'], |
|
| 232 | - ['{?list}', '?list=red,green,blue'], |
|
| 233 | - ['{?list*}', '?list=red&list=green&list=blue'], |
|
| 234 | - ['{?keys}', '?keys=semi,%3B,dot,.,comma,%2C'], |
|
| 235 | - ['{?keys*}', '?semi=%3B&dot=.&comma=%2C'], |
|
| 236 | - ['{&var:3}', '&var=val'], |
|
| 237 | - ['{&list}', '&list=red,green,blue'], |
|
| 238 | - ['{&list*}', '&list=red&list=green&list=blue'], |
|
| 239 | - ['{&keys}', '&keys=semi,%3B,dot,.,comma,%2C'], |
|
| 240 | - ['{&keys*}', '&semi=%3B&dot=.&comma=%2C'], |
|
| 241 | - ['{.null}', ''], |
|
| 242 | - ['{.null,var}', '.value'], |
|
| 243 | - ['{.empty_keys*}', ''], |
|
| 244 | - ['{.empty_keys}', ''], |
|
| 224 | + ['{/keys}', '/semi,%3B,dot,.,comma,%2C'], |
|
| 225 | + ['{/keys*}', '/semi=%3B/dot=./comma=%2C'], |
|
| 226 | + ['{;hello:5}', ';hello=Hello'], |
|
| 227 | + ['{;list}', ';list=red,green,blue'], |
|
| 228 | + ['{;list*}', ';list=red;list=green;list=blue'], |
|
| 229 | + ['{;keys}', ';keys=semi,%3B,dot,.,comma,%2C'], |
|
| 230 | + ['{;keys*}', ';semi=%3B;dot=.;comma=%2C'], |
|
| 231 | + ['{?var:3}', '?var=val'], |
|
| 232 | + ['{?list}', '?list=red,green,blue'], |
|
| 233 | + ['{?list*}', '?list=red&list=green&list=blue'], |
|
| 234 | + ['{?keys}', '?keys=semi,%3B,dot,.,comma,%2C'], |
|
| 235 | + ['{?keys*}', '?semi=%3B&dot=.&comma=%2C'], |
|
| 236 | + ['{&var:3}', '&var=val'], |
|
| 237 | + ['{&list}', '&list=red,green,blue'], |
|
| 238 | + ['{&list*}', '&list=red&list=green&list=blue'], |
|
| 239 | + ['{&keys}', '&keys=semi,%3B,dot,.,comma,%2C'], |
|
| 240 | + ['{&keys*}', '&semi=%3B&dot=.&comma=%2C'], |
|
| 241 | + ['{.null}', ''], |
|
| 242 | + ['{.null,var}', '.value'], |
|
| 243 | + ['{.empty_keys*}', ''], |
|
| 244 | + ['{.empty_keys}', ''], |
|
| 245 | 245 | ], |
| 246 | 246 | 'extra' => [ |
| 247 | 247 | // Test that missing expansions are skipped |
@@ -53,44 +53,44 @@ |
||
| 53 | 53 | $base_uri = 'http://a/b/c/d;p?q'; |
| 54 | 54 | |
| 55 | 55 | return [ |
| 56 | - 'base uri' => [$base_uri, '', $base_uri], |
|
| 57 | - 'scheme' => [$base_uri, 'http://d/e/f', 'http://d/e/f'], |
|
| 58 | - 'path 1' => [$base_uri, 'g', 'http://a/b/c/g'], |
|
| 59 | - 'path 2' => [$base_uri, './g', 'http://a/b/c/g'], |
|
| 60 | - 'path 3' => [$base_uri, 'g/', 'http://a/b/c/g/'], |
|
| 61 | - 'path 4' => [$base_uri, '/g', 'http://a/g'], |
|
| 62 | - 'authority' => [$base_uri, '//g', 'http://g'], |
|
| 63 | - 'query' => [$base_uri, '?y', 'http://a/b/c/d;p?y'], |
|
| 64 | - 'path + query' => [$base_uri, 'g?y', 'http://a/b/c/g?y'], |
|
| 65 | - 'fragment' => [$base_uri, '#s', 'http://a/b/c/d;p?q#s'], |
|
| 66 | - 'path + fragment' => [$base_uri, 'g#s', 'http://a/b/c/g#s'], |
|
| 67 | - 'path + query + fragment' => [$base_uri, 'g?y#s', 'http://a/b/c/g?y#s'], |
|
| 68 | - 'single dot 1' => [$base_uri, '.', 'http://a/b/c/'], |
|
| 69 | - 'single dot 2' => [$base_uri, './', 'http://a/b/c/'], |
|
| 70 | - 'single dot 3' => [$base_uri, './g/.', 'http://a/b/c/g/'], |
|
| 71 | - 'single dot 4' => [$base_uri, 'g/./h', 'http://a/b/c/g/h'], |
|
| 72 | - 'double dot 1' => [$base_uri, '..', 'http://a/b/'], |
|
| 73 | - 'double dot 2' => [$base_uri, '../', 'http://a/b/'], |
|
| 74 | - 'double dot 3' => [$base_uri, '../g', 'http://a/b/g'], |
|
| 75 | - 'double dot 4' => [$base_uri, '../..', 'http://a/'], |
|
| 76 | - 'double dot 5' => [$base_uri, '../../', 'http://a/'], |
|
| 77 | - 'double dot 6' => [$base_uri, '../../g', 'http://a/g'], |
|
| 78 | - 'double dot 7' => [$base_uri, '../../../g', 'http://a/g'], |
|
| 56 | + 'base uri' => [$base_uri, '', $base_uri], |
|
| 57 | + 'scheme' => [$base_uri, 'http://d/e/f', 'http://d/e/f'], |
|
| 58 | + 'path 1' => [$base_uri, 'g', 'http://a/b/c/g'], |
|
| 59 | + 'path 2' => [$base_uri, './g', 'http://a/b/c/g'], |
|
| 60 | + 'path 3' => [$base_uri, 'g/', 'http://a/b/c/g/'], |
|
| 61 | + 'path 4' => [$base_uri, '/g', 'http://a/g'], |
|
| 62 | + 'authority' => [$base_uri, '//g', 'http://g'], |
|
| 63 | + 'query' => [$base_uri, '?y', 'http://a/b/c/d;p?y'], |
|
| 64 | + 'path + query' => [$base_uri, 'g?y', 'http://a/b/c/g?y'], |
|
| 65 | + 'fragment' => [$base_uri, '#s', 'http://a/b/c/d;p?q#s'], |
|
| 66 | + 'path + fragment' => [$base_uri, 'g#s', 'http://a/b/c/g#s'], |
|
| 67 | + 'path + query + fragment' => [$base_uri, 'g?y#s', 'http://a/b/c/g?y#s'], |
|
| 68 | + 'single dot 1' => [$base_uri, '.', 'http://a/b/c/'], |
|
| 69 | + 'single dot 2' => [$base_uri, './', 'http://a/b/c/'], |
|
| 70 | + 'single dot 3' => [$base_uri, './g/.', 'http://a/b/c/g/'], |
|
| 71 | + 'single dot 4' => [$base_uri, 'g/./h', 'http://a/b/c/g/h'], |
|
| 72 | + 'double dot 1' => [$base_uri, '..', 'http://a/b/'], |
|
| 73 | + 'double dot 2' => [$base_uri, '../', 'http://a/b/'], |
|
| 74 | + 'double dot 3' => [$base_uri, '../g', 'http://a/b/g'], |
|
| 75 | + 'double dot 4' => [$base_uri, '../..', 'http://a/'], |
|
| 76 | + 'double dot 5' => [$base_uri, '../../', 'http://a/'], |
|
| 77 | + 'double dot 6' => [$base_uri, '../../g', 'http://a/g'], |
|
| 78 | + 'double dot 7' => [$base_uri, '../../../g', 'http://a/g'], |
|
| 79 | 79 | 'double dot 8' => [$base_uri, '../../../../g', 'http://a/g'], |
| 80 | - 'double dot 9' => [$base_uri, 'g/../h' , 'http://a/b/c/h'], |
|
| 81 | - 'mulitple slashes' => [$base_uri, 'foo////g', 'http://a/b/c/foo////g'], |
|
| 82 | - 'complex path 1' => [$base_uri, ';x', 'http://a/b/c/;x'], |
|
| 83 | - 'complex path 2' => [$base_uri, 'g;x', 'http://a/b/c/g;x'], |
|
| 84 | - 'complex path 3' => [$base_uri, 'g;x?y#s', 'http://a/b/c/g;x?y#s'], |
|
| 85 | - 'complex path 4' => [$base_uri, 'g;x=1/./y', 'http://a/b/c/g;x=1/y'], |
|
| 86 | - 'complex path 5' => [$base_uri, 'g;x=1/../y', 'http://a/b/c/y'], |
|
| 87 | - 'dot segments presence 1' => [$base_uri, '/./g', 'http://a/g'], |
|
| 88 | - 'dot segments presence 2' => [$base_uri, '/../g', 'http://a/g'], |
|
| 89 | - 'dot segments presence 3' => [$base_uri, 'g.', 'http://a/b/c/g.'], |
|
| 90 | - 'dot segments presence 4' => [$base_uri, '.g', 'http://a/b/c/.g'], |
|
| 91 | - 'dot segments presence 5' => [$base_uri, 'g..', 'http://a/b/c/g..'], |
|
| 92 | - 'dot segments presence 6' => [$base_uri, '..g', 'http://a/b/c/..g'], |
|
| 93 | - 'origin uri without path' => ['http://h:b@a', 'b/../y', 'http://h:b@a/y'], |
|
| 80 | + 'double dot 9' => [$base_uri, 'g/../h', 'http://a/b/c/h'], |
|
| 81 | + 'mulitple slashes' => [$base_uri, 'foo////g', 'http://a/b/c/foo////g'], |
|
| 82 | + 'complex path 1' => [$base_uri, ';x', 'http://a/b/c/;x'], |
|
| 83 | + 'complex path 2' => [$base_uri, 'g;x', 'http://a/b/c/g;x'], |
|
| 84 | + 'complex path 3' => [$base_uri, 'g;x?y#s', 'http://a/b/c/g;x?y#s'], |
|
| 85 | + 'complex path 4' => [$base_uri, 'g;x=1/./y', 'http://a/b/c/g;x=1/y'], |
|
| 86 | + 'complex path 5' => [$base_uri, 'g;x=1/../y', 'http://a/b/c/y'], |
|
| 87 | + 'dot segments presence 1' => [$base_uri, '/./g', 'http://a/g'], |
|
| 88 | + 'dot segments presence 2' => [$base_uri, '/../g', 'http://a/g'], |
|
| 89 | + 'dot segments presence 3' => [$base_uri, 'g.', 'http://a/b/c/g.'], |
|
| 90 | + 'dot segments presence 4' => [$base_uri, '.g', 'http://a/b/c/.g'], |
|
| 91 | + 'dot segments presence 5' => [$base_uri, 'g..', 'http://a/b/c/g..'], |
|
| 92 | + 'dot segments presence 6' => [$base_uri, '..g', 'http://a/b/c/..g'], |
|
| 93 | + 'origin uri without path' => ['http://h:b@a', 'b/../y', 'http://h:b@a/y'], |
|
| 94 | 94 | ]; |
| 95 | 95 | } |
| 96 | 96 | } |
@@ -38,7 +38,7 @@ discard block |
||
| 38 | 38 | */ |
| 39 | 39 | public function testRelativize(string $uri, string $resolved, string $expected): void |
| 40 | 40 | { |
| 41 | - $uri = Http::createFromString($uri); |
|
| 41 | + $uri = Http::createFromString($uri); |
|
| 42 | 42 | $resolved = Uri::createFromString($resolved); |
| 43 | 43 | self::assertSame($expected, (string) UriResolver::relativize($resolved, $uri)); |
| 44 | 44 | } |
@@ -46,43 +46,43 @@ discard block |
||
| 46 | 46 | public function relativizeProvider(): array |
| 47 | 47 | { |
| 48 | 48 | return [ |
| 49 | - 'different scheme' => [self::BASE_URI, 'https://a/b/c/d;p?q', 'https://a/b/c/d;p?q'], |
|
| 50 | - 'different authority' => [self::BASE_URI, 'https://g/b/c/d;p?q', 'https://g/b/c/d;p?q'], |
|
| 51 | - 'empty uri' => [self::BASE_URI, '', ''], |
|
| 52 | - 'same uri' => [self::BASE_URI, self::BASE_URI, ''], |
|
| 53 | - 'same path' => [self::BASE_URI, 'http://a/b/c/d;p', 'd;p'], |
|
| 54 | - 'parent path 1' => [self::BASE_URI, 'http://a/b/c/', './'], |
|
| 55 | - 'parent path 2' => [self::BASE_URI, 'http://a/b/', '../'], |
|
| 56 | - 'parent path 3' => [self::BASE_URI, 'http://a/', '../../'], |
|
| 57 | - 'parent path 4' => [self::BASE_URI, 'http://a', '../../'], |
|
| 58 | - 'sibling path 1' => [self::BASE_URI, 'http://a/b/c/g', 'g'], |
|
| 59 | - 'sibling path 2' => [self::BASE_URI, 'http://a/b/c/g/h', 'g/h'], |
|
| 60 | - 'sibling path 3' => [self::BASE_URI, 'http://a/b/g', '../g'], |
|
| 61 | - 'sibling path 4' => [self::BASE_URI, 'http://a/g', '../../g'], |
|
| 62 | - 'query' => [self::BASE_URI, 'http://a/b/c/d;p?y', '?y'], |
|
| 63 | - 'fragment' => [self::BASE_URI, 'http://a/b/c/d;p?q#s', '#s'], |
|
| 64 | - 'path + query' => [self::BASE_URI, 'http://a/b/c/g?y', 'g?y'], |
|
| 65 | - 'path + fragment' => [self::BASE_URI, 'http://a/b/c/g#s', 'g#s'], |
|
| 66 | - 'path + query + fragment' => [self::BASE_URI, 'http://a/b/c/g?y#s', 'g?y#s'], |
|
| 67 | - 'empty segments' => [self::BASE_URI, 'http://a/b/c/foo////g', 'foo////g'], |
|
| 68 | - 'empty segments 1' => [self::BASE_URI, 'http://a/b////c/foo/g', '..////c/foo/g'], |
|
| 69 | - 'relative single dot 1' => [self::BASE_URI, '.', '.'], |
|
| 70 | - 'relative single dot 2' => [self::BASE_URI, './', './'], |
|
| 71 | - 'relative double dot 1' => [self::BASE_URI, '..', '..'], |
|
| 72 | - 'relative double dot 2' => [self::BASE_URI, '../', '../'], |
|
| 73 | - 'path with colon 1' => ['http://a/', 'http://a/d:p', './d:p'], |
|
| 74 | - 'path with colon 2' => [self::BASE_URI, 'http://a/b/c/g/d:p', 'g/d:p'], |
|
| 75 | - 'scheme + auth 1' => ['http://a', 'http://a?q#s', '?q#s'], |
|
| 76 | - 'scheme + auth 2' => ['http://a/', 'http://a?q#s', '/?q#s'], |
|
| 77 | - '2 relative paths 1' => ['a/b', '../..', '../..'], |
|
| 78 | - '2 relative paths 2' => ['a/b', './.', './.'], |
|
| 79 | - '2 relative paths 3' => ['a/b', '../c', '../c'], |
|
| 80 | - '2 relative paths 4' => ['a/b', 'c/..', 'c/..'], |
|
| 81 | - '2 relative paths 5' => ['a/b', 'c/.', 'c/.'], |
|
| 82 | - 'baseUri with query' => ['/a/b/?q', '/a/b/#h', './#h'], |
|
| 83 | - 'targetUri with fragment' => ['/', '/#h', '#h'], |
|
| 84 | - 'same document' => ['/', '/', ''], |
|
| 85 | - 'same URI normalized' => ['http://a', 'http://a/', ''], |
|
| 49 | + 'different scheme' => [self::BASE_URI, 'https://a/b/c/d;p?q', 'https://a/b/c/d;p?q'], |
|
| 50 | + 'different authority' => [self::BASE_URI, 'https://g/b/c/d;p?q', 'https://g/b/c/d;p?q'], |
|
| 51 | + 'empty uri' => [self::BASE_URI, '', ''], |
|
| 52 | + 'same uri' => [self::BASE_URI, self::BASE_URI, ''], |
|
| 53 | + 'same path' => [self::BASE_URI, 'http://a/b/c/d;p', 'd;p'], |
|
| 54 | + 'parent path 1' => [self::BASE_URI, 'http://a/b/c/', './'], |
|
| 55 | + 'parent path 2' => [self::BASE_URI, 'http://a/b/', '../'], |
|
| 56 | + 'parent path 3' => [self::BASE_URI, 'http://a/', '../../'], |
|
| 57 | + 'parent path 4' => [self::BASE_URI, 'http://a', '../../'], |
|
| 58 | + 'sibling path 1' => [self::BASE_URI, 'http://a/b/c/g', 'g'], |
|
| 59 | + 'sibling path 2' => [self::BASE_URI, 'http://a/b/c/g/h', 'g/h'], |
|
| 60 | + 'sibling path 3' => [self::BASE_URI, 'http://a/b/g', '../g'], |
|
| 61 | + 'sibling path 4' => [self::BASE_URI, 'http://a/g', '../../g'], |
|
| 62 | + 'query' => [self::BASE_URI, 'http://a/b/c/d;p?y', '?y'], |
|
| 63 | + 'fragment' => [self::BASE_URI, 'http://a/b/c/d;p?q#s', '#s'], |
|
| 64 | + 'path + query' => [self::BASE_URI, 'http://a/b/c/g?y', 'g?y'], |
|
| 65 | + 'path + fragment' => [self::BASE_URI, 'http://a/b/c/g#s', 'g#s'], |
|
| 66 | + 'path + query + fragment' => [self::BASE_URI, 'http://a/b/c/g?y#s', 'g?y#s'], |
|
| 67 | + 'empty segments' => [self::BASE_URI, 'http://a/b/c/foo////g', 'foo////g'], |
|
| 68 | + 'empty segments 1' => [self::BASE_URI, 'http://a/b////c/foo/g', '..////c/foo/g'], |
|
| 69 | + 'relative single dot 1' => [self::BASE_URI, '.', '.'], |
|
| 70 | + 'relative single dot 2' => [self::BASE_URI, './', './'], |
|
| 71 | + 'relative double dot 1' => [self::BASE_URI, '..', '..'], |
|
| 72 | + 'relative double dot 2' => [self::BASE_URI, '../', '../'], |
|
| 73 | + 'path with colon 1' => ['http://a/', 'http://a/d:p', './d:p'], |
|
| 74 | + 'path with colon 2' => [self::BASE_URI, 'http://a/b/c/g/d:p', 'g/d:p'], |
|
| 75 | + 'scheme + auth 1' => ['http://a', 'http://a?q#s', '?q#s'], |
|
| 76 | + 'scheme + auth 2' => ['http://a/', 'http://a?q#s', '/?q#s'], |
|
| 77 | + '2 relative paths 1' => ['a/b', '../..', '../..'], |
|
| 78 | + '2 relative paths 2' => ['a/b', './.', './.'], |
|
| 79 | + '2 relative paths 3' => ['a/b', '../c', '../c'], |
|
| 80 | + '2 relative paths 4' => ['a/b', 'c/..', 'c/..'], |
|
| 81 | + '2 relative paths 5' => ['a/b', 'c/.', 'c/.'], |
|
| 82 | + 'baseUri with query' => ['/a/b/?q', '/a/b/#h', './#h'], |
|
| 83 | + 'targetUri with fragment' => ['/', '/#h', '#h'], |
|
| 84 | + 'same document' => ['/', '/', ''], |
|
| 85 | + 'same URI normalized' => ['http://a', 'http://a/', ''], |
|
| 86 | 86 | ]; |
| 87 | 87 | } |
| 88 | 88 | |
@@ -111,18 +111,18 @@ discard block |
||
| 111 | 111 | public function relativizeAndResolveProvider(): array |
| 112 | 112 | { |
| 113 | 113 | return [ |
| 114 | - 'empty path' => [self::BASE_URI, 'http://a/', '../../', 'http://a/'], |
|
| 115 | - 'absolute empty path' => [self::BASE_URI, 'http://a', '../../', 'http://a/'], |
|
| 116 | - 'relative single dot 1' => [self::BASE_URI, '.', '.', 'http://a/b/c/'], |
|
| 117 | - 'relative single dot 2' => [self::BASE_URI, './', './', 'http://a/b/c/'], |
|
| 118 | - 'relative double dot 1' => [self::BASE_URI, '..', '..', 'http://a/b/'], |
|
| 119 | - 'relative double dot 2' => [self::BASE_URI, '../', '../', 'http://a/b/'], |
|
| 120 | - '2 relative paths 1' => ['a/b', '../..', '../..', '/'], |
|
| 121 | - '2 relative paths 2' => ['a/b', './.', './.', 'a/'], |
|
| 122 | - '2 relative paths 3' => ['a/b', '../c', '../c', 'c'], |
|
| 123 | - '2 relative paths 4' => ['a/b', 'c/..', 'c/..', 'a/'], |
|
| 124 | - '2 relative paths 5' => ['a/b', 'c/.', 'c/.', 'a/c/'], |
|
| 125 | - 'path with colon' => ['http://a/', 'http://a/d:p', './d:p', 'http://a/d:p'], |
|
| 114 | + 'empty path' => [self::BASE_URI, 'http://a/', '../../', 'http://a/'], |
|
| 115 | + 'absolute empty path' => [self::BASE_URI, 'http://a', '../../', 'http://a/'], |
|
| 116 | + 'relative single dot 1' => [self::BASE_URI, '.', '.', 'http://a/b/c/'], |
|
| 117 | + 'relative single dot 2' => [self::BASE_URI, './', './', 'http://a/b/c/'], |
|
| 118 | + 'relative double dot 1' => [self::BASE_URI, '..', '..', 'http://a/b/'], |
|
| 119 | + 'relative double dot 2' => [self::BASE_URI, '../', '../', 'http://a/b/'], |
|
| 120 | + '2 relative paths 1' => ['a/b', '../..', '../..', '/'], |
|
| 121 | + '2 relative paths 2' => ['a/b', './.', './.', 'a/'], |
|
| 122 | + '2 relative paths 3' => ['a/b', '../c', '../c', 'c'], |
|
| 123 | + '2 relative paths 4' => ['a/b', 'c/..', 'c/..', 'a/'], |
|
| 124 | + '2 relative paths 5' => ['a/b', 'c/.', 'c/.', 'a/c/'], |
|
| 125 | + 'path with colon' => ['http://a/', 'http://a/d:p', './d:p', 'http://a/d:p'], |
|
| 126 | 126 | ]; |
| 127 | 127 | } |
| 128 | 128 | } |