@@ -178,13 +178,15 @@ describe('options', () => {
178178 } ) ;
179179} ) ;
180180
181- test ( 'does not type when event.preventDefault() is called' , async ( ) => {
181+ describe ( 'does not type when ' , ( ) => {
182182 @Component ( {
183183 selector : 'fixture' ,
184184 template : `
185185 <input
186186 type="text"
187187 data-testid="input"
188+ [disabled]="disabled"
189+ [readonly]="readonly"
188190 (input)="onInput($event)"
189191 (change)="onChange($event)"
190192 (keydown)="onKeyDown($event)"
@@ -194,30 +196,86 @@ test('does not type when event.preventDefault() is called', async () => {
194196 ` ,
195197 } )
196198 class FixtureComponent {
199+ @Input ( ) disabled = false ;
200+ @Input ( ) readonly = false ;
201+
197202 onInput ( $event ) { }
198203 onChange ( $event ) { }
199204 onKeyDown ( $event ) { }
200205 onKeyPress ( $event ) { }
201206 onKeyUp ( $event ) { }
202207 }
203208
204- const componentProperties = {
205- onChange : jest . fn ( ) ,
206- onKeyDown : jest . fn ( ) . mockImplementation ( event => event . preventDefault ( ) ) ,
207- } ;
209+ test ( 'input is disabled' , async ( ) => {
210+ const componentEvents = {
211+ onInput : jest . fn ( ) ,
212+ onChange : jest . fn ( ) ,
213+ onKeyDown : jest . fn ( ) ,
214+ onKeyPress : jest . fn ( ) ,
215+ onKeyUp : jest . fn ( ) ,
216+ } ;
217+
218+ const component = await render ( FixtureComponent , {
219+ componentProperties : {
220+ disabled : true ,
221+ ...componentEvents ,
222+ } ,
223+ } ) ;
224+
225+ const inputControl = component . getByTestId ( 'input' ) as HTMLInputElement ;
226+ component . type ( inputControl , 'Hello' ) ;
208227
209- const component = await render ( FixtureComponent , { componentProperties } ) ;
228+ Object . values ( componentEvents ) . forEach ( evt => expect ( evt ) . not . toHaveBeenCalled ( ) ) ;
229+ expect ( inputControl . value ) . toBe ( '' ) ;
230+ } ) ;
210231
211- const inputControl = component . getByTestId ( 'input' ) as HTMLInputElement ;
212- const inputValue = 'foobar' ;
213- component . type ( inputControl , inputValue ) ;
232+ test ( 'input is readonly' , async ( ) => {
233+ const componentEvents = {
234+ onInput : jest . fn ( ) ,
235+ onChange : jest . fn ( ) ,
236+ onKeyDown : jest . fn ( ) ,
237+ onKeyPress : jest . fn ( ) ,
238+ onKeyUp : jest . fn ( ) ,
239+ } ;
214240
215- expect ( componentProperties . onKeyDown ) . toHaveBeenCalledTimes ( inputValue . length ) ;
241+ const component = await render ( FixtureComponent , {
242+ componentProperties : {
243+ readonly : true ,
244+ ...componentEvents ,
245+ } ,
246+ } ) ;
216247
217- component . blur ( inputControl ) ;
218- expect ( componentProperties . onChange ) . toBeCalledTimes ( 0 ) ;
248+ const inputControl = component . getByTestId ( 'input' ) as HTMLInputElement ;
249+ const value = 'Hello' ;
250+ component . type ( inputControl , value ) ;
251+
252+ expect ( componentEvents . onInput ) . not . toHaveBeenCalled ( ) ;
253+ expect ( componentEvents . onChange ) . not . toHaveBeenCalled ( ) ;
254+ expect ( componentEvents . onKeyDown ) . toHaveBeenCalledTimes ( value . length ) ;
255+ expect ( componentEvents . onKeyPress ) . toHaveBeenCalledTimes ( value . length ) ;
256+ expect ( componentEvents . onKeyUp ) . toHaveBeenCalledTimes ( value . length ) ;
257+ expect ( inputControl . value ) . toBe ( '' ) ;
258+ } ) ;
219259
220- expect ( inputControl . value ) . toBe ( '' ) ;
260+ test ( 'event.preventDefault() is called' , async ( ) => {
261+ const componentProperties = {
262+ onChange : jest . fn ( ) ,
263+ onKeyDown : jest . fn ( ) . mockImplementation ( event => event . preventDefault ( ) ) ,
264+ } ;
265+
266+ const component = await render ( FixtureComponent , { componentProperties } ) ;
267+
268+ const inputControl = component . getByTestId ( 'input' ) as HTMLInputElement ;
269+ const inputValue = 'foobar' ;
270+ component . type ( inputControl , inputValue ) ;
271+
272+ expect ( componentProperties . onKeyDown ) . toHaveBeenCalledTimes ( inputValue . length ) ;
273+
274+ component . blur ( inputControl ) ;
275+ expect ( componentProperties . onChange ) . toBeCalledTimes ( 0 ) ;
276+
277+ expect ( inputControl . value ) . toBe ( '' ) ;
278+ } ) ;
221279} ) ;
222280
223281test ( 'can clear an input field' , async ( ) => {
0 commit comments