@@ -122,21 +122,30 @@ test('only pointer events on disabled elements', async () => {
122
122
} )
123
123
124
124
describe ( 'check for pointer-events' , ( ) => {
125
- const getComputedStyle = jest
126
- . spyOn ( window , 'getComputedStyle' )
127
- . mockImplementation (
128
- ( ) =>
129
- ( {
130
- pointerEvents : 'foo' ,
131
- } as CSSStyleDeclaration ) ,
132
- )
125
+ let getComputedStyle : jest . SpyInstance <
126
+ ReturnType < Window [ 'getComputedStyle' ] > ,
127
+ Parameters < Window [ 'getComputedStyle' ] >
128
+ >
129
+ beforeAll ( ( ) => {
130
+ getComputedStyle = jest
131
+ . spyOn ( window , 'getComputedStyle' )
132
+ . mockImplementation (
133
+ ( ) =>
134
+ ( {
135
+ pointerEvents : 'foo' ,
136
+ } as CSSStyleDeclaration ) ,
137
+ )
138
+ } )
133
139
beforeEach ( ( ) => {
134
140
getComputedStyle . mockClear ( )
135
141
document . body . parentElement ?. replaceChild (
136
142
document . createElement ( 'body' ) ,
137
143
document . body ,
138
144
)
139
145
} )
146
+ afterAll ( ( ) => {
147
+ jest . restoreAllMocks ( )
148
+ } )
140
149
141
150
test ( 'skip check' , async ( ) => {
142
151
const { element, user} = setup ( `<input>` , {
@@ -216,3 +225,26 @@ describe('check for pointer-events', () => {
216
225
expect ( getComputedStyle ) . toHaveBeenNthCalledWith ( 6 , document . body ) // enter
217
226
} )
218
227
} )
228
+
229
+ test ( 'reject if target has `pointer-events: none`' , async ( ) => {
230
+ const { element, user} = setup ( `<input style="pointer-events: none"/>` )
231
+
232
+ await expect ( user . pointer ( { target : element } ) ) . rejects . toThrowError (
233
+ 'pointer-events' ,
234
+ )
235
+ await expect (
236
+ user . pointer ( { target : element , keys : '[MouseLeft]' } ) ,
237
+ ) . rejects . toThrowError ( 'pointer-events' )
238
+ } )
239
+
240
+ test ( 'omit pointer events on previous target if it has `pointer-events: none`' , async ( ) => {
241
+ const { element, user} = setup ( `<input/>` )
242
+ const onPointerLeave = jest . fn ( )
243
+ element . addEventListener ( 'pointerleave' , onPointerLeave )
244
+
245
+ await user . pointer ( { target : element } )
246
+ element . style . pointerEvents = 'none'
247
+ await user . pointer ( { target : document . body } )
248
+
249
+ expect ( onPointerLeave ) . not . toBeCalled ( )
250
+ } )
0 commit comments