Merge "Accessor to get EditPage parent revision ID"
[lhc/web/wiklou.git] / tests / phpunit / includes / api / format / ApiFormatJsonTest.php
1 <?php
2
3 /**
4 * @group API
5 * @covers ApiFormatJson
6 */
7 class ApiFormatJsonTest extends ApiFormatTestBase {
8
9 protected $printerName = 'json';
10
11 private static function addFormatVersion( $format, $arr ) {
12 foreach ( $arr as &$p ) {
13 if ( !isset( $p[2] ) ) {
14 $p[2] = array( 'formatversion' => $format );
15 } else {
16 $p[2]['formatversion'] = $format;
17 }
18 }
19 return $arr;
20 }
21
22 public static function provideGeneralEncoding() {
23 return array_merge(
24 self::addFormatVersion( 1, array(
25 // Basic types
26 array( array( null ), '[null]' ),
27 array( array( true ), '[""]' ),
28 array( array( false ), '[]' ),
29 array( array( true, ApiResult::META_BC_BOOLS => array( 0 ) ), '[true]' ),
30 array( array( false, ApiResult::META_BC_BOOLS => array( 0 ) ), '[false]' ),
31 array( array( 42 ), '[42]' ),
32 array( array( 42.5 ), '[42.5]' ),
33 array( array( 1e42 ), '[1.0e+42]' ),
34 array( array( 'foo' ), '["foo"]' ),
35 array( array( 'fóo' ), '["f\u00f3o"]' ),
36 array( array( 'fóo' ), '["fóo"]', array( 'utf8' => 1 ) ),
37
38 // Arrays and objects
39 array( array( array() ), '[[]]' ),
40 array( array( array( 1 ) ), '[[1]]' ),
41 array( array( array( 'x' => 1 ) ), '[{"x":1}]' ),
42 array( array( array( 2 => 1 ) ), '[{"2":1}]' ),
43 array( array( (object)array() ), '[{}]' ),
44 array( array( array( 1, ApiResult::META_TYPE => 'assoc' ) ), '[{"0":1}]' ),
45 array( array( array( 'x' => 1, ApiResult::META_TYPE => 'array' ) ), '[[1]]' ),
46 array( array( array( 'x' => 1, ApiResult::META_TYPE => 'kvp' ) ), '[{"x":1}]' ),
47 array(
48 array( array(
49 'x' => 1,
50 ApiResult::META_TYPE => 'BCkvp',
51 ApiResult::META_KVP_KEY_NAME => 'key'
52 ) ),
53 '[[{"key":"x","*":1}]]'
54 ),
55 array( array( array( 'x' => 1, ApiResult::META_TYPE => 'BCarray' ) ), '[{"x":1}]' ),
56 array( array( array( 'a', 'b', ApiResult::META_TYPE => 'BCassoc' ) ), '[["a","b"]]' ),
57
58 // Content
59 array( array( 'content' => 'foo', ApiResult::META_CONTENT => 'content' ),
60 '{"*":"foo"}' ),
61
62 // BC Subelements
63 array( array( 'foo' => 'foo', ApiResult::META_BC_SUBELEMENTS => array( 'foo' ) ),
64 '{"foo":{"*":"foo"}}' ),
65
66 // Callbacks
67 array( array( 1 ), '/**/myCallback([1])', array( 'callback' => 'myCallback' ) ),
68
69 // Cross-domain mangling
70 array( array( '< Cross-Domain-Policy >' ), '["\u003C Cross-Domain-Policy \u003E"]' ),
71 ) ),
72 self::addFormatVersion( 2, array(
73 // Basic types
74 array( array( null ), '[null]' ),
75 array( array( true ), '[true]' ),
76 array( array( false ), '[false]' ),
77 array( array( true, ApiResult::META_BC_BOOLS => array( 0 ) ), '[true]' ),
78 array( array( false, ApiResult::META_BC_BOOLS => array( 0 ) ), '[false]' ),
79 array( array( 42 ), '[42]' ),
80 array( array( 42.5 ), '[42.5]' ),
81 array( array( 1e42 ), '[1.0e+42]' ),
82 array( array( 'foo' ), '["foo"]' ),
83 array( array( 'fóo' ), '["fóo"]' ),
84 array( array( 'fóo' ), '["f\u00f3o"]', array( 'ascii' => 1 ) ),
85
86 // Arrays and objects
87 array( array( array() ), '[[]]' ),
88 array( array( array( 'x' => 1 ) ), '[{"x":1}]' ),
89 array( array( array( 2 => 1 ) ), '[{"2":1}]' ),
90 array( array( (object)array() ), '[{}]' ),
91 array( array( array( 1, ApiResult::META_TYPE => 'assoc' ) ), '[{"0":1}]' ),
92 array( array( array( 'x' => 1, ApiResult::META_TYPE => 'array' ) ), '[[1]]' ),
93 array( array( array( 'x' => 1, ApiResult::META_TYPE => 'kvp' ) ), '[{"x":1}]' ),
94 array(
95 array( array(
96 'x' => 1,
97 ApiResult::META_TYPE => 'BCkvp',
98 ApiResult::META_KVP_KEY_NAME => 'key'
99 ) ),
100 '[{"x":1}]'
101 ),
102 array( array( array( 'x' => 1, ApiResult::META_TYPE => 'BCarray' ) ), '[[1]]' ),
103 array(
104 array( array(
105 'a',
106 'b',
107 ApiResult::META_TYPE => 'BCassoc'
108 ) ),
109 '[{"0":"a","1":"b"}]'
110 ),
111
112 // Content
113 array( array( 'content' => 'foo', ApiResult::META_CONTENT => 'content' ),
114 '{"content":"foo"}' ),
115
116 // BC Subelements
117 array( array( 'foo' => 'foo', ApiResult::META_BC_SUBELEMENTS => array( 'foo' ) ),
118 '{"foo":"foo"}' ),
119
120 // Callbacks
121 array( array( 1 ), '/**/myCallback([1])', array( 'callback' => 'myCallback' ) ),
122
123 // Cross-domain mangling
124 array( array( '< Cross-Domain-Policy >' ), '["\u003C Cross-Domain-Policy \u003E"]' ),
125 ) )
126 );
127 }
128
129 }