@@ -1557,6 +1557,86 @@ describe('TextComponent', () => {
15571557
15581558 TestEnvironment . waitForPresenceTimer ( ) ;
15591559 } ) ) ;
1560+
1561+ describe ( 'Text selection behavior' , ( ) => {
1562+ it ( 'should track shift key state correctly' , fakeAsync ( ( ) => {
1563+ const env : TestEnvironment = new TestEnvironment ( ) ;
1564+
1565+ // Initially shift key should be false
1566+ expect ( ( env . component as any ) . isShiftDown ) . toBe ( false ) ;
1567+
1568+ // Simulate shift key down
1569+ const keyDownEvent = new KeyboardEvent ( 'keydown' , { shiftKey : true } ) ;
1570+ document . dispatchEvent ( keyDownEvent ) ;
1571+ tick ( ) ;
1572+
1573+ expect ( ( env . component as any ) . isShiftDown ) . toBe ( true ) ;
1574+
1575+ // Simulate shift key up
1576+ const keyUpEvent = new KeyboardEvent ( 'keyup' , { shiftKey : false } ) ;
1577+ document . dispatchEvent ( keyUpEvent ) ;
1578+ tick ( ) ;
1579+
1580+ expect ( ( env . component as any ) . isShiftDown ) . toBe ( false ) ;
1581+ } ) ) ;
1582+
1583+ it ( 'should not call update() during selection expansion (shift down)' , fakeAsync ( ( ) => {
1584+ const env : TestEnvironment = new TestEnvironment ( ) ;
1585+ env . component . onEditorCreated ( new MockQuill ( 'quill-editor' ) ) ;
1586+ env . waitForEditor ( ) ;
1587+
1588+ spyOn ( env . component , 'update' as any ) ;
1589+
1590+ // Simulate shift key down
1591+ ( env . component as any ) . isShiftDown = true ;
1592+
1593+ // Call onSelectionChanged with a selection (length > 0)
1594+ const range : QuillRange = { index : 5 , length : 3 } ;
1595+ env . component . onSelectionChanged ( range ) ;
1596+ tick ( ) ;
1597+
1598+ // update() should not have been called
1599+ expect ( env . component [ 'update' ] ) . not . toHaveBeenCalled ( ) ;
1600+ } ) ) ;
1601+
1602+ it ( 'should call update() when shift key is released' , fakeAsync ( ( ) => {
1603+ const env : TestEnvironment = new TestEnvironment ( ) ;
1604+ env . component . onEditorCreated ( new MockQuill ( 'quill-editor' ) ) ;
1605+ env . waitForEditor ( ) ;
1606+
1607+ spyOn ( env . component , 'update' as any ) ;
1608+
1609+ // Set shift key down initially
1610+ ( env . component as any ) . isShiftDown = true ;
1611+
1612+ // Simulate shift key release
1613+ const keyUpEvent = new KeyboardEvent ( 'keyup' , { shiftKey : false } ) ;
1614+ document . dispatchEvent ( keyUpEvent ) ;
1615+ tick ( ) ;
1616+
1617+ // update() should have been called once
1618+ expect ( env . component [ 'update' ] ) . toHaveBeenCalledTimes ( 1 ) ;
1619+ } ) ) ;
1620+
1621+ it ( 'should call update() when no selection is active (cursor only)' , fakeAsync ( ( ) => {
1622+ const env : TestEnvironment = new TestEnvironment ( ) ;
1623+ env . component . onEditorCreated ( new MockQuill ( 'quill-editor' ) ) ;
1624+ env . waitForEditor ( ) ;
1625+
1626+ spyOn ( env . component , 'update' as any ) ;
1627+
1628+ // Simulate shift key not pressed
1629+ ( env . component as any ) . isShiftDown = false ;
1630+
1631+ // Call onSelectionChanged with cursor only (length = 0)
1632+ const range : QuillRange = { index : 5 , length : 0 } ;
1633+ env . component . onSelectionChanged ( range ) ;
1634+ tick ( ) ;
1635+
1636+ // update() should have been called
1637+ expect ( env . component [ 'update' ] ) . toHaveBeenCalledTimes ( 1 ) ;
1638+ } ) ) ;
1639+ } ) ;
15601640} ) ;
15611641
15621642class MockDragEvent extends DragEvent {
0 commit comments