Selaa lähdekoodia

Stub indent block tests.

Maciej Gołaszewski 6 vuotta sitten
vanhempi
commit
4a39441db5
1 muutettua tiedostoa jossa 127 lisäystä ja 0 poistoa
  1. 127 0
      packages/ckeditor5-indent/tests/indentblock.js

+ 127 - 0
packages/ckeditor5-indent/tests/indentblock.js

@@ -0,0 +1,127 @@
+/**
+ * @license Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved.
+ * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
+ */
+
+import VirtualTestEditor from '@ckeditor/ckeditor5-core/tests/_utils/virtualtesteditor';
+import testUtils from '@ckeditor/ckeditor5-core/tests/_utils/utils';
+import { getData as getViewData } from '@ckeditor/ckeditor5-engine/src/dev-utils/view';
+import Paragraph from '@ckeditor/ckeditor5-paragraph/src/paragraph';
+import HeadingEditing from '@ckeditor/ckeditor5-heading/src/headingediting';
+import Plugin from '@ckeditor/ckeditor5-core/src/plugin';
+import MultiCommand from '@ckeditor/ckeditor5-core/src/multicommand';
+
+import IndentBlock from '../src/indentblock';
+import IndentBlockCommand from '../src/indentblockcommand';
+
+class Indent extends Plugin {
+	init() {
+		const editor = this.editor;
+
+		editor.commands.add( 'indent', new MultiCommand( editor ) );
+		editor.commands.add( 'outdent', new MultiCommand( editor ) );
+	}
+}
+
+describe( 'IndentBlock', () => {
+	let editor, model, doc;
+
+	testUtils.createSinonSandbox();
+
+	afterEach( () => {
+		if ( editor ) {
+			return editor.destroy();
+		}
+	} );
+
+	it( 'should be named', () => {
+		expect( IndentBlock.pluginName ).to.equal( 'IndentBlock' );
+	} );
+
+	it( 'should be loaded', () => {
+		return createTestEditor()
+			.then( newEditor => {
+				expect( newEditor.plugins.get( IndentBlock ) ).to.be.instanceOf( IndentBlock );
+			} );
+	} );
+
+	it( 'should set proper schema rules', () => {
+		return createTestEditor()
+			.then( newEditor => {
+				model = newEditor.model;
+
+				expect( model.schema.checkAttribute( [ 'heading1' ], 'indent' ) ).to.be.true;
+				expect( model.schema.checkAttribute( [ 'paragraph' ], 'indent' ) ).to.be.true;
+			} );
+	} );
+
+	it( 'should register indent block command', () => {
+		return createTestEditor()
+			.then( newEditor => {
+				const command = newEditor.commands.get( 'indentBlock' );
+
+				expect( command ).to.be.instanceof( IndentBlockCommand );
+			} );
+	} );
+
+	describe( 'conversion', () => {
+		describe( 'using offset', () => {
+			beforeEach( () => {
+				return createTestEditor( { indentBlock: { offset: 50, unit: 'px' } } )
+					.then( newEditor => {
+						editor = newEditor;
+						model = editor.model;
+						doc = model.document;
+					} );
+			} );
+
+			it( 'should convert margin-left to indent attribute', () => {
+				editor.setData( '<p style="margin-left:50px">foo</p>' );
+
+				const paragraph = doc.getRoot().getChild( 0 );
+
+				expect( paragraph.hasAttribute( 'indent' ) ).to.be.true;
+				expect( paragraph.getAttribute( 'indent' ) ).to.equal( '50px' );
+
+				expect( editor.getData() ).to.equal( '<p style="margin-left:50px;">foo</p>' );
+				expect( getViewData( editor.editing.view, { withoutSelection: true } ) )
+					.to.equal( '<p style="margin-left:50px">foo</p>' );
+			} );
+		} );
+
+		describe( 'using classes', () => {
+			beforeEach( () => {
+				return createTestEditor( {
+					indentBlock: {
+						classes: [ 'indent-1', 'indent-2', 'indent-3', 'indent-4' ]
+					}
+				} ).then( newEditor => {
+					editor = newEditor;
+					model = editor.model;
+					doc = model.document;
+				} );
+			} );
+
+			it( 'should convert class to indent attribute', () => {
+				editor.setData( '<p class="indent-1">foo</p>' );
+
+				const paragraph = doc.getRoot().getChild( 0 );
+
+				expect( paragraph.hasAttribute( 'indent' ) ).to.be.true;
+				expect( paragraph.getAttribute( 'indent' ) ).to.equal( 'indent-1' );
+
+				const expectedView = '<p class="indent-1">foo</p>';
+
+				expect( editor.getData() ).to.equal( expectedView );
+				expect( getViewData( editor.editing.view, { withoutSelection: true } ) ).to.equal( expectedView );
+			} );
+		} );
+	} );
+
+	function createTestEditor( extraConfig = {} ) {
+		return VirtualTestEditor
+			.create( Object.assign( {
+				plugins: [ Paragraph, HeadingEditing, Indent, IndentBlock ]
+			}, extraConfig ) );
+	}
+} );