From f120ce1bbfc055421eba41e2a7c890cafa658461 Mon Sep 17 00:00:00 2001 From: Erayd Date: Tue, 6 Jun 2017 01:34:29 +1200 Subject: [PATCH] Bugfix for #424 - add '?' for query string (#425) Note that this bugfix will cause empty query strings to be dropped (e.g. http://example.com?#blue becomes http://example.com#blue). This is because the '?' character is deliberately not captured as part of the query string, and the testsuite expects to be able to pass an empty query string and *not* have the '?' added for that case. --- src/JsonSchema/Uri/UriResolver.php | 4 ++-- tests/Uri/UriResolverTest.php | 18 ++++++++++++++++++ 2 files changed, 20 insertions(+), 2 deletions(-) diff --git a/src/JsonSchema/Uri/UriResolver.php b/src/JsonSchema/Uri/UriResolver.php index 7d6e793d..f26046d0 100644 --- a/src/JsonSchema/Uri/UriResolver.php +++ b/src/JsonSchema/Uri/UriResolver.php @@ -61,8 +61,8 @@ public function generate(array $components) . $components['authority'] . $components['path']; - if (array_key_exists('query', $components)) { - $uri .= $components['query']; + if (array_key_exists('query', $components) && strlen($components['query'])) { + $uri .= '?' . $components['query']; } if (array_key_exists('fragment', $components)) { $uri .= '#' . $components['fragment']; diff --git a/tests/Uri/UriResolverTest.php b/tests/Uri/UriResolverTest.php index ea564f65..456b13d3 100644 --- a/tests/Uri/UriResolverTest.php +++ b/tests/Uri/UriResolverTest.php @@ -172,4 +172,22 @@ public function testResolveEmpty() ) ); } + + public function testReversable() + { + $uri = 'scheme://user:password@authority/path?query#fragment'; + $split = $this->resolver->parse($uri); + + // check that the URI was split as expected + $this->assertEquals(array( + 'scheme' => 'scheme', + 'authority' => 'user:password@authority', + 'path' => '/path', + 'query' => 'query', + 'fragment' => 'fragment' + ), $split); + + // check that the recombined URI matches the original input + $this->assertEquals($uri, $this->resolver->generate($split)); + } }