Chris@0: Chris@0: * Chris@0: * For the full copyright and license information, please view the LICENSE Chris@0: * file that was distributed with this source code. Chris@0: */ Chris@0: Chris@0: namespace Webmozart\PathUtil\Tests; Chris@0: Chris@0: use Webmozart\PathUtil\Url; Chris@0: Chris@0: /** Chris@0: * @since 2.3 Chris@0: * Chris@0: * @author Bernhard Schussek Chris@0: * @author Claudio Zizza Chris@0: */ Chris@0: class UrlTest extends \PHPUnit_Framework_TestCase Chris@0: { Chris@0: /** Chris@0: * @dataProvider provideMakeRelativeTests Chris@0: * @covers Webmozart\PathUtil\Url Chris@0: */ Chris@0: public function testMakeRelative($absolutePath, $basePath, $relativePath) Chris@0: { Chris@0: $host = 'http://example.com'; Chris@0: Chris@0: $relative = Url::makeRelative($host.$absolutePath, $host.$basePath); Chris@0: $this->assertSame($relativePath, $relative); Chris@0: $relative = Url::makeRelative($absolutePath, $host.$basePath); Chris@0: $this->assertSame($relativePath, $relative); Chris@0: } Chris@0: Chris@0: /** Chris@0: * @dataProvider provideMakeRelativeIsAlreadyRelativeTests Chris@0: * @covers Webmozart\PathUtil\Url Chris@0: */ Chris@0: public function testMakeRelativeIsAlreadyRelative($absolutePath, $basePath, $relativePath) Chris@0: { Chris@0: $host = 'http://example.com'; Chris@0: Chris@0: $relative = Url::makeRelative($absolutePath, $host.$basePath); Chris@0: $this->assertSame($relativePath, $relative); Chris@0: } Chris@0: Chris@0: /** Chris@0: * @dataProvider provideMakeRelativeTests Chris@0: * @covers Webmozart\PathUtil\Url Chris@0: */ Chris@0: public function testMakeRelativeWithFullUrl($absolutePath, $basePath, $relativePath) Chris@0: { Chris@0: $host = 'ftp://user:password@example.com:8080'; Chris@0: Chris@0: $relative = Url::makeRelative($host.$absolutePath, $host.$basePath); Chris@0: $this->assertSame($relativePath, $relative); Chris@0: } Chris@0: Chris@0: /** Chris@0: * @expectedException \InvalidArgumentException Chris@0: * @expectedExceptionMessage The URL must be a string. Got: array Chris@0: * @covers Webmozart\PathUtil\Url Chris@0: */ Chris@0: public function testMakeRelativeFailsIfInvalidUrl() Chris@0: { Chris@0: Url::makeRelative(array(), 'http://example.com/webmozart/puli'); Chris@0: } Chris@0: Chris@0: /** Chris@0: * @expectedException \InvalidArgumentException Chris@0: * @expectedExceptionMessage The base URL must be a string. Got: array Chris@0: * @covers Webmozart\PathUtil\Url Chris@0: */ Chris@0: public function testMakeRelativeFailsIfInvalidBaseUrl() Chris@0: { Chris@0: Url::makeRelative('http://example.com/webmozart/puli/css/style.css', array()); Chris@0: } Chris@0: Chris@0: /** Chris@0: * @expectedException \InvalidArgumentException Chris@0: * @expectedExceptionMessage "webmozart/puli" is not an absolute Url. Chris@0: * @covers Webmozart\PathUtil\Url Chris@0: */ Chris@0: public function testMakeRelativeFailsIfBaseUrlNoUrl() Chris@0: { Chris@0: Url::makeRelative('http://example.com/webmozart/puli/css/style.css', 'webmozart/puli'); Chris@0: } Chris@0: Chris@0: /** Chris@0: * @expectedException \InvalidArgumentException Chris@0: * @expectedExceptionMessage "" is not an absolute Url. Chris@0: * @covers Webmozart\PathUtil\Url Chris@0: */ Chris@0: public function testMakeRelativeFailsIfBaseUrlEmpty() Chris@0: { Chris@0: Url::makeRelative('http://example.com/webmozart/puli/css/style.css', ''); Chris@0: } Chris@0: Chris@0: /** Chris@0: * @expectedException \InvalidArgumentException Chris@0: * @expectedExceptionMessage The base URL must be a string. Got: NULL Chris@0: * @covers Webmozart\PathUtil\Url Chris@0: */ Chris@0: public function testMakeRelativeFailsIfBaseUrlNull() Chris@0: { Chris@0: Url::makeRelative('http://example.com/webmozart/puli/css/style.css', null); Chris@0: } Chris@0: Chris@0: /** Chris@0: * @expectedException \InvalidArgumentException Chris@0: * @expectedExceptionMessage The URL "http://example.com" cannot be made relative to "http://example2.com" since Chris@0: * their host names are different. Chris@0: * @covers Webmozart\PathUtil\Url Chris@0: */ Chris@0: public function testMakeRelativeFailsIfDifferentDomains() Chris@0: { Chris@0: Url::makeRelative('http://example.com/webmozart/puli/css/style.css', 'http://example2.com/webmozart/puli'); Chris@0: } Chris@0: Chris@0: public function provideMakeRelativeTests() Chris@0: { Chris@0: return array( Chris@0: Chris@0: array('/webmozart/puli/css/style.css', '/webmozart/puli', 'css/style.css'), Chris@0: array('/webmozart/puli/css/style.css?key=value&key2=value', '/webmozart/puli', 'css/style.css?key=value&key2=value'), Chris@0: array('/webmozart/puli/css/style.css?key[]=value&key[]=value', '/webmozart/puli', 'css/style.css?key[]=value&key[]=value'), Chris@0: array('/webmozart/css/style.css', '/webmozart/puli', '../css/style.css'), Chris@0: array('/css/style.css', '/webmozart/puli', '../../css/style.css'), Chris@0: array('/', '/', ''), Chris@0: Chris@0: // relative to root Chris@0: array('/css/style.css', '/', 'css/style.css'), Chris@0: Chris@0: // same sub directories in different base directories Chris@0: array('/puli/css/style.css', '/webmozart/css', '../../puli/css/style.css'), Chris@0: Chris@0: array('/webmozart/puli/./css/style.css', '/webmozart/puli', 'css/style.css'), Chris@0: array('/webmozart/puli/../css/style.css', '/webmozart/puli', '../css/style.css'), Chris@0: array('/webmozart/puli/.././css/style.css', '/webmozart/puli', '../css/style.css'), Chris@0: array('/webmozart/puli/./../css/style.css', '/webmozart/puli', '../css/style.css'), Chris@0: array('/webmozart/puli/../../css/style.css', '/webmozart/puli', '../../css/style.css'), Chris@0: array('/webmozart/puli/css/style.css', '/webmozart/./puli', 'css/style.css'), Chris@0: array('/webmozart/puli/css/style.css', '/webmozart/../puli', '../webmozart/puli/css/style.css'), Chris@0: array('/webmozart/puli/css/style.css', '/webmozart/./../puli', '../webmozart/puli/css/style.css'), Chris@0: array('/webmozart/puli/css/style.css', '/webmozart/.././puli', '../webmozart/puli/css/style.css'), Chris@0: array('/webmozart/puli/css/style.css', '/webmozart/../../puli', '../webmozart/puli/css/style.css'), Chris@0: Chris@0: // first argument shorter than second Chris@0: array('/css', '/webmozart/puli', '../../css'), Chris@0: Chris@0: // second argument shorter than first Chris@0: array('/webmozart/puli', '/css', '../webmozart/puli'), Chris@0: Chris@0: array('', '', ''), Chris@0: ); Chris@0: } Chris@0: Chris@0: public function provideMakeRelativeIsAlreadyRelativeTests() Chris@0: { Chris@0: return array( Chris@0: array('css/style.css', '/webmozart/puli', 'css/style.css'), Chris@0: array('css/style.css', '', 'css/style.css'), Chris@0: array('css/../style.css', '', 'style.css'), Chris@0: array('css/./style.css', '', 'css/style.css'), Chris@0: array('../style.css', '/', 'style.css'), Chris@0: array('./style.css', '/', 'style.css'), Chris@0: array('../../style.css', '/', 'style.css'), Chris@0: array('../../style.css', '', 'style.css'), Chris@0: array('./style.css', '', 'style.css'), Chris@0: array('../style.css', '', 'style.css'), Chris@0: array('./../style.css', '', 'style.css'), Chris@0: array('css/./../style.css', '', 'style.css'), Chris@0: array('css//style.css', '', 'css/style.css'), Chris@0: ); Chris@0: } Chris@0: }