|
|
@@ -20,6 +20,7 @@ import testUtils from '@ckeditor/ckeditor5-core/tests/_utils/utils';
|
|
|
import count from '@ckeditor/ckeditor5-utils/src/count';
|
|
|
import log from '@ckeditor/ckeditor5-utils/src/log';
|
|
|
import global from '@ckeditor/ckeditor5-utils/src/dom/global';
|
|
|
+import createViewRoot from '../_utils/createroot';
|
|
|
|
|
|
testUtils.createSinonSandbox();
|
|
|
|
|
|
@@ -88,29 +89,37 @@ describe( 'Document', () => {
|
|
|
} );
|
|
|
} );
|
|
|
|
|
|
- describe( 'createRoot()', () => {
|
|
|
- it( 'should create root', () => {
|
|
|
- const domP = document.createElement( 'p' );
|
|
|
+ describe( 'attachDomRoot()', () => {
|
|
|
+ it( 'should attach DOM element to main view element', () => {
|
|
|
const domDiv = document.createElement( 'div' );
|
|
|
- domDiv.appendChild( domP );
|
|
|
-
|
|
|
- const ret = viewDocument.createRoot( domDiv );
|
|
|
+ const viewRoot = createViewRoot( viewDocument, 'div', 'main' );
|
|
|
|
|
|
- expect( count( viewDocument.domRoots ) ).to.equal( 1 );
|
|
|
- expect( count( viewDocument.roots ) ).to.equal( 1 );
|
|
|
+ expect( count( viewDocument.domRoots ) ).to.equal( 0 );
|
|
|
|
|
|
- const domRoot = viewDocument.getDomRoot();
|
|
|
- const viewRoot = viewDocument.getRoot();
|
|
|
+ viewDocument.attachDomRoot( domDiv );
|
|
|
|
|
|
- expect( ret ).to.equal( viewRoot );
|
|
|
+ expect( count( viewDocument.domRoots ) ).to.equal( 1 );
|
|
|
|
|
|
- expect( domRoot ).to.equal( domDiv );
|
|
|
+ expect( viewDocument.getDomRoot() ).to.equal( domDiv );
|
|
|
expect( viewDocument.domConverter.mapViewToDom( viewRoot ) ).to.equal( domDiv );
|
|
|
|
|
|
- expect( viewRoot.name ).to.equal( 'div' );
|
|
|
expect( viewDocument.renderer.markedChildren.has( viewRoot ) ).to.be.true;
|
|
|
} );
|
|
|
|
|
|
+ it( 'should attach DOM element to custom view element', () => {
|
|
|
+ const domH1 = document.createElement( 'h1' );
|
|
|
+ const viewH1 = createViewRoot( viewDocument, 'h1', 'header' );
|
|
|
+
|
|
|
+ expect( count( viewDocument.domRoots ) ).to.equal( 0 );
|
|
|
+
|
|
|
+ viewDocument.attachDomRoot( domH1, 'header' );
|
|
|
+
|
|
|
+ expect( count( viewDocument.domRoots ) ).to.equal( 1 );
|
|
|
+ expect( viewDocument.getDomRoot( 'header' ) ).to.equal( domH1 );
|
|
|
+ expect( viewDocument.domConverter.mapViewToDom( viewH1 ) ).to.equal( domH1 );
|
|
|
+ expect( viewDocument.renderer.markedChildren.has( viewH1 ) ).to.be.true;
|
|
|
+ } );
|
|
|
+
|
|
|
it( 'should call observe on each observer', () => {
|
|
|
// The variable will be overwritten.
|
|
|
viewDocument.destroy();
|
|
|
@@ -127,96 +136,17 @@ describe( 'Document', () => {
|
|
|
const observerMock = viewDocument.addObserver( ObserverMock );
|
|
|
const observerMockGlobalCount = viewDocument.addObserver( ObserverMockGlobalCount );
|
|
|
|
|
|
- viewDocument.createRoot( document.createElement( 'div' ), 'root1' );
|
|
|
+ createViewRoot( viewDocument, 'div', 'root1' );
|
|
|
+ viewDocument.attachDomRoot( document.createElement( 'div' ), 'root1' );
|
|
|
|
|
|
sinon.assert.calledOnce( observerMock.observe );
|
|
|
sinon.assert.calledOnce( observerMockGlobalCount.observe );
|
|
|
} );
|
|
|
-
|
|
|
- it( 'should create "main" root by default', () => {
|
|
|
- const domDiv = document.createElement( 'div' );
|
|
|
- const ret = viewDocument.createRoot( domDiv );
|
|
|
-
|
|
|
- expect( count( viewDocument.domRoots ) ).to.equal( 1 );
|
|
|
- expect( count( viewDocument.roots ) ).to.equal( 1 );
|
|
|
-
|
|
|
- const domRoot = viewDocument.domRoots.get( 'main' );
|
|
|
- const viewRoot = viewDocument.roots.get( 'main' );
|
|
|
-
|
|
|
- expect( ret ).to.equal( viewRoot );
|
|
|
-
|
|
|
- expect( domRoot ).to.equal( domDiv );
|
|
|
- } );
|
|
|
-
|
|
|
- it( 'should create root with given name', () => {
|
|
|
- const domDiv = document.createElement( 'div' );
|
|
|
- const ret = viewDocument.createRoot( domDiv, 'header' );
|
|
|
-
|
|
|
- expect( count( viewDocument.domRoots ) ).to.equal( 1 );
|
|
|
- expect( count( viewDocument.roots ) ).to.equal( 1 );
|
|
|
-
|
|
|
- const domRoot = viewDocument.domRoots.get( 'header' );
|
|
|
- const viewRoot = viewDocument.roots.get( 'header' );
|
|
|
-
|
|
|
- expect( ret ).to.equal( viewRoot );
|
|
|
-
|
|
|
- expect( domRoot ).to.equal( domDiv );
|
|
|
- } );
|
|
|
-
|
|
|
- it( 'should create root without attaching DOM element', () => {
|
|
|
- const ret = viewDocument.createRoot( 'div' );
|
|
|
-
|
|
|
- expect( count( viewDocument.domRoots ) ).to.equal( 0 );
|
|
|
- expect( count( viewDocument.roots ) ).to.equal( 1 );
|
|
|
- expect( ret ).to.equal( viewDocument.getRoot() );
|
|
|
- } );
|
|
|
- } );
|
|
|
-
|
|
|
- describe( 'attachDomRoot()', () => {
|
|
|
- it( 'should create root without attach DOM element to the view element', () => {
|
|
|
- const domDiv = document.createElement( 'div' );
|
|
|
- const viewRoot = viewDocument.createRoot( 'div' );
|
|
|
-
|
|
|
- expect( count( viewDocument.domRoots ) ).to.equal( 0 );
|
|
|
- expect( count( viewDocument.roots ) ).to.equal( 1 );
|
|
|
- expect( viewRoot ).to.equal( viewDocument.getRoot() );
|
|
|
-
|
|
|
- viewDocument.attachDomRoot( domDiv );
|
|
|
-
|
|
|
- expect( count( viewDocument.domRoots ) ).to.equal( 1 );
|
|
|
- expect( count( viewDocument.roots ) ).to.equal( 1 );
|
|
|
-
|
|
|
- expect( viewDocument.getDomRoot() ).to.equal( domDiv );
|
|
|
- expect( viewDocument.domConverter.mapViewToDom( viewRoot ) ).to.equal( domDiv );
|
|
|
-
|
|
|
- expect( viewDocument.renderer.markedChildren.has( viewRoot ) ).to.be.true;
|
|
|
- } );
|
|
|
-
|
|
|
- it( 'should create root without attach DOM element to the view element with given name', () => {
|
|
|
- const domH1 = document.createElement( 'h1' );
|
|
|
- viewDocument.createRoot( 'DIV' );
|
|
|
- const viewH1 = viewDocument.createRoot( 'h1', 'header' );
|
|
|
-
|
|
|
- expect( count( viewDocument.domRoots ) ).to.equal( 0 );
|
|
|
- expect( count( viewDocument.roots ) ).to.equal( 2 );
|
|
|
- expect( viewH1 ).to.equal( viewDocument.getRoot( 'header' ) );
|
|
|
-
|
|
|
- viewDocument.attachDomRoot( domH1, 'header' );
|
|
|
-
|
|
|
- expect( count( viewDocument.domRoots ) ).to.equal( 1 );
|
|
|
- expect( count( viewDocument.roots ) ).to.equal( 2 );
|
|
|
-
|
|
|
- expect( viewDocument.getDomRoot( 'header' ) ).to.equal( domH1 );
|
|
|
- expect( viewDocument.domConverter.mapViewToDom( viewH1 ) ).to.equal( domH1 );
|
|
|
-
|
|
|
- expect( viewDocument.getRoot().name ).to.equal( 'div' );
|
|
|
- expect( viewDocument.renderer.markedChildren.has( viewH1 ) ).to.be.true;
|
|
|
- } );
|
|
|
} );
|
|
|
|
|
|
describe( 'getRoot()', () => {
|
|
|
it( 'should return "main" root', () => {
|
|
|
- viewDocument.createRoot( document.createElement( 'div' ) );
|
|
|
+ createViewRoot( viewDocument, 'div', 'main' );
|
|
|
|
|
|
expect( count( viewDocument.roots ) ).to.equal( 1 );
|
|
|
|
|
|
@@ -224,12 +154,16 @@ describe( 'Document', () => {
|
|
|
} );
|
|
|
|
|
|
it( 'should return named root', () => {
|
|
|
- viewDocument.createRoot( document.createElement( 'h1' ), 'header' );
|
|
|
+ createViewRoot( viewDocument, 'h1', 'header' );
|
|
|
|
|
|
expect( count( viewDocument.roots ) ).to.equal( 1 );
|
|
|
|
|
|
expect( viewDocument.getRoot( 'header' ) ).to.equal( viewDocument.roots.get( 'header' ) );
|
|
|
} );
|
|
|
+
|
|
|
+ it( 'should return null when trying to get non-existent root', () => {
|
|
|
+ expect( viewDocument.getRoot( 'not-existing' ) ).to.null;
|
|
|
+ } );
|
|
|
} );
|
|
|
|
|
|
describe( 'addObserver()', () => {
|
|
|
@@ -299,8 +233,11 @@ describe( 'Document', () => {
|
|
|
} );
|
|
|
|
|
|
it( 'should call observe on each root', () => {
|
|
|
- viewDocument.createRoot( document.createElement( 'div' ), 'root1' );
|
|
|
- viewDocument.createRoot( document.createElement( 'div' ), 'root2' );
|
|
|
+ createViewRoot( viewDocument, 'div', 'roo1' );
|
|
|
+ createViewRoot( viewDocument, 'div', 'roo2' );
|
|
|
+
|
|
|
+ viewDocument.attachDomRoot( document.createElement( 'div' ), 'roo1' );
|
|
|
+ viewDocument.attachDomRoot( document.createElement( 'div' ), 'roo2' );
|
|
|
|
|
|
const observerMock = viewDocument.addObserver( ObserverMock );
|
|
|
|
|
|
@@ -338,10 +275,12 @@ describe( 'Document', () => {
|
|
|
} );
|
|
|
|
|
|
it( 'scrolls to the first range in selection with an offset', () => {
|
|
|
+ const root = createViewRoot( viewDocument, 'div', 'main' );
|
|
|
const stub = testUtils.sinon.stub( global.window, 'scrollTo' );
|
|
|
- const root = viewDocument.createRoot( domRoot );
|
|
|
const range = ViewRange.createIn( root );
|
|
|
|
|
|
+ viewDocument.attachDomRoot( domRoot );
|
|
|
+
|
|
|
// Make sure the window will have to scroll to the domRoot.
|
|
|
Object.assign( domRoot.style, {
|
|
|
position: 'absolute',
|
|
|
@@ -405,7 +344,8 @@ describe( 'Document', () => {
|
|
|
domEditable = document.createElement( 'div' );
|
|
|
domEditable.setAttribute( 'contenteditable', 'true' );
|
|
|
document.body.appendChild( domEditable );
|
|
|
- viewEditable = viewDocument.createRoot( domEditable );
|
|
|
+ viewEditable = createViewRoot( viewDocument, 'div', 'main' );
|
|
|
+ viewDocument.attachDomRoot( domEditable );
|
|
|
viewDocument.selection.addRange( ViewRange.createFromParentsAndOffsets( viewEditable, 0, viewEditable, 0 ) );
|
|
|
} );
|
|
|
|