77
88import View from '../../src/view/view' ;
99import ViewElement from '../../src/view/element' ;
10+ import ViewEditableElement from '../../src/view/editableelement' ;
1011import ViewContainerElement from '../../src/view/containerelement' ;
1112import ViewAttributeElement from '../../src/view/attributeelement' ;
1213import ViewText from '../../src/view/text' ;
@@ -112,10 +113,12 @@ describe( 'Renderer', () => {
112113 } ) ;
113114
114115 describe ( 'render' , ( ) => {
115- let viewRoot , domRoot , selectionEditable ;
116+ let viewRoot , domRoot ;
116117
117118 beforeEach ( ( ) => {
118- viewRoot = new ViewElement ( 'div' ) ;
119+ viewRoot = new ViewEditableElement ( 'div' ) ;
120+ viewRoot . getFillerOffset = ( ) => null ;
121+
119122 domRoot = document . createElement ( 'div' ) ;
120123 document . body . appendChild ( domRoot ) ;
121124
@@ -127,16 +130,7 @@ describe( 'Renderer', () => {
127130
128131 selection . _setTo ( null ) ;
129132
130- selectionEditable = viewRoot ;
131-
132133 renderer . isFocused = true ;
133-
134- // Fake selection editable - it is needed to render selection properly.
135- Object . defineProperty ( selection , 'editableElement' , {
136- get ( ) {
137- return selectionEditable ;
138- }
139- } ) ;
140134 } ) ;
141135
142136 afterEach ( ( ) => {
@@ -422,8 +416,6 @@ describe( 'Renderer', () => {
422416 } ) ;
423417
424418 it ( 'should not care about filler if there is no DOM' , ( ) => {
425- selectionEditable = null ;
426-
427419 const { view : viewP , selection : newSelection } = parse (
428420 '<container:p>foo<attribute:b>[]</attribute:b>bar</container:p>' ) ;
429421
@@ -1202,11 +1194,10 @@ describe( 'Renderer', () => {
12021194 domSelection . removeAllRanges ( ) ;
12031195 domSelection . collapse ( domDiv , 0 ) ;
12041196
1205- selectionEditable = null ;
1206-
1197+ const viewDiv = new ViewElement ( 'div' ) ;
12071198 const { view : viewP , selection : newSelection } = parse ( '<container:p>fo{o}</container:p>' ) ;
12081199
1209- viewRoot . _appendChild ( viewP ) ;
1200+ viewDiv . _appendChild ( viewP ) ;
12101201 selection . _setTo ( newSelection ) ;
12111202
12121203 renderer . render ( ) ;
@@ -1353,13 +1344,13 @@ describe( 'Renderer', () => {
13531344 } ) ;
13541345
13551346 it ( 'should handle focusing element' , ( ) => {
1347+ selection . _setTo ( viewRoot , 0 ) ;
1348+
13561349 const domFocusSpy = testUtils . sinon . spy ( domRoot , 'focus' ) ;
1357- const editable = selection . editableElement ;
13581350
13591351 renderer . render ( ) ;
13601352
1361- expect ( editable ) . to . equal ( viewRoot ) ;
1362- expect ( domFocusSpy . calledOnce ) . to . be . true ;
1353+ expect ( domFocusSpy . called ) . to . be . true ;
13631354 } ) ;
13641355
13651356 it ( 'should not focus editable if isFocues is set to false' , ( ) => {
@@ -1928,6 +1919,32 @@ describe( 'Renderer', () => {
19281919 expect ( container . style . left ) . to . equal ( '-9999px' ) ;
19291920 } ) ;
19301921
1922+ it ( 'should move fake selection container between editables' , ( ) => {
1923+ const viewEditable = new ViewEditableElement ( 'div' ) ;
1924+ viewEditable . _appendChild ( parse ( '<container:p>abc xyz</container:p>' ) ) ;
1925+
1926+ const domEditable = document . createElement ( 'div' ) ;
1927+
1928+ document . body . appendChild ( domEditable ) ;
1929+
1930+ domConverter . bindElements ( domEditable , viewEditable ) ;
1931+
1932+ renderer . markToSync ( 'children' , viewEditable ) ;
1933+ selection . _setTo ( selection . getRanges ( ) , { fake : true , label : 'fake selection' } ) ;
1934+ renderer . render ( ) ;
1935+
1936+ let container = document . getSelection ( ) . anchorNode ;
1937+
1938+ expect ( domRoot . contains ( container ) ) . to . be . true ;
1939+
1940+ selection . _setTo ( viewEditable , 'in' , { fake : true , label : 'fake selection' } ) ;
1941+ renderer . render ( ) ;
1942+
1943+ container = document . getSelection ( ) . anchorNode ;
1944+
1945+ expect ( domEditable . contains ( container ) ) . to . be . true ;
1946+ } ) ;
1947+
19311948 it ( 'should bind fake selection container to view selection' , ( ) => {
19321949 selection . _setTo ( selection . getRanges ( ) , { fake : true , label : 'fake selection' } ) ;
19331950 renderer . render ( ) ;
0 commit comments