MediaWiki
REL1_20
|
00001 <?php 00005 class UploadTest extends MediaWikiTestCase { 00006 protected $upload; 00007 00008 00009 function setUp() { 00010 global $wgHooks; 00011 parent::setUp(); 00012 00013 $this->upload = new UploadTestHandler; 00014 $this->hooks = $wgHooks; 00015 $wgHooks['InterwikiLoadPrefix'][] = function( $prefix, &$data ) { 00016 return false; 00017 }; 00018 } 00019 00020 function tearDown() { 00021 global $wgHooks; 00022 $wgHooks = $this->hooks; 00023 } 00024 00025 00032 public function testTitleValidation( $srcFilename, $dstFilename, $code, $msg ) { 00033 /* Check the result code */ 00034 $this->assertEquals( $code, 00035 $this->upload->testTitleValidation( $srcFilename ), 00036 "$msg code" ); 00037 00038 /* If we expect a valid title, check the title itself. */ 00039 if ( $code == UploadBase::OK ) { 00040 $this->assertEquals( $dstFilename, 00041 $this->upload->getTitle()->getText(), 00042 "$msg text" ); 00043 } 00044 } 00045 00049 public function dataTestTitleValidation() { 00050 return array( 00051 /* Test a valid title */ 00052 array( 'ValidTitle.jpg', 'ValidTitle.jpg', UploadBase::OK, 00053 'upload valid title' ), 00054 /* A title with a slash */ 00055 array( 'A/B.jpg', 'B.jpg', UploadBase::OK, 00056 'upload title with slash' ), 00057 /* A title with illegal char */ 00058 array( 'A:B.jpg', 'A-B.jpg', UploadBase::OK, 00059 'upload title with colon' ), 00060 /* Stripping leading File: prefix */ 00061 array( 'File:C.jpg', 'C.jpg', UploadBase::OK, 00062 'upload title with File prefix' ), 00063 /* Test illegal suggested title (r94601) */ 00064 array( '%281%29.JPG', null, UploadBase::ILLEGAL_FILENAME, 00065 'illegal title for upload' ), 00066 /* A title without extension */ 00067 array( 'A', null, UploadBase::FILETYPE_MISSING, 00068 'upload title without extension' ), 00069 /* A title with no basename */ 00070 array( '.jpg', null, UploadBase::MIN_LENGTH_PARTNAME, 00071 'upload title without basename' ), 00072 /* A title that is longer than 255 bytes */ 00073 array( str_repeat( 'a', 255 ) . '.jpg', null, UploadBase::FILENAME_TOO_LONG, 00074 'upload title longer than 255 bytes' ), 00075 /* A title that is longer than 240 bytes */ 00076 array( str_repeat( 'a', 240 ) . '.jpg', null, UploadBase::FILENAME_TOO_LONG, 00077 'upload title longer than 240 bytes' ), 00078 ); 00079 } 00080 00084 public function testVerifyUpload() { 00085 /* Setup with zero file size */ 00086 $this->upload->initializePathInfo( '', '', 0 ); 00087 $result = $this->upload->verifyUpload(); 00088 $this->assertEquals( UploadBase::EMPTY_FILE, 00089 $result['status'], 00090 'upload empty file' ); 00091 } 00092 00093 // Helper used to create an empty file of size $size. 00094 private function createFileOfSize( $size ) { 00095 $filename = tempnam( wfTempDir(), "mwuploadtest" ); 00096 00097 $fh = fopen( $filename, 'w' ); 00098 ftruncate( $fh, $size ); 00099 fclose( $fh ); 00100 00101 return $filename; 00102 } 00103 00110 public function testMaxUploadSize() { 00111 global $wgMaxUploadSize; 00112 $savedGlobal = $wgMaxUploadSize; // save global 00113 global $wgFileExtensions; 00114 $wgFileExtensions[] = 'txt'; 00115 00116 $wgMaxUploadSize = 100; 00117 00118 $filename = $this->createFileOfSize( $wgMaxUploadSize ); 00119 $this->upload->initializePathInfo( basename($filename) . '.txt', $filename, 100 ); 00120 $result = $this->upload->verifyUpload(); 00121 unlink( $filename ); 00122 00123 $this->assertEquals( 00124 array( 'status' => UploadBase::OK ), $result ); 00125 00126 $wgMaxUploadSize = $savedGlobal; // restore global 00127 } 00128 } 00129 00130 class UploadTestHandler extends UploadBase { 00131 public function initializeFromRequest( &$request ) { } 00132 public function testTitleValidation( $name ) { 00133 $this->mTitle = false; 00134 $this->mDesiredDestName = $name; 00135 $this->mTitleError = UploadBase::OK; 00136 $this->getTitle(); 00137 return $this->mTitleError; 00138 } 00139 00140 00141 }