| <!DOCTYPE html> |
| <html> |
| <head> |
| <script src="../../../resources/js-test-pre.js"></script> |
| </head> |
| <body> |
| <p id="description"></p> |
| <div id="sandbox"> |
| <details open id="details" style="height: 200px"> |
| <summary id="summary">summary</summary> |
| details |
| </details> |
| </div> |
| <pre id="console"></pre> |
| <script> |
| description("Tests to ensure that moving mouse from 'summary' to 'details' should dispatch events correctly. " |
| + "Note that 'details' is a shadow host and has a 'summary' element as a immediate child element. " |
| + "There is no shadow root between them."); |
| |
| function moveMouseOver(element) |
| { |
| if (!window.eventSender) |
| return; |
| var x = element.offsetLeft + element.offsetWidth / 2; |
| var y = element.offsetTop + element.offsetHeight / 2; |
| eventSender.mouseMoveTo(x, y); |
| } |
| |
| var eventRecords = {}; |
| |
| function clearEventRecords() |
| { |
| eventRecords = {}; |
| } |
| |
| function dispatchedEvent(eventType) |
| { |
| var events = eventRecords[eventType]; |
| if (!events) |
| return []; |
| return events; |
| } |
| |
| function recordEvent(event) |
| { |
| var eventType = event.type |
| if (!eventRecords[eventType]) { |
| eventRecords[eventType] = [] |
| } |
| // Records each event in the following format per event type: |
| // eventRecords[eventType] = ['target.id(<-relatedTarget.id)(@currentTarget.id)',,,] |
| // * RelatedTarget and currentTarget may be omitted if they are not defined. |
| // A new event is pushed back to the array of its event type. |
| var eventString = ''; |
| eventString += event.target.id; |
| if (event.relatedTarget) |
| eventString += '(<-' + event.relatedTarget.id + ')'; |
| if (event.currentTarget) |
| eventString += '(@' + event.currentTarget.id + ')'; |
| eventRecords[eventType].push(eventString); |
| } |
| |
| function moveMouse(oldElementId, newElementId) |
| { |
| debug('\n' + 'Moving mouse from ' + oldElementId + ' to ' + newElementId); |
| moveMouseOver(document.getElementById(oldElementId)); |
| clearEventRecords(); |
| moveMouseOver(document.getElementById(newElementId)); |
| } |
| |
| function test() |
| { |
| if (window.testRunner) |
| testRunner.dumpAsText(); |
| var ids = ['sandbox', 'details', 'summary']; |
| for (var i = 0; i < ids.length; ++i) { |
| var element = document.getElementById(ids[i]); |
| element.addEventListener('mouseover', recordEvent, false); |
| element.addEventListener('mouseout', recordEvent, false); |
| } |
| |
| moveMouse('summary', 'details'); |
| shouldBe('dispatchedEvent("mouseover")', '["details(<-summary)(@details)", "details(<-summary)(@sandbox)"]'); |
| shouldBe('dispatchedEvent("mouseout")', '["summary(<-details)(@summary)", "summary(<-details)(@details)", "summary(<-details)(@sandbox)"]'); |
| |
| moveMouse('details', 'summary'); |
| shouldBe('dispatchedEvent("mouseover")', '["summary(<-details)(@summary)", "summary(<-details)(@details)", "summary(<-details)(@sandbox)"]'); |
| shouldBe('dispatchedEvent("mouseout")', '["details(<-summary)(@details)", "details(<-summary)(@sandbox)"]'); |
| } |
| |
| test(); |
| </script> |
| <script src="../../../resources/js-test-post.js"></script> |
| </body> |
| </html> |