11import userEvent from '#src'
22import { render , setup } from '#testHelpers'
3+ import { createDataTransfer } from '#src/utils'
34
45test ( 'paste with empty clipboard' , async ( ) => {
56 const { element, getEvents, user} = setup ( `<input/>` )
@@ -11,6 +12,17 @@ test('paste with empty clipboard', async () => {
1112 expect ( getEvents ( 'input' ) ) . toHaveLength ( 0 )
1213} )
1314
15+ test ( 'do not trigger input for paste with file data' , async ( ) => {
16+ const { getEvents, user} = setup ( `<input/>` )
17+
18+ const f0 = new File ( [ 'bar' ] , 'bar0.txt' , { type : 'text/plain' } )
19+ const dt = createDataTransfer ( [ f0 ] )
20+ await user . paste ( dt )
21+
22+ expect ( getEvents ( 'paste' ) ) . toHaveLength ( 1 )
23+ expect ( getEvents ( 'input' ) ) . toHaveLength ( 0 )
24+ } )
25+
1426test . each ( [
1527 [
1628 `<input/>` ,
@@ -65,6 +77,15 @@ test('does not paste when disabled', async () => {
6577 )
6678} )
6779
80+ test ( 'prevent input per paste event handler' , async ( ) => {
81+ const { element, eventWasFired, user} = setup ( `<input />` )
82+ element . addEventListener ( 'paste' , e => e . preventDefault ( ) )
83+
84+ await user . paste ( 'hi' )
85+ expect ( eventWasFired ( 'paste' ) ) . toBe ( true )
86+ expect ( eventWasFired ( 'input' ) ) . toBe ( false )
87+ } )
88+
6889test . each ( [ 'input' , 'textarea' ] ) (
6990 'should paste text in <%s> up to maxLength if provided' ,
7091 async type => {
0 commit comments