Skip to content
This repository has been archived by the owner on Jun 26, 2020. It is now read-only.

Commit

Permalink
Merge pull request #218 from ckeditor/t/ckeditor5/1120
Browse files Browse the repository at this point in the history
Tests: Added integration tests for ckeditor/ckeditor5#1120.
  • Loading branch information
Reinmar committed Sep 14, 2018
2 parents 9aef1de + 81a0d00 commit 0d46434
Showing 1 changed file with 128 additions and 0 deletions.
128 changes: 128 additions & 0 deletions tests/imagecaption/imagecaption-integration.js
@@ -0,0 +1,128 @@
/**
* @license Copyright (c) 2003-2018, CKSource - Frederico Knabben. All rights reserved.
* For licensing, see LICENSE.md.
*/

import Image from '../../src/image';
import ImageCaption from '../../src/imagecaption';
import ClassicEditor from '@ckeditor/ckeditor5-editor-classic/src/classiceditor';
import DomEventData from '@ckeditor/ckeditor5-engine/src/view/observer/domeventdata';
import Enter from '@ckeditor/ckeditor5-enter/src/enter';
import ShiftEnter from '@ckeditor/ckeditor5-enter/src/shiftenter';
import Paragraph from '@ckeditor/ckeditor5-paragraph/src/paragraph';
import Typing from '@ckeditor/ckeditor5-typing/src/typing';

import { getData as getModelData, setData as setModelData } from '@ckeditor/ckeditor5-engine/src/dev-utils/model';
import global from '@ckeditor/ckeditor5-utils/src/dom/global';

describe( 'ImageCaption integration', () => {
let editorElement, editor, model, view, viewDocument;

beforeEach( () => {
editorElement = global.document.createElement( 'div' );
global.document.body.appendChild( editorElement );
} );

afterEach( () => {
editorElement.remove();
} );

describe( 'with Enter plugin only', () => {
beforeEach( () => {
return ClassicEditor
.create( editorElement, {
plugins: [
Enter, Typing, Paragraph, Image, ImageCaption
]
} )
.then( newEditor => {
editor = newEditor;
model = editor.model;
view = editor.editing.view;
viewDocument = view.document;
} );
} );

afterEach( () => {
return editor.destroy();
} );

it( 'does nothing if soft enter was pressed', () => {
setModelData(
model,
'<paragraph>Foo.</paragraph><image src="foo.png"><caption>Foo.[]</caption></image><paragraph>Bar.</paragraph>'
);

const domEvent = new DomEventData( viewDocument, getDomEvent(), { isSoft: true } );
const preventDefaultOriginal = domEvent.preventDefault;
const preventDefaultStub = sinon.stub( domEvent, 'preventDefault' ).callsFake( preventDefaultOriginal );

viewDocument.fire( 'enter', domEvent );

expect( preventDefaultStub.callCount ).to.equal( 1 );

assertModelData(
'<paragraph>Foo.</paragraph>' +
'<image src="foo.png">' +
'<caption>Foo.[]</caption>' +
'</image>' +
'<paragraph>Bar.</paragraph>'
);
} );
} );

describe( 'with Enter and ShiftEnter plugins', () => {
beforeEach( () => {
return ClassicEditor
.create( editorElement, {
plugins: [
Enter, ShiftEnter, Typing, Paragraph, Image, ImageCaption
]
} )
.then( newEditor => {
editor = newEditor;
model = editor.model;
view = editor.editing.view;
viewDocument = view.document;
} );
} );

afterEach( () => {
return editor.destroy();
} );

it( 'inserts a soft break when soft enter was pressed', () => {
setModelData(
model,
'<paragraph>Foo.</paragraph><image src="foo.png"><caption>Foo.[]</caption></image><paragraph>Bar.</paragraph>'
);

const domEvent = new DomEventData( viewDocument, getDomEvent(), { isSoft: true } );
const preventDefaultOriginal = domEvent.preventDefault;
const preventDefaultStub = sinon.stub( domEvent, 'preventDefault' ).callsFake( preventDefaultOriginal );

viewDocument.fire( 'enter', domEvent );

// One call comes from Enter plugin, the second one from ShiftEnter.
expect( preventDefaultStub.callCount ).to.equal( 2 );

assertModelData(
'<paragraph>Foo.</paragraph>' +
'<image src="foo.png">' +
'<caption>Foo.<softBreak></softBreak>[]</caption>' +
'</image>' +
'<paragraph>Bar.</paragraph>'
);
} );
} );

function getDomEvent() {
return {
preventDefault: sinon.spy()
};
}

function assertModelData( output ) {
expect( getModelData( model ) ).to.equal( output );
}
} );

0 comments on commit 0d46434

Please sign in to comment.