mirror of
https://gerrit.wikimedia.org/r/mediawiki/extensions/TemplateData
synced 2024-09-23 10:21:45 +00:00
Merge "Add test cases for (almost) all possible parsing errors"
This commit is contained in:
commit
75ca493b68
|
@ -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 {
|
||||
|
|
|
@ -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": {
|
||||
|
|
Loading…
Reference in a new issue