summaryrefslogtreecommitdiff
path: root/tests/phpunit/includes/api/format/ApiFormatJsonTest.php
blob: 8d599b08aaedde51a1aba944c9bcc0586ecd28b8 (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
<?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] = array( 'formatversion' => $format );
			} else {
				$p[2]['formatversion'] = $format;
			}
		}
		return $arr;
	}

	public static function provideGeneralEncoding() {
		return array_merge(
			self::addFormatVersion( 1, array(
				// Basic types
				array( array( null ), '[null]' ),
				array( array( true ), '[""]' ),
				array( array( false ), '[]' ),
				array( array( true, ApiResult::META_BC_BOOLS => array( 0 ) ), '[true]' ),
				array( array( false, ApiResult::META_BC_BOOLS => array( 0 ) ), '[false]' ),
				array( array( 42 ), '[42]' ),
				array( array( 42.5 ), '[42.5]' ),
				array( array( 1e42 ), '[1.0e+42]' ),
				array( array( 'foo' ), '["foo"]' ),
				array( array( 'fóo' ), '["f\u00f3o"]' ),
				array( array( 'fóo' ), '["fóo"]', array( 'utf8' => 1 ) ),

				// Arrays and objects
				array( array( array() ), '[[]]' ),
				array( array( array( 1 ) ), '[[1]]' ),
				array( array( array( 'x' => 1 ) ), '[{"x":1}]' ),
				array( array( array( 2 => 1 ) ), '[{"2":1}]' ),
				array( array( (object)array() ), '[{}]' ),
				array( array( array( 1, ApiResult::META_TYPE => 'assoc' ) ), '[{"0":1}]' ),
				array( array( array( 'x' => 1, ApiResult::META_TYPE => 'array' ) ), '[[1]]' ),
				array( array( array( 'x' => 1, ApiResult::META_TYPE => 'kvp' ) ), '[{"x":1}]' ),
				array( array( array( 'x' => 1, ApiResult::META_TYPE => 'BCkvp', ApiResult::META_KVP_KEY_NAME => 'key' ) ),
					'[[{"key":"x","*":1}]]' ),
				array( array( array( 'x' => 1, ApiResult::META_TYPE => 'BCarray' ) ), '[{"x":1}]' ),
				array( array( array( 'a', 'b', ApiResult::META_TYPE => 'BCassoc' ) ), '[["a","b"]]' ),

				// Content
				array( array( 'content' => 'foo', ApiResult::META_CONTENT => 'content' ),
					'{"*":"foo"}' ),

				// BC Subelements
				array( array( 'foo' => 'foo', ApiResult::META_BC_SUBELEMENTS => array( 'foo' ) ),
					'{"foo":{"*":"foo"}}' ),

				// Callbacks
				array( array( 1 ), '/**/myCallback([1])', array( 'callback' => 'myCallback' ) ),

				// Cross-domain mangling
				array( array( '< Cross-Domain-Policy >' ), '["\u003C Cross-Domain-Policy >"]' ),
			) ),
			self::addFormatVersion( 2, array(
				// Basic types
				array( array( null ), '[null]' ),
				array( array( true ), '[true]' ),
				array( array( false ), '[false]' ),
				array( array( true, ApiResult::META_BC_BOOLS => array( 0 ) ), '[true]' ),
				array( array( false, ApiResult::META_BC_BOOLS => array( 0 ) ), '[false]' ),
				array( array( 42 ), '[42]' ),
				array( array( 42.5 ), '[42.5]' ),
				array( array( 1e42 ), '[1.0e+42]' ),
				array( array( 'foo' ), '["foo"]' ),
				array( array( 'fóo' ), '["fóo"]' ),
				array( array( 'fóo' ), '["f\u00f3o"]', array( 'ascii' => 1 ) ),

				// Arrays and objects
				array( array( array() ), '[[]]' ),
				array( array( array( 'x' => 1 ) ), '[{"x":1}]' ),
				array( array( array( 2 => 1 ) ), '[{"2":1}]' ),
				array( array( (object)array() ), '[{}]' ),
				array( array( array( 1, ApiResult::META_TYPE => 'assoc' ) ), '[{"0":1}]' ),
				array( array( array( 'x' => 1, ApiResult::META_TYPE => 'array' ) ), '[[1]]' ),
				array( array( array( 'x' => 1, ApiResult::META_TYPE => 'kvp' ) ), '[{"x":1}]' ),
				array( array( array( 'x' => 1, ApiResult::META_TYPE => 'BCkvp', ApiResult::META_KVP_KEY_NAME => 'key' ) ),
					'[{"x":1}]' ),
				array( array( array( 'x' => 1, ApiResult::META_TYPE => 'BCarray' ) ), '[[1]]' ),
				array( array( array( 'a', 'b', ApiResult::META_TYPE => 'BCassoc' ) ), '[{"0":"a","1":"b"}]' ),

				// Content
				array( array( 'content' => 'foo', ApiResult::META_CONTENT => 'content' ),
					'{"content":"foo"}' ),

				// BC Subelements
				array( array( 'foo' => 'foo', ApiResult::META_BC_SUBELEMENTS => array( 'foo' ) ),
					'{"foo":"foo"}' ),

				// Callbacks
				array( array( 1 ), '/**/myCallback([1])', array( 'callback' => 'myCallback' ) ),

				// Cross-domain mangling
				array( array( '< Cross-Domain-Policy >' ), '["\u003C Cross-Domain-Policy >"]' ),
			) )
		);
	}

}