8
0
فهرست منبع

Merge branch 'i/6655'

Tests (engine): Tried to make the hasDomSelection tests more stable. Closes #6655.
Piotrek Koszuliński 5 سال پیش
والد
کامیت
5227b74b49
1فایلهای تغییر یافته به همراه31 افزوده شده و 14 حذف شده
  1. 31 14
      packages/ckeditor5-engine/tests/view/view/view.js

+ 31 - 14
packages/ckeditor5-engine/tests/view/view/view.js

@@ -16,6 +16,7 @@ import FocusObserver from '../../../src/view/observer/focusobserver';
 import CompositionObserver from '../../../src/view/observer/compositionobserver';
 import CompositionObserver from '../../../src/view/observer/compositionobserver';
 import ViewRange from '../../../src/view/range';
 import ViewRange from '../../../src/view/range';
 import ViewElement from '../../../src/view/element';
 import ViewElement from '../../../src/view/element';
+import ViewContainerElement from '../../../src/view/containerelement';
 import ViewPosition from '../../../src/view/position';
 import ViewPosition from '../../../src/view/position';
 import ViewSelection from '../../../src/view/selection';
 import ViewSelection from '../../../src/view/selection';
 import { StylesProcessor } from '../../../src/view/stylesmap';
 import { StylesProcessor } from '../../../src/view/stylesmap';
@@ -527,7 +528,10 @@ describe( 'view', () => {
 
 
 			view.attachDomRoot( domRoot );
 			view.attachDomRoot( domRoot );
 
 
-			viewRoot._appendChild( new ViewElement( viewDocument, 'p' ) );
+			// It must be a container element to be rendered with the bogus <br> inside which ensures
+			// that the browser sees a selection position inside (empty <p> may not be selectable).
+			// May help resolving https://github.com/ckeditor/ckeditor5/issues/6655.
+			viewRoot._appendChild( new ViewContainerElement( viewDocument, 'p' ) );
 			view.forceRender();
 			view.forceRender();
 
 
 			domElement = createElement( document, 'div', { contenteditable: 'true' } );
 			domElement = createElement( document, 'div', { contenteditable: 'true' } );
@@ -542,27 +546,40 @@ describe( 'view', () => {
 		} );
 		} );
 
 
 		it( 'should be true if selection is inside a DOM root element', done => {
 		it( 'should be true if selection is inside a DOM root element', done => {
-			domSelection.collapse( domP, 0 );
+			domRoot.focus();
 
 
-			// Wait for async selectionchange event on DOM document.
 			setTimeout( () => {
 			setTimeout( () => {
-				expect( view.hasDomSelection ).to.be.true;
+				domSelection.collapse( domP, 0 );
 
 
-				done();
-			}, 100 );
+				// Wait for async selectionchange event on DOM document.
+				setTimeout( () => {
+					expect( view.hasDomSelection ).to.be.true;
+
+					done();
+				}, 10 );
+			}, 10 );
 		} );
 		} );
 
 
 		it( 'should be true if selection is inside a DOM root element - no focus', done => {
 		it( 'should be true if selection is inside a DOM root element - no focus', done => {
-			domSelection.collapse( domP, 0 );
-			domRoot.blur();
+			domRoot.focus();
 
 
-			// Wait for async selectionchange event on DOM document.
 			setTimeout( () => {
 			setTimeout( () => {
-				expect( view.hasDomSelection ).to.be.true;
-				expect( view.document.isFocused ).to.be.false;
-
-				done();
-			}, 100 );
+				domSelection.collapse( domP, 0 );
+
+				setTimeout( () => {
+					// We could also do domRoot.blur() here but it's always better to know where the focus went.
+					// E.g. if it went to some <input>, the selection would disappear from the editor and the test would fail.
+					domRoot.blur();
+
+					// Wait for async selectionchange event on DOM document.
+					setTimeout( () => {
+						expect( view.hasDomSelection ).to.be.true;
+						expect( view.document.isFocused ).to.be.false;
+
+						done();
+					}, 10 );
+				}, 10 );
+			}, 10 );
 		} );
 		} );
 
 
 		it( 'should be false if selection is outside DOM root element', done => {
 		it( 'should be false if selection is outside DOM root element', done => {