uploads of files starting with multibyte characters on Linux. wfBaseName() doesn't suffer this bug, and understands backslash on both Unix and Windows.
211 lines
No EOL
5.5 KiB
PHP
211 lines
No EOL
5.5 KiB
PHP
<?php
|
|
|
|
require_once( 'PHPUnit.php' );
|
|
require_once( '../includes/Defines.php' );
|
|
require_once( '../includes/Profiling.php' );
|
|
require_once( '../includes/GlobalFunctions.php' );
|
|
|
|
class GlobalTest extends PHPUnit_TestCase {
|
|
function GlobalTest( $name ) {
|
|
$this->PHPUnit_TestCase( $name );
|
|
}
|
|
|
|
function setUp() {
|
|
$this->save = array();
|
|
$saveVars = array( 'wgReadOnlyFile' );
|
|
foreach( $saveVars as $var ) {
|
|
if( isset( $GLOBALS[$var] ) ) {
|
|
$this->save[$var] = $GLOBALS[$var];
|
|
}
|
|
}
|
|
$GLOBALS['wgReadOnlyFile'] = wfTempDir() . '/testReadOnly-' . mt_rand();
|
|
}
|
|
|
|
function tearDown() {
|
|
foreach( $this->save as $var => $data ) {
|
|
$GLOBALS[$var] = $data;
|
|
}
|
|
}
|
|
|
|
function testRandom() {
|
|
# This could hypothetically fail, but it shouldn't ;)
|
|
$this->assertFalse(
|
|
wfRandom() == wfRandom() );
|
|
}
|
|
|
|
function testUrlencode() {
|
|
$this->assertEquals(
|
|
"%E7%89%B9%E5%88%A5:Contributions/Foobar",
|
|
wfUrlencode( "\xE7\x89\xB9\xE5\x88\xA5:Contributions/Foobar" ) );
|
|
}
|
|
|
|
function testReadOnlyEmpty() {
|
|
$this->assertFalse( wfReadOnly() );
|
|
}
|
|
|
|
function testReadOnlySet() {
|
|
$f = fopen( $GLOBALS['wgReadOnlyFile'], "wt" );
|
|
fwrite( $f, 'Message' );
|
|
fclose( $f );
|
|
$this->assertTrue( wfReadOnly() );
|
|
|
|
unlink( $GLOBALS['wgReadOnlyFile'] );
|
|
$this->assertFalse( wfReadOnly() );
|
|
}
|
|
|
|
function testQuotedPrintable() {
|
|
$this->assertEquals(
|
|
"=?UTF-8?Q?=C4=88u=20legebla=3F?=",
|
|
wfQuotedPrintable( "\xc4\x88u legebla?", "UTF-8" ) );
|
|
}
|
|
|
|
function testTime() {
|
|
$start = wfTime();
|
|
$this->assertType( 'double', $start );
|
|
$end = wfTime();
|
|
$this->assertTrue( $end > $start, "Time is running backwards!" );
|
|
}
|
|
|
|
function testArrayToCGI() {
|
|
$this->assertEquals(
|
|
"baz=AT%26T&foo=bar",
|
|
wfArrayToCGI(
|
|
array( 'baz' => 'AT&T', 'ignore' => '' ),
|
|
array( 'foo' => 'bar', 'baz' => 'overridden value' ) ) );
|
|
}
|
|
|
|
function testMimeTypeMatch() {
|
|
$this->assertEquals(
|
|
'text/html',
|
|
mimeTypeMatch( 'text/html',
|
|
array( 'application/xhtml+xml' => 1.0,
|
|
'text/html' => 0.7,
|
|
'text/plain' => 0.3 ) ) );
|
|
$this->assertEquals(
|
|
'text/*',
|
|
mimeTypeMatch( 'text/html',
|
|
array( 'image/*' => 1.0,
|
|
'text/*' => 0.5 ) ) );
|
|
$this->assertEquals(
|
|
'*/*',
|
|
mimeTypeMatch( 'text/html',
|
|
array( '*/*' => 1.0 ) ) );
|
|
$this->assertNull(
|
|
mimeTypeMatch( 'text/html',
|
|
array( 'image/png' => 1.0,
|
|
'image/svg+xml' => 0.5 ) ) );
|
|
}
|
|
|
|
function testNegotiateType() {
|
|
$this->assertEquals(
|
|
'text/html',
|
|
wfNegotiateType(
|
|
array( 'application/xhtml+xml' => 1.0,
|
|
'text/html' => 0.7,
|
|
'text/plain' => 0.5,
|
|
'text/*' => 0.2 ),
|
|
array( 'text/html' => 1.0 ) ) );
|
|
$this->assertEquals(
|
|
'application/xhtml+xml',
|
|
wfNegotiateType(
|
|
array( 'application/xhtml+xml' => 1.0,
|
|
'text/html' => 0.7,
|
|
'text/plain' => 0.5,
|
|
'text/*' => 0.2 ),
|
|
array( 'application/xhtml+xml' => 1.0,
|
|
'text/html' => 0.5 ) ) );
|
|
$this->assertEquals(
|
|
'text/html',
|
|
wfNegotiateType(
|
|
array( 'text/html' => 1.0,
|
|
'text/plain' => 0.5,
|
|
'text/*' => 0.5,
|
|
'application/xhtml+xml' => 0.2 ),
|
|
array( 'application/xhtml+xml' => 1.0,
|
|
'text/html' => 0.5 ) ) );
|
|
$this->assertEquals(
|
|
'text/html',
|
|
wfNegotiateType(
|
|
array( 'text/*' => 1.0,
|
|
'image/*' => 0.7,
|
|
'*/*' => 0.3 ),
|
|
array( 'application/xhtml+xml' => 1.0,
|
|
'text/html' => 0.5 ) ) );
|
|
$this->assertNull(
|
|
wfNegotiateType(
|
|
array( 'text/*' => 1.0 ),
|
|
array( 'application/xhtml+xml' => 1.0 ) ) );
|
|
}
|
|
|
|
function testTimestamp() {
|
|
$t = gmmktime( 12, 34, 56, 1, 15, 2001 );
|
|
$this->assertEquals(
|
|
'20010115123456',
|
|
wfTimestamp( TS_MW, $t ),
|
|
'TS_UNIX to TS_MW' );
|
|
$this->assertEquals(
|
|
979562096,
|
|
wfTimestamp( TS_UNIX, $t ),
|
|
'TS_UNIX to TS_UNIX' );
|
|
$this->assertEquals(
|
|
'2001-01-15 12:34:56',
|
|
wfTimestamp( TS_DB, $t ),
|
|
'TS_UNIX to TS_DB' );
|
|
|
|
$this->assertEquals(
|
|
'20010115123456',
|
|
wfTimestamp( TS_MW, '20010115123456' ),
|
|
'TS_MW to TS_MW' );
|
|
$this->assertEquals(
|
|
979562096,
|
|
wfTimestamp( TS_UNIX, '20010115123456' ),
|
|
'TS_MW to TS_UNIX' );
|
|
$this->assertEquals(
|
|
'2001-01-15 12:34:56',
|
|
wfTimestamp( TS_DB, '20010115123456' ),
|
|
'TS_MW to TS_DB' );
|
|
|
|
$this->assertEquals(
|
|
'20010115123456',
|
|
wfTimestamp( TS_MW, '2001-01-15 12:34:56' ),
|
|
'TS_DB to TS_MW' );
|
|
$this->assertEquals(
|
|
979562096,
|
|
wfTimestamp( TS_UNIX, '2001-01-15 12:34:56' ),
|
|
'TS_DB to TS_UNIX' );
|
|
$this->assertEquals(
|
|
'2001-01-15 12:34:56',
|
|
wfTimestamp( TS_DB, '2001-01-15 12:34:56' ),
|
|
'TS_DB to TS_DB' );
|
|
}
|
|
|
|
function testBasename() {
|
|
$sets = array(
|
|
'' => '',
|
|
'/' => '',
|
|
'\\' => '',
|
|
'//' => '',
|
|
'\\\\' => '',
|
|
'a' => 'a',
|
|
'aaaa' => 'aaaa',
|
|
'/a' => 'a',
|
|
'\\a' => 'a',
|
|
'/aaaa' => 'aaaa',
|
|
'\\aaaa' => 'aaaa',
|
|
'/aaaa/' => 'aaaa',
|
|
'\\aaaa\\' => 'aaaa',
|
|
'\\aaaa\\' => 'aaaa',
|
|
'/mnt/upload3/wikipedia/en/thumb/8/8b/Zork_Grand_Inquisitor_box_cover.jpg/93px-Zork_Grand_Inquisitor_box_cover.jpg' => '93px-Zork_Grand_Inquisitor_box_cover.jpg',
|
|
'C:\\Progra~1\\Wikime~1\\Wikipe~1\\VIEWER.EXE' => 'VIEWER.EXE',
|
|
'Östergötland_coat_of_arms.png' => 'Östergötland_coat_of_arms.png',
|
|
);
|
|
foreach( $sets as $from => $to ) {
|
|
$this->assertEquals( $to, wfBaseName( $from ),
|
|
"wfBaseName('$from') => '$to'");
|
|
}
|
|
}
|
|
|
|
/* TODO: many more! */
|
|
}
|
|
|
|
?>
|