ApiFormatJsonTest.php 3.6 KB

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