X-Git-Url: https://git.mxchange.org/?a=blobdiff_plain;f=tests%2FNicknameTest.php;h=66e883c049f9cd40116e3f3971dd804a3c64e715;hb=dd862de6fbfddf0e585fbe9e3993a79fd939da22;hp=95af94098d904f7454ea0508ff0d4083fed13d69;hpb=b7e0078d1078c045c2f609d948905e73eb184add;p=quix0rs-gnu-social.git diff --git a/tests/NicknameTest.php b/tests/NicknameTest.php index 95af94098d..66e883c049 100644 --- a/tests/NicknameTest.php +++ b/tests/NicknameTest.php @@ -17,18 +17,61 @@ require_once INSTALLDIR . '/lib/common.php'; class NicknameTest extends PHPUnit_Framework_TestCase { /** + * Basic test using Nickname::normalize() + * * @dataProvider provider + */ + public function testBasic($input, $expected, $expectedException=null) + { + $exception = null; + $normalized = false; + try { + $normalized = Nickname::normalize($input); + } catch (NicknameException $e) { + $exception = $e; + } + + if ($expected === false) { + if ($expectedException) { + if ($exception) { + $stuff = get_class($exception) . ': ' . $exception->getMessage(); + } else { + $stuff = var_export($exception, true); + } + $this->assertTrue($exception && $exception instanceof $expectedException, + "invalid input '$input' expected to fail with $expectedException, " . + "got $stuff"); + } else { + $this->assertTrue($normalized == false, + "invalid input '$input' expected to fail"); + } + } else { + $msg = "normalized input nickname '$input' expected to normalize to '$expected', got "; + if ($exception) { + $msg .= get_class($exception) . ': ' . $exception->getMessage(); + } else { + $msg .= "'$normalized'"; + } + $this->assertEquals($expected, $normalized, $msg); + } + } + + /** + * 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 testBasic($input, $expected) + public function testAtReply($input, $expected, $expectedException=null) { - $matches = array(); - // First problem: this is all manual, wtf! - if (preg_match('/^([' . NICKNAME_FMT . ']{1,64})$/', $input, $matches)) { - $norm = common_canonical_nickname($matches[1]); - $this->assertEquals($expected, $norm, "normalized input nickname: $input -> $norm"); + if ($expected == false) { + // nothing to do } else { - $this->assertEquals($expected, false, "invalid input nickname: $input"); + $text = "@{$input} awesome! :)"; + $matches = common_find_mentions_raw($text); + $this->assertEquals(1, count($matches)); + $this->assertEquals($expected, Nickname::normalize($matches[0][0])); } } @@ -36,17 +79,38 @@ class NicknameTest extends PHPUnit_Framework_TestCase { return array( array('evan', 'evan'), + + // Case and underscore variants array('Evan', 'evan'), array('EVAN', 'evan'), array('ev_an', 'evan'), - array('ev.an', 'evan'), - array('ev/an', false), - array('ev an', false), - array('ev-an', false), - array('évan', false), // so far... - array('Évan', false), // so far... + array('E__V_an', 'evan'), array('evan1', 'evan1'), array('evan_1', 'evan1'), + array('0x20', '0x20'), + array('1234', '1234'), // should this be allowed though? :) + array('12__34', '1234'), + + // Some (currently) invalid chars... + array('^#@&^#@', false, 'NicknameInvalidException'), // all invalid :D + array('ev.an', false, 'NicknameInvalidException'), + array('ev/an', false, 'NicknameInvalidException'), + array('ev an', false, 'NicknameInvalidException'), + array('ev-an', false, 'NicknameInvalidException'), + + // Non-ASCII letters; currently not allowed, in future + // we'll add them at least with conversion to ASCII. + // Not much use until we have storage of display names, + // though. + array('évan', false, 'NicknameInvalidException'), // so far... + array('Évan', false, 'NicknameInvalidException'), // so far... + + // Length checks + array('', false, 'NicknameEmptyException'), + array('___', false, 'NicknameEmptyException'), + array('eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee', 'eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee'), // 64 chars + array('eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee_', false, 'NicknameTooLongException'), // the _ is too long... + array('eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee', false, 'NicknameTooLongException'), // 65 chars -- too long ); } }