'use strict';
/*!
* VisualEditor Cite specific test cases for the Converter. The cases in here use the document's
* store to store originalDomElements. The cases are ideally executed by calling modelFromDom
* tests first to load the store and domFromModel afterward so the store items can be retrived.
*
* @copyright 2011-2025 VisualEditor Team's Cite sub-team and others; see AUTHORS.txt
* @license MIT
*/
ve.dm.ConverterStoreTestCases = {};
ve.dm.ConverterStoreTestCases.cases = {
'Simple reference with stored original content': {
// T400052
// Given the following wikitext:
// [Foo]
data: [
{
type: 'paragraph',
internal: {
whitespace: [
undefined,
undefined,
undefined,
'\n'
]
}
},
{
type: 'mwReference',
attributes: {
mw: {
name: 'ref',
attrs: {},
body: {
id: 'mw-reference-text-cite_note-1'
}
},
originalMw: '{"name":"ref","attrs":{},"body":{"id":"mw-reference-text-cite_note-1"}}',
listIndex: 0,
listGroup: 'mwReference/',
listKey: 'auto/0',
refGroup: '',
contentsUsed: true,
refListItemId: 'mw-reference-text-cite_note-1'
},
originalDomElementsHash: 'hca9b910d9d8a6fd3'
},
{
type: '/mwReference'
},
{
type: '/paragraph'
},
{
type: 'mwReferencesList',
attributes: {
mw: {
name: 'references',
attrs: {},
autoGenerated: true
},
originalMw: '{"name":"references","attrs":{},"autoGenerated":true}',
refGroup: '',
listGroup: 'mwReference/',
isResponsive: true,
templateGenerated: false
},
originalDomElementsHash: 'h6fe86bb317c3b124',
internal: {
whitespace: [
'\n'
]
}
},
{
type: '/mwReferencesList'
},
{
type: 'internalList'
},
{
type: 'internalItem',
attributes: {
originalHtml: 'Foo'
}
},
{
type: 'paragraph',
internal: {
generated: 'wrapper'
}
},
'F',
'o',
'o',
{
type: '/paragraph'
},
{
type: '/internalItem'
},
{
type: '/internalList'
}
],
modify: undefined,
body: ve.dm.example.singleLine`
[1]
`,
clipboardBody: ve.dm.example.singleLine`[1]
`,
previewBody: ve.dm.example.singleLine`[1]
`,
storeItems: {
// Footnote
hca9b910d9d8a6fd3: $.parseHTML( ve.dm.example.singleLine`
[1]
` ),
// Reflist
h6fe86bb317c3b124: $.parseHTML( ve.dm.example.singleLine`
` )
}
}
};
// T400052
// Wikitext:
// [Default]
//
//
// [Main]
//
// [Foo]
// [Bar]
//
ve.dm.ConverterStoreTestCases.listDefinedAndDetails = {
data:
[
{
type: 'paragraph',
originalDomElementsHash: 'hffd4a3529e6f1d18',
internal: {
whitespace: [
undefined,
undefined,
undefined,
'\n'
]
}
},
{
type: 'mwReference',
attributes: {
mw: {
name: 'ref',
attrs: {},
body: {
id: 'mw-reference-text-cite_note-1'
}
},
originalMw: '{"name":"ref","attrs":{},"body":{"id":"mw-reference-text-cite_note-1"}}',
listIndex: 0,
listGroup: 'mwReference/',
listKey: 'auto/0',
refGroup: '',
contentsUsed: true,
refListItemId: 'mw-reference-text-cite_note-1'
},
originalDomElementsHash: 'h50aef2fb0481d319'
},
{
type: '/mwReference'
},
'\n',
{
type: 'mwReference',
attributes: {
mw: {
name: 'ref',
attrs: {
name: 'ldrOne'
}
},
originalMw: '{"name":"ref","attrs":{"name":"ldrOne"}}',
listIndex: 1,
listGroup: 'mwReference/',
listKey: 'literal/ldrOne',
refGroup: '',
contentsUsed: false
},
originalDomElementsHash: 'h81fd802c428ead14'
},
{
type: '/mwReference'
},
'\n',
{
type: 'mwReference',
attributes: {
mw: {
name: 'ref',
attrs: {
name: 'ldrTwo'
}
},
originalMw: '{"name":"ref","attrs":{"name":"ldrTwo"}}',
listIndex: 2,
listGroup: 'mwReference/',
listKey: 'literal/ldrTwo',
refGroup: '',
contentsUsed: false
},
originalDomElementsHash: 'h6e9838f4538f4359'
},
{
type: '/mwReference'
},
'\n',
{
type: 'mwReference',
attributes: {
mw: {
name: 'ref',
attrs: {
details: 'page 123'
},
body: {
id: 'mw-reference-text-cite_note-5'
},
mainBody: 'mw-reference-text-cite_note-book-4',
isSubRefWithMainBody: 1,
mainRef: 'book'
},
originalMw: '{"name":"ref","attrs":{"details":"page 123"},"body":{"id":"mw-reference-text-cite_note-5"},"mainBody":"mw-reference-text-cite_note-book-4","isSubRefWithMainBody":1,"mainRef":"book"}',
listIndex: 3,
listGroup: 'mwReference/',
listKey: 'auto/1',
refGroup: '',
contentsUsed: true,
mainRefKey: 'literal/book',
refListItemId: 'mw-reference-text-cite_note-5'
},
originalDomElementsHash: 'hee459d01aef341ad'
},
{
type: '/mwReference'
},
{
type: '/paragraph'
},
{
type: 'mwReferencesList',
attributes: {
mw: {
name: 'references',
attrs: {},
body: {
html: "\n[2]\n[3]\nMain"
}
},
originalMw: "{\"name\":\"references\",\"attrs\":{},\"body\":{\"html\":\"\\n[2]\\n[3]\\nMain\"}}",
refGroup: '',
listGroup: 'mwReference/',
isResponsive: true,
templateGenerated: false
},
originalDomElementsHash: 'h24725d7c524ddef6',
internal: {
whitespace: [
'\n'
]
}
},
{
type: 'paragraph',
internal: {
generated: 'wrapper',
whitespace: [
'\n'
]
}
},
{
type: 'mwReference',
attributes: {
mw: {
name: 'ref',
attrs: {
name: 'ldrOne'
},
body: {
id: 'mw-reference-text-cite_note-ldrOne-2'
}
},
originalMw: '{"name":"ref","attrs":{"name":"ldrOne"},"body":{"id":"mw-reference-text-cite_note-ldrOne-2"}}',
listIndex: 1,
listGroup: 'mwReference/',
listKey: 'literal/ldrOne',
refGroup: '',
contentsUsed: true,
refListItemId: 'mw-reference-text-cite_note-ldrOne-2'
},
originalDomElementsHash: 'h3521d3c4331d59a8'
},
{
type: '/mwReference'
},
'\n',
{
type: 'mwReference',
attributes: {
mw: {
name: 'ref',
attrs: {
name: 'ldrTwo'
},
body: {
id: 'mw-reference-text-cite_note-ldrTwo-3'
}
},
originalMw: '{"name":"ref","attrs":{"name":"ldrTwo"},"body":{"id":"mw-reference-text-cite_note-ldrTwo-3"}}',
listIndex: 2,
listGroup: 'mwReference/',
listKey: 'literal/ldrTwo',
refGroup: '',
contentsUsed: true,
refListItemId: 'mw-reference-text-cite_note-ldrTwo-3'
},
originalDomElementsHash: 'h2810f2a2f08070d3'
},
{
type: '/mwReference'
},
'\n',
{
type: 'mwReference',
attributes: {
mw: {
name: 'ref',
attrs: {
name: 'book',
group: ''
},
body: {
id: 'mw-reference-text-cite_note-book-4'
},
isSyntheticMainRef: 1
},
originalMw: '{"name":"ref","attrs":{"name":"book","group":""},"body":{"id":"mw-reference-text-cite_note-book-4"},"isSyntheticMainRef":1}',
listIndex: 4,
listGroup: 'mwReference/',
listKey: 'literal/book',
refGroup: '',
contentsUsed: true,
refListItemId: 'mw-reference-text-cite_note-book-4'
},
originalDomElementsHash: 'ha285b4de1e944435'
},
{
type: '/mwReference'
},
{
type: '/paragraph'
},
{
type: '/mwReferencesList'
},
{
type: 'internalList'
},
{
type: 'internalItem',
attributes: {
originalHtml: 'Default'
}
},
{
type: 'paragraph',
internal: {
generated: 'wrapper'
}
},
'D',
'e',
'f',
'a',
'u',
'l',
't',
{
type: '/paragraph'
},
{
type: '/internalItem'
},
{
type: 'internalItem',
attributes: {
originalHtml: 'Foo'
}
},
{
type: 'paragraph',
internal: {
generated: 'wrapper'
}
},
'F',
'o',
'o',
{
type: '/paragraph'
},
{
type: '/internalItem'
},
{
type: 'internalItem',
attributes: {
originalHtml: 'Bar'
}
},
{
type: 'paragraph',
internal: {
generated: 'wrapper'
}
},
'B',
'a',
'r',
{
type: '/paragraph'
},
{
type: '/internalItem'
},
{
type: 'internalItem',
attributes: {
originalHtml: 'page 123'
}
},
{
type: 'paragraph',
internal: {
generated: 'wrapper'
}
},
'p',
'a',
'g',
'e',
' ',
'1',
'2',
'3',
{
type: '/paragraph'
},
{
type: '/internalItem'
},
{
type: 'internalItem',
attributes: {
originalHtml: 'Main'
}
},
{
type: 'paragraph',
internal: {
generated: 'wrapper'
}
},
'M',
'a',
'i',
'n',
{
type: '/paragraph'
},
{
type: '/internalItem'
},
{
type: '/internalList'
}
],
body:
"[1]\n[2]\n[3]\n[4.1]
\n- ↑ Default
\n- ↑ Foo
\n- ↑ Bar
\n- Main
- ↑ page 123
\n
\n
",
storeItems:
{
hffd4a3529e6f1d18:
// eslint-disable-next-line no-jquery/no-parse-html-literal
$.parseHTML( '[1]\n[2]\n[3]\n[4.1]
' ),
h50aef2fb0481d319:
// eslint-disable-next-line no-jquery/no-parse-html-literal
$.parseHTML( '[1]' ),
h81fd802c428ead14:
// eslint-disable-next-line no-jquery/no-parse-html-literal
$.parseHTML( '[2]' ),
h6e9838f4538f4359:
// eslint-disable-next-line no-jquery/no-parse-html-literal
$.parseHTML( '[3]' ),
hee459d01aef341ad:
// eslint-disable-next-line no-jquery/no-parse-html-literal
$.parseHTML( '[4.1]' ),
h3521d3c4331d59a8:
// eslint-disable-next-line no-jquery/no-parse-html-literal
$.parseHTML( '[2]' ),
h2810f2a2f08070d3:
// eslint-disable-next-line no-jquery/no-parse-html-literal
$.parseHTML( '[3]' ),
ha285b4de1e944435:
// eslint-disable-next-line no-jquery/no-parse-html-literal
$.parseHTML( 'Main' ),
h24725d7c524ddef6:
// eslint-disable-next-line no-jquery/no-parse-html-literal
$.parseHTML( "- ↑ Default
\n- ↑ Foo
\n- ↑ Bar
\n- Main
- ↑ page 123
\n
\n
" )
}
};
ve.dm.ConverterStoreTestCases.cases[ 'List defined references and details' ] = {
data: ve.dm.ConverterStoreTestCases.listDefinedAndDetails.data,
body: ve.dm.ConverterStoreTestCases.listDefinedAndDetails.body,
storeItems: ve.dm.ConverterStoreTestCases.listDefinedAndDetails.storeItems,
fromDataBody:
'[1]\n[2]\n[3]\n[4.1]
\n- Default
- Foo
- Bar
- Main
- page 123
',
normalizedBody:
'[1]\n[2]\n[3]\n[4.1]
\n- Default
- Foo
- Bar
- Main
- page 123
',
clipboardBody:
'[1]\n[2]\n[3]\n[4.1]
\n',
previewBody:
'[1]↵[2]↵[3]↵[4.1]
\n',
innerWhitespace:
[
undefined,
undefined
],
preserveAnnotationDomElements:
true
};
// Wikitext after:
// [Default]
//
//
// [Main NEW]
//
// [Foo]
// [Bar]
//
ve.dm.ConverterStoreTestCases.cases[ 'List defined references and details ( editing main and details )' ] = {
data: ve.dm.ConverterStoreTestCases.listDefinedAndDetails.data,
body: ve.dm.ConverterStoreTestCases.listDefinedAndDetails.body,
storeItems: ve.dm.ConverterStoreTestCases.listDefinedAndDetails.storeItems,
modify:
( model ) => {
model.commit( ve.dm.Transaction.static.deserialize( [ 52, [ [ { type: 'paragraph', internal: { generated: 'wrapper', metaItems: [] } }, 'p', 'a', 'g', 'e', ' ', '1', '2', '3', { type: '/paragraph' } ], '' ], 10 ] ) );
model.commit( ve.dm.Transaction.static.deserialize( [ 26, [ [ { type: 'internalItem', attributes: { originalHtml: 'Default' } }, { type: 'paragraph', internal: { generated: 'wrapper', metaItems: [] } }, 'D', 'e', 'f', 'a', 'u', 'l', 't', { type: '/paragraph' }, { type: '/internalItem' }, { type: 'internalItem', attributes: { originalHtml: 'Foo' } }, { type: 'paragraph', internal: { generated: 'wrapper', metaItems: [] } }, 'F', 'o', 'o', { type: '/paragraph' }, { type: '/internalItem' }, { type: 'internalItem', attributes: { originalHtml: 'Bar' } }, { type: 'paragraph', internal: { generated: 'wrapper', metaItems: [] } }, 'B', 'a', 'r', { type: '/paragraph' }, { type: '/internalItem' }, { type: 'internalItem', attributes: { originalHtml: 'page 123' } }, { type: '/internalItem' }, { type: 'internalItem', attributes: { originalHtml: 'Main' } }, { type: 'paragraph', internal: { generated: 'wrapper', metaItems: [] } }, 'M', 'a', 'i', 'n', { type: '/paragraph' }, { type: '/internalItem' } ], [ { type: 'internalItem', attributes: { originalHtml: 'Default' } }, { type: 'paragraph', internal: { generated: 'wrapper' } }, 'D', 'e', 'f', 'a', 'u', 'l', 't', { type: '/paragraph' }, { type: '/internalItem' }, { type: 'internalItem', attributes: { originalHtml: 'Foo' } }, { type: 'paragraph', internal: { generated: 'wrapper' } }, 'F', 'o', 'o', { type: '/paragraph' }, { type: '/internalItem' }, { type: 'internalItem', attributes: { originalHtml: 'Bar' } }, { type: 'paragraph', internal: { generated: 'wrapper' } }, 'B', 'a', 'r', { type: '/paragraph' }, { type: '/internalItem' }, { type: 'internalItem', attributes: { originalHtml: 'page 123' } }, { type: 'paragraph', internal: { generated: 'wrapper' } }, 'p', 'a', 'g', 'e', ' ', '1', '2', '3', ' ', 'N', 'E', 'W', { type: '/paragraph' }, { type: '/internalItem' }, { type: 'internalItem', attributes: { originalHtml: 'Main' } }, { type: 'paragraph', internal: { generated: 'wrapper' } }, 'M', 'a', 'i', 'n', { type: '/paragraph' }, { type: '/internalItem' } ] ], 1 ] ) );
model.commit( ve.dm.Transaction.static.deserialize( [ 68, [ [ { type: 'paragraph', internal: { generated: 'wrapper' } }, 'M', 'a', 'i', 'n', { type: '/paragraph' } ], '' ], 2 ] ) );
model.commit( ve.dm.Transaction.static.deserialize( [ 26, [ [ { type: 'internalItem', attributes: { originalHtml: 'Default' } }, { type: 'paragraph', internal: { generated: 'wrapper' } }, 'D', 'e', 'f', 'a', 'u', 'l', 't', { type: '/paragraph' }, { type: '/internalItem' }, { type: 'internalItem', attributes: { originalHtml: 'Foo' } }, { type: 'paragraph', internal: { generated: 'wrapper' } }, 'F', 'o', 'o', { type: '/paragraph' }, { type: '/internalItem' }, { type: 'internalItem', attributes: { originalHtml: 'Bar' } }, { type: 'paragraph', internal: { generated: 'wrapper' } }, 'B', 'a', 'r', { type: '/paragraph' }, { type: '/internalItem' }, { type: 'internalItem', attributes: { originalHtml: 'page 123' } }, { type: 'paragraph', internal: { generated: 'wrapper' } }, 'p', 'a', 'g', 'e', ' ', '1', '2', '3', ' ', 'N', 'E', 'W', { type: '/paragraph' }, { type: '/internalItem' }, { type: 'internalItem', attributes: { originalHtml: 'Main' } }, { type: '/internalItem' } ], [ { type: 'internalItem', attributes: { originalHtml: 'Default' } }, { type: 'paragraph', internal: { generated: 'wrapper' } }, 'D', 'e', 'f', 'a', 'u', 'l', 't', { type: '/paragraph' }, { type: '/internalItem' }, { type: 'internalItem', attributes: { originalHtml: 'Foo' } }, { type: 'paragraph', internal: { generated: 'wrapper' } }, 'F', 'o', 'o', { type: '/paragraph' }, { type: '/internalItem' }, { type: 'internalItem', attributes: { originalHtml: 'Bar' } }, { type: 'paragraph', internal: { generated: 'wrapper' } }, 'B', 'a', 'r', { type: '/paragraph' }, { type: '/internalItem' }, { type: 'internalItem', attributes: { originalHtml: 'page 123' } }, { type: 'paragraph', internal: { generated: 'wrapper' } }, 'p', 'a', 'g', 'e', ' ', '1', '2', '3', ' ', 'N', 'E', 'W', { type: '/paragraph' }, { type: '/internalItem' }, { type: 'internalItem', attributes: { originalHtml: 'Main' } }, { type: 'paragraph', internal: { generated: 'wrapper' } }, 'M', 'a', 'i', 'n', ' ', 'N', 'E', 'W', { type: '/paragraph' }, { type: '/internalItem' } ] ], 1 ] ) );
},
fromDataBody:
'[1]\n[2]\n[3]\n[4.1]
\n- Default
- Foo
- Bar
- Main NEW
- page 123 NEW
',
normalizedBody:
'[1]\n[2]\n[3]\n[4.1]
\n- Default
- Foo
- Bar
- Main NEW
- page 123 NEW
',
clipboardBody:
'[1]\n[2]\n[3]\n[4.1]
\n',
previewBody:
'[1]↵[2]↵[3]↵[4.1]
\n',
innerWhitespace:
[
undefined,
undefined
],
preserveAnnotationDomElements:
true
};