@@ -3641,6 +3641,48 @@ describe( 'Renderer', () => {
3641
3641
return viewData . repeat ( repeat ) ;
3642
3642
}
3643
3643
} ) ;
3644
+
3645
+ // #1782
3646
+ it ( 'should leave dom selection untouched while composing' , ( ) => {
3647
+ const { view : viewP , selection : newSelection } = parse ( '<container:p>[]</container:p>' ) ;
3648
+
3649
+ viewRoot . _appendChild ( viewP ) ;
3650
+ selection . _setTo ( newSelection ) ;
3651
+
3652
+ renderer . markToSync ( 'children' , viewRoot ) ;
3653
+ renderer . render ( ) ;
3654
+
3655
+ // Mock IME typing in Safari: <p>[c]</p>.
3656
+ renderer . isComposing = true ;
3657
+ const domText = document . createTextNode ( 'c' ) ;
3658
+ domRoot . firstChild . appendChild ( domText ) ;
3659
+ const range = document . createRange ( ) ;
3660
+ range . setStart ( domText , 0 ) ;
3661
+ range . setEnd ( domText , 1 ) ;
3662
+ const domSelection = document . getSelection ( ) ;
3663
+ domSelection . removeAllRanges ( ) ;
3664
+ domSelection . addRange ( range ) ;
3665
+
3666
+ // <container:p>c[]</container:p>
3667
+ viewP . _appendChild ( new ViewText ( 'c' ) ) ;
3668
+ selection . _setTo ( [
3669
+ new ViewRange ( new ViewPosition ( viewP . getChild ( 0 ) , 1 ) , new ViewPosition ( viewP . getChild ( 0 ) , 1 ) )
3670
+ ] ) ;
3671
+
3672
+ renderer . markToSync ( 'children' , viewP ) ;
3673
+ renderer . render ( ) ;
3674
+
3675
+ expect ( domRoot . childNodes . length ) . to . equal ( 1 ) ;
3676
+ expect ( domRoot . firstChild . childNodes . length ) . to . equal ( 1 ) ;
3677
+ expect ( domRoot . firstChild . firstChild . data ) . to . equal ( 'c' ) ;
3678
+
3679
+ const currentRange = domSelection . getRangeAt ( 0 ) ;
3680
+ expect ( currentRange . collapsed ) . to . equal ( false ) ;
3681
+ expect ( currentRange . startContainer ) . to . equal ( domRoot . firstChild . firstChild ) ;
3682
+ expect ( currentRange . startOffset ) . to . equal ( 0 ) ;
3683
+ expect ( currentRange . endContainer ) . to . equal ( domRoot . firstChild . firstChild ) ;
3684
+ expect ( currentRange . endOffset ) . to . equal ( 1 ) ;
3685
+ } ) ;
3644
3686
} ) ;
3645
3687
3646
3688
describe ( '#922' , ( ) => {
0 commit comments