diff options
author | ArthurHoaro <arthur@hoa.ro> | 2016-05-10 23:18:04 +0200 |
---|---|---|
committer | ArthurHoaro <arthur@hoa.ro> | 2016-06-06 21:04:43 +0200 |
commit | 9ccca40189652e529732683abcdf54fcf775c9ec (patch) | |
tree | 9deda85d287dcba664bbba2f0bf9228e6118fbad /tests/LinkUtilsTest.php | |
parent | bb9ca54838e2f877635197541e8439171c83d5dc (diff) | |
download | Shaarli-9ccca40189652e529732683abcdf54fcf775c9ec.tar.gz Shaarli-9ccca40189652e529732683abcdf54fcf775c9ec.tar.zst Shaarli-9ccca40189652e529732683abcdf54fcf775c9ec.zip |
Hashtag system
* Hashtag are auto-linked with a filter search
* Supports unicode
* Compatible with markdown (excluded in code blocks)
Diffstat (limited to 'tests/LinkUtilsTest.php')
-rw-r--r-- | tests/LinkUtilsTest.php | 88 |
1 files changed, 88 insertions, 0 deletions
diff --git a/tests/LinkUtilsTest.php b/tests/LinkUtilsTest.php index d1b022fd..7c0d4b0b 100644 --- a/tests/LinkUtilsTest.php +++ b/tests/LinkUtilsTest.php | |||
@@ -93,4 +93,92 @@ class LinkUtilsTest extends PHPUnit_Framework_TestCase | |||
93 | $refDB = new ReferenceLinkDB(); | 93 | $refDB = new ReferenceLinkDB(); |
94 | $this->assertEquals($refDB->countPrivateLinks(), count_private($refDB->getLinks())); | 94 | $this->assertEquals($refDB->countPrivateLinks(), count_private($refDB->getLinks())); |
95 | } | 95 | } |
96 | |||
97 | /** | ||
98 | * Test text2clickable without a redirector being set. | ||
99 | */ | ||
100 | public function testText2clickableWithoutRedirector() | ||
101 | { | ||
102 | $text = 'stuff http://hello.there/is=someone#here otherstuff'; | ||
103 | $expectedText = 'stuff <a href="http://hello.there/is=someone#here">http://hello.there/is=someone#here</a> otherstuff'; | ||
104 | $processedText = text2clickable($text, ''); | ||
105 | $this->assertEquals($expectedText, $processedText); | ||
106 | } | ||
107 | |||
108 | /** | ||
109 | * Test text2clickable a redirector set. | ||
110 | */ | ||
111 | public function testText2clickableWithRedirector() | ||
112 | { | ||
113 | $text = 'stuff http://hello.there/is=someone#here otherstuff'; | ||
114 | $redirector = 'http://redirector.to'; | ||
115 | $expectedText = 'stuff <a href="'. | ||
116 | $redirector . | ||
117 | urlencode('http://hello.there/is=someone#here') . | ||
118 | '">http://hello.there/is=someone#here</a> otherstuff'; | ||
119 | $processedText = text2clickable($text, $redirector); | ||
120 | $this->assertEquals($expectedText, $processedText); | ||
121 | } | ||
122 | |||
123 | /** | ||
124 | * Test testSpace2nbsp. | ||
125 | */ | ||
126 | public function testSpace2nbsp() | ||
127 | { | ||
128 | $text = ' Are you thrilled by flags ?'. PHP_EOL .' Really?'; | ||
129 | $expectedText = ' Are you thrilled by flags ?'. PHP_EOL .' Really?'; | ||
130 | $processedText = space2nbsp($text); | ||
131 | $this->assertEquals($expectedText, $processedText); | ||
132 | } | ||
133 | |||
134 | /** | ||
135 | * Test hashtags auto-link. | ||
136 | */ | ||
137 | public function testHashtagAutolink() | ||
138 | { | ||
139 | $index = 'http://domain.tld/'; | ||
140 | $rawDescription = '#hashtag\n | ||
141 | # nothashtag\n | ||
142 | test#nothashtag #hashtag \#nothashtag\n | ||
143 | test #hashtag #hashtag test #hashtag.test\n | ||
144 | #hashtag #hashtag-nothashtag #hashtag_hashtag\n | ||
145 | What is #ашок anyway?\n | ||
146 | カタカナ #カタカナ」カタカナ\n'; | ||
147 | $autolinkedDescription = hashtag_autolink($rawDescription, $index); | ||
148 | |||
149 | $this->assertContains($this->getHashtagLink('hashtag', $index), $autolinkedDescription); | ||
150 | $this->assertNotContains(' #hashtag', $autolinkedDescription); | ||
151 | $this->assertNotContains('>#nothashtag', $autolinkedDescription); | ||
152 | $this->assertContains($this->getHashtagLink('ашок', $index), $autolinkedDescription); | ||
153 | $this->assertContains($this->getHashtagLink('カタカナ', $index), $autolinkedDescription); | ||
154 | $this->assertContains($this->getHashtagLink('hashtag_hashtag', $index), $autolinkedDescription); | ||
155 | $this->assertNotContains($this->getHashtagLink('hashtag-nothashtag', $index), $autolinkedDescription); | ||
156 | } | ||
157 | |||
158 | /** | ||
159 | * Test hashtags auto-link without index URL. | ||
160 | */ | ||
161 | public function testHashtagAutolinkNoIndex() | ||
162 | { | ||
163 | $rawDescription = 'blabla #hashtag x#nothashtag'; | ||
164 | $autolinkedDescription = hashtag_autolink($rawDescription); | ||
165 | |||
166 | $this->assertContains($this->getHashtagLink('hashtag'), $autolinkedDescription); | ||
167 | $this->assertNotContains(' #hashtag', $autolinkedDescription); | ||
168 | $this->assertNotContains('>#nothashtag', $autolinkedDescription); | ||
169 | } | ||
170 | |||
171 | /** | ||
172 | * Util function to build an hashtag link. | ||
173 | * | ||
174 | * @param string $hashtag Hashtag name. | ||
175 | * @param string $index Index URL. | ||
176 | * | ||
177 | * @return string HTML hashtag link. | ||
178 | */ | ||
179 | private function getHashtagLink($hashtag, $index = '') | ||
180 | { | ||
181 | $hashtagLink = '<a href="'. $index .'?addtag=$1" title="Hashtag $1">#$1</a>'; | ||
182 | return str_replace('$1', $hashtag, $hashtagLink); | ||
183 | } | ||
96 | } | 184 | } |