|
|
@@ -21,6 +21,8 @@ import { getData as getViewData, parse as parseView } from '@ckeditor/ckeditor5-
|
|
|
import IndentEditing from '@ckeditor/ckeditor5-indent/src/indentediting';
|
|
|
|
|
|
import { getCode } from '@ckeditor/ckeditor5-utils/src/keyboard';
|
|
|
+import { assertEqualMarkup } from '@ckeditor/ckeditor5-utils/tests/_utils/utils';
|
|
|
+import TableEditing from '@ckeditor/ckeditor5-table/src/tableediting';
|
|
|
|
|
|
describe( 'ListEditing', () => {
|
|
|
let editor, model, modelDoc, modelRoot, view, viewDoc, viewRoot;
|
|
|
@@ -28,7 +30,7 @@ describe( 'ListEditing', () => {
|
|
|
beforeEach( () => {
|
|
|
return VirtualTestEditor
|
|
|
.create( {
|
|
|
- plugins: [ Clipboard, BoldEditing, ListEditing, UndoEditing, BlockQuoteEditing ]
|
|
|
+ plugins: [ Clipboard, BoldEditing, ListEditing, UndoEditing, BlockQuoteEditing, TableEditing ]
|
|
|
} )
|
|
|
.then( newEditor => {
|
|
|
editor = newEditor;
|
|
|
@@ -1287,14 +1289,381 @@ describe( 'ListEditing', () => {
|
|
|
|
|
|
describe( 'nested lists', () => {
|
|
|
describe( 'setting data', () => {
|
|
|
- function test( testName, string, expectedString = null ) {
|
|
|
- it( testName, () => {
|
|
|
+ function test( string, expectedString = null ) {
|
|
|
+ return () => {
|
|
|
editor.setData( string );
|
|
|
- expect( editor.getData() ).to.equal( expectedString || string );
|
|
|
- } );
|
|
|
+ assertEqualMarkup( editor.getData(), expectedString || string );
|
|
|
+ };
|
|
|
}
|
|
|
|
|
|
- test( 'bullet list simple structure',
|
|
|
+ describe( 'non HTML compliant list fixing', () => {
|
|
|
+ it( 'ul in ul', test(
|
|
|
+ '<ul>' +
|
|
|
+ '<ul>' +
|
|
|
+ '<li>1.1</li>' +
|
|
|
+ '</ul>' +
|
|
|
+ '</ul>',
|
|
|
+ '<ul>' +
|
|
|
+ '<li>1.1</li>' +
|
|
|
+ '</ul>'
|
|
|
+ ) );
|
|
|
+
|
|
|
+ it( 'ul in ol', test(
|
|
|
+ '<ol>' +
|
|
|
+ '<ul>' +
|
|
|
+ '<li>1.1</li>' +
|
|
|
+ '</ul>' +
|
|
|
+ '</ol>',
|
|
|
+ '<ul>' +
|
|
|
+ '<li>1.1</li>' +
|
|
|
+ '</ul>'
|
|
|
+ ) );
|
|
|
+
|
|
|
+ it( 'ul in ul (previous sibling is li)', test(
|
|
|
+ '<ul>' +
|
|
|
+ '<li>1</li>' +
|
|
|
+ '<ul>' +
|
|
|
+ '<li>2.1</li>' +
|
|
|
+ '</ul>' +
|
|
|
+ '</ul>',
|
|
|
+ '<ul>' +
|
|
|
+ '<li>1' +
|
|
|
+ '<ul>' +
|
|
|
+ '<li>2.1</li>' +
|
|
|
+ '</ul>' +
|
|
|
+ '</li>' +
|
|
|
+ '</ul>'
|
|
|
+ ) );
|
|
|
+
|
|
|
+ it( 'ul in deeply nested ul - base index > 0 #1', test(
|
|
|
+ '<ul>' +
|
|
|
+ '<li>1.1</li>' +
|
|
|
+ '<li>1.2' +
|
|
|
+ '<ul>' +
|
|
|
+ '<ul>' +
|
|
|
+ '<ul>' +
|
|
|
+ '<ul>' +
|
|
|
+ '<li>2.1</li>' +
|
|
|
+ '</ul>' +
|
|
|
+ '</ul>' +
|
|
|
+ '</ul>' +
|
|
|
+ '</ul>' +
|
|
|
+ '</li>' +
|
|
|
+ '</ul>',
|
|
|
+ '<ul>' +
|
|
|
+ '<li>1.1</li>' +
|
|
|
+ '<li>1.2' +
|
|
|
+ '<ul>' +
|
|
|
+ '<li>2.1</li>' +
|
|
|
+ '</ul>' +
|
|
|
+ '</li>' +
|
|
|
+ '</ul>'
|
|
|
+ ) );
|
|
|
+
|
|
|
+ it( 'ul in deeply nested ul - base index > 0 #2', test(
|
|
|
+ '<ul>' +
|
|
|
+ '<li>1.1</li>' +
|
|
|
+ '<li>1.2' +
|
|
|
+ '<ul>' +
|
|
|
+ '<li>2.1</li>' +
|
|
|
+ '<ul>' +
|
|
|
+ '<ul>' +
|
|
|
+ '<ul>' +
|
|
|
+ '<li>3.1</li>' +
|
|
|
+ '</ul>' +
|
|
|
+ '</ul>' +
|
|
|
+ '</ul>' +
|
|
|
+ '<li>2.2</li>' +
|
|
|
+ '</ul>' +
|
|
|
+ '</li>' +
|
|
|
+ '</ul>',
|
|
|
+ '<ul>' +
|
|
|
+ '<li>1.1</li>' +
|
|
|
+ '<li>1.2' +
|
|
|
+ '<ul>' +
|
|
|
+ '<li>2.1' +
|
|
|
+ '<ul>' +
|
|
|
+ '<li>3.1</li>' +
|
|
|
+ '</ul>' +
|
|
|
+ '</li>' +
|
|
|
+ '<li>2.2</li>' +
|
|
|
+ '</ul>' +
|
|
|
+ '</li>' +
|
|
|
+ '</ul>'
|
|
|
+ ) );
|
|
|
+
|
|
|
+ it( 'ul in deeply nested ul inside li', test(
|
|
|
+ '<ul>' +
|
|
|
+ '<li>A' +
|
|
|
+ '<ul>' +
|
|
|
+ '<ul>' +
|
|
|
+ '<ul>' +
|
|
|
+ '<ul>' +
|
|
|
+ '<li>B</li>' +
|
|
|
+ '</ul>' +
|
|
|
+ '</ul>' +
|
|
|
+ '</ul>' +
|
|
|
+ '<li>C</li>' +
|
|
|
+ '</ul>' +
|
|
|
+ '</li>' +
|
|
|
+ '</ul>',
|
|
|
+ '<ul>' +
|
|
|
+ '<li>A' +
|
|
|
+ '<ul>' +
|
|
|
+ '<li>B</li>' +
|
|
|
+ '<li>C</li>' +
|
|
|
+ '</ul>' +
|
|
|
+ '</li>' +
|
|
|
+ '</ul>'
|
|
|
+ ) );
|
|
|
+
|
|
|
+ it( 'ul in deeply nested ul/ol', test(
|
|
|
+ '<ul>' +
|
|
|
+ '<li>A' +
|
|
|
+ '<ol>' +
|
|
|
+ '<ul>' +
|
|
|
+ '<ol>' +
|
|
|
+ '<ul>' +
|
|
|
+ '<li>B</li>' +
|
|
|
+ '</ul>' +
|
|
|
+ '</ol>' +
|
|
|
+ '</ul>' +
|
|
|
+ '<li>C</li>' +
|
|
|
+ '</ol>' +
|
|
|
+ '</li>' +
|
|
|
+ '</ul>',
|
|
|
+ '<ul>' +
|
|
|
+ '<li>A' +
|
|
|
+ '<ul>' +
|
|
|
+ '<li>B</li>' +
|
|
|
+ '<li>C</li>' +
|
|
|
+ '</ul>' +
|
|
|
+ '</li>' +
|
|
|
+ '</ul>'
|
|
|
+ ) );
|
|
|
+
|
|
|
+ it( 'ul in ul (complex case)', test(
|
|
|
+ '<ol>' +
|
|
|
+ '<li>1</li>' +
|
|
|
+ '<ul>' +
|
|
|
+ '<li>A</li>' +
|
|
|
+ '<ol>' +
|
|
|
+ '<li>1</li>' +
|
|
|
+ '</ol>' +
|
|
|
+ '</ul>' +
|
|
|
+ '<li>2</li>' +
|
|
|
+ '<li>3</li>' +
|
|
|
+ '<ul>' +
|
|
|
+ '<li>A</li>' +
|
|
|
+ '<li>B</li>' +
|
|
|
+ '</ul>' +
|
|
|
+ '</ol>' +
|
|
|
+ '<ul>' +
|
|
|
+ '<li>A</li>' +
|
|
|
+ '<ol>' +
|
|
|
+ '<li>1</li>' +
|
|
|
+ '<li>2</li>' +
|
|
|
+ '</ol>' +
|
|
|
+ '</ul>',
|
|
|
+ '<ol>' +
|
|
|
+ '<li>1' +
|
|
|
+ '<ul>' +
|
|
|
+ '<li>A' +
|
|
|
+ '<ol>' +
|
|
|
+ '<li>1</li>' +
|
|
|
+ '</ol>' +
|
|
|
+ '</li>' +
|
|
|
+ '</ul>' +
|
|
|
+ '</li>' +
|
|
|
+ '<li>2</li>' +
|
|
|
+ '<li>3' +
|
|
|
+ '<ul>' +
|
|
|
+ '<li>A</li>' +
|
|
|
+ '<li>B</li>' +
|
|
|
+ '</ul>' +
|
|
|
+ '</li>' +
|
|
|
+ '</ol>' +
|
|
|
+ '<ul>' +
|
|
|
+ '<li>A' +
|
|
|
+ '<ol>' +
|
|
|
+ '<li>1</li>' +
|
|
|
+ '<li>2</li>' +
|
|
|
+ '</ol>' +
|
|
|
+ '</li>' +
|
|
|
+ '</ul>'
|
|
|
+ ) );
|
|
|
+
|
|
|
+ it( 'ol in ol (deep structure)', test(
|
|
|
+ '<ol>' +
|
|
|
+ '<li>A1</li>' +
|
|
|
+ '<ol>' +
|
|
|
+ '<ol>' +
|
|
|
+ '<ol>' +
|
|
|
+ '<ol>' +
|
|
|
+ '<ol>' +
|
|
|
+ '<ol>' +
|
|
|
+ '<ol>' +
|
|
|
+ '<li>B8</li>' +
|
|
|
+ '</ol>' +
|
|
|
+ '</ol>' +
|
|
|
+ '</ol>' +
|
|
|
+ '</ol>' +
|
|
|
+ '</ol>' +
|
|
|
+ '<li>C3</li>' +
|
|
|
+ '<ol>' +
|
|
|
+ '<li>D4</li>' +
|
|
|
+ '</ol>' +
|
|
|
+ '</ol>' +
|
|
|
+ '<li>E2</li>' +
|
|
|
+ '</ol>' +
|
|
|
+ '</ol>',
|
|
|
+ '<ol>' +
|
|
|
+ '<li>A1' +
|
|
|
+ '<ol>' +
|
|
|
+ '<li>B8</li>' +
|
|
|
+ '<li>C3' +
|
|
|
+ '<ol>' +
|
|
|
+ '<li>D4</li>' +
|
|
|
+ '</ol>' +
|
|
|
+ '</li>' +
|
|
|
+ '<li>E2</li>' +
|
|
|
+ '</ol>' +
|
|
|
+ '</li>' +
|
|
|
+ '</ol>'
|
|
|
+ ) );
|
|
|
+
|
|
|
+ it( 'block elements wrapping nested ul', test(
|
|
|
+ 'text before' +
|
|
|
+ '<ul>' +
|
|
|
+ '<li>' +
|
|
|
+ 'text' +
|
|
|
+ '<div>' +
|
|
|
+ '<ul>' +
|
|
|
+ '<li>inner text</li>' +
|
|
|
+ '</ul>' +
|
|
|
+ '</div>' +
|
|
|
+ '</li>' +
|
|
|
+ '</ul>',
|
|
|
+ '<p>text before</p>' +
|
|
|
+ '<ul>' +
|
|
|
+ '<li>' +
|
|
|
+ 'text' +
|
|
|
+ '<ul>' +
|
|
|
+ '<li>inner text</li>' +
|
|
|
+ '</ul>' +
|
|
|
+ '</li>' +
|
|
|
+ '</ul>'
|
|
|
+ ) );
|
|
|
+
|
|
|
+ it( 'block elements wrapping nested ul - invalid blocks', test(
|
|
|
+ '<ul>' +
|
|
|
+ '<li>' +
|
|
|
+ 'a' +
|
|
|
+ '<table>' +
|
|
|
+ '<tr>' +
|
|
|
+ '<td>' +
|
|
|
+ '<div>' +
|
|
|
+ '<ul>' +
|
|
|
+ '<li>b</li>' +
|
|
|
+ '<li>c' +
|
|
|
+ '<ul>' +
|
|
|
+ '<li>' +
|
|
|
+ 'd' +
|
|
|
+ '<table>' +
|
|
|
+ '<tr>' +
|
|
|
+ '<td>' +
|
|
|
+ 'e' +
|
|
|
+ '</td>' +
|
|
|
+ '</tr>' +
|
|
|
+ '</table>' +
|
|
|
+ '</li>' +
|
|
|
+ '</ul>' +
|
|
|
+ '</li>' +
|
|
|
+ '</ul>' +
|
|
|
+ '</div>' +
|
|
|
+ '</td>' +
|
|
|
+ '</tr>' +
|
|
|
+ '</table>' +
|
|
|
+ 'f' +
|
|
|
+ '</li>' +
|
|
|
+ '<li>g</li>' +
|
|
|
+ '</ul>',
|
|
|
+ '<ul>' +
|
|
|
+ '<li>a</li>' +
|
|
|
+ '</ul>' +
|
|
|
+ '<figure class="table">' +
|
|
|
+ '<table>' +
|
|
|
+ '<tbody>' +
|
|
|
+ '<tr>' +
|
|
|
+ '<td>' +
|
|
|
+ '<ul>' +
|
|
|
+ '<li>b</li>' +
|
|
|
+ '<li>c<ul>' +
|
|
|
+ '<li>d</li>' +
|
|
|
+ '</ul>' +
|
|
|
+ '</li>' +
|
|
|
+ '</ul>' +
|
|
|
+ '<p>e</p>' +
|
|
|
+ '</td>' +
|
|
|
+ '</tr>' +
|
|
|
+ '</tbody>' +
|
|
|
+ '</table>' +
|
|
|
+ '</figure>' +
|
|
|
+ '<ul>' +
|
|
|
+ '<li>f</li>' +
|
|
|
+ '<li>g</li>' +
|
|
|
+ '</ul>'
|
|
|
+ ) );
|
|
|
+
|
|
|
+ it( 'deeply nested block elements wrapping nested ul', test(
|
|
|
+ '<ul>' +
|
|
|
+ '<li>' +
|
|
|
+ 'a' +
|
|
|
+ '<div>' +
|
|
|
+ '<div>' +
|
|
|
+ '<ul>' +
|
|
|
+ '<li>b</li>' +
|
|
|
+ '<li>c' +
|
|
|
+ '<ul>' +
|
|
|
+ '<li>d' +
|
|
|
+ '<div>' +
|
|
|
+ '<ul>' +
|
|
|
+ '<li>e</li>' +
|
|
|
+ '</ul>' +
|
|
|
+ '</div>' +
|
|
|
+ '</li>' +
|
|
|
+ '</ul>' +
|
|
|
+ '</li>' +
|
|
|
+ '</ul>' +
|
|
|
+ '</div>' +
|
|
|
+ '</div>' +
|
|
|
+ 'f' +
|
|
|
+ '</li>' +
|
|
|
+ '<li>g</li>' +
|
|
|
+ '</ul>' +
|
|
|
+ '</ul>',
|
|
|
+ '<ul>' +
|
|
|
+ '<li>a' +
|
|
|
+ '<ul>' +
|
|
|
+ '<li>b</li>' +
|
|
|
+ '<li>c' +
|
|
|
+ '<ul>' +
|
|
|
+ '<li>d' +
|
|
|
+ '<ul>' +
|
|
|
+ '<li>e</li>' +
|
|
|
+ '</ul>' +
|
|
|
+ '</li>' +
|
|
|
+ '</ul>' +
|
|
|
+ '</li>' +
|
|
|
+ '</ul>' +
|
|
|
+ '</li>' +
|
|
|
+ '<li>f</li>' +
|
|
|
+ '<li>g</li>' +
|
|
|
+ '</ul>'
|
|
|
+ ) );
|
|
|
+ } );
|
|
|
+
|
|
|
+ it( 'bullet list simple structure', test(
|
|
|
'<p>foo</p>' +
|
|
|
'<ul>' +
|
|
|
'<li>' +
|
|
|
@@ -1305,9 +1674,9 @@ describe( 'ListEditing', () => {
|
|
|
'</li>' +
|
|
|
'</ul>' +
|
|
|
'<p>bar</p>'
|
|
|
- );
|
|
|
+ ) );
|
|
|
|
|
|
- test( 'bullet list deep structure',
|
|
|
+ it( 'bullet list deep structure', test(
|
|
|
'<p>foo</p>' +
|
|
|
'<ul>' +
|
|
|
'<li>' +
|
|
|
@@ -1341,9 +1710,9 @@ describe( 'ListEditing', () => {
|
|
|
'</li>' +
|
|
|
'</ul>' +
|
|
|
'<p>bar</p>'
|
|
|
- );
|
|
|
+ ) );
|
|
|
|
|
|
- test( 'mixed lists deep structure',
|
|
|
+ it( 'mixed lists deep structure', test(
|
|
|
'<p>foo</p>' +
|
|
|
'<ul>' +
|
|
|
'<li>' +
|
|
|
@@ -1419,9 +1788,9 @@ describe( 'ListEditing', () => {
|
|
|
'</li>' +
|
|
|
'</ul>' +
|
|
|
'<p>bar</p>'
|
|
|
- );
|
|
|
+ ) );
|
|
|
|
|
|
- test( 'mixed lists deep structure, white spaces, incorrect content, empty items',
|
|
|
+ it( 'mixed lists deep structure, white spaces, incorrect content, empty items', test(
|
|
|
'<p>foo</p>' +
|
|
|
'<ul>' +
|
|
|
' xxx' +
|
|
|
@@ -1508,44 +1877,98 @@ describe( 'ListEditing', () => {
|
|
|
'</li>' +
|
|
|
'</ul>' +
|
|
|
'<p>bar</p>'
|
|
|
- );
|
|
|
+ ) );
|
|
|
|
|
|
- it( 'model test for nested lists', () => {
|
|
|
- // <ol> in the middle will be fixed by postfixer to bulleted list.
|
|
|
- editor.setData(
|
|
|
- '<p>foo</p>' +
|
|
|
- '<ul>' +
|
|
|
- '<li>' +
|
|
|
- '1' +
|
|
|
- '<ul>' +
|
|
|
- '<li>1.1</li>' +
|
|
|
- '</ul>' +
|
|
|
- '<ol>' +
|
|
|
- '<li>' +
|
|
|
- '1.2' +
|
|
|
- '<ol>' +
|
|
|
- '<li>1.2.1</li>' +
|
|
|
- '</ol>' +
|
|
|
- '</li>' +
|
|
|
- '<li>1.3</li>' +
|
|
|
- '</ol>' +
|
|
|
- '</li>' +
|
|
|
- '<li>2</li>' +
|
|
|
- '</ul>' +
|
|
|
- '<p>bar</p>'
|
|
|
- );
|
|
|
+ describe( 'model tests for nested lists', () => {
|
|
|
+ it( 'should properly set listIndent and listType', () => {
|
|
|
+ // <ol> in the middle will be fixed by postfixer to bulleted list.
|
|
|
+ editor.setData(
|
|
|
+ '<p>foo</p>' +
|
|
|
+ '<ul>' +
|
|
|
+ '<li>' +
|
|
|
+ '1' +
|
|
|
+ '<ul>' +
|
|
|
+ '<li>1.1</li>' +
|
|
|
+ '</ul>' +
|
|
|
+ '<ol>' +
|
|
|
+ '<li>' +
|
|
|
+ '1.2' +
|
|
|
+ '<ol>' +
|
|
|
+ '<li>1.2.1</li>' +
|
|
|
+ '</ol>' +
|
|
|
+ '</li>' +
|
|
|
+ '<li>1.3</li>' +
|
|
|
+ '</ol>' +
|
|
|
+ '</li>' +
|
|
|
+ '<li>2</li>' +
|
|
|
+ '</ul>' +
|
|
|
+ '<p>bar</p>'
|
|
|
+ );
|
|
|
|
|
|
- const expectedModelData =
|
|
|
- '<paragraph>foo</paragraph>' +
|
|
|
- '<listItem listIndent="0" listType="bulleted">1</listItem>' +
|
|
|
- '<listItem listIndent="1" listType="bulleted">1.1</listItem>' +
|
|
|
- '<listItem listIndent="1" listType="bulleted">1.2</listItem>' +
|
|
|
- '<listItem listIndent="2" listType="numbered">1.2.1</listItem>' +
|
|
|
- '<listItem listIndent="1" listType="bulleted">1.3</listItem>' +
|
|
|
- '<listItem listIndent="0" listType="bulleted">2</listItem>' +
|
|
|
- '<paragraph>bar</paragraph>';
|
|
|
+ const expectedModelData =
|
|
|
+ '<paragraph>foo</paragraph>' +
|
|
|
+ '<listItem listIndent="0" listType="bulleted">1</listItem>' +
|
|
|
+ '<listItem listIndent="1" listType="bulleted">1.1</listItem>' +
|
|
|
+ '<listItem listIndent="1" listType="bulleted">1.2</listItem>' +
|
|
|
+ '<listItem listIndent="2" listType="numbered">1.2.1</listItem>' +
|
|
|
+ '<listItem listIndent="1" listType="bulleted">1.3</listItem>' +
|
|
|
+ '<listItem listIndent="0" listType="bulleted">2</listItem>' +
|
|
|
+ '<paragraph>bar</paragraph>';
|
|
|
|
|
|
- expect( getModelData( model, { withoutSelection: true } ) ).to.equal( expectedModelData );
|
|
|
+ assertEqualMarkup( getModelData( model, { withoutSelection: true } ), expectedModelData );
|
|
|
+ } );
|
|
|
+
|
|
|
+ it( 'should properly listIndent when list nested in other block', () => {
|
|
|
+ editor.setData(
|
|
|
+ '<ul>' +
|
|
|
+ '<li>' +
|
|
|
+ 'a' +
|
|
|
+ '<table>' +
|
|
|
+ '<tr>' +
|
|
|
+ '<td>' +
|
|
|
+ '<div>' +
|
|
|
+ '<ul>' +
|
|
|
+ '<li>b</li>' +
|
|
|
+ '<li>c' +
|
|
|
+ '<ul>' +
|
|
|
+ '<li>' +
|
|
|
+ 'd' +
|
|
|
+ '<table>' +
|
|
|
+ '<tr>' +
|
|
|
+ '<td>e</td>' +
|
|
|
+ '</tr>' +
|
|
|
+ '</table>' +
|
|
|
+ '</li>' +
|
|
|
+ '</ul>' +
|
|
|
+ '</li>' +
|
|
|
+ '</ul>' +
|
|
|
+ '</div>' +
|
|
|
+ '</td>' +
|
|
|
+ '</tr>' +
|
|
|
+ '</table>' +
|
|
|
+ 'f' +
|
|
|
+ '</li>' +
|
|
|
+ '<li>g</li>' +
|
|
|
+ '</ul>',
|
|
|
+ );
|
|
|
+
|
|
|
+ const expectedModelData =
|
|
|
+ '<listItem listIndent="0" listType="bulleted">a</listItem>' +
|
|
|
+ '<table>' +
|
|
|
+ '<tableRow>' +
|
|
|
+ '<tableCell>' +
|
|
|
+ '<listItem listIndent="0" listType="bulleted">b</listItem>' +
|
|
|
+ '<listItem listIndent="0" listType="bulleted">c</listItem>' +
|
|
|
+ '<listItem listIndent="1" listType="bulleted">d</listItem>' +
|
|
|
+ '<paragraph>e</paragraph>' +
|
|
|
+ '</tableCell>' +
|
|
|
+ '</tableRow>' +
|
|
|
+ '</table>' +
|
|
|
+ '<listItem listIndent="0" listType="bulleted">f</listItem>' +
|
|
|
+ '<listItem listIndent="0" listType="bulleted">g</listItem>';
|
|
|
+
|
|
|
+ assertEqualMarkup( getModelData( model, { withoutSelection: true } ), expectedModelData );
|
|
|
+ } );
|
|
|
} );
|
|
|
} );
|
|
|
|
|
|
@@ -3115,8 +3538,8 @@ describe( 'ListEditing', () => {
|
|
|
|
|
|
describe( 'post fixer', () => {
|
|
|
describe( 'insert', () => {
|
|
|
- function test( testName, input, inserted, output ) {
|
|
|
- it( testName, () => {
|
|
|
+ function test( input, inserted, output ) {
|
|
|
+ return () => {
|
|
|
// Wrap all changes in one block to avoid post-fixing the selection
|
|
|
// (which may be incorret) in the meantime.
|
|
|
model.change( () => {
|
|
|
@@ -3128,12 +3551,10 @@ describe( 'ListEditing', () => {
|
|
|
} );
|
|
|
|
|
|
expect( getModelData( model, { withoutSelection: true } ) ).to.equal( output );
|
|
|
- } );
|
|
|
+ };
|
|
|
}
|
|
|
|
|
|
- test(
|
|
|
- 'element before nested list',
|
|
|
-
|
|
|
+ it( 'element before nested list', test(
|
|
|
'<listItem listIndent="0" listType="bulleted">a</listItem>' +
|
|
|
'<listItem listIndent="1" listType="bulleted">b</listItem>' +
|
|
|
'[]' +
|
|
|
@@ -3149,11 +3570,9 @@ describe( 'ListEditing', () => {
|
|
|
'<listItem listIndent="0" listType="bulleted">d</listItem>' +
|
|
|
'<listItem listIndent="0" listType="bulleted">e</listItem>' +
|
|
|
'<listItem listIndent="1" listType="bulleted">f</listItem>'
|
|
|
- );
|
|
|
-
|
|
|
- test(
|
|
|
- 'list item before nested list',
|
|
|
+ ) );
|
|
|
|
|
|
+ it( 'list item before nested list', test(
|
|
|
'<listItem listIndent="0" listType="bulleted">a</listItem>' +
|
|
|
'<listItem listIndent="1" listType="bulleted">b</listItem>' +
|
|
|
'[]' +
|
|
|
@@ -3169,11 +3588,9 @@ describe( 'ListEditing', () => {
|
|
|
'<listItem listIndent="1" listType="bulleted">d</listItem>' +
|
|
|
'<listItem listIndent="1" listType="bulleted">e</listItem>' +
|
|
|
'<listItem listIndent="2" listType="bulleted">f</listItem>'
|
|
|
- );
|
|
|
-
|
|
|
- test(
|
|
|
- 'multiple list items with too big indent',
|
|
|
+ ) );
|
|
|
|
|
|
+ it( 'multiple list items with too big indent', test(
|
|
|
'<listItem listIndent="0" listType="bulleted">a</listItem>' +
|
|
|
'<listItem listIndent="1" listType="bulleted">b</listItem>' +
|
|
|
'[]' +
|
|
|
@@ -3189,11 +3606,9 @@ describe( 'ListEditing', () => {
|
|
|
'<listItem listIndent="3" listType="bulleted">x</listItem>' +
|
|
|
'<listItem listIndent="2" listType="bulleted">x</listItem>' +
|
|
|
'<listItem listIndent="1" listType="bulleted">c</listItem>'
|
|
|
- );
|
|
|
-
|
|
|
- test(
|
|
|
- 'item with different type - top level list',
|
|
|
+ ) );
|
|
|
|
|
|
+ it( 'item with different type - top level list', test(
|
|
|
'<listItem listIndent="0" listType="bulleted">a</listItem>' +
|
|
|
'<listItem listIndent="0" listType="bulleted">b</listItem>' +
|
|
|
'[]' +
|
|
|
@@ -3205,11 +3620,9 @@ describe( 'ListEditing', () => {
|
|
|
'<listItem listIndent="0" listType="bulleted">b</listItem>' +
|
|
|
'<listItem listIndent="0" listType="numbered">x</listItem>' +
|
|
|
'<listItem listIndent="0" listType="bulleted">c</listItem>'
|
|
|
- );
|
|
|
-
|
|
|
- test(
|
|
|
- 'multiple items with different type - nested list',
|
|
|
+ ) );
|
|
|
|
|
|
+ it( 'multiple items with different type - nested list', test(
|
|
|
'<listItem listIndent="0" listType="bulleted">a</listItem>' +
|
|
|
'<listItem listIndent="1" listType="bulleted">b</listItem>' +
|
|
|
'[]' +
|
|
|
@@ -3223,11 +3636,9 @@ describe( 'ListEditing', () => {
|
|
|
'<listItem listIndent="1" listType="bulleted">x</listItem>' +
|
|
|
'<listItem listIndent="2" listType="numbered">x</listItem>' +
|
|
|
'<listItem listIndent="2" listType="numbered">c</listItem>'
|
|
|
- );
|
|
|
-
|
|
|
- test(
|
|
|
- 'item with different type, in nested list, after nested list',
|
|
|
+ ) );
|
|
|
|
|
|
+ it( 'item with different type, in nested list, after nested list', test(
|
|
|
'<listItem listIndent="0" listType="bulleted">a</listItem>' +
|
|
|
'<listItem listIndent="1" listType="bulleted">b</listItem>' +
|
|
|
'<listItem listIndent="2" listType="bulleted">c</listItem>' +
|
|
|
@@ -3239,7 +3650,7 @@ describe( 'ListEditing', () => {
|
|
|
'<listItem listIndent="1" listType="bulleted">b</listItem>' +
|
|
|
'<listItem listIndent="2" listType="bulleted">c</listItem>' +
|
|
|
'<listItem listIndent="1" listType="bulleted">x</listItem>'
|
|
|
- );
|
|
|
+ ) );
|
|
|
|
|
|
it( 'two list items with mismatched types inserted in one batch', () => {
|
|
|
const input =
|
|
|
@@ -3267,8 +3678,8 @@ describe( 'ListEditing', () => {
|
|
|
} );
|
|
|
|
|
|
describe( 'remove', () => {
|
|
|
- function test( testName, input, output ) {
|
|
|
- it( testName, () => {
|
|
|
+ function test( input, output ) {
|
|
|
+ return () => {
|
|
|
model.change( writer => {
|
|
|
setModelData( model, input );
|
|
|
|
|
|
@@ -3276,23 +3687,19 @@ describe( 'ListEditing', () => {
|
|
|
} );
|
|
|
|
|
|
expect( getModelData( model, { withoutSelection: true } ) ).to.equal( output );
|
|
|
- } );
|
|
|
+ };
|
|
|
}
|
|
|
|
|
|
- test(
|
|
|
- 'first list item',
|
|
|
-
|
|
|
+ it( 'first list item', test(
|
|
|
'[<listItem listIndent="0" listType="bulleted">a</listItem>]' +
|
|
|
'<listItem listIndent="1" listType="bulleted">b</listItem>' +
|
|
|
'<listItem listIndent="2" listType="bulleted">c</listItem>',
|
|
|
|
|
|
'<listItem listIndent="0" listType="bulleted">b</listItem>' +
|
|
|
'<listItem listIndent="1" listType="bulleted">c</listItem>'
|
|
|
- );
|
|
|
-
|
|
|
- test(
|
|
|
- 'first list item of nested list',
|
|
|
+ ) );
|
|
|
|
|
|
+ it( 'first list item of nested list', test(
|
|
|
'<listItem listIndent="0" listType="bulleted">a</listItem>' +
|
|
|
'[<listItem listIndent="1" listType="bulleted">b</listItem>]' +
|
|
|
'<listItem listIndent="2" listType="bulleted">c</listItem>' +
|
|
|
@@ -3305,11 +3712,9 @@ describe( 'ListEditing', () => {
|
|
|
'<listItem listIndent="2" listType="bulleted">d</listItem>' +
|
|
|
'<listItem listIndent="1" listType="bulleted">e</listItem>' +
|
|
|
'<listItem listIndent="2" listType="bulleted">f</listItem>'
|
|
|
- );
|
|
|
-
|
|
|
- test(
|
|
|
- 'selection over two different nested lists of same indent',
|
|
|
+ ) );
|
|
|
|
|
|
+ it( 'selection over two different nested lists of same indent', test(
|
|
|
'<listItem listIndent="0" listType="bulleted">a</listItem>' +
|
|
|
'<listItem listIndent="1" listType="bulleted">b</listItem>' +
|
|
|
'[<listItem listIndent="1" listType="bulleted">c</listItem>' +
|
|
|
@@ -3320,12 +3725,12 @@ describe( 'ListEditing', () => {
|
|
|
'<listItem listIndent="0" listType="bulleted">a</listItem>' +
|
|
|
'<listItem listIndent="1" listType="bulleted">b</listItem>' +
|
|
|
'<listItem listIndent="1" listType="bulleted">f</listItem>'
|
|
|
- );
|
|
|
+ ) );
|
|
|
} );
|
|
|
|
|
|
describe( 'move', () => {
|
|
|
- function test( testName, input, offset, output ) {
|
|
|
- it( testName, () => {
|
|
|
+ function test( input, offset, output ) {
|
|
|
+ return () => {
|
|
|
model.change( writer => {
|
|
|
setModelData( model, input );
|
|
|
|
|
|
@@ -3335,12 +3740,10 @@ describe( 'ListEditing', () => {
|
|
|
} );
|
|
|
|
|
|
expect( getModelData( model, { withoutSelection: true } ) ).to.equal( output );
|
|
|
- } );
|
|
|
+ };
|
|
|
}
|
|
|
|
|
|
- test(
|
|
|
- 'nested list item out of list structure',
|
|
|
-
|
|
|
+ it( 'nested list item out of list structure', test(
|
|
|
'<listItem listIndent="0" listType="bulleted">a</listItem>' +
|
|
|
'[<listItem listIndent="1" listType="bulleted">b</listItem>' +
|
|
|
'<listItem listIndent="2" listType="bulleted">c</listItem>]' +
|
|
|
@@ -3356,11 +3759,9 @@ describe( 'ListEditing', () => {
|
|
|
'<paragraph>x</paragraph>' +
|
|
|
'<listItem listIndent="0" listType="bulleted">b</listItem>' +
|
|
|
'<listItem listIndent="1" listType="bulleted">c</listItem>'
|
|
|
- );
|
|
|
-
|
|
|
- test(
|
|
|
- 'list items between lists',
|
|
|
+ ) );
|
|
|
|
|
|
+ it( 'list items between lists', test(
|
|
|
'<listItem listIndent="0" listType="bulleted">a</listItem>' +
|
|
|
'<listItem listIndent="1" listType="bulleted">b</listItem>' +
|
|
|
'[<listItem listIndent="2" listType="bulleted">c</listItem>' +
|
|
|
@@ -3380,11 +3781,9 @@ describe( 'ListEditing', () => {
|
|
|
'<listItem listIndent="1" listType="bulleted">c</listItem>' +
|
|
|
'<listItem listIndent="2" listType="bulleted">d</listItem>' +
|
|
|
'<listItem listIndent="0" listType="bulleted">g</listItem>'
|
|
|
- );
|
|
|
-
|
|
|
- test(
|
|
|
- 'element in between nested list items',
|
|
|
+ ) );
|
|
|
|
|
|
+ it( 'element in between nested list items', test(
|
|
|
'<listItem listIndent="0" listType="bulleted">a</listItem>' +
|
|
|
'<listItem listIndent="1" listType="bulleted">b</listItem>' +
|
|
|
'<listItem listIndent="2" listType="bulleted">c</listItem>' +
|
|
|
@@ -3398,11 +3797,9 @@ describe( 'ListEditing', () => {
|
|
|
'<paragraph>x</paragraph>' +
|
|
|
'<listItem listIndent="0" listType="bulleted">c</listItem>' +
|
|
|
'<listItem listIndent="1" listType="bulleted">d</listItem>'
|
|
|
- );
|
|
|
-
|
|
|
- test(
|
|
|
- 'multiple nested list items of different types #1 - fix at start',
|
|
|
+ ) );
|
|
|
|
|
|
+ it( 'multiple nested list items of different types #1 - fix at start', test(
|
|
|
'<listItem listIndent="0" listType="bulleted">a</listItem>' +
|
|
|
'<listItem listIndent="1" listType="bulleted">b</listItem>' +
|
|
|
'[<listItem listIndent="1" listType="bulleted">c</listItem>' +
|
|
|
@@ -3424,11 +3821,9 @@ describe( 'ListEditing', () => {
|
|
|
'<listItem listIndent="0" listType="bulleted">d</listItem>' +
|
|
|
'<listItem listIndent="1" listType="numbered">e</listItem>' +
|
|
|
'<listItem listIndent="1" listType="numbered">i</listItem>'
|
|
|
- );
|
|
|
-
|
|
|
- test(
|
|
|
- 'multiple nested list items of different types #2 - fix at end',
|
|
|
+ ) );
|
|
|
|
|
|
+ it( 'multiple nested list items of different types #2 - fix at end', test(
|
|
|
'<listItem listIndent="0" listType="bulleted">a</listItem>' +
|
|
|
'<listItem listIndent="1" listType="bulleted">b</listItem>' +
|
|
|
'[<listItem listIndent="1" listType="bulleted">c</listItem>' +
|
|
|
@@ -3450,12 +3845,10 @@ describe( 'ListEditing', () => {
|
|
|
'<listItem listIndent="0" listType="bulleted">d</listItem>' +
|
|
|
'<listItem listIndent="1" listType="numbered">e</listItem>' +
|
|
|
'<listItem listIndent="1" listType="numbered">i</listItem>'
|
|
|
- );
|
|
|
+ ) );
|
|
|
|
|
|
// #78.
|
|
|
- test(
|
|
|
- 'move out of container',
|
|
|
-
|
|
|
+ it( 'move out of container', test(
|
|
|
'<blockQuote>' +
|
|
|
'<listItem listIndent="0" listType="bulleted">a</listItem>' +
|
|
|
'<listItem listIndent="1" listType="bulleted">b</listItem>' +
|
|
|
@@ -3473,7 +3866,7 @@ describe( 'ListEditing', () => {
|
|
|
'<listItem listIndent="1" listType="bulleted">c</listItem>' +
|
|
|
'<listItem listIndent="1" listType="bulleted">d</listItem>' +
|
|
|
'</blockQuote>'
|
|
|
- );
|
|
|
+ ) );
|
|
|
} );
|
|
|
|
|
|
describe( 'rename', () => {
|