*/
protected static $linkFilter;
+ /**
+ * @var ReferenceLinkDB instance
+ */
+ protected static $refDB;
+
/**
* Instanciate linkFilter with ReferenceLinkDB data.
*/
public static function setUpBeforeClass()
{
- $refDB = new ReferenceLinkDB();
- self::$linkFilter = new LinkFilter($refDB->getLinks());
+ self::$refDB = new ReferenceLinkDB();
+ self::$linkFilter = new LinkFilter(self::$refDB->getLinks());
}
/**
public function testFilter()
{
$this->assertEquals(
- 6,
+ self::$refDB->countLinks(),
count(self::$linkFilter->filter('', ''))
);
+ $this->assertEquals(
+ self::$refDB->countLinks(),
+ count(self::$linkFilter->filter('', '', 'all'))
+ );
+
+ $this->assertEquals(
+ self::$refDB->countLinks(),
+ count(self::$linkFilter->filter('', '', 'randomstr'))
+ );
+
// Private only.
$this->assertEquals(
- 2,
- count(self::$linkFilter->filter('', '', false, true))
+ self::$refDB->countPrivateLinks(),
+ count(self::$linkFilter->filter('', '', false, 'private'))
+ );
+
+ // Public only.
+ $this->assertEquals(
+ self::$refDB->countPublicLinks(),
+ count(self::$linkFilter->filter('', '', false, 'public'))
+ );
+
+ $this->assertEquals(
+ ReferenceLinkDB::$NB_LINKS_TOTAL,
+ count(self::$linkFilter->filter(LinkFilter::$FILTER_TAG, ''))
+ );
+
+ $this->assertEquals(
+ ReferenceLinkDB::$NB_LINKS_TOTAL,
+ count(self::$linkFilter->filter(LinkFilter::$FILTER_TEXT, ''))
);
}
count(self::$linkFilter->filter(LinkFilter::$FILTER_TAG, 'web', false))
);
+ $this->assertEquals(
+ 4,
+ count(self::$linkFilter->filter(LinkFilter::$FILTER_TAG, 'web', false, 'all'))
+ );
+
+ $this->assertEquals(
+ 4,
+ count(self::$linkFilter->filter(LinkFilter::$FILTER_TAG, 'web', false, 'default-blabla'))
+ );
+
// Private only.
$this->assertEquals(
1,
- count(self::$linkFilter->filter(LinkFilter::$FILTER_TAG, 'web', false, true))
+ count(self::$linkFilter->filter(LinkFilter::$FILTER_TAG, 'web', false, 'private'))
+ );
+
+ // Public only.
+ $this->assertEquals(
+ 3,
+ count(self::$linkFilter->filter(LinkFilter::$FILTER_TAG, 'web', false, 'public'))
);
}
$this->assertEquals(
'MediaGoblin',
- $links['20130614_184135']['title']
+ $links[7]['title']
);
}
/**
* No link for this hash
+ *
+ * @expectedException LinkNotFoundException
*/
public function testFilterUnknownSmallHash()
+ {
+ self::$linkFilter->filter(LinkFilter::$FILTER_HASH, 'Iblaah');
+ }
+
+ /**
+ * Full-text search - no result found.
+ */
+ public function testFilterFullTextNoResult()
{
$this->assertEquals(
0,
- count(self::$linkFilter->filter(LinkFilter::$FILTER_HASH, 'Iblaah'))
+ count(self::$linkFilter->filter(LinkFilter::$FILTER_TEXT, 'azertyuiop'))
);
}
2,
count(self::$linkFilter->filter(LinkFilter::$FILTER_TEXT, 'ars.userfriendly.org'))
);
+
+ $this->assertEquals(
+ 2,
+ count(self::$linkFilter->filter(LinkFilter::$FILTER_TEXT, 'ars org'))
+ );
}
/**
{
$this->assertEquals(
1,
- count(self::$linkFilter->filter(LinkFilter::$FILTER_TEXT, 'media publishing'))
+ count(self::$linkFilter->filter(LinkFilter::$FILTER_TEXT, 'publishing media'))
+ );
+
+ $this->assertEquals(
+ 1,
+ count(self::$linkFilter->filter(LinkFilter::$FILTER_TEXT, 'mercurial w3c'))
);
+
+ $this->assertEquals(
+ 3,
+ count(self::$linkFilter->filter(LinkFilter::$FILTER_TEXT, '"free software"'))
+ );
}
/**
public function testFilterFullTextTags()
{
$this->assertEquals(
- 2,
- count(self::$linkFilter->filter(LinkFilter::$FILTER_TEXT, 'gnu'))
+ 6,
+ count(self::$linkFilter->filter(LinkFilter::$FILTER_TEXT, 'web'))
+ );
+
+ $this->assertEquals(
+ 6,
+ count(self::$linkFilter->filter(LinkFilter::$FILTER_TEXT, 'web', 'all'))
+ );
+
+ $this->assertEquals(
+ 6,
+ count(self::$linkFilter->filter(LinkFilter::$FILTER_TEXT, 'web', 'bla'))
);
// Private only.
$this->assertEquals(
1,
- count(self::$linkFilter->filter(LinkFilter::$FILTER_TEXT, 'web', false, true))
+ count(self::$linkFilter->filter(LinkFilter::$FILTER_TEXT, 'web', false, 'private'))
+ );
+
+ // Public only.
+ $this->assertEquals(
+ 5,
+ count(self::$linkFilter->filter(LinkFilter::$FILTER_TEXT, 'web', false, 'public'))
);
}
public function testFilterFullTextMixed()
{
$this->assertEquals(
- 2,
+ 3,
count(self::$linkFilter->filter(LinkFilter::$FILTER_TEXT, 'free software'))
);
}
+
+ /**
+ * Full-text search - test exclusion with '-'.
+ */
+ public function testExcludeSearch()
+ {
+ $this->assertEquals(
+ 1,
+ count(self::$linkFilter->filter(LinkFilter::$FILTER_TEXT, 'free -gnu'))
+ );
+
+ $this->assertEquals(
+ 7,
+ count(self::$linkFilter->filter(LinkFilter::$FILTER_TEXT, '-revolution'))
+ );
+ }
+
+ /**
+ * Full-text search - test AND, exact terms and exclusion combined, across fields.
+ */
+ public function testMultiSearch()
+ {
+ $this->assertEquals(
+ 2,
+ count(self::$linkFilter->filter(
+ LinkFilter::$FILTER_TEXT,
+ '"Free Software " stallman "read this" @website stuff'
+ ))
+ );
+
+ $this->assertEquals(
+ 1,
+ count(self::$linkFilter->filter(
+ LinkFilter::$FILTER_TEXT,
+ '"free software " stallman "read this" -beard @website stuff'
+ ))
+ );
+ }
+
+ /**
+ * Full-text search - make sure that exact search won't work across fields.
+ */
+ public function testSearchExactTermMultiFieldsKo()
+ {
+ $this->assertEquals(
+ 0,
+ count(self::$linkFilter->filter(
+ LinkFilter::$FILTER_TEXT,
+ '"designer naming"'
+ ))
+ );
+
+ $this->assertEquals(
+ 0,
+ count(self::$linkFilter->filter(
+ LinkFilter::$FILTER_TEXT,
+ '"designernaming"'
+ ))
+ );
+ }
+
+ /**
+ * Tag search with exclusion.
+ */
+ public function testTagFilterWithExclusion()
+ {
+ $this->assertEquals(
+ 1,
+ count(self::$linkFilter->filter(LinkFilter::$FILTER_TAG, 'gnu -free'))
+ );
+
+ $this->assertEquals(
+ 7,
+ count(self::$linkFilter->filter(LinkFilter::$FILTER_TAG, '-free'))
+ );
+ }
+
+ /**
+ * Test crossed search (terms + tags).
+ */
+ public function testFilterCrossedSearch()
+ {
+ $terms = '"Free Software " stallman "read this" @website stuff';
+ $tags = 'free';
+ $this->assertEquals(
+ 1,
+ count(self::$linkFilter->filter(
+ LinkFilter::$FILTER_TAG | LinkFilter::$FILTER_TEXT,
+ array($tags, $terms)
+ ))
+ );
+ $this->assertEquals(
+ 2,
+ count(self::$linkFilter->filter(
+ LinkFilter::$FILTER_TAG | LinkFilter::$FILTER_TEXT,
+ array('', $terms)
+ ))
+ );
+ $this->assertEquals(
+ 1,
+ count(self::$linkFilter->filter(
+ LinkFilter::$FILTER_TAG | LinkFilter::$FILTER_TEXT,
+ array($tags, '')
+ ))
+ );
+ $this->assertEquals(
+ ReferenceLinkDB::$NB_LINKS_TOTAL,
+ count(self::$linkFilter->filter(
+ LinkFilter::$FILTER_TAG | LinkFilter::$FILTER_TEXT,
+ ''
+ ))
+ );
+ }
+
+ /**
+ * Filter links by #hashtag.
+ */
+ public function testFilterByHashtag()
+ {
+ $hashtag = 'hashtag';
+ $this->assertEquals(
+ 3,
+ count(self::$linkFilter->filter(
+ LinkFilter::$FILTER_TAG,
+ $hashtag
+ ))
+ );
+
+ $hashtag = 'private';
+ $this->assertEquals(
+ 1,
+ count(self::$linkFilter->filter(
+ LinkFilter::$FILTER_TAG,
+ $hashtag,
+ false,
+ 'private'
+ ))
+ );
+ }
}