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] = [ 'formatversion' => $format ];
16 $p[2]['formatversion'] = $format;
22 public static function provideGeneralEncoding() {
23 // @codingStandardsIgnoreStart Generic.Files.LineLength
25 self
::addFormatVersion( 1, [
27 [ [ null ], 'a:1:{i:0;N;}' ],
28 [ [ true ], 'a:1:{i:0;s:0:"";}' ],
29 [ [ false ], 'a:0:{}' ],
30 [ [ true, ApiResult
::META_BC_BOOLS
=> [ 0 ] ],
32 [ [ false, ApiResult
::META_BC_BOOLS
=> [ 0 ] ],
34 [ [ 42 ], 'a:1:{i:0;i:42;}' ],
35 [ [ 42.5 ], 'a:1:{i:0;d:42.5;}' ],
36 [ [ 1e42
], 'a:1:{i:0;d:1.0E+42;}' ],
37 [ [ 'foo' ], 'a:1:{i:0;s:3:"foo";}' ],
38 [ [ 'fóo' ], 'a:1:{i:0;s:4:"fóo";}' ],
41 [ [ [] ], 'a:1:{i:0;a:0:{}}' ],
42 [ [ [ 1 ] ], 'a:1:{i:0;a:1:{i:0;i:1;}}' ],
43 [ [ [ 'x' => 1 ] ], 'a:1:{i:0;a:1:{s:1:"x";i:1;}}' ],
44 [ [ [ 2 => 1 ] ], 'a:1:{i:0;a:1:{i:2;i:1;}}' ],
45 [ [ (object)[] ], 'a:1:{i:0;a:0:{}}' ],
46 [ [ [ 1, ApiResult
::META_TYPE
=> 'assoc' ] ], 'a:1:{i:0;a:1:{i:0;i:1;}}' ],
47 [ [ [ 'x' => 1, ApiResult
::META_TYPE
=> 'array' ] ], 'a:1:{i:0;a:1:{i:0;i:1;}}' ],
48 [ [ [ 'x' => 1, ApiResult
::META_TYPE
=> 'kvp' ] ], 'a:1:{i:0;a:1:{s:1:"x";i:1;}}' ],
49 [ [ [ 'x' => 1, ApiResult
::META_TYPE
=> 'BCkvp', ApiResult
::META_KVP_KEY_NAME
=> 'key' ] ],
50 'a:1:{i:0;a:1:{i:0;a:2:{s:3:"key";s:1:"x";s:1:"*";i:1;}}}' ],
51 [ [ [ 'x' => 1, ApiResult
::META_TYPE
=> 'BCarray' ] ], 'a:1:{i:0;a:1:{s:1:"x";i:1;}}' ],
52 [ [ [ 'a', 'b', ApiResult
::META_TYPE
=> 'BCassoc' ] ], 'a:1:{i:0;a:2:{i:0;s:1:"a";i:1;s:1:"b";}}' ],
55 [ [ 'content' => 'foo', ApiResult
::META_CONTENT
=> 'content' ],
56 'a:1:{s:1:"*";s:3:"foo";}' ],
59 [ [ 'foo' => 'foo', ApiResult
::META_BC_SUBELEMENTS
=> [ 'foo' ] ],
60 'a:1:{s:3:"foo";a:1:{s:1:"*";s:3:"foo";}}' ],
62 self
::addFormatVersion( 2, [
64 [ [ null ], 'a:1:{i:0;N;}' ],
65 [ [ true ], 'a:1:{i:0;b:1;}' ],
66 [ [ false ], 'a:1:{i:0;b:0;}' ],
67 [ [ true, ApiResult
::META_BC_BOOLS
=> [ 0 ] ],
69 [ [ false, ApiResult
::META_BC_BOOLS
=> [ 0 ] ],
71 [ [ 42 ], 'a:1:{i:0;i:42;}' ],
72 [ [ 42.5 ], 'a:1:{i:0;d:42.5;}' ],
73 [ [ 1e42
], 'a:1:{i:0;d:1.0E+42;}' ],
74 [ [ 'foo' ], 'a:1:{i:0;s:3:"foo";}' ],
75 [ [ 'fóo' ], 'a:1:{i:0;s:4:"fóo";}' ],
78 [ [ [] ], 'a:1:{i:0;a:0:{}}' ],
79 [ [ [ 1 ] ], 'a:1:{i:0;a:1:{i:0;i:1;}}' ],
80 [ [ [ 'x' => 1 ] ], 'a:1:{i:0;a:1:{s:1:"x";i:1;}}' ],
81 [ [ [ 2 => 1 ] ], 'a:1:{i:0;a:1:{i:2;i:1;}}' ],
82 [ [ (object)[] ], 'a:1:{i:0;a:0:{}}' ],
83 [ [ [ 1, ApiResult
::META_TYPE
=> 'assoc' ] ], 'a:1:{i:0;a:1:{i:0;i:1;}}' ],
84 [ [ [ 'x' => 1, ApiResult
::META_TYPE
=> 'array' ] ], 'a:1:{i:0;a:1:{i:0;i:1;}}' ],
85 [ [ [ 'x' => 1, ApiResult
::META_TYPE
=> 'kvp' ] ], 'a:1:{i:0;a:1:{s:1:"x";i:1;}}' ],
86 [ [ [ 'x' => 1, ApiResult
::META_TYPE
=> 'BCkvp', ApiResult
::META_KVP_KEY_NAME
=> 'key' ] ],
87 'a:1:{i:0;a:1:{s:1:"x";i:1;}}' ],
88 [ [ [ 'x' => 1, ApiResult
::META_TYPE
=> 'BCarray' ] ], 'a:1:{i:0;a:1:{i:0;i:1;}}' ],
89 [ [ [ 'a', 'b', ApiResult
::META_TYPE
=> 'BCassoc' ] ], 'a:1:{i:0;a:2:{i:0;s:1:"a";i:1;s:1:"b";}}' ],
92 [ [ 'content' => 'foo', ApiResult
::META_CONTENT
=> 'content' ],
93 'a:1:{s:7:"content";s:3:"foo";}' ],
96 [ [ 'foo' => 'foo', ApiResult
::META_BC_SUBELEMENTS
=> [ 'foo' ] ],
97 'a:1:{s:3:"foo";s:3:"foo";}' ],
100 // @codingStandardsIgnoreEnd
103 public function testCrossDomainMangling() {
104 $config = new HashConfig( [ 'MangleFlashPolicy' => false ] );
105 $context = new RequestContext
;
106 $context->setConfig( new MultiConfig( [
108 $context->getConfig(),
110 $main = new ApiMain( $context );
111 $main->getResult()->addValue( null, null, '< Cross-Domain-Policy >' );
113 if ( !function_exists( 'wfOutputHandler' ) ) {
114 function wfOutputHandler( $s ) {
119 $printer = $main->createPrinterByName( 'php' );
120 ob_start( 'wfOutputHandler' );
121 $printer->initPrinter();
123 $printer->closePrinter();
124 $ret = ob_get_clean();
125 $this->assertSame( 'a:1:{i:0;s:23:"< Cross-Domain-Policy >";}', $ret );
127 $config->set( 'MangleFlashPolicy', true );
128 $printer = $main->createPrinterByName( 'php' );
129 ob_start( 'wfOutputHandler' );
131 $printer->initPrinter();
133 $printer->closePrinter();
135 $this->fail( 'Expected exception not thrown' );
136 } catch ( ApiUsageException
$ex ) {
139 $ex->getStatusValue()->hasMessage( 'apierror-formatphp' ),