add unit tests for rewrite_relative_url and fix a number of bugs in it

This commit is contained in:
Christian Weiske 2010-11-10 23:09:03 +01:00 committed by Andrew Dolgov
parent 24eb4c780f
commit f679105cb2
2 changed files with 80 additions and 2 deletions

View File

@ -7074,6 +7074,14 @@
return $parts['scheme'] . "://" . $parts['host'] . $parts['path'];
}
/**
* Converts a (possibly) relative URL to a absolute one.
*
* @param string $url Base URL (i.e. from where the document is)
* @param string $rel_url Possibly relative URL in the document
*
* @return string Absolute URL
*/
function rewrite_relative_url($url, $rel_url) {
if (strpos($rel_url, "://") !== false) {
return $rel_url;
@ -7086,8 +7094,15 @@
} else {
$parts = parse_url($url);
$parts['path'] = dirname($parts['path']) . "/$rel_url";
if (!isset($parts['path'])) {
$parts['path'] = '/';
}
$dir = $parts['path'];
if (substr($dir, -1) !== '/') {
$dir = dirname($parts['path']);
$dir !== '/' && $dir .= '/';
}
$parts['path'] = $dir . $rel_url;
return build_url($parts);
}

View File

@ -177,6 +177,69 @@ HTM
);
$this->assertFalse(url_is_html($this->tmpFile));
}
/**
* Test rewrite_relative_url() with a relative path
*/
public function testRewriteRelativeUrlRelative()
{
$this->assertEquals(
'http://tt-rss.org/foo/bar',
rewrite_relative_url('http://tt-rss.org', 'foo/bar')
);
$this->assertEquals(
'http://tt-rss.org/foo/bar',
rewrite_relative_url('http://tt-rss.org/', 'foo/bar')
);
$this->assertEquals(
'http://tt-rss.org/bar',
rewrite_relative_url('http://tt-rss.org/foo', 'bar')
);
$this->assertEquals(
'http://tt-rss.org/foo/bar',
rewrite_relative_url('http://tt-rss.org/foo/', 'bar')
);
$this->assertEquals(
'http://tt-rss.org/f/o/bar',
rewrite_relative_url('http://tt-rss.org/f/o/o', 'bar')
);
$this->assertEquals(
'http://tt-rss.org/f/o/o/bar',
rewrite_relative_url('http://tt-rss.org/f/o/o/', 'bar')
);
}
/**
* Test rewrite_relative_url() with an absolute path
*/
public function testRewriteRelativeUrlAbsolutePath()
{
$this->assertEquals(
'http://tt-rss.org/bar/',
rewrite_relative_url('http://tt-rss.org/foo/', '/bar/')
);
$this->assertEquals(
'http://tt-rss.org/bar/',
rewrite_relative_url('http://tt-rss.org/so/what/is/next', '/bar/')
);
$this->assertEquals(
'http://tt-rss.org/bar/',
rewrite_relative_url('http://tt-rss.org/so/what/is/next/', '/bar/')
);
}
/**
* Test rewrite_relative_url() with an absolute URL
*/
public function testRewriteRelativeUrlAbsoluteUrl()
{
$this->assertEquals(
'http://example.org/bar/',
rewrite_relative_url('http://tt-rss.org/foo/', 'http://example.org/bar/')
);
}
}
?>