diff --git a/VisualEditor.hooks.php b/VisualEditor.hooks.php index fcf8124346..f9eb001216 100644 --- a/VisualEditor.hooks.php +++ b/VisualEditor.hooks.php @@ -832,6 +832,7 @@ class VisualEditorHooks { 'modules/ve-mw/tests/dm/ve.dm.mwExample.js', 'modules/ve-mw/tests/dm/ve.dm.Converter.test.js', 'modules/ve-mw/tests/dm/ve.dm.MWImageModel.test.js', + 'modules/ve-mw/tests/dm/ve.dm.MWInternalLinkAnnotation.test.js', // VisualEditor ContentEditable Tests 'lib/ve/tests/ce/ve.ce.test.js', 'lib/ve/tests/ce/ve.ce.Document.test.js', diff --git a/modules/ve-mw/tests/dm/ve.dm.MWInternalLinkAnnotation.test.js b/modules/ve-mw/tests/dm/ve.dm.MWInternalLinkAnnotation.test.js new file mode 100644 index 0000000000..6f8555f372 --- /dev/null +++ b/modules/ve-mw/tests/dm/ve.dm.MWInternalLinkAnnotation.test.js @@ -0,0 +1,63 @@ +/*! + * VisualEditor DataModel MWInternalLinkAnnotation tests. + * + * @copyright 2011-2016 VisualEditor Team and others; see http://ve.mit-license.org + */ + +QUnit.module( 've.dm.MWInternalLinkAnnotation' ); + +QUnit.test( 'toDataElement', function ( assert ) { + var i, l, + doc = ve.dm.example.createExampleDocument(), + internalLink = function ( pageTitle ) { + var link = document.createElement( 'a' ); + link.setAttribute( 'href', location.origin + mw.Title.newFromText( pageTitle ).getUrl() ); + return link; + }, + cases = [ + { + msg: 'Simple', + element: internalLink( 'Foo' ), + expected: { + type: 'link/mwInternal', + attributes: { + hrefPrefix: '', + lookupTitle: 'Foo', + normalizedTitle: 'Foo', + origTitle: 'Foo', + title: 'Foo' + } + } + }, + { + // Because percent-encoded URLs aren't valid titles, but what they decode to might be + msg: 'Percent encoded characters', + element: internalLink( 'Foo?' ), + expected: { + type: 'link/mwInternal', + attributes: { + hrefPrefix: '', + lookupTitle: 'Foo?', + normalizedTitle: 'Foo?', + origTitle: 'Foo?', + title: 'Foo?' + } + } + } + ], + converter = new ve.dm.Converter( ve.dm.modelRegistry, ve.dm.nodeFactory, ve.dm.annotationFactory, ve.dm.metaItemFactory ); + + // toDataElement is called during a converter run, so we need to fake up a bit of state to test it. + // This would normally be done by ve.dm.converter.getModelFromDom. + converter.doc = doc.getHtmlDocument(); + converter.targetDoc = doc.getHtmlDocument(); + converter.store = doc.getStore(); + converter.internalList = doc.getInternalList(); + converter.contextStack = []; + + QUnit.expect( cases.length ); + + for ( i = 0, l = cases.length; i < l; i++ ) { + assert.deepEqual( ve.dm.MWInternalLinkAnnotation.static.toDataElement( [ cases[ i ].element ], converter ), cases[ i ].expected, cases[ i ].msg ); + } +} );