3 require_once 'application/LinkFilter.php';
6 * Class LinkFilterTest.
8 class LinkFilterTest
extends PHPUnit_Framework_TestCase
11 * @var LinkFilter instance.
13 protected static $linkFilter;
16 * Instanciate linkFilter with ReferenceLinkDB data.
18 public static function setUpBeforeClass()
20 $refDB = new ReferenceLinkDB();
21 self
::$linkFilter = new LinkFilter($refDB->getLinks());
27 public function testFilter()
31 count(self
::$linkFilter->filter('', ''))
37 count(self
::$linkFilter->filter('', '', false, true))
42 * Filter links using a tag
44 public function testFilterOneTag()
48 count(self
::$linkFilter->filter(LinkFilter
::$FILTER_TAG, 'web', false))
54 count(self
::$linkFilter->filter(LinkFilter
::$FILTER_TAG, 'web', false, true))
59 * Filter links using a tag - case-sensitive
61 public function testFilterCaseSensitiveTag()
65 count(self
::$linkFilter->filter(LinkFilter
::$FILTER_TAG, 'mercurial', true))
70 count(self
::$linkFilter->filter(LinkFilter
::$FILTER_TAG, 'Mercurial', true))
75 * Filter links using a tag combination
77 public function testFilterMultipleTags()
81 count(self
::$linkFilter->filter(LinkFilter
::$FILTER_TAG, 'dev cartoon', false))
86 * Filter links using a non-existent tag
88 public function testFilterUnknownTag()
92 count(self
::$linkFilter->filter(LinkFilter
::$FILTER_TAG, 'null', false))
97 * Return links for a given day
99 public function testFilterDay()
103 count(self
::$linkFilter->filter(LinkFilter
::$FILTER_DAY, '20121206'))
108 * 404 - day not found
110 public function testFilterUnknownDay()
114 count(self
::$linkFilter->filter(LinkFilter
::$FILTER_DAY, '19700101'))
119 * Use an invalid date format
120 * @expectedException Exception
121 * @expectedExceptionMessageRegExp /Invalid date format/
123 public function testFilterInvalidDayWithChars()
125 self
::$linkFilter->filter(LinkFilter
::$FILTER_DAY, 'Rainy day, dream away');
129 * Use an invalid date format
130 * @expectedException Exception
131 * @expectedExceptionMessageRegExp /Invalid date format/
133 public function testFilterInvalidDayDigits()
135 self
::$linkFilter->filter(LinkFilter
::$FILTER_DAY, '20');
139 * Retrieve a link entry with its hash
141 public function testFilterSmallHash()
143 $links = self
::$linkFilter->filter(LinkFilter
::$FILTER_HASH, 'IuWvgA');
152 $links['20130614_184135']['title']
157 * No link for this hash
159 public function testFilterUnknownSmallHash()
163 count(self
::$linkFilter->filter(LinkFilter
::$FILTER_HASH, 'Iblaah'))
168 * Full-text search - no result found.
170 public function testFilterFullTextNoResult()
174 count(self
::$linkFilter->filter(LinkFilter
::$FILTER_TEXT, 'azertyuiop'))
179 * Full-text search - result from a link's URL
181 public function testFilterFullTextURL()
185 count(self
::$linkFilter->filter(LinkFilter
::$FILTER_TEXT, 'ars.userfriendly.org'))
190 count(self
::$linkFilter->filter(LinkFilter
::$FILTER_TEXT, 'ars org'))
195 * Full-text search - result from a link's title only
197 public function testFilterFullTextTitle()
199 // use miscellaneous cases
202 count(self
::$linkFilter->filter(LinkFilter
::$FILTER_TEXT, 'userfriendly -'))
206 count(self
::$linkFilter->filter(LinkFilter
::$FILTER_TEXT, 'UserFriendly -'))
210 count(self
::$linkFilter->filter(LinkFilter
::$FILTER_TEXT, 'uSeRFrIendlY -'))
213 // use miscellaneous case and offset
216 count(self
::$linkFilter->filter(LinkFilter
::$FILTER_TEXT, 'RFrIendL'))
221 * Full-text search - result from the link's description only
223 public function testFilterFullTextDescription()
227 count(self
::$linkFilter->filter(LinkFilter
::$FILTER_TEXT, 'publishing media'))
232 count(self
::$linkFilter->filter(LinkFilter
::$FILTER_TEXT, 'mercurial w3c'))
237 count(self
::$linkFilter->filter(LinkFilter
::$FILTER_TEXT, '"free software"'))
242 * Full-text search - result from the link's tags only
244 public function testFilterFullTextTags()
248 count(self
::$linkFilter->filter(LinkFilter
::$FILTER_TEXT, 'gnu'))
254 count(self
::$linkFilter->filter(LinkFilter
::$FILTER_TEXT, 'web', false, true))
259 * Full-text search - result set from mixed sources
261 public function testFilterFullTextMixed()
265 count(self
::$linkFilter->filter(LinkFilter
::$FILTER_TEXT, 'free software'))
270 * Full-text search - test exclusion with '-'.
272 public function testExcludeSearch()
276 count(self
::$linkFilter->filter(LinkFilter
::$FILTER_TEXT, 'free -gnu'))
281 count(self
::$linkFilter->filter(LinkFilter
::$FILTER_TEXT, '-revolution'))
286 * Full-text search - test AND, exact terms and exclusion combined, across fields.
288 public function testMultiSearch()
292 count(self
::$linkFilter->filter(
293 LinkFilter
::$FILTER_TEXT,
294 '"Free Software " stallman "read this" @website stuff'
300 count(self
::$linkFilter->filter(
301 LinkFilter
::$FILTER_TEXT,
302 '"free software " stallman "read this" -beard @website stuff'
308 * Full-text search - make sure that exact search won't work across fields.
310 public function testSearchExactTermMultiFieldsKo()
314 count(self
::$linkFilter->filter(
315 LinkFilter
::$FILTER_TEXT,
322 count(self
::$linkFilter->filter(
323 LinkFilter
::$FILTER_TEXT,
330 * Tag search with exclusion.
332 public function testTagFilterWithExclusion()
336 count(self
::$linkFilter->filter(LinkFilter
::$FILTER_TAG, 'gnu -free'))
341 count(self
::$linkFilter->filter(LinkFilter
::$FILTER_TAG, '-free'))