5 * @covers ApiFormatJson
7 class ApiFormatJsonTest
extends ApiFormatTestBase
{
9 protected $printerName = 'json';
11 private static function addFormatVersion( $format, $arr ) {
13 foreach ( $arr as $val ) {
14 if ( !isset( $val[2] ) ) {
17 $val[2]['formatversion'] = $format;
19 if ( $format === 2 ) {
20 // Add a test for 'latest' as well
21 $val[2]['formatversion'] = 'latest';
28 public static function provideGeneralEncoding() {
30 self
::addFormatVersion( 1, [
32 [ [ null ], '[null]' ],
35 [ [ true, ApiResult
::META_BC_BOOLS
=> [ 0 ] ], '[true]' ],
36 [ [ false, ApiResult
::META_BC_BOOLS
=> [ 0 ] ], '[false]' ],
38 [ [ 42.5 ], '[42.5]' ],
39 [ [ 1e42
], '[1.0e+42]' ],
40 [ [ 'foo' ], '["foo"]' ],
41 [ [ 'fóo' ], '["f\u00f3o"]' ],
42 [ [ 'fóo' ], '["fóo"]', [ 'utf8' => 1 ] ],
46 [ [ [ 1 ] ], '[[1]]' ],
47 [ [ [ 'x' => 1 ] ], '[{"x":1}]' ],
48 [ [ [ 2 => 1 ] ], '[{"2":1}]' ],
49 [ [ (object)[] ], '[{}]' ],
50 [ [ [ 1, ApiResult
::META_TYPE
=> 'assoc' ] ], '[{"0":1}]' ],
51 [ [ [ 'x' => 1, ApiResult
::META_TYPE
=> 'array' ] ], '[[1]]' ],
52 [ [ [ 'x' => 1, ApiResult
::META_TYPE
=> 'kvp' ] ], '[{"x":1}]' ],
56 ApiResult
::META_TYPE
=> 'BCkvp',
57 ApiResult
::META_KVP_KEY_NAME
=> 'key'
59 '[[{"key":"x","*":1}]]'
61 [ [ [ 'x' => 1, ApiResult
::META_TYPE
=> 'BCarray' ] ], '[{"x":1}]' ],
62 [ [ [ 'a', 'b', ApiResult
::META_TYPE
=> 'BCassoc' ] ], '[["a","b"]]' ],
65 [ [ 'content' => 'foo', ApiResult
::META_CONTENT
=> 'content' ],
69 [ [ 'foo' => 'foo', ApiResult
::META_BC_SUBELEMENTS
=> [ 'foo' ] ],
70 '{"foo":{"*":"foo"}}' ],
73 [ [ 1 ], '/**/myCallback([1])', [ 'callback' => 'myCallback' ] ],
75 // Cross-domain mangling
76 [ [ '< Cross-Domain-Policy >' ], '["\u003C Cross-Domain-Policy >"]' ],
78 self
::addFormatVersion( 2, [
80 [ [ null ], '[null]' ],
81 [ [ true ], '[true]' ],
82 [ [ false ], '[false]' ],
83 [ [ true, ApiResult
::META_BC_BOOLS
=> [ 0 ] ], '[true]' ],
84 [ [ false, ApiResult
::META_BC_BOOLS
=> [ 0 ] ], '[false]' ],
86 [ [ 42.5 ], '[42.5]' ],
87 [ [ 1e42
], '[1.0e+42]' ],
88 [ [ 'foo' ], '["foo"]' ],
89 [ [ 'fóo' ], '["fóo"]' ],
90 [ [ 'fóo' ], '["f\u00f3o"]', [ 'ascii' => 1 ] ],
94 [ [ [ 'x' => 1 ] ], '[{"x":1}]' ],
95 [ [ [ 2 => 1 ] ], '[{"2":1}]' ],
96 [ [ (object)[] ], '[{}]' ],
97 [ [ [ 1, ApiResult
::META_TYPE
=> 'assoc' ] ], '[{"0":1}]' ],
98 [ [ [ 'x' => 1, ApiResult
::META_TYPE
=> 'array' ] ], '[[1]]' ],
99 [ [ [ 'x' => 1, ApiResult
::META_TYPE
=> 'kvp' ] ], '[{"x":1}]' ],
103 ApiResult
::META_TYPE
=> 'BCkvp',
104 ApiResult
::META_KVP_KEY_NAME
=> 'key'
108 [ [ [ 'x' => 1, ApiResult
::META_TYPE
=> 'BCarray' ] ], '[[1]]' ],
113 ApiResult
::META_TYPE
=> 'BCassoc'
115 '[{"0":"a","1":"b"}]'
119 [ [ 'content' => 'foo', ApiResult
::META_CONTENT
=> 'content' ],
120 '{"content":"foo"}' ],
123 [ [ 'foo' => 'foo', ApiResult
::META_BC_SUBELEMENTS
=> [ 'foo' ] ],
127 [ [ 1 ], '/**/myCallback([1])', [ 'callback' => 'myCallback' ] ],
129 // Cross-domain mangling
130 [ [ '< Cross-Domain-Policy >' ], '["\u003C Cross-Domain-Policy >"]' ],