Merge "Add test cases for (almost) all possible parsing errors"

This commit is contained in:
jenkins-bot 2021-09-20 13:11:09 +00:00 committed by Gerrit Code Review
commit 75ca493b68
2 changed files with 114 additions and 10 deletions

View file

@ -500,7 +500,7 @@ class TemplateDataBlob {
foreach ( $data->maps as $consumerId => $map ) {
if ( !is_object( $map ) ) {
return Status::newFatal( 'templatedata-invalid-type', 'maps', 'object' );
return Status::newFatal( 'templatedata-invalid-type', "maps.$consumerId", 'object' );
}
foreach ( $map as $key => $value ) {
@ -522,7 +522,7 @@ class TemplateDataBlob {
return Status::newFatal(
'templatedata-invalid-param',
$value3,
"maps.{$consumerId}.{$key}"
"maps.$consumerId.{$key}[$key2][$key3]"
);
}
}
@ -531,7 +531,7 @@ class TemplateDataBlob {
return Status::newFatal(
'templatedata-invalid-param',
$value2,
"maps.{$consumerId}.{$key}"
"maps.$consumerId.{$key}[$key2]"
);
}
} else {

View file

@ -64,18 +64,74 @@ class TemplateDataBlobTest extends MediaWikiIntegrationTestCase {
'status' => '(templatedata-invalid-unknown: foo)',
'msg' => 'Unknown properties'
],
[
'input' => '{ "description": [], "params": {} }',
'status' => '(templatedata-invalid-type: description, string|object)',
],
[
'input' => '{}',
'status' => '(templatedata-invalid-missing: params, object)',
'msg' => 'Empty object'
],
[
'input' => '{
"foo": "bar"
}
',
'status' => '(templatedata-invalid-unknown: foo)',
'msg' => 'Unknown properties invalidate the blob'
'input' => '{ "params": [] }',
'status' => '(templatedata-invalid-type: params, object)',
],
[
'input' => '{ "params": { "a": [] } }',
'status' => '(templatedata-invalid-type: params.a, object)',
],
[
'input' => '{ "params": { "a": { "foo": "" } } }',
'status' => '(templatedata-invalid-unknown: params.a.foo)',
],
[
'input' => '{ "params": { "a": { "label": [] } } }',
'status' => '(templatedata-invalid-type: params.a.label, string|object)',
],
[
'input' => '{ "params": { "a": { "required": "" } } }',
'status' => '(templatedata-invalid-type: params.a.required, boolean)',
],
[
'input' => '{ "params": { "a": { "suggested": "" } } }',
'status' => '(templatedata-invalid-type: params.a.suggested, boolean)',
],
[
'input' => '{ "params": { "a": { "description": [] } } }',
'status' => '(templatedata-invalid-type: params.a.description, string|object)',
],
[
'input' => '{ "params": { "a": { "example": [] } } }',
'status' => '(templatedata-invalid-type: params.a.example, string|object)',
],
[
'input' => '{ "params": { "a": { "deprecated": [] } } }',
'status' => '(templatedata-invalid-type: params.a.deprecated, boolean|string)',
],
[
'input' => '{ "params": { "a": { "aliases": "" } } }',
'status' => '(templatedata-invalid-type: params.a.aliases, array)',
],
[
'input' => '{ "params": { "a": { "autovalue": [] } } }',
'status' => '(templatedata-invalid-type: params.a.autovalue, string)',
],
[
'input' => '{ "params": { "a": { "default": [] } } }',
'status' => '(templatedata-invalid-type: params.a.default, string|object)',
],
[
'input' => '{ "params": { "a": { "type": [] } } }',
'status' => '(templatedata-invalid-type: params.a.type, string)',
],
[
'input' => '{ "params": { "a": { "type": "" } } }',
'status' => '(templatedata-invalid-value: params.a.type)',
],
[
'input' => '{ "params": { "a": { "suggestedvalues": "" } } }',
'status' => '(templatedata-invalid-type: params.a.suggestedvalues, array)',
],
[
'input' => '{
@ -191,6 +247,10 @@ class TemplateDataBlobTest extends MediaWikiIntegrationTestCase {
',
'msg' => 'InterfaceText is expanded to langcode-keyed object, assuming content language'
],
[
'input' => '{ "params": { "b": { "inherits": "a" } } }',
'status' => '(templatedata-invalid-missing: params.a)',
],
[
'input' => '{
"description": "Document the documenter.",
@ -255,6 +315,14 @@ class TemplateDataBlobTest extends MediaWikiIntegrationTestCase {
'msg' => 'The inherits property copies over properties from another parameter '
. '(preserving overides)'
],
[
'input' => '{ "params": {}, "sets": {} }',
'status' => '(templatedata-invalid-type: sets, array)'
],
[
'input' => '{ "params": {}, "sets": [ [] ] }',
'status' => '(templatedata-invalid-value: sets.0)'
],
[
'input' => '{
"params": {},
@ -266,6 +334,14 @@ class TemplateDataBlobTest extends MediaWikiIntegrationTestCase {
}',
'status' => '(templatedata-invalid-missing: sets.0.params, array)'
],
[
'input' => '{ "params": {}, "sets": [ { "label": "", "params": {} } ] }',
'status' => '(templatedata-invalid-type: sets.0.params, array)'
],
[
'input' => '{ "params": {}, "sets": [ { "label": "", "params": [] } ] }',
'status' => '(templatedata-invalid-empty-array: sets.0.params)'
],
[
'input' => '{
"params": {
@ -280,6 +356,10 @@ class TemplateDataBlobTest extends MediaWikiIntegrationTestCase {
}',
'status' => '(templatedata-invalid-missing: sets.0.label, string|object)'
],
[
'input' => '{ "params": {}, "sets": [ { "label": [] } ] }',
'status' => '(templatedata-invalid-type: sets.0.label, string|object)'
],
[
'input' => '{
"params": {
@ -434,6 +514,26 @@ class TemplateDataBlobTest extends MediaWikiIntegrationTestCase {
',
'msg' => 'Parameter attributes preserve information.'
],
[
'input' => '{ "params": {}, "maps": [] }',
'status' => '(templatedata-invalid-type: maps, object)'
],
[
'input' => '{ "params": {}, "maps": { "a": [] } }',
'status' => '(templatedata-invalid-type: maps.a, object)'
],
[
'input' => '{ "params": {}, "maps": { "a": { "b": "c" } } }',
'status' => '(templatedata-invalid-param: c, maps.a.b)'
],
[
'input' => '{ "params": {}, "maps": { "a": { "b": [ {} ] } } }',
'status' => '(templatedata-invalid-type: maps.a.b[0], string|array)'
],
[
'input' => '{ "params": {}, "maps": { "a": { "b": [ "c" ] } } }',
'status' => '(templatedata-invalid-param: c, maps.a.b[0])'
],
[
'input' => '{
"params": {
@ -452,7 +552,7 @@ class TemplateDataBlobTest extends MediaWikiIntegrationTestCase {
}
}
}',
'status' => '(templatedata-invalid-param: quux, maps.application.things)'
'status' => '(templatedata-invalid-param: quux, maps.application.things[1][1])'
],
[
'input' => '{
@ -1164,6 +1264,10 @@ class TemplateDataBlobTest extends MediaWikiIntegrationTestCase {
',
'msg' => 'Custom paramOrder'
],
[
'input' => '{ "params": {}, "paramOrder": {} }',
'status' => '(templatedata-invalid-type: paramOrder, array)',
],
[
'input' => '{
"params": {