2010-11-30 04:31:33 +09:00
< ? php
if ( isset ( $_SERVER ) && array_key_exists ( 'REQUEST_METHOD' , $_SERVER )) {
print " This script must be run from the command line \n " ;
exit ();
}
define ( 'INSTALLDIR' , realpath ( dirname ( __FILE__ ) . '/..' ));
define ( 'STATUSNET' , true );
define ( 'LACONICA' , true );
require_once INSTALLDIR . '/lib/common.php' ;
/**
* Test cases for nickname validity and normalization .
*/
class NicknameTest extends PHPUnit_Framework_TestCase
{
/**
2010-11-30 07:15:25 +09:00
* Basic test using Nickname :: normalize ()
2010-11-30 04:31:33 +09:00
*
2010-11-30 07:15:25 +09:00
* @ dataProvider provider
2010-11-30 04:31:33 +09:00
*/
2010-11-30 07:15:25 +09:00
public function testBasic ( $input , $expected , $expectedException = null )
2010-11-30 04:31:33 +09:00
{
2010-11-30 07:15:25 +09:00
$exception = null ;
$normalized = false ;
try {
2010-11-30 07:46:10 +09:00
$normalized = Nickname :: normalize ( $input );
2010-11-30 07:15:25 +09:00
} catch ( NicknameException $e ) {
$exception = $e ;
}
if ( $expected === false ) {
if ( $expectedException ) {
2010-11-30 07:46:10 +09:00
$this -> assertTrue ( $exception && $exception instanceof $expectedException ,
2010-11-30 07:15:25 +09:00
" invalid input ' $input ' expected to fail with $expectedException , " .
" got " . get_class ( $exception ) . ': ' . $exception -> getMessage ());
} else {
2010-11-30 07:46:10 +09:00
$this -> assertTrue ( $normalized == false ,
2010-11-30 07:15:25 +09:00
" invalid input ' $input ' expected to fail " );
}
2010-11-30 04:31:33 +09:00
} else {
2010-11-30 07:15:25 +09:00
$msg = " normalized input nickname ' $input ' expected to normalize to ' $expected ', got " ;
if ( $exception ) {
$msg .= get_class ( $exception ) . ': ' . $exception -> getMessage ();
} else {
$msg .= " ' $normalized ' " ;
}
2010-11-30 07:46:10 +09:00
$this -> assertEquals ( $expected , $normalized , $msg );
2010-11-30 04:31:33 +09:00
}
}
2010-11-30 08:04:21 +09:00
/**
* 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 ]));
}
}
2010-11-30 04:31:33 +09:00
static public function provider ()
{
return array (
array ( 'evan' , 'evan' ),
2010-11-30 07:15:25 +09:00
// Case and underscore variants
2010-11-30 04:31:33 +09:00
array ( 'Evan' , 'evan' ),
array ( 'EVAN' , 'evan' ),
array ( 'ev_an' , 'evan' ),
2010-11-30 07:15:25 +09:00
array ( 'E__V_an' , 'evan' ),
2010-11-30 04:31:33 +09:00
array ( 'evan1' , 'evan1' ),
array ( 'evan_1' , 'evan1' ),
2010-11-30 07:15:25 +09:00
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_' , 'eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee' ), // the _ will be trimmed off, remaining valid
array ( 'eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee' , false , 'NicknameTooLongException' ), // 65 chars -- too long
2010-11-30 04:31:33 +09:00
);
}
}