@@ -109,6 +109,46 @@ describe('Label', () => {
109109 expect ( asFragment ( ) ) . toMatchSnapshot ( ) ;
110110 } ) ;
111111
112+ test ( 'editable label discards the draft text when the edit is canceled with escape' , async ( ) => {
113+ const user = userEvent . setup ( ) ;
114+
115+ render ( < Label isEditable > Something</ Label > ) ;
116+
117+ const label = screen . getByRole ( 'button' , { name : 'Something' } ) ;
118+ await user . click ( label ) ;
119+
120+ const draftInput = screen . getByRole ( 'textbox' ) ;
121+ await user . type ( draftInput , ' else' ) ;
122+ expect ( draftInput ) . toHaveValue ( 'Something else' ) ;
123+
124+ await user . keyboard ( '{Escape}' ) ;
125+ // The button and input remount when the editor toggles, so another query is required
126+
127+ const labelAfterCancel = screen . getByRole ( 'button' , { name : 'Something' } ) ;
128+ expect ( labelAfterCancel ) . toBeInTheDocument ( ) ;
129+ await user . click ( labelAfterCancel ) ;
130+
131+ const reopenedInput = screen . getByRole ( 'textbox' ) ;
132+ expect ( reopenedInput ) . toHaveValue ( 'Something' ) ;
133+ } ) ;
134+
135+ test ( 'editable label calls onEditCancel with the previous text when the edit is canceled with escape' , async ( ) => {
136+ const user = userEvent . setup ( ) ;
137+ const onEditCancel = jest . fn ( ) ;
138+
139+ render (
140+ < Label onEditCancel = { onEditCancel } isEditable >
141+ Something
142+ </ Label >
143+ ) ;
144+
145+ await user . click ( screen . getByRole ( 'button' , { name : 'Something' } ) ) ;
146+ await user . type ( screen . getByRole ( 'textbox' ) , ' else' ) ;
147+ await user . keyboard ( '{Escape}' ) ;
148+
149+ expect ( onEditCancel ) . toHaveBeenCalledWith ( expect . anything ( ) , 'Something' ) ;
150+ } ) ;
151+
112152 test ( 'renders with variant overflow and type is set to button ' , ( ) => {
113153 const { asFragment } = render ( < Label variant = "overflow" > Something</ Label > ) ;
114154 expect ( screen . getByRole ( 'button' ) ) . toHaveAttribute ( 'type' , 'button' ) ;
0 commit comments