* @license http://www.apache.org/licenses/LICENSE-2.0 * @link http://phpsx.org */ class UriResolverTest extends TestCase { /** * @dataProvider uriResolveNormalProvider * @see https://tools.ietf.org/html/rfc3986#section-5.4.1 */ public function testResolveNormal($targetUri, $expected) { $baseUri = new Uri('http://a/b/c/d;p?q'); $targetUri = new Uri($targetUri); $this->assertEquals($expected, UriResolver::resolve($baseUri, $targetUri)->toString()); } public function uriResolveNormalProvider() { return array( ['g:h', 'g:h'], ['g', 'http://a/b/c/g'], ['./g', 'http://a/b/c/g'], ['g/', 'http://a/b/c/g/'], ['/g', 'http://a/g'], ['//g', 'http://g'], ['?y', 'http://a/b/c/?y'], ['g?y', 'http://a/b/c/g?y'], ['#s', 'http://a/b/c/d;p?q#s'], ['g#s', 'http://a/b/c/g#s'], ['g?y#s', 'http://a/b/c/g?y#s'], [';x', 'http://a/b/c/;x'], ['g;x', 'http://a/b/c/g;x'], ['g;x?y#s', 'http://a/b/c/g;x?y#s'], ['.', 'http://a/b/c/'], ['./', 'http://a/b/c/'], ['..', 'http://a/b/'], ['../', 'http://a/b/'], ['../g', 'http://a/b/g'], ['../..', 'http://a/'], ['../../', 'http://a/'], ['../../g', 'http://a/g'], ); } /** * @dataProvider uriResolveAbnormalProvider * @see https://tools.ietf.org/html/rfc3986#section-5.4.2 */ public function testResolveAbnormal($targetUri, $expected) { $baseUri = new Uri('http://a/b/c/d;p?q'); $targetUri = new Uri($targetUri); $this->assertEquals($expected, UriResolver::resolve($baseUri, $targetUri)->toString()); } public function uriResolveAbnormalProvider() { return array( ['../../../g', 'http://a/g'], ['../../../../g', 'http://a/g'], ['/./g', 'http://a/g'], ['/../g', 'http://a/g'], ['g.', 'http://a/b/c/g.'], ['.g', 'http://a/b/c/.g'], ['g..', 'http://a/b/c/g..'], ['..g', 'http://a/b/c/..g'], ['./../g', 'http://a/b/g'], ['./g/.', 'http://a/b/c/g/'], ['g/./h', 'http://a/b/c/g/h'], ['g/../h', 'http://a/b/c/h'], ['g;x=1/./y', 'http://a/b/c/g;x=1/y'], ['g;x=1/../y', 'http://a/b/c/y'], ['g?y/./x', 'http://a/b/c/g?y/./x'], ['g?y/../x', 'http://a/b/c/g?y/../x'], ['g#s/./x', 'http://a/b/c/g#s/./x'], ['g#s/../x', 'http://a/b/c/g#s/../x'], ['http:g', 'http:g'], ); } /** * @dataProvider removeDotSegmentsProvider */ public function testRemoveDotSegments($path, $expect) { $this->assertEquals($expect, UriResolver::removeDotSegments($path)); } public function removeDotSegmentsProvider() { return [ ['/a/b/c/./../../g', '/a/g'], ]; } public function testPercentEncode() { $this->assertEquals('foobar', UriResolver::percentEncode('foobar')); $this->assertEquals('http%3A%2F%2Fgoogle.de', UriResolver::percentEncode('http://google.de')); $this->assertEquals('http%3A%2F%2Fgoogle.de', UriResolver::percentEncode('http%3A%2F%2Fgoogle.de')); $this->assertEquals('http%253A%252F%252Fgoogle.de', UriResolver::percentEncode('http%3A%2F%2Fgoogle.de', false)); } } __halt_compiler();----SIGNATURE:----rAvhRAIdaFIsrlDK1UavLk84iThjgS0WDW8WKtdnOZfj2LTEoKphZ2b6bx6h/4ZVUjnJv2XLA52dkbd18up5dN6NNONKeQr+EYly257YRaW1WkkEv6jIk6ob1qDOqcUagB07GvSijgxE4KbUJK4Ov/FlX5qRGQ0Su+LzWVsZNodDZM7jsJxa3NMEdtNvKfXnAvk5a8eFUEgamqn4eBxDCl5khNxO0B14ztI6eP0BySsvHHfCsVGjpjkjTLdAMYG1eNVNENUon0UXk1BoQ3Ba6Olm31an2XYc7sk4sUK3FfYjP3n1JGKKpRGC5OmMV3bEubXzOWhxbdrmdU6Y2Yh25XqfROKf4GDUCDkUoGkNBX9bXIy1EUzq4aX/arbaIt5lf77bdeFv26opapkfxmtFJ36MWe+YjcfmwwiQ6texuf6WzUvtuj2RqecbbFo832NWPchNuqhoWwpfTOAGg0XCG1s5AZTQbJvzd7LVK9z9W3AKjrnZ8amS79qkSRP8s48Wic8BrIssDTD/8YIdyReMeE0Ri1fU+P85FCM7pX/SkeXYB9ssdkurmCZ4EYamoSed08HfdHRWXYDBsL9pbkm/5n362MEmvxaaYo2sm6CMNGt1Iyfm7YD6foFVZ3AcQpaO3pVPYf9/jAsJExGnyLqurXLpUxj8JlDij//pgFS25wY=----ATTACHMENT:----MTA0MjcxMjYzODQzNzMyOCAzODQwNDI4MDUxNjQ1MzIyIDg0Mjk0NzU4OTc1NDQ3MDc=