From fe3713d2e5c91e2d07af72b39f321521d3dd470c Mon Sep 17 00:00:00 2001 From: VirtualTam Date: Mon, 3 Dec 2018 01:35:14 +0100 Subject: namespacing: move LinkUtils along \Shaarli\Bookmark classes Signed-off-by: VirtualTam --- tests/LinkUtilsTest.php | 421 ----------------------------------- tests/bookmark/LinkUtilsTest.php | 333 +++++++++++++++++++++++++++ tests/plugins/PluginMarkdownTest.php | 1 + tests/utils/CurlUtils.php | 94 ++++++++ 4 files changed, 428 insertions(+), 421 deletions(-) delete mode 100644 tests/LinkUtilsTest.php create mode 100644 tests/bookmark/LinkUtilsTest.php create mode 100644 tests/utils/CurlUtils.php (limited to 'tests') diff --git a/tests/LinkUtilsTest.php b/tests/LinkUtilsTest.php deleted file mode 100644 index 5407159a..00000000 --- a/tests/LinkUtilsTest.php +++ /dev/null @@ -1,421 +0,0 @@ -stuff'. $title .''; - $this->assertEquals($title, html_extract_title($html)); - $html = ''. $title .'blablaanother'; - $this->assertEquals($title, html_extract_title($html)); - } - - /** - * Test html_extract_title() when the title is not found. - */ - public function testHtmlExtractNonExistentTitle() - { - $html = 'stuff'; - $this->assertFalse(html_extract_title($html)); - } - - /** - * Test headers_extract_charset() when the charset is found. - */ - public function testHeadersExtractExistentCharset() - { - $charset = 'x-MacCroatian'; - $headers = 'text/html; charset='. $charset; - $this->assertEquals(strtolower($charset), header_extract_charset($headers)); - } - - /** - * Test headers_extract_charset() when the charset is not found. - */ - public function testHeadersExtractNonExistentCharset() - { - $headers = ''; - $this->assertFalse(header_extract_charset($headers)); - - $headers = 'text/html'; - $this->assertFalse(header_extract_charset($headers)); - } - - /** - * Test html_extract_charset() when the charset is found. - */ - public function testHtmlExtractExistentCharset() - { - $charset = 'x-MacCroatian'; - $html = 'stuff2'; - $this->assertEquals(strtolower($charset), html_extract_charset($html)); - } - - /** - * Test html_extract_charset() when the charset is not found. - */ - public function testHtmlExtractNonExistentCharset() - { - $html = 'stuff'; - $this->assertFalse(html_extract_charset($html)); - $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'; - } -} diff --git a/tests/bookmark/LinkUtilsTest.php b/tests/bookmark/LinkUtilsTest.php new file mode 100644 index 00000000..1b8688e6 --- /dev/null +++ b/tests/bookmark/LinkUtilsTest.php @@ -0,0 +1,333 @@ +stuff' . $title . ''; + $this->assertEquals($title, html_extract_title($html)); + $html = '' . $title . 'blablaanother'; + $this->assertEquals($title, html_extract_title($html)); + } + + /** + * Test html_extract_title() when the title is not found. + */ + public function testHtmlExtractNonExistentTitle() + { + $html = 'stuff'; + $this->assertFalse(html_extract_title($html)); + } + + /** + * Test headers_extract_charset() when the charset is found. + */ + public function testHeadersExtractExistentCharset() + { + $charset = 'x-MacCroatian'; + $headers = 'text/html; charset=' . $charset; + $this->assertEquals(strtolower($charset), header_extract_charset($headers)); + } + + /** + * Test headers_extract_charset() when the charset is not found. + */ + public function testHeadersExtractNonExistentCharset() + { + $headers = ''; + $this->assertFalse(header_extract_charset($headers)); + + $headers = 'text/html'; + $this->assertFalse(header_extract_charset($headers)); + } + + /** + * Test html_extract_charset() when the charset is found. + */ + public function testHtmlExtractExistentCharset() + { + $charset = 'x-MacCroatian'; + $html = 'stuff2'; + $this->assertEquals(strtolower($charset), html_extract_charset($html)); + } + + /** + * Test html_extract_charset() when the charset is not found. + */ + public function testHtmlExtractNonExistentCharset() + { + $html = 'stuff'; + $this->assertFalse(html_extract_charset($html)); + $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); + } +} diff --git a/tests/plugins/PluginMarkdownTest.php b/tests/plugins/PluginMarkdownTest.php index 44364b05..d6951866 100644 --- a/tests/plugins/PluginMarkdownTest.php +++ b/tests/plugins/PluginMarkdownTest.php @@ -5,6 +5,7 @@ use Shaarli\Config\ConfigManager; * PluginMarkdownTest.php */ +require_once 'application/bookmark/LinkUtils.php'; require_once 'application/Utils.php'; require_once 'plugins/markdown/markdown.php'; diff --git a/tests/utils/CurlUtils.php b/tests/utils/CurlUtils.php new file mode 100644 index 00000000..1cc4907e --- /dev/null +++ b/tests/utils/CurlUtils.php @@ -0,0 +1,94 @@ +