2010-11-29 11:31:33 -08: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-29 14:15:25 -08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								     *  Basic  test  using  Nickname :: normalize () 
							 
						 
					
						
							
								
									
										
										
										
											2010-11-29 11:31:33 -08:00 
										
									 
								 
							 
							
								
							 
							
								 
							 
							
							
								     * 
							 
						 
					
						
							
								
									
										
										
										
											2010-11-29 14:15:25 -08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								     *  @ dataProvider  provider 
							 
						 
					
						
							
								
									
										
										
										
											2010-11-29 11:31:33 -08:00 
										
									 
								 
							 
							
								
							 
							
								 
							 
							
							
								     */ 
							 
						 
					
						
							
								
									
										
										
										
											2010-11-29 14:15:25 -08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								    public  function  testBasic ( $input ,  $expected ,  $expectedException = null ) 
							 
						 
					
						
							
								
									
										
										
										
											2010-11-29 11:31:33 -08:00 
										
									 
								 
							 
							
								
							 
							
								 
							 
							
							
								    { 
							 
						 
					
						
							
								
									
										
										
										
											2010-11-29 14:15:25 -08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								        $exception  =  null ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								        $normalized  =  false ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								        try  { 
							 
						 
					
						
							
								
									
										
										
										
											2010-11-29 14:46:10 -08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								            $normalized  =  Nickname :: normalize ( $input ); 
							 
						 
					
						
							
								
									
										
										
										
											2010-11-29 14:15:25 -08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								        }  catch  ( NicknameException  $e )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								            $exception  =  $e ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								        } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								        if  ( $expected  ===  false )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								            if  ( $expectedException )  { 
							 
						 
					
						
							
								
									
										
										
										
											2010-11-29 14:46:10 -08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								                $this -> assertTrue ( $exception  &&  $exception  instanceof  $expectedException , 
							 
						 
					
						
							
								
									
										
										
										
											2010-11-29 14:15:25 -08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								                        " invalid input ' $input ' expected to fail with  $expectedException ,  "  . 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								                        " got  "  .  get_class ( $exception )  .  ': '  .  $exception -> getMessage ()); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								            }  else  { 
							 
						 
					
						
							
								
									
										
										
										
											2010-11-29 14:46:10 -08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								                $this -> assertTrue ( $normalized  ==  false , 
							 
						 
					
						
							
								
									
										
										
										
											2010-11-29 14:15:25 -08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								                        " invalid input ' $input ' expected to fail " ); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								            } 
							 
						 
					
						
							
								
									
										
										
										
											2010-11-29 11:31:33 -08:00 
										
									 
								 
							 
							
								
							 
							
								 
							 
							
							
								        }  else  { 
							 
						 
					
						
							
								
									
										
										
										
											2010-11-29 14:15:25 -08: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-29 14:46:10 -08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								            $this -> assertEquals ( $expected ,  $normalized ,  $msg ); 
							 
						 
					
						
							
								
									
										
										
										
											2010-11-29 11:31:33 -08:00 
										
									 
								 
							 
							
								
							 
							
								 
							 
							
							
								        } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2010-11-29 15:04:21 -08: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-29 11:31:33 -08:00 
										
									 
								 
							 
							
								
							 
							
								 
							 
							
							
								    static  public  function  provider () 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								        return  array ( 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								                     array ( 'evan' ,  'evan' ), 
							 
						 
					
						
							
								
									
										
										
										
											2010-11-29 14:15:25 -08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								                     // Case and underscore variants
 
							 
						 
					
						
							
								
									
										
										
										
											2010-11-29 11:31:33 -08:00 
										
									 
								 
							 
							
								
							 
							
								 
							 
							
							
								                     array ( 'Evan' ,  'evan' ), 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								                     array ( 'EVAN' ,  'evan' ), 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								                     array ( 'ev_an' ,  'evan' ), 
							 
						 
					
						
							
								
									
										
										
										
											2010-11-29 14:15:25 -08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								                     array ( 'E__V_an' ,  'evan' ), 
							 
						 
					
						
							
								
									
										
										
										
											2010-11-29 11:31:33 -08:00 
										
									 
								 
							 
							
								
							 
							
								 
							 
							
							
								                     array ( 'evan1' ,  'evan1' ), 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								                     array ( 'evan_1' ,  'evan1' ), 
							 
						 
					
						
							
								
									
										
										
										
											2010-11-29 14:15:25 -08: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-29 11:31:33 -08:00 
										
									 
								 
							 
							
								
							 
							
								 
							 
							
							
								                     ); 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								}