/**
* @license Copyright (c) 2003-2017, CKSource - Frederico Knabben. All rights reserved.
* For licensing, see LICENSE.md.
*/
/* global window */
import ClassicTestEditor from '@ckeditor/ckeditor5-core/tests/_utils/classictesteditor';
import Image from '../src/image';
import ImageEngine from '../src/image/imageengine';
import Widget from '@ckeditor/ckeditor5-widget/src/widget';
import ImageTextAlternative from '../src/imagetextalternative';
import { setData as setModelData } from '@ckeditor/ckeditor5-engine/src/dev-utils/model';
import { getData as getViewData } from '@ckeditor/ckeditor5-engine/src/dev-utils/view';
import ModelRange from '@ckeditor/ckeditor5-engine/src/model/range';
import ContextualToolbar from '@ckeditor/ckeditor5-ui/src/toolbar/contextual/contextualtoolbar';
import Paragraph from '@ckeditor/ckeditor5-paragraph/src/paragraph';
describe( 'Image', () => {
let editorElement, editor, document, viewDocument;
beforeEach( () => {
editorElement = window.document.createElement( 'div' );
window.document.body.appendChild( editorElement );
return ClassicTestEditor.create( editorElement, {
plugins: [ Image ]
} )
.then( newEditor => {
editor = newEditor;
document = editor.document;
viewDocument = editor.editing.view;
} );
} );
afterEach( () => {
editorElement.remove();
return editor.destroy();
} );
it( 'should be loaded', () => {
expect( editor.plugins.get( Image ) ).to.instanceOf( Image );
} );
it( 'should load ImageEngine plugin', () => {
expect( editor.plugins.get( ImageEngine ) ).to.instanceOf( ImageEngine );
} );
it( 'should load Widget plugin', () => {
expect( editor.plugins.get( Widget ) ).to.instanceOf( Widget );
} );
it( 'should load ImageTextAlternative plugin', () => {
expect( editor.plugins.get( ImageTextAlternative ) ).to.instanceOf( ImageTextAlternative );
} );
it( 'should prevent the ContextualToolbar from being displayed when an image is selected', () => {
return ClassicTestEditor.create( editorElement, {
plugins: [ Image, ContextualToolbar, Paragraph ]
} )
.then( newEditor => {
const balloon = newEditor.plugins.get( 'ContextualBalloon' );
const contextualToolbar = newEditor.plugins.get( 'ContextualToolbar' );
newEditor.editing.view.isFocused = true;
// When image is selected along with text.
setModelData( newEditor.document, 'fo[o]' );
return contextualToolbar._showPanel()
.then( () => {
// ContextualToolbar should be visible.
expect( balloon.visibleView ).to.equal( contextualToolbar.toolbarView );
// When only image is selected.
setModelData( newEditor.document, 'foo[]' );
return contextualToolbar._showPanel()
.then( () => {
// ContextualToolbar should not be visible.
expect( balloon.visibleView ).to.be.null;
// Cleaning up.
editorElement.remove();
return newEditor.destroy();
} );
} );
} );
} );
describe( 'selection', () => {
it( 'should create fake selection', () => {
setModelData( document, '[]' );
expect( getViewData( viewDocument ) ).to.equal(
'[' +
'
' +
']'
);
expect( viewDocument.selection.isFake ).to.be.true;
expect( viewDocument.selection.fakeSelectionLabel ).to.equal( 'alt text image widget' );
} );
it( 'should create proper fake selection label when alt attribute is empty', () => {
setModelData( document, '[]' );
expect( getViewData( viewDocument ) ).to.equal(
'[' +
'
' +
']'
);
expect( viewDocument.selection.isFake ).to.be.true;
expect( viewDocument.selection.fakeSelectionLabel ).to.equal( 'image widget' );
} );
it( 'should remove selected class from previously selected element', () => {
setModelData( document,
'[]' +
''
);
expect( getViewData( viewDocument ) ).to.equal(
'[' +
'
' +
']' +
'' +
'
' +
''
);
document.enqueueChanges( () => {
const secondImage = document.getRoot().getChild( 1 );
document.selection.setRanges( [ ModelRange.createOn( secondImage ) ] );
} );
expect( getViewData( viewDocument ) ).to.equal(
'' +
'
' +
'' +
'[' +
'
' +
']'
);
} );
} );
} );