@@ -178,13 +178,15 @@ describe('options', () => {
178
178
} ) ;
179
179
} ) ;
180
180
181
- test ( 'does not type when event.preventDefault() is called' , async ( ) => {
181
+ describe ( 'does not type when ' , ( ) => {
182
182
@Component ( {
183
183
selector : 'fixture' ,
184
184
template : `
185
185
<input
186
186
type="text"
187
187
data-testid="input"
188
+ [disabled]="disabled"
189
+ [readonly]="readonly"
188
190
(input)="onInput($event)"
189
191
(change)="onChange($event)"
190
192
(keydown)="onKeyDown($event)"
@@ -194,30 +196,86 @@ test('does not type when event.preventDefault() is called', async () => {
194
196
` ,
195
197
} )
196
198
class FixtureComponent {
199
+ @Input ( ) disabled = false ;
200
+ @Input ( ) readonly = false ;
201
+
197
202
onInput ( $event ) { }
198
203
onChange ( $event ) { }
199
204
onKeyDown ( $event ) { }
200
205
onKeyPress ( $event ) { }
201
206
onKeyUp ( $event ) { }
202
207
}
203
208
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' ) ;
208
227
209
- const component = await render ( FixtureComponent , { componentProperties } ) ;
228
+ Object . values ( componentEvents ) . forEach ( evt => expect ( evt ) . not . toHaveBeenCalled ( ) ) ;
229
+ expect ( inputControl . value ) . toBe ( '' ) ;
230
+ } ) ;
210
231
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
+ } ;
214
240
215
- expect ( componentProperties . onKeyDown ) . toHaveBeenCalledTimes ( inputValue . length ) ;
241
+ const component = await render ( FixtureComponent , {
242
+ componentProperties : {
243
+ readonly : true ,
244
+ ...componentEvents ,
245
+ } ,
246
+ } ) ;
216
247
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
+ } ) ;
219
259
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
+ } ) ;
221
279
} ) ;
222
280
223
281
test ( 'can clear an input field' , async ( ) => {
0 commit comments