|
|
@@ -3,10 +3,11 @@
|
|
|
* For licensing, see LICENSE.md.
|
|
|
*/
|
|
|
|
|
|
-/* globals document */
|
|
|
+/* globals document, window */
|
|
|
import FocusObserver from '../../../src/view/observer/focusobserver';
|
|
|
import ViewDocument from '../../../src/view/document';
|
|
|
import ViewRange from '../../../src/view/range';
|
|
|
+import { setData } from '../../../src/dev-utils/view';
|
|
|
|
|
|
describe( 'FocusObserver', () => {
|
|
|
let viewDocument, observer;
|
|
|
@@ -140,4 +141,59 @@ describe( 'FocusObserver', () => {
|
|
|
clock.restore();
|
|
|
} );
|
|
|
} );
|
|
|
+
|
|
|
+ describe( 'integration test', () => {
|
|
|
+ let viewDocument, viewRoot, domRoot, observer, domSelection;
|
|
|
+
|
|
|
+ beforeEach( () => {
|
|
|
+ domRoot = document.createElement( 'div' );
|
|
|
+ document.body.appendChild( domRoot );
|
|
|
+ viewDocument = new ViewDocument();
|
|
|
+ viewRoot = viewDocument.createRoot( domRoot );
|
|
|
+ observer = viewDocument.getObserver( FocusObserver );
|
|
|
+ domSelection = window.getSelection();
|
|
|
+ } );
|
|
|
+
|
|
|
+ it( 'should render document after selectionChange event', ( done ) => {
|
|
|
+ const selectionChangeSpy = sinon.spy();
|
|
|
+ const renderSpy = sinon.spy();
|
|
|
+
|
|
|
+ setData( viewDocument, '<div contenteditable="true">foo bar</div>' );
|
|
|
+ viewDocument.render();
|
|
|
+ const domEditable = domRoot.childNodes[ 0 ];
|
|
|
+
|
|
|
+ viewDocument.on( 'selectionChange', selectionChangeSpy );
|
|
|
+ viewDocument.on( 'render', renderSpy, { priority: 'low' } );
|
|
|
+
|
|
|
+ viewDocument.on( 'render', () => {
|
|
|
+ sinon.assert.callOrder( selectionChangeSpy, renderSpy );
|
|
|
+ done();
|
|
|
+ }, { priority: 'low' } );
|
|
|
+
|
|
|
+ observer.onDomEvent( { type: 'focus', target: domEditable } );
|
|
|
+ domSelection.collapse( domEditable );
|
|
|
+ } );
|
|
|
+
|
|
|
+ it( 'should render without selectionChange event', ( done ) => {
|
|
|
+ const selectionChangeSpy = sinon.spy();
|
|
|
+ const renderSpy = sinon.spy();
|
|
|
+
|
|
|
+ setData( viewDocument, '<div contenteditable="true">{}foo bar</div>' );
|
|
|
+ viewDocument.render();
|
|
|
+ const domEditable = domRoot.childNodes[ 0 ];
|
|
|
+
|
|
|
+ viewDocument.on( 'selectionChange', selectionChangeSpy );
|
|
|
+ viewDocument.on( 'render', renderSpy, { priority: 'low' } );
|
|
|
+
|
|
|
+ viewDocument.on( 'render', () => {
|
|
|
+ sinon.assert.called( renderSpy );
|
|
|
+ done();
|
|
|
+ }, { priority: 'low' } );
|
|
|
+
|
|
|
+ observer.onDomEvent( { type: 'focus', target: domEditable } );
|
|
|
+
|
|
|
+ // Selection will land in the same place so no native selectionchange event.
|
|
|
+ domSelection.collapse( domEditable );
|
|
|
+ } );
|
|
|
+ } );
|
|
|
} );
|