summaryrefslogtreecommitdiff
path: root/www/wiki/tests/phpunit/includes/api/format/ApiFormatJsonTest.php
blob: 7eb2a35ecfcb8f88dd697da6e8adcd55cfb99cda (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
<?php

/**
 * @group API
 * @covers ApiFormatJson
 */
class ApiFormatJsonTest extends ApiFormatTestBase {

	protected $printerName = 'json';

	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 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 >"]' ],
			] ),
			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 >"]' ],
			] )
		);
	}

}