wiki.techinc.nl/tests/phpunit/includes/api/format/ApiFormatPhpTest.php
Amir E. Aharoni c50cbe48ab Fix remaining Generic.Files.LineLength failures
Except the ones for which there is no clear way to fix
because of T114213.

Bug: T102614
Change-Id: I94a1fc7c890c82a36f0b51e42d311585c275775c
2015-10-03 17:23:07 +00:00

147 lines
5.6 KiB
PHP

<?php
/**
* @group API
* @covers ApiFormatPhp
*/
class ApiFormatPhpTest extends ApiFormatTestBase {
protected $printerName = 'php';
private static function addFormatVersion( $format, $arr ) {
foreach ( $arr as &$p ) {
if ( !isset( $p[2] ) ) {
$p[2] = array( 'formatversion' => $format );
} else {
$p[2]['formatversion'] = $format;
}
}
return $arr;
}
public static function provideGeneralEncoding() {
// @codingStandardsIgnoreStart Generic.Files.LineLength
return array_merge(
self::addFormatVersion( 1, array(
// Basic types
array( array( null ), 'a:1:{i:0;N;}' ),
array( array( true ), 'a:1:{i:0;s:0:"";}' ),
array( array( false ), 'a:0:{}' ),
array( array( true, ApiResult::META_BC_BOOLS => array( 0 ) ),
'a:1:{i:0;b:1;}' ),
array( array( false, ApiResult::META_BC_BOOLS => array( 0 ) ),
'a:1:{i:0;b:0;}' ),
array( array( 42 ), 'a:1:{i:0;i:42;}' ),
array( array( 42.5 ), 'a:1:{i:0;d:42.5;}' ),
array( array( 1e42 ), 'a:1:{i:0;d:1.0E+42;}' ),
array( array( 'foo' ), 'a:1:{i:0;s:3:"foo";}' ),
array( array( 'fóo' ), 'a:1:{i:0;s:4:"fóo";}' ),
// Arrays and objects
array( array( array() ), 'a:1:{i:0;a:0:{}}' ),
array( array( array( 1 ) ), 'a:1:{i:0;a:1:{i:0;i:1;}}' ),
array( array( array( 'x' => 1 ) ), 'a:1:{i:0;a:1:{s:1:"x";i:1;}}' ),
array( array( array( 2 => 1 ) ), 'a:1:{i:0;a:1:{i:2;i:1;}}' ),
array( array( (object)array() ), 'a:1:{i:0;a:0:{}}' ),
array( array( array( 1, ApiResult::META_TYPE => 'assoc' ) ), 'a:1:{i:0;a:1:{i:0;i:1;}}' ),
array( array( array( 'x' => 1, ApiResult::META_TYPE => 'array' ) ), 'a:1:{i:0;a:1:{i:0;i:1;}}' ),
array( array( array( 'x' => 1, ApiResult::META_TYPE => 'kvp' ) ), 'a:1:{i:0;a:1:{s:1:"x";i:1;}}' ),
array( array( array( 'x' => 1, ApiResult::META_TYPE => 'BCkvp', ApiResult::META_KVP_KEY_NAME => 'key' ) ),
'a:1:{i:0;a:1:{i:0;a:2:{s:3:"key";s:1:"x";s:1:"*";i:1;}}}' ),
array( array( array( 'x' => 1, ApiResult::META_TYPE => 'BCarray' ) ), 'a:1:{i:0;a:1:{s:1:"x";i:1;}}' ),
array( array( array( 'a', 'b', ApiResult::META_TYPE => 'BCassoc' ) ), 'a:1:{i:0;a:2:{i:0;s:1:"a";i:1;s:1:"b";}}' ),
// Content
array( array( 'content' => 'foo', ApiResult::META_CONTENT => 'content' ),
'a:1:{s:1:"*";s:3:"foo";}' ),
// BC Subelements
array( array( 'foo' => 'foo', ApiResult::META_BC_SUBELEMENTS => array( 'foo' ) ),
'a:1:{s:3:"foo";a:1:{s:1:"*";s:3:"foo";}}' ),
) ),
self::addFormatVersion( 2, array(
// Basic types
array( array( null ), 'a:1:{i:0;N;}' ),
array( array( true ), 'a:1:{i:0;b:1;}' ),
array( array( false ), 'a:1:{i:0;b:0;}' ),
array( array( true, ApiResult::META_BC_BOOLS => array( 0 ) ),
'a:1:{i:0;b:1;}' ),
array( array( false, ApiResult::META_BC_BOOLS => array( 0 ) ),
'a:1:{i:0;b:0;}' ),
array( array( 42 ), 'a:1:{i:0;i:42;}' ),
array( array( 42.5 ), 'a:1:{i:0;d:42.5;}' ),
array( array( 1e42 ), 'a:1:{i:0;d:1.0E+42;}' ),
array( array( 'foo' ), 'a:1:{i:0;s:3:"foo";}' ),
array( array( 'fóo' ), 'a:1:{i:0;s:4:"fóo";}' ),
// Arrays and objects
array( array( array() ), 'a:1:{i:0;a:0:{}}' ),
array( array( array( 1 ) ), 'a:1:{i:0;a:1:{i:0;i:1;}}' ),
array( array( array( 'x' => 1 ) ), 'a:1:{i:0;a:1:{s:1:"x";i:1;}}' ),
array( array( array( 2 => 1 ) ), 'a:1:{i:0;a:1:{i:2;i:1;}}' ),
array( array( (object)array() ), 'a:1:{i:0;a:0:{}}' ),
array( array( array( 1, ApiResult::META_TYPE => 'assoc' ) ), 'a:1:{i:0;a:1:{i:0;i:1;}}' ),
array( array( array( 'x' => 1, ApiResult::META_TYPE => 'array' ) ), 'a:1:{i:0;a:1:{i:0;i:1;}}' ),
array( array( array( 'x' => 1, ApiResult::META_TYPE => 'kvp' ) ), 'a:1:{i:0;a:1:{s:1:"x";i:1;}}' ),
array( array( array( 'x' => 1, ApiResult::META_TYPE => 'BCkvp', ApiResult::META_KVP_KEY_NAME => 'key' ) ),
'a:1:{i:0;a:1:{s:1:"x";i:1;}}' ),
array( array( array( 'x' => 1, ApiResult::META_TYPE => 'BCarray' ) ), 'a:1:{i:0;a:1:{i:0;i:1;}}' ),
array( array( array( 'a', 'b', ApiResult::META_TYPE => 'BCassoc' ) ), 'a:1:{i:0;a:2:{i:0;s:1:"a";i:1;s:1:"b";}}' ),
// Content
array( array( 'content' => 'foo', ApiResult::META_CONTENT => 'content' ),
'a:1:{s:7:"content";s:3:"foo";}' ),
// BC Subelements
array( array( 'foo' => 'foo', ApiResult::META_BC_SUBELEMENTS => array( 'foo' ) ),
'a:1:{s:3:"foo";s:3:"foo";}' ),
) )
);
// @codingStandardsIgnoreEnd
}
public function testCrossDomainMangling() {
$config = new HashConfig( array( 'MangleFlashPolicy' => false ) );
$context = new RequestContext;
$context->setConfig( new MultiConfig( array(
$config,
$context->getConfig(),
) ) );
$main = new ApiMain( $context );
$main->getResult()->addValue( null, null, '< Cross-Domain-Policy >' );
if ( !function_exists( 'wfOutputHandler' ) ) {
function wfOutputHandler( $s ) {
return $s;
}
}
$printer = $main->createPrinterByName( 'php' );
ob_start( 'wfOutputHandler' );
$printer->initPrinter();
$printer->execute();
$printer->closePrinter();
$ret = ob_get_clean();
$this->assertSame( 'a:1:{i:0;s:23:"< Cross-Domain-Policy >";}', $ret );
$config->set( 'MangleFlashPolicy', true );
$printer = $main->createPrinterByName( 'php' );
ob_start( 'wfOutputHandler' );
try {
$printer->initPrinter();
$printer->execute();
$printer->closePrinter();
ob_end_clean();
$this->fail( 'Expected exception not thrown' );
} catch ( UsageException $ex ) {
ob_end_clean();
$this->assertSame(
'This response cannot be represented using format=php. ' .
'See https://phabricator.wikimedia.org/T68776',
$ex->getMessage(),
'Expected exception'
);
}
}
}