summaryrefslogtreecommitdiffstats
path: root/3rdparty/fguillot/picofeed/tests/Client
diff options
context:
space:
mode:
Diffstat (limited to '3rdparty/fguillot/picofeed/tests/Client')
-rw-r--r--3rdparty/fguillot/picofeed/tests/Client/ClientTest.php83
-rw-r--r--3rdparty/fguillot/picofeed/tests/Client/CurlTest.php53
-rw-r--r--3rdparty/fguillot/picofeed/tests/Client/FaviconTest.php143
-rw-r--r--3rdparty/fguillot/picofeed/tests/Client/GrabberTest.php60
-rw-r--r--3rdparty/fguillot/picofeed/tests/Client/StreamTest.php63
-rw-r--r--3rdparty/fguillot/picofeed/tests/Client/UrlTest.php220
6 files changed, 622 insertions, 0 deletions
diff --git a/3rdparty/fguillot/picofeed/tests/Client/ClientTest.php b/3rdparty/fguillot/picofeed/tests/Client/ClientTest.php
new file mode 100644
index 000000000..98a963644
--- /dev/null
+++ b/3rdparty/fguillot/picofeed/tests/Client/ClientTest.php
@@ -0,0 +1,83 @@
+<?php
+namespace PicoFeed\Client;
+
+use PHPUnit_Framework_TestCase;
+
+
+class ClientTest extends PHPUnit_Framework_TestCase
+{
+ public function testDownload()
+ {
+ $client = Client::getInstance();
+ $client->setUrl('http://php.net/robots.txt');
+ $client->execute();
+
+ $this->assertTrue($client->isModified());
+ $this->assertNotEmpty($client->getContent());
+ $this->assertNotEmpty($client->getEtag());
+ $this->assertNotEmpty($client->getLastModified());
+ }
+
+
+ public function testCacheEtag()
+ {
+ $client = Client::getInstance();
+ $client->setUrl('http://php.net/robots.txt');
+ $client->execute();
+ $etag = $client->getEtag();
+
+ $client = Client::getInstance();
+ $client->setUrl('http://php.net/robots.txt');
+ $client->setEtag($etag);
+ $client->execute();
+
+ $this->assertFalse($client->isModified());
+ }
+
+
+ public function testCacheLastModified()
+ {
+ $client = Client::getInstance();
+ $client->setUrl('http://miniflux.net/humans.txt');
+ $client->execute();
+ $lastmod = $client->getLastModified();
+
+ $client = Client::getInstance();
+ $client->setUrl('http://miniflux.net/humans.txt');
+ $client->setLastModified($lastmod);
+ $client->execute();
+
+ $this->assertFalse($client->isModified());
+ }
+
+
+ public function testCacheBoth()
+ {
+ $client = Client::getInstance();
+ $client->setUrl('http://miniflux.net/humans.txt');
+ $client->execute();
+ $lastmod = $client->getLastModified();
+ $etag = $client->getEtag();
+
+ $client = Client::getInstance();
+ $client->setUrl('http://miniflux.net/humans.txt');
+ $client->setLastModified($lastmod);
+ $client->setEtag($etag);
+ $client->execute();
+
+ $this->assertFalse($client->isModified());
+ }
+
+ public function testCharset()
+ {
+ $client = Client::getInstance();
+ $client->setUrl('http://php.net/');
+ $client->execute();
+ $this->assertEquals('utf-8', $client->getEncoding());
+
+ $client = Client::getInstance();
+ $client->setUrl('http://php.net/robots.txt');
+ $client->execute();
+ $this->assertEquals('', $client->getEncoding());
+ }
+} \ No newline at end of file
diff --git a/3rdparty/fguillot/picofeed/tests/Client/CurlTest.php b/3rdparty/fguillot/picofeed/tests/Client/CurlTest.php
new file mode 100644
index 000000000..668816036
--- /dev/null
+++ b/3rdparty/fguillot/picofeed/tests/Client/CurlTest.php
@@ -0,0 +1,53 @@
+<?php
+namespace PicoFeed\Client;
+
+use PHPUnit_Framework_TestCase;
+
+
+class CurlTest extends PHPUnit_Framework_TestCase
+{
+ public function testDownload()
+ {
+ $client = new Curl;
+ $client->setUrl('http://miniflux.net/index.html');
+ $result = $client->doRequest();
+
+ $this->assertTrue(is_array($result));
+ $this->assertEquals(200, $result['status']);
+ $this->assertEquals('<!DOC', substr($result['body'], 0, 5));
+ $this->assertEquals('text/html; charset=utf-8', $result['headers']['Content-Type']);
+ }
+
+
+ public function testRedirect()
+ {
+ $client = new Curl;
+ $client->setUrl('http://www.miniflux.net/index.html');
+ $result = $client->doRequest();
+
+ $this->assertTrue(is_array($result));
+ $this->assertEquals(200, $result['status']);
+ $this->assertEquals('<!DOCTYPE', substr($result['body'], 0, 9));
+ $this->assertEquals('text/html; charset=utf-8', $result['headers']['Content-Type']);
+ }
+
+ /**
+ * @expectedException PicoFeed\Client\InvalidCertificateException
+ */
+ public function testSSL()
+ {
+ $client = new Curl;
+ $client->setUrl('https://www.mjvmobile.com.br');
+ $client->doRequest();
+ }
+
+ /**
+ * @expectedException PicoFeed\Client\InvalidUrlException
+ */
+ public function testBadUrl()
+ {
+ $client = new Curl;
+ $client->setUrl('http://12345gfgfgf');
+ $client->doRequest();
+ }
+} \ No newline at end of file
diff --git a/3rdparty/fguillot/picofeed/tests/Client/FaviconTest.php b/3rdparty/fguillot/picofeed/tests/Client/FaviconTest.php
new file mode 100644
index 000000000..c0ac11ac6
--- /dev/null
+++ b/3rdparty/fguillot/picofeed/tests/Client/FaviconTest.php
@@ -0,0 +1,143 @@
+<?php
+namespace PicoFeed\Client;
+
+use PHPUnit_Framework_TestCase;
+
+
+class FaviconTest extends PHPUnit_Framework_TestCase
+{
+ public function testExtract()
+ {
+ $favicon = new Favicon;
+
+ $html = '<!DOCTYPE html><html><head>
+ <link rel="shortcut icon" href="http://example.com/myicon.ico" />
+ </head><body><p>boo</p></body></html>';
+
+ $this->assertEquals(array('http://example.com/myicon.ico'), $favicon->extract($html));
+
+ $html = '<!DOCTYPE html><html><head>
+ <link rel="icon" href="http://example.com/myicon.ico" />
+ </head><body><p>boo</p></body></html>';
+
+ $this->assertEquals(array('http://example.com/myicon.ico'), $favicon->extract($html));
+
+ $html = '<!DOCTYPE html><html><head>
+ <link rel="icon" type="image/vnd.microsoft.icon" href="http://example.com/image.ico" />
+ </head><body><p>boo</p></body></html>';
+
+ $this->assertEquals(array('http://example.com/image.ico'), $favicon->extract($html));
+
+ $html = '<!DOCTYPE html><html><head>
+ <link rel="icon" type="image/png" href="http://example.com/image.png" />
+ </head><body><p>boo</p></body></html>';
+
+ $this->assertEquals(array('http://example.com/image.png'), $favicon->extract($html));
+
+ $html = '<!DOCTYPE html><html><head>
+ <link rel="icon" type="image/gif" href="http://example.com/image.gif" />
+ </head><body><p>boo</p></body></html>';
+
+ $this->assertEquals(array('http://example.com/image.gif'), $favicon->extract($html));
+
+ $html = '<!DOCTYPE html><html><head>
+ <link rel="icon" type="image/x-icon" href="http://example.com/image.ico"/>
+ </head><body><p>boo</p></body></html>';
+
+ $this->assertEquals(array('http://example.com/image.ico'), $favicon->extract($html));
+
+ $html = '<!DOCTYPE html><html><head>
+ <link rel="apple-touch-icon" href="assets/img/touch-icon-iphone.png">
+ <link rel="icon" type="image/png" href="http://example.com/image.png" />
+ <link rel="icon" type="image/x-icon" href="http://example.com/image.ico"/>
+ </head><body><p>boo</p></body></html>';
+
+ $this->assertEquals(array('http://example.com/image.png', 'http://example.com/image.ico'), $favicon->extract($html));
+ }
+/*
+ public function testHasFile()
+ {
+ $favicon = new Favicon;
+ $this->assertTrue($favicon->exists('https://en.wikipedia.org/favicon.ico'));
+ $this->assertFalse($favicon->exists('http://minicoders.com/favicon.ico'));
+ $this->assertFalse($favicon->exists('http://blabla'));
+ }
+*/
+ public function testConvertLink()
+ {
+ $favicon = new Favicon;
+
+ $this->assertEquals(
+ 'http://miniflux.net/assets/img/favicon.png',
+ $favicon->convertLink(new Url('http://miniflux.net'), new Url('assets/img/favicon.png'))
+ );
+
+ $this->assertEquals(
+ 'https://miniflux.net/assets/img/favicon.png',
+ $favicon->convertLink(new Url('https://miniflux.net'), new Url('assets/img/favicon.png'))
+ );
+
+ $this->assertEquals(
+ 'http://google.com/assets/img/favicon.png',
+ $favicon->convertLink(new Url('http://miniflux.net'), new Url('//google.com/assets/img/favicon.png'))
+ );
+
+ $this->assertEquals(
+ 'https://google.com/assets/img/favicon.png',
+ $favicon->convertLink(new Url('https://miniflux.net'), new Url('//google.com/assets/img/favicon.png'))
+ );
+ }
+
+ public function testFind()
+ {
+ $favicon = new Favicon;
+
+ // Relative favicon in html
+ $this->assertEquals(
+ 'http://miniflux.net/assets/img/favicon.png',
+ $favicon->find('http://miniflux.net')
+ );
+
+ $this->assertNotEmpty($favicon->getContent());
+
+ // Absolute html favicon
+ $this->assertEquals(
+ 'http://php.net/favicon.ico',
+ $favicon->find('http://php.net/parse_url')
+ );
+
+ $this->assertNotEmpty($favicon->getContent());
+
+ // Protocol relative favicon
+ $this->assertEquals(
+ 'https://bits.wikimedia.org/favicon/wikipedia.ico',
+ $favicon->find('https://en.wikipedia.org/')
+ );
+
+ $this->assertNotEmpty($favicon->getContent());
+
+ // fluid-icon + https
+ $this->assertEquals(
+ 'https://github.com/fluidicon.png',
+ $favicon->find('https://github.com')
+ );
+
+ $this->assertNotEmpty($favicon->getContent());
+
+ // favicon in meta
+ $this->assertEquals(
+ 'http://www.microsoft.com/favicon.ico?v2',
+ $favicon->find('http://www.microsoft.com')
+ );
+
+ $this->assertNotEmpty($favicon->getContent());
+
+ // no icon
+ $this->assertEquals(
+ '',
+ $favicon->find('http://minicoders.com/favicon.ico')
+ );
+
+ $this->assertEmpty($favicon->getContent());
+ }
+}
diff --git a/3rdparty/fguillot/picofeed/tests/Client/GrabberTest.php b/3rdparty/fguillot/picofeed/tests/Client/GrabberTest.php
new file mode 100644
index 000000000..5aec5ca11
--- /dev/null
+++ b/3rdparty/fguillot/picofeed/tests/Client/GrabberTest.php
@@ -0,0 +1,60 @@
+<?php
+namespace PicoFeed\Client;
+
+use PHPUnit_Framework_TestCase;
+
+use PicoFeed\Reader\Reader;
+use PicoFeed\Logging\Logging;
+
+class GrabberTest extends PHPUnit_Framework_TestCase
+{
+ public function testGrabContentWithCandidates()
+ {
+ $grabber = new Grabber('http://theonion.com.feedsportal.com/c/34529/f/632231/s/309a7fe4/sc/20/l/0L0Stheonion0N0Carticles0Cobama0Ethrows0Eup0Eright0Ethere0Eduring0Esyria0Emeeting0H336850C/story01.htm');
+ $grabber->download();
+ $this->assertTrue($grabber->parse());
+
+ $grabber = new Grabber('http://www.lemonde.fr/proche-orient/article/2013/08/30/la-france-nouvelle-plus-ancienne-alliee-des-etats-unis_3469218_3218.html');
+ $grabber->download();
+ $this->assertTrue($grabber->parse());
+
+ $grabber = new Grabber('http://www.rue89.com/2013/08/30/faisait-boris-boillon-ex-sarko-boy-350-000-euros-gare-nord-245315');
+ $grabber->download();
+ $this->assertTrue($grabber->parse());
+
+ $grabber = new Grabber('http://www.inc.com/suzanne-lucas/why-employee-turnover-is-so-costly.html');
+ $grabber->download();
+ $this->assertTrue($grabber->parse());
+
+ $grabber = new Grabber('http://arstechnica.com/information-technology/2013/08/sysadmin-security-fail-nsa-finds-snowden-hijacked-officials-logins/');
+ $grabber->download();
+ $this->assertTrue($grabber->parse());
+ }
+
+ public function testGetRules()
+ {
+ $grabber = new Grabber('http://www.egscomics.com/index.php?id=1690');
+ $this->assertTrue(is_array($grabber->getRules()));
+ }
+
+ public function testGrabContent()
+ {
+ $grabber = new Grabber('http://www.egscomics.com/index.php?id=1690');
+ $grabber->download();
+ $this->assertTrue($grabber->parse());
+
+ $this->assertEquals('<img title="2013-08-22" src="comics/../comics/1377151029-2013-08-22.png" id="comic" border="0" />', $grabber->getContent());
+ }
+
+ public function testRssGrabContent()
+ {
+ $reader = new Reader;
+ $client = $reader->download('http://www.egscomics.com/rss.php');
+ $parser = $reader->getParser($client->getUrl(), $client->getContent(), $client->getEncoding());
+ $parser->enableContentGrabber();
+ $feed = $parser->execute();
+
+ $this->assertTrue(is_array($feed->items));
+ $this->assertTrue(strpos($feed->items[0]->content, '<img') >= 0);
+ }
+}
diff --git a/3rdparty/fguillot/picofeed/tests/Client/StreamTest.php b/3rdparty/fguillot/picofeed/tests/Client/StreamTest.php
new file mode 100644
index 000000000..8b2e2f8b8
--- /dev/null
+++ b/3rdparty/fguillot/picofeed/tests/Client/StreamTest.php
@@ -0,0 +1,63 @@
+<?php
+namespace PicoFeed\Client;
+
+use PHPUnit_Framework_TestCase;
+
+
+class StreamTest extends PHPUnit_Framework_TestCase
+{
+ public function testChunkedResponse()
+ {
+ $client = new Stream;
+ $client->setUrl('http://www.reddit.com/r/dwarffortress/.rss');
+ $result = $client->doRequest();
+
+ $this->assertEquals('</rss>', substr($result['body'], -6));
+ }
+
+ public function testDownload()
+ {
+ $client = new Stream;
+ $client->setUrl('https://github.com/fguillot/picoFeed');
+ $result = $client->doRequest();
+
+ $this->assertEquals(200, $result['status']);
+ $this->assertEquals('text/html; charset=utf-8', $result['headers']['Content-Type']);
+ $this->assertEquals('<!DOCTYPE html>', substr(trim($result['body']), 0, 15));
+ $this->assertEquals('</html>', substr(trim($result['body']), -7));
+ }
+
+ public function testRedirect()
+ {
+ $client = new Stream;
+ $client->setUrl('http://github.com/fguillot/picoFeed');
+ $result = $client->doRequest();
+
+ $this->assertEquals(200, $result['status']);
+ $this->assertEquals('<!DOCTYPE html>', substr(trim($result['body']), 0, 15));
+ $this->assertEquals('text/html; charset=utf-8', $result['headers']['Content-Type']);
+ }
+
+ /**
+ * @expectedException PicoFeed\Client\InvalidUrlException
+ */
+ public function testBadUrl()
+ {
+ $client = new Stream;
+ $client->setUrl('http://12345gfgfgf');
+ $client->setTimeout(1);
+ $client->doRequest();
+ }
+
+ public function testDecodeGzip()
+ {
+ if (function_exists('gzdecode')) {
+ $client = new Stream;
+ $client->setUrl('https://github.com/fguillot/picoFeed');
+ $result = $client->doRequest();
+
+ $this->assertEquals('gzip', $result['headers']['Content-Encoding']);
+ $this->assertEquals('<!DOC', substr(trim($result['body']), 0, 5));
+ }
+ }
+} \ No newline at end of file
diff --git a/3rdparty/fguillot/picofeed/tests/Client/UrlTest.php b/3rdparty/fguillot/picofeed/tests/Client/UrlTest.php
new file mode 100644
index 000000000..a07898778
--- /dev/null
+++ b/3rdparty/fguillot/picofeed/tests/Client/UrlTest.php
@@ -0,0 +1,220 @@
+<?php
+namespace PicoFeed\Client;
+
+use PHPUnit_Framework_TestCase;
+
+
+class UrlTest extends PHPUnit_Framework_TestCase
+{
+ public function testHasScheme()
+ {
+ $url = new Url('http://www.google.fr/');
+ $this->assertTrue($url->hasScheme());
+
+ $url = new Url('//www.google.fr/');
+ $this->assertFalse($url->hasScheme());
+
+ $url = new Url('/path');
+ $this->assertFalse($url->hasScheme());
+
+ $url = new Url('anything');
+ $this->assertFalse($url->hasScheme());
+ }
+
+ public function testHasPort()
+ {
+ $url = new Url('http://127.0.0.1:8000/');
+ $this->assertTrue($url->hasPort());
+
+ $url = new Url('http://127.0.0.1/');
+ $this->assertFalse($url->hasPort());
+ }
+
+ public function testIsProtocolRelative()
+ {
+ $url = new Url('http://www.google.fr/');
+ $this->assertFalse($url->isProtocolRelative());
+
+ $url = new Url('//www.google.fr/');
+ $this->assertTrue($url->isProtocolRelative());
+
+ $url = new Url('/path');
+ $this->assertFalse($url->isProtocolRelative());
+
+ $url = new Url('anything');
+ $this->assertFalse($url->isProtocolRelative());
+ }
+
+ public function testBaseUrl()
+ {
+ $url = new Url('../bla');
+ $this->assertEquals('', $url->getBaseUrl());
+
+ $url = new Url('github.com');
+ $this->assertEquals('', $url->getBaseUrl());
+
+ $url = new Url('http://127.0.0.1:8000');
+ $this->assertEquals('http://127.0.0.1:8000', $url->getBaseUrl());
+
+ $url = new Url('http://127.0.0.1:8000/test?123');
+ $this->assertEquals('http://127.0.0.1:8000', $url->getBaseUrl());
+
+ $url = new Url('http://localhost/test');
+ $this->assertEquals('http://localhost', $url->getBaseUrl());
+
+ $url = new Url('https://localhost/test');
+ $this->assertEquals('https://localhost', $url->getBaseUrl());
+
+ $url = new Url('//localhost/test?truc');
+ $this->assertEquals('http://localhost', $url->getBaseUrl());
+ }
+
+ public function testIsRelativeUrl()
+ {
+ $url = new Url('http://www.google.fr/');
+ $this->assertFalse($url->isRelativeUrl());
+
+ $url = new Url('//www.google.fr/');
+ $this->assertFalse($url->isRelativeUrl());
+
+ $url = new Url('/path');
+ $this->assertTrue($url->isRelativeUrl());
+
+ $url = new Url('../../path');
+ $this->assertTrue($url->isRelativeUrl());
+
+ $url = new Url('anything');
+ $this->assertTrue($url->isRelativeUrl());
+
+ $url = new Url('/2014/08/03/4668-noisettes');
+ $this->assertTrue($url->isRelativeUrl());
+
+ $url = new Url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAUA
+AAAFCAYAAACNbyblAAAAHElEQVQI12P4//8/w38GIAXDIBKE0DHxgljNBAAO
+9TXL0Y4OHwAAAABJRU5ErkJggg==');
+ $this->assertFalse($url->isRelativeUrl());
+ }
+
+ public function testGetFullPath()
+ {
+ $url = new Url('http://www.google.fr/');
+ $this->assertEquals('/', $url->getFullPath());
+
+ $url = new Url('//www.google.fr/search');
+ $this->assertEquals('/search', $url->getFullPath());
+
+ $url = new Url('/path');
+ $this->assertEquals('/path', $url->getFullPath());
+
+ $url = new Url('/path#test');
+ $this->assertEquals('/path#test', $url->getFullPath());
+
+ $url = new Url('anything');
+ $this->assertEquals('/anything', $url->getFullPath());
+
+ $url = new Url('index.php?foo=bar&test=1');
+ $this->assertEquals('/index.php?foo=bar&test=1', $url->getFullPath());
+ }
+
+ public function testAbsoluteUrl()
+ {
+ $url = new Url('http://google.fr/');
+ $this->assertEquals('http://google.fr/', $url->getAbsoluteUrl());
+
+ $url = new Url('http://google.ca');
+ $this->assertEquals('http://google.ca/', $url->getAbsoluteUrl());
+
+ $url = new Url('../bla');
+ $this->assertEquals('', $url->getAbsoluteUrl(''));
+
+ $url = new Url('/2014/08/03/4668-noisettes');
+ $this->assertEquals('http://www.la-grange.net/2014/08/03/4668-noisettes', $url->getAbsoluteUrl('http://www.la-grange.net/'));
+
+ $url = new Url('http://www.google.fr/../bla');
+ $this->assertEquals('http://www.google.fr/../bla', $url->getAbsoluteUrl('http://www.google.fr/'));
+
+ $url = new Url('http://www.google.fr/');
+ $this->assertEquals('http://www.google.fr/', $url->getAbsoluteUrl('http://www.google.fr/'));
+
+ $url = new Url('//www.google.fr/search');
+ $this->assertEquals('http://www.google.fr/search', $url->getAbsoluteUrl('//www.google.fr/'));
+
+ $url = new Url('//www.google.fr/search');
+ $this->assertEquals('http://www.google.fr/search', $url->getAbsoluteUrl());
+
+ $url = new Url('/path');
+ $this->assertEquals('http://www.google.fr/path', $url->getAbsoluteUrl('http://www.google.fr/'));
+
+ $url = new Url('/path#test');
+ $this->assertEquals('http://www.google.fr/path#test', $url->getAbsoluteUrl('http://www.google.fr/'));
+
+ $url = new Url('anything');
+ $this->assertEquals('http://www.google.fr/anything', $url->getAbsoluteUrl('http://www.google.fr/'));
+
+ $url = new Url('index.php?foo=bar&test=1');
+ $this->assertEquals('http://www.google.fr/index.php?foo=bar&test=1', $url->getAbsoluteUrl('http://www.google.fr/'));
+
+ $url = new Url('index.php?foo=bar&test=1');
+ $this->assertEquals('', $url->getAbsoluteUrl());
+
+ $url = new Url('https://127.0.0.1:8000/here/test?v=3');
+ $this->assertEquals('https://127.0.0.1:8000/here/test?v=3', $url->getAbsoluteUrl());
+
+ $url = new Url('test?v=3');
+ $this->assertEquals('https://127.0.0.1:8000/here/test?v=3', $url->getAbsoluteUrl('https://127.0.0.1:8000/here/'));
+ }
+
+ public function testIsRelativePath()
+ {
+ $url = new Url('');
+ $this->assertTrue($url->isRelativePath());
+
+ $url = new Url('http://google.fr');
+ $this->assertTrue($url->isRelativePath());
+
+ $url = new Url('filename.json');
+ $this->assertTrue($url->isRelativePath());
+
+ $url = new Url('folder/filename.json');
+ $this->assertTrue($url->isRelativePath());
+
+ $url = new Url('/filename.json');
+ $this->assertFalse($url->isRelativePath());
+
+ $url = new Url('/folder/filename.json');
+ $this->assertFalse($url->isRelativePath());
+ }
+
+ public function testResolve()
+ {
+ $this->assertEquals(
+ 'http://www.la-grange.net/2014/08/03/4668-noisettes',
+ Url::resolve('/2014/08/03/4668-noisettes', 'http://www.la-grange.net')
+ );
+
+ $this->assertEquals(
+ 'http://www.la-grange.net/2014/08/03/4668-noisettes',
+ Url::resolve('/2014/08/03/4668-noisettes', 'http://www.la-grange.net/')
+ );
+
+ $this->assertEquals(
+ 'http://www.la-grange.net/2014/08/03/4668-noisettes',
+ Url::resolve('/2014/08/03/4668-noisettes', 'http://www.la-grange.net/feed.atom')
+ );
+
+ $this->assertEquals(
+ 'http://what-if.xkcd.com/imgs/a/112/driving.png',
+ Url::resolve('/imgs/a/112/driving.png', 'http://what-if.xkcd.com/feed.atom')
+ );
+
+ $this->assertEquals(
+ 'http://website/subfolder/img/foo.png',
+ Url::resolve('img/foo.png', 'http://website/subfolder/')
+ );
+
+ $this->assertEquals(
+ 'http://website/img/foo.png',
+ Url::resolve('/img/foo.png', 'http://website/subfolder/')
+ );
+ }
+}