forked from GNUsocial/gnu-social
Add Nickname test cases for @-reply regexes in common_find_mentions
This commit is contained in:
parent
fffc10a230
commit
82799f675f
47
lib/util.php
47
lib/util.php
@ -564,6 +564,16 @@ function common_render_content($text, $notice)
|
|||||||
return $r;
|
return $r;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Finds @-mentions within the partially-rendered text section and
|
||||||
|
* turns them into live links.
|
||||||
|
*
|
||||||
|
* Should generally not be called except from common_render_content().
|
||||||
|
*
|
||||||
|
* @param string $text partially-rendered HTML
|
||||||
|
* @param Notice $notice in-progress or complete Notice object for context
|
||||||
|
* @return string partially-rendered HTML
|
||||||
|
*/
|
||||||
function common_linkify_mentions($text, $notice)
|
function common_linkify_mentions($text, $notice)
|
||||||
{
|
{
|
||||||
$mentions = common_find_mentions($text, $notice);
|
$mentions = common_find_mentions($text, $notice);
|
||||||
@ -669,17 +679,7 @@ function common_find_mentions($text, $notice)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
preg_match_all('/^T (' . Nickname::DISPLAY_FMT . ') /',
|
$matches = common_find_mentions_raw($text);
|
||||||
$text,
|
|
||||||
$tmatches,
|
|
||||||
PREG_OFFSET_CAPTURE);
|
|
||||||
|
|
||||||
preg_match_all('/(?:^|\s+)@(' . Nickname::DISPLAY_FMT . ')\b/',
|
|
||||||
$text,
|
|
||||||
$atmatches,
|
|
||||||
PREG_OFFSET_CAPTURE);
|
|
||||||
|
|
||||||
$matches = array_merge($tmatches[1], $atmatches[1]);
|
|
||||||
|
|
||||||
foreach ($matches as $match) {
|
foreach ($matches as $match) {
|
||||||
try {
|
try {
|
||||||
@ -753,6 +753,31 @@ function common_find_mentions($text, $notice)
|
|||||||
return $mentions;
|
return $mentions;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Does the actual regex pulls to find @-mentions in text.
|
||||||
|
* Should generally not be called directly; for use in common_find_mentions.
|
||||||
|
*
|
||||||
|
* @param string $text
|
||||||
|
* @return array of PCRE match arrays
|
||||||
|
*/
|
||||||
|
function common_find_mentions_raw($text)
|
||||||
|
{
|
||||||
|
$tmatches = array();
|
||||||
|
preg_match_all('/^T (' . Nickname::DISPLAY_FMT . ') /',
|
||||||
|
$text,
|
||||||
|
$tmatches,
|
||||||
|
PREG_OFFSET_CAPTURE);
|
||||||
|
|
||||||
|
$atmatches = array();
|
||||||
|
preg_match_all('/(?:^|\s+)@(' . Nickname::DISPLAY_FMT . ')\b/',
|
||||||
|
$text,
|
||||||
|
$atmatches,
|
||||||
|
PREG_OFFSET_CAPTURE);
|
||||||
|
|
||||||
|
$matches = array_merge($tmatches[1], $atmatches[1]);
|
||||||
|
return $matches;
|
||||||
|
}
|
||||||
|
|
||||||
function common_render_text($text)
|
function common_render_text($text)
|
||||||
{
|
{
|
||||||
$r = htmlspecialchars($text);
|
$r = htmlspecialchars($text);
|
||||||
|
@ -51,6 +51,25 @@ class NicknameTest extends PHPUnit_Framework_TestCase
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Test on the regex matching used in common_find_mentions
|
||||||
|
* (testing on the full notice rendering is difficult as it needs
|
||||||
|
* to be able to pull from global state)
|
||||||
|
*
|
||||||
|
* @dataProvider provider
|
||||||
|
*/
|
||||||
|
public function testAtReply($input, $expected, $expectedException=null)
|
||||||
|
{
|
||||||
|
if ($expected == false) {
|
||||||
|
// nothing to do
|
||||||
|
} else {
|
||||||
|
$text = "@{$input} awesome! :)";
|
||||||
|
$matches = common_find_mentions_raw($text);
|
||||||
|
$this->assertEquals(1, count($matches));
|
||||||
|
$this->assertEquals($expected, Nickname::normalize($matches[0][0]));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
static public function provider()
|
static public function provider()
|
||||||
{
|
{
|
||||||
return array(
|
return array(
|
||||||
|
Loading…
Reference in New Issue
Block a user