7 class ApiFormatPhpTest
extends ApiFormatTestBase
{
9 protected $printerName = 'php';
11 private static function addFormatVersion( $format, $arr ) {
12 foreach ( $arr as &$p ) {
13 if ( !isset( $p[2] ) ) {
14 $p[2] = array( 'formatversion' => $format );
16 $p[2]['formatversion'] = $format;
22 public static function provideGeneralEncoding() {
24 self
::addFormatVersion( 1, array(
26 array( array( null ), 'a:1:{i:0;N;}' ),
27 array( array( true ), 'a:1:{i:0;s:0:"";}' ),
28 array( array( false ), 'a:0:{}' ),
29 array( array( true, ApiResult
::META_BC_BOOLS
=> array( 0 ) ),
31 array( array( false, ApiResult
::META_BC_BOOLS
=> array( 0 ) ),
33 array( array( 42 ), 'a:1:{i:0;i:42;}' ),
34 array( array( 42.5 ), 'a:1:{i:0;d:42.5;}' ),
35 array( array( 1e42
), 'a:1:{i:0;d:1.0E+42;}' ),
36 array( array( 'foo' ), 'a:1:{i:0;s:3:"foo";}' ),
37 array( array( 'fóo' ), 'a:1:{i:0;s:4:"fóo";}' ),
40 array( array( array() ), 'a:1:{i:0;a:0:{}}' ),
41 array( array( array( 1 ) ), 'a:1:{i:0;a:1:{i:0;i:1;}}' ),
42 array( array( array( 'x' => 1 ) ), 'a:1:{i:0;a:1:{s:1:"x";i:1;}}' ),
43 array( array( array( 2 => 1 ) ), 'a:1:{i:0;a:1:{i:2;i:1;}}' ),
44 array( array( (object)array() ), 'a:1:{i:0;a:0:{}}' ),
45 array( array( array( 1, ApiResult
::META_TYPE
=> 'assoc' ) ), 'a:1:{i:0;a:1:{i:0;i:1;}}' ),
46 array( array( array( 'x' => 1, ApiResult
::META_TYPE
=> 'array' ) ), 'a:1:{i:0;a:1:{i:0;i:1;}}' ),
47 array( array( array( 'x' => 1, ApiResult
::META_TYPE
=> 'kvp' ) ), 'a:1:{i:0;a:1:{s:1:"x";i:1;}}' ),
48 array( array( array( 'x' => 1, ApiResult
::META_TYPE
=> 'BCkvp', ApiResult
::META_KVP_KEY_NAME
=> 'key' ) ),
49 'a:1:{i:0;a:1:{i:0;a:2:{s:3:"key";s:1:"x";s:1:"*";i:1;}}}' ),
50 array( array( array( 'x' => 1, ApiResult
::META_TYPE
=> 'BCarray' ) ), 'a:1:{i:0;a:1:{s:1:"x";i:1;}}' ),
51 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";}}' ),
54 array( array( 'content' => 'foo', ApiResult
::META_CONTENT
=> 'content' ),
55 'a:1:{s:1:"*";s:3:"foo";}' ),
58 array( array( 'foo' => 'foo', ApiResult
::META_BC_SUBELEMENTS
=> array( 'foo' ) ),
59 'a:1:{s:3:"foo";a:1:{s:1:"*";s:3:"foo";}}' ),
61 self
::addFormatVersion( 2, array(
63 array( array( null ), 'a:1:{i:0;N;}' ),
64 array( array( true ), 'a:1:{i:0;b:1;}' ),
65 array( array( false ), 'a:1:{i:0;b:0;}' ),
66 array( array( true, ApiResult
::META_BC_BOOLS
=> array( 0 ) ),
68 array( array( false, ApiResult
::META_BC_BOOLS
=> array( 0 ) ),
70 array( array( 42 ), 'a:1:{i:0;i:42;}' ),
71 array( array( 42.5 ), 'a:1:{i:0;d:42.5;}' ),
72 array( array( 1e42
), 'a:1:{i:0;d:1.0E+42;}' ),
73 array( array( 'foo' ), 'a:1:{i:0;s:3:"foo";}' ),
74 array( array( 'fóo' ), 'a:1:{i:0;s:4:"fóo";}' ),
77 array( array( array() ), 'a:1:{i:0;a:0:{}}' ),
78 array( array( array( 1 ) ), 'a:1:{i:0;a:1:{i:0;i:1;}}' ),
79 array( array( array( 'x' => 1 ) ), 'a:1:{i:0;a:1:{s:1:"x";i:1;}}' ),
80 array( array( array( 2 => 1 ) ), 'a:1:{i:0;a:1:{i:2;i:1;}}' ),
81 array( array( (object)array() ), 'a:1:{i:0;a:0:{}}' ),
82 array( array( array( 1, ApiResult
::META_TYPE
=> 'assoc' ) ), 'a:1:{i:0;a:1:{i:0;i:1;}}' ),
83 array( array( array( 'x' => 1, ApiResult
::META_TYPE
=> 'array' ) ), 'a:1:{i:0;a:1:{i:0;i:1;}}' ),
84 array( array( array( 'x' => 1, ApiResult
::META_TYPE
=> 'kvp' ) ), 'a:1:{i:0;a:1:{s:1:"x";i:1;}}' ),
85 array( array( array( 'x' => 1, ApiResult
::META_TYPE
=> 'BCkvp', ApiResult
::META_KVP_KEY_NAME
=> 'key' ) ),
86 'a:1:{i:0;a:1:{s:1:"x";i:1;}}' ),
87 array( array( array( 'x' => 1, ApiResult
::META_TYPE
=> 'BCarray' ) ), 'a:1:{i:0;a:1:{i:0;i:1;}}' ),
88 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";}}' ),
91 array( array( 'content' => 'foo', ApiResult
::META_CONTENT
=> 'content' ),
92 'a:1:{s:7:"content";s:3:"foo";}' ),
95 array( array( 'foo' => 'foo', ApiResult
::META_BC_SUBELEMENTS
=> array( 'foo' ) ),
96 'a:1:{s:3:"foo";s:3:"foo";}' ),
101 public function testCrossDomainMangling() {
102 $config = new HashConfig( array( 'MangleFlashPolicy' => false ) );
103 $context = new RequestContext
;
104 $context->setConfig( new MultiConfig( array(
106 $context->getConfig(),
108 $main = new ApiMain( $context );
109 $main->getResult()->addValue( null, null, '< Cross-Domain-Policy >' );
111 if ( !function_exists( 'wfOutputHandler' ) ) {
112 function wfOutputHandler( $s ) {
117 $printer = $main->createPrinterByName( 'php' );
118 ob_start( 'wfOutputHandler' );
119 $printer->initPrinter();
121 $printer->closePrinter();
122 $ret = ob_get_clean();
123 $this->assertSame( 'a:1:{i:0;s:23:"< Cross-Domain-Policy >";}', $ret );
125 $config->set( 'MangleFlashPolicy', true );
126 $printer = $main->createPrinterByName( 'php' );
127 ob_start( 'wfOutputHandler' );
129 $printer->initPrinter();
131 $printer->closePrinter();
133 $this->fail( 'Expected exception not thrown' );
134 } catch ( UsageException
$ex ) {
137 'This response cannot be represented using format=php. See https://bugzilla.wikimedia.org/show_bug.cgi?id=66776',