Add tests for ve.ui.MWParameterPage class

Change-Id: Ie09ef4745c006822cc66e845cb16f54d62fa3b7e
This commit is contained in:
Thiemo Kreuz 2021-09-11 14:15:32 +02:00 committed by Thiemo Kreuz (WMDE)
parent 3f97610e6e
commit 3b59d7ce0d
3 changed files with 101 additions and 1 deletions

View file

@ -2824,6 +2824,7 @@
"lib/ve/tests/ui/inspectors/ve.ui.FragmentInspector.test.js",
"modules/ve-mw/tests/ui/inspectors/ve.ui.FragmentInspector.test.js",
"modules/ve-mw/tests/ui/pages/ve.ui.MWAddParameterPage.test.js",
"modules/ve-mw/tests/ui/pages/ve.ui.MWParameterPage.test.js",
"modules/ve-mw/tests/ui/widgets/ve.ui.MWParameterCheckboxInputWidget.test.js",
"modules/ve-mw/tests/ui/widgets/ve.ui.MWParameterSearchWidget.test.js",
"modules/ve-mw/tests/ui/widgets/ve.ui.MWTemplateTitleInputWidget.test.js",

View file

@ -0,0 +1,99 @@
QUnit.module( 've.ui.MWParameterPage', ve.test.utils.mwEnvironment );
[
[ undefined, '', ve.ui.MWLazyMultilineTextInputWidget ],
[ 'content', '', ve.ui.MWLazyMultilineTextInputWidget ],
[ 'line', '', OO.ui.TextInputWidget ],
[ 'line', '\n', ve.ui.MWLazyMultilineTextInputWidget ],
[ 'number', '', ve.ui.MWLazyMultilineTextInputWidget ],
[ 'boolean', '', ve.ui.MWLazyMultilineTextInputWidget ],
[ 'boolean', '0', ve.ui.MWParameterCheckboxInputWidget ],
[ 'boolean', '1', ve.ui.MWParameterCheckboxInputWidget ],
[ 'boolean', '2', ve.ui.MWLazyMultilineTextInputWidget ],
[ 'string', '', ve.ui.MWLazyMultilineTextInputWidget ],
[ 'date', '', ve.ui.MWLazyMultilineTextInputWidget ],
[ 'unbalanced-wikitext', '', ve.ui.MWLazyMultilineTextInputWidget ],
[ 'unknown', '', ve.ui.MWLazyMultilineTextInputWidget ],
[ 'url', '', OO.ui.TextInputWidget ],
[ 'url', 'http://example.com', OO.ui.TextInputWidget ],
[ 'url', 'BadUrl', ve.ui.MWLazyMultilineTextInputWidget ],
[ 'wiki-page-name', '', mw.widgets.TitleInputWidget ],
[ 'wiki-page-name', 'GoodTitle', mw.widgets.TitleInputWidget ],
[ 'wiki-page-name', '[[BadTitle]]', ve.ui.MWLazyMultilineTextInputWidget ],
[ 'wiki-user-name', '', mw.widgets.UserInputWidget ],
[ 'wiki-user-name', 'GoodTitle', mw.widgets.UserInputWidget ],
[ 'wiki-user-name', '[[BadTitle]]', ve.ui.MWLazyMultilineTextInputWidget ],
[ 'wiki-file-name', '', mw.widgets.TitleInputWidget ],
[ 'wiki-file-name', 'GoodTitle', mw.widgets.TitleInputWidget ],
[ 'wiki-file-name', '[[BadTitle]]', ve.ui.MWLazyMultilineTextInputWidget ],
[ 'wiki-template-name', '', mw.widgets.TitleInputWidget ],
[ 'wiki-template-name', 'GoodTitle', mw.widgets.TitleInputWidget ],
[ 'wiki-template-name', '[[BadTitle]]', ve.ui.MWLazyMultilineTextInputWidget ]
].forEach( ( [ type, value, expected ] ) =>
QUnit.test( `createValueInput: ${type}, ${value}`, ( assert ) => {
const transclusion = new ve.dm.MWTransclusionModel(),
template = new ve.dm.MWTemplateModel( transclusion, {} ),
parameter = new ve.dm.MWParameterModel( template, 'p', value );
template.getSpec().setTemplateData( { params: { p: { type } } } );
const page = new ve.ui.MWParameterPage( parameter ),
input = page.createValueInput();
assert.strictEqual( input.constructor.name, expected.prototype.constructor.name );
} )
);
// TODO: Test suggestedvalues
[
[
'', '', false,
'empty'
],
[
'some value', '', true,
'not empty'
],
[
'', 'some default', true,
'empty is meaningful because it is different from the default'
],
[
'some value', 'some default', true,
'value is different from the default'
],
[
'same', 'same', true,
'the default is probably not meaningful, but we can not be sure'
],
[
' ', '', true,
'whitespace is probably not meaningful, but we do not want to make this decision here'
],
[
'', ' ', true,
'same for the default'
]
].forEach( ( [ value, defaultValue, expected, message ] ) =>
QUnit.test( 'containsSomeValue: ' + message, ( assert ) => {
const transclusion = new ve.dm.MWTransclusionModel(),
template = new ve.dm.MWTemplateModel( transclusion, {} ),
parameter = new ve.dm.MWParameterModel( template, 'p', value );
template.getSpec().setTemplateData( { params: { p: { default: defaultValue } } } );
const page = new ve.ui.MWParameterPage( parameter );
assert.strictEqual( page.containsSomeValue(), expected );
} )
);

View file

@ -386,7 +386,7 @@ ve.ui.MWParameterPage.prototype.isSuggestedValueType = function ( type ) {
ve.ui.MWParameterPage.prototype.containsSomeValue = function () {
// Note: For templates that allow overriding a default value with nothing, the empty string is
// meaningful user input. For templates that don't, the parameter can never be truly empty.
return this.valueInput.getValue() || this.defaultValue;
return !!( this.valueInput.getValue() || this.defaultValue );
};
/**