X-Git-Url: https://git.immae.eu/?a=blobdiff_plain;f=tests%2FLinkUtilsTest.php;h=5407159a04c37ed9908aa7fcb063c576b4fd8475;hb=1004742f09b55ff781c13745781b9a7e90986faa;hp=609a80cbe6b223f25b7060389f55e7ae807d26f3;hpb=5816801b15e1a0e53f87aa48267243bff44b5f64;p=github%2Fshaarli%2FShaarli.git diff --git a/tests/LinkUtilsTest.php b/tests/LinkUtilsTest.php index 609a80cb..5407159a 100644 --- a/tests/LinkUtilsTest.php +++ b/tests/LinkUtilsTest.php @@ -28,28 +28,14 @@ class LinkUtilsTest extends PHPUnit_Framework_TestCase $this->assertFalse(html_extract_title($html)); } - /** - * Test get_charset() with all priorities. - */ - public function testGetCharset() - { - $headers = array('Content-Type' => 'text/html; charset=Headers'); - $html = 'stuff'; - $default = 'default'; - $this->assertEquals('headers', get_charset($headers, $html, $default)); - $this->assertEquals('html', get_charset(array(), $html, $default)); - $this->assertEquals($default, get_charset(array(), '', $default)); - $this->assertEquals('utf-8', get_charset(array(), '')); - } - /** * Test headers_extract_charset() when the charset is found. */ public function testHeadersExtractExistentCharset() { $charset = 'x-MacCroatian'; - $headers = array('Content-Type' => 'text/html; charset='. $charset); - $this->assertEquals(strtolower($charset), headers_extract_charset($headers)); + $headers = 'text/html; charset='. $charset; + $this->assertEquals(strtolower($charset), header_extract_charset($headers)); } /** @@ -57,11 +43,11 @@ class LinkUtilsTest extends PHPUnit_Framework_TestCase */ public function testHeadersExtractNonExistentCharset() { - $headers = array(); - $this->assertFalse(headers_extract_charset($headers)); + $headers = ''; + $this->assertFalse(header_extract_charset($headers)); - $headers = array('Content-Type' => 'text/html'); - $this->assertFalse(headers_extract_charset($headers)); + $headers = 'text/html'; + $this->assertFalse(header_extract_charset($headers)); } /** @@ -84,4 +70,352 @@ class LinkUtilsTest extends PHPUnit_Framework_TestCase $html = 'stuff'; $this->assertFalse(html_extract_charset($html)); } + + /** + * Test the download callback with valid value + */ + public function testCurlDownloadCallbackOk() + { + $callback = get_curl_download_callback($charset, $title, 'ut_curl_getinfo_ok'); + $data = [ + 'HTTP/1.1 200 OK', + 'Server: GitHub.com', + 'Date: Sat, 28 Oct 2017 12:01:33 GMT', + 'Content-Type: text/html; charset=utf-8', + 'Status: 200 OK', + 'end' => 'th=device-width">' + .'Refactoring · GitHub' + .'' + .'Refactoring · GitHub' + .'', + 'end' => 'th=device-width">' + .'Refactoring · GitHub' + .'Refactoring · GitHub' + .'http://hello.there/is=someone#here otherstuff'; + $processedText = text2clickable($text, ''); + $this->assertEquals($expectedText, $processedText); + + $text = 'stuff http://hello.there/is=someone#here(please) otherstuff'; + $expectedText = 'stuff ' + .'http://hello.there/is=someone#here(please) otherstuff'; + $processedText = text2clickable($text, ''); + $this->assertEquals($expectedText, $processedText); + + $text = 'stuff http://hello.there/is=someone#here(please)&no otherstuff'; + $expectedText = 'stuff ' + .'http://hello.there/is=someone#here(please)&no otherstuff'; + $processedText = text2clickable($text, ''); + $this->assertEquals($expectedText, $processedText); + } + + /** + * Test text2clickable with a redirector set. + */ + public function testText2clickableWithRedirector() + { + $text = 'stuff http://hello.there/is=someone#here otherstuff'; + $redirector = 'http://redirector.to'; + $expectedText = 'stuff http://hello.there/is=someone#here otherstuff'; + $processedText = text2clickable($text, $redirector); + $this->assertEquals($expectedText, $processedText); + } + + /** + * Test text2clickable a redirector set and without URL encode. + */ + public function testText2clickableWithRedirectorDontEncode() + { + $text = 'stuff http://hello.there/?is=someone&or=something#here otherstuff'; + $redirector = 'http://redirector.to'; + $expectedText = 'stuff http://hello.there/?is=someone&or=something#here otherstuff'; + $processedText = text2clickable($text, $redirector, false); + $this->assertEquals($expectedText, $processedText); + } + + /** + * Test testSpace2nbsp. + */ + public function testSpace2nbsp() + { + $text = ' Are you thrilled by flags ?'. PHP_EOL .' Really?'; + $expectedText = '  Are you   thrilled  by flags   ?'. PHP_EOL .' Really?'; + $processedText = space2nbsp($text); + $this->assertEquals($expectedText, $processedText); + } + + /** + * Test hashtags auto-link. + */ + public function testHashtagAutolink() + { + $index = 'http://domain.tld/'; + $rawDescription = '#hashtag\n + # nothashtag\n + test#nothashtag #hashtag \#nothashtag\n + test #hashtag #hashtag test #hashtag.test\n + #hashtag #hashtag-nothashtag #hashtag_hashtag\n + What is #ашок anyway?\n + カタカナ #カタカナ」カタカナ\n'; + $autolinkedDescription = hashtag_autolink($rawDescription, $index); + + $this->assertContains($this->getHashtagLink('hashtag', $index), $autolinkedDescription); + $this->assertNotContains(' #hashtag', $autolinkedDescription); + $this->assertNotContains('>#nothashtag', $autolinkedDescription); + $this->assertContains($this->getHashtagLink('ашок', $index), $autolinkedDescription); + $this->assertContains($this->getHashtagLink('カタカナ', $index), $autolinkedDescription); + $this->assertContains($this->getHashtagLink('hashtag_hashtag', $index), $autolinkedDescription); + $this->assertNotContains($this->getHashtagLink('hashtag-nothashtag', $index), $autolinkedDescription); + } + + /** + * Test hashtags auto-link without index URL. + */ + public function testHashtagAutolinkNoIndex() + { + $rawDescription = 'blabla #hashtag x#nothashtag'; + $autolinkedDescription = hashtag_autolink($rawDescription); + + $this->assertContains($this->getHashtagLink('hashtag'), $autolinkedDescription); + $this->assertNotContains(' #hashtag', $autolinkedDescription); + $this->assertNotContains('>#nothashtag', $autolinkedDescription); + } + + /** + * Util function to build an hashtag link. + * + * @param string $hashtag Hashtag name. + * @param string $index Index URL. + * + * @return string HTML hashtag link. + */ + private function getHashtagLink($hashtag, $index = '') + { + $hashtagLink = '#$1'; + return str_replace('$1', $hashtag, $hashtagLink); + } +} + +// old style mock: PHPUnit doesn't allow function mock + +/** + * Returns code 200 or html content type. + * + * @param resource $ch cURL resource + * @param int $type cURL info type + * + * @return int|string 200 or 'text/html' + */ +function ut_curl_getinfo_ok($ch, $type) +{ + switch ($type) { + case CURLINFO_RESPONSE_CODE: + return 200; + case CURLINFO_CONTENT_TYPE: + return 'text/html; charset=utf-8'; + } +} + +/** + * Returns code 200 or html content type without charset. + * + * @param resource $ch cURL resource + * @param int $type cURL info type + * + * @return int|string 200 or 'text/html' + */ +function ut_curl_getinfo_no_charset($ch, $type) +{ + switch ($type) { + case CURLINFO_RESPONSE_CODE: + return 200; + case CURLINFO_CONTENT_TYPE: + return 'text/html'; + } +} + +/** + * Invalid response code. + * + * @param resource $ch cURL resource + * @param int $type cURL info type + * + * @return int|string 404 or 'text/html' + */ +function ut_curl_getinfo_rc_ko($ch, $type) +{ + switch ($type) { + case CURLINFO_RESPONSE_CODE: + return 404; + case CURLINFO_CONTENT_TYPE: + return 'text/html; charset=utf-8'; + } +} + +/** + * Invalid content type. + * + * @param resource $ch cURL resource + * @param int $type cURL info type + * + * @return int|string 200 or 'text/plain' + */ +function ut_curl_getinfo_ct_ko($ch, $type) +{ + switch ($type) { + case CURLINFO_RESPONSE_CODE: + return 200; + case CURLINFO_CONTENT_TYPE: + return 'text/plain'; + } +} + +/** + * Invalid response code and content type. + * + * @param resource $ch cURL resource + * @param int $type cURL info type + * + * @return int|string 404 or 'text/plain' + */ +function ut_curl_getinfo_rs_ct_ko($ch, $type) +{ + switch ($type) { + case CURLINFO_RESPONSE_CODE: + return 404; + case CURLINFO_CONTENT_TYPE: + return 'text/plain'; + } }