Convert all array() syntax to []
[lhc/web/wiklou.git] / tests / phpunit / includes / api / format / ApiFormatJsonTest.php
index fc1f902..8437228 100644 (file)
 
 /**
  * @group API
- * @group Database
- * @group medium
  * @covers ApiFormatJson
  */
 class ApiFormatJsonTest extends ApiFormatTestBase {
 
-       public function testValidSyntax( ) {
-               $data = $this->apiRequest( 'json', array( 'action' => 'query', 'meta' => 'siteinfo' ) );
+       protected $printerName = 'json';
 
-               $this->assertInternalType( 'array', json_decode( $data, true ) );
-               $this->assertGreaterThan( 0, count( (array)$data ) );
+       private static function addFormatVersion( $format, $arr ) {
+               foreach ( $arr as &$p ) {
+                       if ( !isset( $p[2] ) ) {
+                               $p[2] = [ 'formatversion' => $format ];
+                       } else {
+                               $p[2]['formatversion'] = $format;
+                       }
+               }
+               return $arr;
        }
 
-       public function testJsonpInjection( ) {
-               $data = $this->apiRequest( 'json', array( 'action' => 'query', 'meta' => 'siteinfo', 'callback' => 'myCallback' ) );
-               $this->assertEquals( '/**/myCallback(', substr( $data, 0, 15 ) );
+       public static function provideGeneralEncoding() {
+               return array_merge(
+                       self::addFormatVersion( 1, [
+                               // Basic types
+                               [ [ null ], '[null]' ],
+                               [ [ true ], '[""]' ],
+                               [ [ false ], '[]' ],
+                               [ [ true, ApiResult::META_BC_BOOLS => [ 0 ] ], '[true]' ],
+                               [ [ false, ApiResult::META_BC_BOOLS => [ 0 ] ], '[false]' ],
+                               [ [ 42 ], '[42]' ],
+                               [ [ 42.5 ], '[42.5]' ],
+                               [ [ 1e42 ], '[1.0e+42]' ],
+                               [ [ 'foo' ], '["foo"]' ],
+                               [ [ 'fóo' ], '["f\u00f3o"]' ],
+                               [ [ 'fóo' ], '["fóo"]', [ 'utf8' => 1 ] ],
+
+                               // Arrays and objects
+                               [ [ [] ], '[[]]' ],
+                               [ [ [ 1 ] ], '[[1]]' ],
+                               [ [ [ 'x' => 1 ] ], '[{"x":1}]' ],
+                               [ [ [ 2 => 1 ] ], '[{"2":1}]' ],
+                               [ [ (object)[] ], '[{}]' ],
+                               [ [ [ 1, ApiResult::META_TYPE => 'assoc' ] ], '[{"0":1}]' ],
+                               [ [ [ 'x' => 1, ApiResult::META_TYPE => 'array' ] ], '[[1]]' ],
+                               [ [ [ 'x' => 1, ApiResult::META_TYPE => 'kvp' ] ], '[{"x":1}]' ],
+                               [
+                                       [ [
+                                               'x' => 1,
+                                               ApiResult::META_TYPE => 'BCkvp',
+                                               ApiResult::META_KVP_KEY_NAME => 'key'
+                                       ] ],
+                                       '[[{"key":"x","*":1}]]'
+                               ],
+                               [ [ [ 'x' => 1, ApiResult::META_TYPE => 'BCarray' ] ], '[{"x":1}]' ],
+                               [ [ [ 'a', 'b', ApiResult::META_TYPE => 'BCassoc' ] ], '[["a","b"]]' ],
+
+                               // Content
+                               [ [ 'content' => 'foo', ApiResult::META_CONTENT => 'content' ],
+                                       '{"*":"foo"}' ],
+
+                               // BC Subelements
+                               [ [ 'foo' => 'foo', ApiResult::META_BC_SUBELEMENTS => [ 'foo' ] ],
+                                       '{"foo":{"*":"foo"}}' ],
+
+                               // Callbacks
+                               [ [ 1 ], '/**/myCallback([1])', [ 'callback' => 'myCallback' ] ],
+
+                               // Cross-domain mangling
+                               [ [ '< Cross-Domain-Policy >' ], '["\u003C Cross-Domain-Policy \u003E"]' ],
+                       ] ),
+                       self::addFormatVersion( 2, [
+                               // Basic types
+                               [ [ null ], '[null]' ],
+                               [ [ true ], '[true]' ],
+                               [ [ false ], '[false]' ],
+                               [ [ true, ApiResult::META_BC_BOOLS => [ 0 ] ], '[true]' ],
+                               [ [ false, ApiResult::META_BC_BOOLS => [ 0 ] ], '[false]' ],
+                               [ [ 42 ], '[42]' ],
+                               [ [ 42.5 ], '[42.5]' ],
+                               [ [ 1e42 ], '[1.0e+42]' ],
+                               [ [ 'foo' ], '["foo"]' ],
+                               [ [ 'fóo' ], '["fóo"]' ],
+                               [ [ 'fóo' ], '["f\u00f3o"]', [ 'ascii' => 1 ] ],
+
+                               // Arrays and objects
+                               [ [ [] ], '[[]]' ],
+                               [ [ [ 'x' => 1 ] ], '[{"x":1}]' ],
+                               [ [ [ 2 => 1 ] ], '[{"2":1}]' ],
+                               [ [ (object)[] ], '[{}]' ],
+                               [ [ [ 1, ApiResult::META_TYPE => 'assoc' ] ], '[{"0":1}]' ],
+                               [ [ [ 'x' => 1, ApiResult::META_TYPE => 'array' ] ], '[[1]]' ],
+                               [ [ [ 'x' => 1, ApiResult::META_TYPE => 'kvp' ] ], '[{"x":1}]' ],
+                               [
+                                       [ [
+                                               'x' => 1,
+                                               ApiResult::META_TYPE => 'BCkvp',
+                                               ApiResult::META_KVP_KEY_NAME => 'key'
+                                       ] ],
+                                       '[{"x":1}]'
+                               ],
+                               [ [ [ 'x' => 1, ApiResult::META_TYPE => 'BCarray' ] ], '[[1]]' ],
+                               [
+                                       [ [
+                                               'a',
+                                               'b',
+                                               ApiResult::META_TYPE => 'BCassoc'
+                                       ] ],
+                                       '[{"0":"a","1":"b"}]'
+                               ],
+
+                               // Content
+                               [ [ 'content' => 'foo', ApiResult::META_CONTENT => 'content' ],
+                                       '{"content":"foo"}' ],
+
+                               // BC Subelements
+                               [ [ 'foo' => 'foo', ApiResult::META_BC_SUBELEMENTS => [ 'foo' ] ],
+                                       '{"foo":"foo"}' ],
+
+                               // Callbacks
+                               [ [ 1 ], '/**/myCallback([1])', [ 'callback' => 'myCallback' ] ],
+
+                               // Cross-domain mangling
+                               [ [ '< Cross-Domain-Policy >' ], '["\u003C Cross-Domain-Policy \u003E"]' ],
+                       ] )
+               );
        }
+
 }