|
223 | 223 | assert_equals(log.event.composedPath().length, 0); |
224 | 224 | }, 'Event properties post dispatch with relatedTarget in the different shadow trees. (composed: false)'); |
225 | 225 | document.body.removeChild(n7.test7); |
| 226 | + |
| 227 | +test(t => { |
| 228 | + let host = document.createElement("div"); |
| 229 | + let shadow = host.attachShadow({ mode: "open" }); |
| 230 | + let target = shadow.appendChild(document.createElement("trala")); |
| 231 | + |
| 232 | + let eventListenerCalled = false; |
| 233 | + target.addEventListener("my-event", t.step_func(e => { |
| 234 | + eventListenerCalled = true; |
| 235 | + assert_equals(window.event, undefined); |
| 236 | + |
| 237 | + // Move target node out of shadow tree. |
| 238 | + host.appendChild(target); |
| 239 | + })); |
| 240 | + |
| 241 | + let event = new MouseEvent('my-event', {composed: false, relatedTarget: host}); |
| 242 | + target.dispatchEvent(event); |
| 243 | + assert_true(eventListenerCalled); |
| 244 | + |
| 245 | + assert_equals(event.target, null, "target should have been cleared"); |
| 246 | + assert_equals(event.relatedTarget, null, "relatedTarget should have been cleared"); |
| 247 | + assert_equals(event.eventPhase, 0); |
| 248 | + assert_equals(event.currentTarget, null); |
| 249 | + assert_equals(event.composedPath().length, 0); |
| 250 | +}, 'Event properties post dispatch when target get moved out of the shadow tree by event listener'); |
| 251 | + |
| 252 | +test(t => { |
| 253 | + let host = document.createElement("div"); |
| 254 | + let shadow = host.attachShadow({ mode: "open" }); |
| 255 | + let target = host.appendChild(document.createElement("trala")); |
| 256 | + |
| 257 | + let eventListenerCalled = false; |
| 258 | + target.addEventListener("my-event", t.step_func(e => { |
| 259 | + assert_equals(window.event, e); |
| 260 | + })); |
| 261 | + target.addEventListener("my-event", t.step_func(e => { |
| 262 | + eventListenerCalled = true; |
| 263 | + assert_equals(window.event, e); |
| 264 | + // Move target node into the shadow tree. |
| 265 | + shadow.append(target); |
| 266 | + })); |
| 267 | + target.addEventListener("my-event", t.step_func(e => { |
| 268 | + assert_equals(window.event, e); |
| 269 | + })); |
| 270 | + |
| 271 | + let event = new MouseEvent('my-event', {composed: false, relatedTarget: host}); |
| 272 | + target.dispatchEvent(event); |
| 273 | + assert_true(eventListenerCalled); |
| 274 | + |
| 275 | + // targets should not have been cleared since the node was not in the shadow tree when the event was initially dispatched. |
| 276 | + assert_equals(event.target, target, "Target should not have been cleared"); |
| 277 | + assert_equals(event.relatedTarget, host, "relatedTarget should not have been cleared"); |
| 278 | + assert_equals(event.eventPhase, 0); |
| 279 | + assert_equals(event.currentTarget, null); |
| 280 | + assert_equals(event.composedPath().length, 0); |
| 281 | +}, 'Event properties post dispatch when target get moved into the the shadow tree by event listener'); |
226 | 282 | </script> |
0 commit comments