blob: 6b4c476e12d26d0fd0d51156d85c7e6b67dfeb32 [file] [log] [blame]
<!DOCTYPE html>
<html>
<head>
<title>Cobalt pointer test</title>
<script src='black_box_js_test_utils.js'></script>
<script src='pointer_event_test_utils.js'></script>
<style>
.size10 {
padding: 10px;
}
.size20 {
padding: 20px;
}
.size40 {
padding: 40px;
}
.black {
background-color: #FFF;
}
.grey {
background-color: #888;
}
.green {
background-color: #0F0;
}
.blue {
background-color: #00F;
}
.cyan {
background-color: #0FF;
}
.purple {
background-color: #F0F;
}
.yellow {
background-color: #FF0;
}
</style>
</head>
<body class="black">
<script>
const expected_events = [
// name, id, phase
// actions.move_to_element(top_one).pause(_SLEEP_AFTER_MOVE_TIME)
{ name: 'pointermove', id: 'top_one', phase: Event.AT_TARGET },
{ name: 'pointermove', id: 'top', phase: Event.BUBBLING_PHASE },
{ name: 'pointermove', id: 'outer', phase: Event.BUBBLING_PHASE },
{ name: 'mousemove', id: 'top_one', phase: Event.AT_TARGET },
{ name: 'mousemove', id: 'top', phase: Event.BUBBLING_PHASE },
{ name: 'mousemove', id: 'outer', phase: Event.BUBBLING_PHASE },
{ name: 'pointerover', id: 'top_one', phase: Event.AT_TARGET },
{ name: 'pointerover', id: 'top', phase: Event.BUBBLING_PHASE },
{ name: 'pointerover', id: 'outer', phase: Event.BUBBLING_PHASE },
{ name: 'pointerenter', id: 'top_one', phase: Event.AT_TARGET },
{ name: 'pointerenter', id: 'top', phase: Event.AT_TARGET },
{ name: 'pointerenter', id: 'outer', phase: Event.AT_TARGET },
{ name: 'mouseover', id: 'top_one', phase: Event.AT_TARGET },
{ name: 'mouseover', id: 'top', phase: Event.BUBBLING_PHASE },
{ name: 'mouseover', id: 'outer', phase: Event.BUBBLING_PHASE },
{ name: 'mouseenter', id: 'top_one', phase: Event.AT_TARGET },
{ name: 'mouseenter', id: 'top', phase: Event.AT_TARGET },
{ name: 'mouseenter', id: 'outer', phase: Event.AT_TARGET },
// actions.move_to_element(top_two).pause(_SLEEP_AFTER_MOVE_TIME)
{ name: 'pointerout', id: 'top_one', phase: Event.AT_TARGET },
{ name: 'pointerout', id: 'top', phase: Event.BUBBLING_PHASE },
{ name: 'pointerout', id: 'outer', phase: Event.BUBBLING_PHASE },
{ name: 'pointerleave', id: 'top_one', phase: Event.AT_TARGET },
{ name: 'mouseout', id: 'top_one', phase: Event.AT_TARGET },
{ name: 'mouseout', id: 'top', phase: Event.BUBBLING_PHASE },
{ name: 'mouseout', id: 'outer', phase: Event.BUBBLING_PHASE },
{ name: 'mouseleave', id: 'top_one', phase: Event.AT_TARGET },
{ name: 'pointermove', id: 'top_two', phase: Event.AT_TARGET },
{ name: 'pointermove', id: 'top', phase: Event.BUBBLING_PHASE },
{ name: 'pointermove', id: 'outer', phase: Event.BUBBLING_PHASE }, ,
{ name: 'mousemove', id: 'top_two', phase: Event.AT_TARGET },
{ name: 'mousemove', id: 'top', phase: Event.BUBBLING_PHASE },
{ name: 'mousemove', id: 'outer', phase: Event.BUBBLING_PHASE },
{ name: 'pointerover', id: 'top_two', phase: Event.AT_TARGET },
{ name: 'pointerover', id: 'top', phase: Event.BUBBLING_PHASE },
{ name: 'pointerover', id: 'outer', phase: Event.BUBBLING_PHASE },
{ name: 'pointerenter', id: 'top_two', phase: Event.AT_TARGET },
{ name: 'mouseover', id: 'top_two', phase: Event.AT_TARGET },
{ name: 'mouseover', id: 'top', phase: Event.BUBBLING_PHASE },
{ name: 'mouseover', id: 'outer', phase: Event.BUBBLING_PHASE },
{ name: 'mouseenter', id: 'top_two', phase: Event.AT_TARGET },
// actions.move_to_element_with_offset(top_two, 10, 10).pause(_SLEEP_AFTER_MOVE_TIME)
{ name: 'pointermove', id: 'top_two', phase: Event.AT_TARGET },
{ name: 'pointermove', id: 'top', phase: Event.BUBBLING_PHASE },
{ name: 'pointermove', id: 'outer', phase: Event.BUBBLING_PHASE },
{ name: 'mousemove', id: 'top_two', phase: Event.AT_TARGET },
{ name: 'mousemove', id: 'top', phase: Event.BUBBLING_PHASE },
{ name: 'mousemove', id: 'outer', phase: Event.BUBBLING_PHASE },
// actions.move_to_element_with_offset(top_two, 0, 0).pause(_SLEEP_AFTER_MOVE_TIME)
{ name: 'pointermove', id: 'top_two', phase: Event.AT_TARGET },
{ name: 'pointermove', id: 'top', phase: Event.BUBBLING_PHASE },
{ name: 'pointermove', id: 'outer', phase: Event.BUBBLING_PHASE }, ,
{ name: 'mousemove', id: 'top_two', phase: Event.AT_TARGET },
{ name: 'mousemove', id: 'top', phase: Event.BUBBLING_PHASE },
{ name: 'mousemove', id: 'outer', phase: Event.BUBBLING_PHASE },
// actions.move_to_element_with_offset(top_two, -10, 0).pause(_SLEEP_AFTER_MOVE_TIME)
{ name: 'pointerout', id: 'top_two', phase: Event.AT_TARGET },
{ name: 'pointerout', id: 'top', phase: Event.BUBBLING_PHASE },
{ name: 'pointerout', id: 'outer', phase: Event.BUBBLING_PHASE },
{ name: 'pointerleave', id: 'top_two', phase: Event.AT_TARGET },
{ name: 'mouseout', id: 'top_two', phase: Event.AT_TARGET },
{ name: 'mouseout', id: 'top', phase: Event.BUBBLING_PHASE },
{ name: 'mouseout', id: 'outer', phase: Event.BUBBLING_PHASE },
{ name: 'mouseleave', id: 'top_two', phase: Event.AT_TARGET },
{ name: 'pointermove', id: 'top_one', phase: Event.AT_TARGET },
{ name: 'pointermove', id: 'top', phase: Event.BUBBLING_PHASE },
{ name: 'pointermove', id: 'outer', phase: Event.BUBBLING_PHASE },
{ name: 'mousemove', id: 'top_one', phase: Event.AT_TARGET },
{ name: 'mousemove', id: 'top', phase: Event.BUBBLING_PHASE },
{ name: 'mousemove', id: 'outer', phase: Event.BUBBLING_PHASE },
{ name: 'pointerover', id: 'top_one', phase: Event.AT_TARGET },
{ name: 'pointerover', id: 'top', phase: Event.BUBBLING_PHASE },
{ name: 'pointerover', id: 'outer', phase: Event.BUBBLING_PHASE },
{ name: 'pointerenter', id: 'top_one', phase: Event.AT_TARGET },
{ name: 'mouseover', id: 'top_one', phase: Event.AT_TARGET },
{ name: 'mouseover', id: 'top', phase: Event.BUBBLING_PHASE },
{ name: 'mouseover', id: 'outer', phase: Event.BUBBLING_PHASE },
{ name: 'mouseenter', id: 'top_one', phase: Event.AT_TARGET },
// actions.click(top_three)
{ name: 'pointerout', id: 'top_one', phase: Event.AT_TARGET },
{ name: 'pointerout', id: 'top', phase: Event.BUBBLING_PHASE },
{ name: 'pointerout', id: 'outer', phase: Event.BUBBLING_PHASE },
{ name: 'pointerleave', id: 'top_one', phase: Event.AT_TARGET },
{ name: 'mouseout', id: 'top_one', phase: Event.AT_TARGET },
{ name: 'mouseout', id: 'top', phase: Event.BUBBLING_PHASE },
{ name: 'mouseout', id: 'outer', phase: Event.BUBBLING_PHASE },
{ name: 'mouseleave', id: 'top_one', phase: Event.AT_TARGET },
{ name: 'pointermove', id: 'top_three', phase: Event.AT_TARGET },
{ name: 'pointermove', id: 'top', phase: Event.BUBBLING_PHASE },
{ name: 'pointermove', id: 'outer', phase: Event.BUBBLING_PHASE },
{ name: 'mousemove', id: 'top_three', phase: Event.AT_TARGET },
{ name: 'mousemove', id: 'top', phase: Event.BUBBLING_PHASE },
{ name: 'mousemove', id: 'outer', phase: Event.BUBBLING_PHASE },
{ name: 'pointerover', id: 'top_three', phase: Event.AT_TARGET },
{ name: 'pointerover', id: 'top', phase: Event.BUBBLING_PHASE },
{ name: 'pointerover', id: 'outer', phase: Event.BUBBLING_PHASE },
{ name: 'pointerenter', id: 'top_three', phase: Event.AT_TARGET },
{ name: 'mouseover', id: 'top_three', phase: Event.AT_TARGET },
{ name: 'mouseover', id: 'top', phase: Event.BUBBLING_PHASE },
{ name: 'mouseover', id: 'outer', phase: Event.BUBBLING_PHASE },
{ name: 'mouseenter', id: 'top_three', phase: Event.AT_TARGET },
{ name: 'pointerdown', id: 'top_three', phase: Event.AT_TARGET },
{ name: 'pointerdown', id: 'top', phase: Event.BUBBLING_PHASE },
{ name: 'pointerdown', id: 'outer', phase: Event.BUBBLING_PHASE },
{ name: 'mousedown', id: 'top_three', phase: Event.AT_TARGET },
{ name: 'mousedown', id: 'top', phase: Event.BUBBLING_PHASE },
{ name: 'mousedown', id: 'outer', phase: Event.BUBBLING_PHASE },
{ name: 'pointerup', id: 'top_three', phase: Event.AT_TARGET },
{ name: 'pointerup', id: 'top', phase: Event.BUBBLING_PHASE },
{ name: 'pointerup', id: 'outer', phase: Event.BUBBLING_PHASE },
{ name: 'mouseup', id: 'top_three', phase: Event.AT_TARGET },
{ name: 'mouseup', id: 'top', phase: Event.BUBBLING_PHASE },
{ name: 'mouseup', id: 'outer', phase: Event.BUBBLING_PHASE },
{ name: 'click', id: 'top_three', phase: Event.AT_TARGET },
{ name: 'click', id: 'top', phase: Event.BUBBLING_PHASE },
{ name: 'click', id: 'outer', phase: Event.BUBBLING_PHASE },
// actions.click_and_hold(top_four)
{ name: 'pointerout', id: 'top_three', phase: Event.AT_TARGET },
{ name: 'pointerout', id: 'top', phase: Event.BUBBLING_PHASE },
{ name: 'pointerout', id: 'outer', phase: Event.BUBBLING_PHASE },
{ name: 'pointerleave', id: 'top_three', phase: Event.AT_TARGET },
{ name: 'mouseout', id: 'top_three', phase: Event.AT_TARGET },
{ name: 'mouseout', id: 'top', phase: Event.BUBBLING_PHASE },
{ name: 'mouseout', id: 'outer', phase: Event.BUBBLING_PHASE },
{ name: 'mouseleave', id: 'top_three', phase: Event.AT_TARGET },
{ name: 'pointermove', id: 'top_four', phase: Event.AT_TARGET },
{ name: 'pointermove', id: 'top', phase: Event.BUBBLING_PHASE },
{ name: 'pointermove', id: 'outer', phase: Event.BUBBLING_PHASE }, ,
{ name: 'mousemove', id: 'top_four', phase: Event.AT_TARGET },
{ name: 'mousemove', id: 'top', phase: Event.BUBBLING_PHASE },
{ name: 'mousemove', id: 'outer', phase: Event.BUBBLING_PHASE },
{ name: 'pointerover', id: 'top_four', phase: Event.AT_TARGET },
{ name: 'pointerover', id: 'top', phase: Event.BUBBLING_PHASE },
{ name: 'pointerover', id: 'outer', phase: Event.BUBBLING_PHASE },
{ name: 'pointerenter', id: 'top_four', phase: Event.AT_TARGET },
{ name: 'mouseover', id: 'top_four', phase: Event.AT_TARGET },
{ name: 'mouseover', id: 'top', phase: Event.BUBBLING_PHASE },
{ name: 'mouseover', id: 'outer', phase: Event.BUBBLING_PHASE },
{ name: 'mouseenter', id: 'top_four', phase: Event.AT_TARGET },
{ name: 'pointerdown', id: 'top_four', phase: Event.AT_TARGET },
{ name: 'pointerdown', id: 'top', phase: Event.BUBBLING_PHASE },
{ name: 'pointerdown', id: 'outer', phase: Event.BUBBLING_PHASE },
{ name: 'mousedown', id: 'top_four', phase: Event.AT_TARGET },
{ name: 'mousedown', id: 'top', phase: Event.BUBBLING_PHASE },
{ name: 'mousedown', id: 'outer', phase: Event.BUBBLING_PHASE },
// actions.release(top_five)
{ name: 'pointermove', id: 'top_four', phase: Event.AT_TARGET },
{ name: 'pointermove', id: 'top', phase: Event.BUBBLING_PHASE },
{ name: 'pointermove', id: 'outer', phase: Event.BUBBLING_PHASE },
{ name: 'mousemove', id: 'top_four', phase: Event.AT_TARGET },
{ name: 'mousemove', id: 'top', phase: Event.BUBBLING_PHASE },
{ name: 'mousemove', id: 'outer', phase: Event.BUBBLING_PHASE },
{ name: 'pointerup', id: 'top_four', phase: Event.AT_TARGET },
{ name: 'pointerup', id: 'top', phase: Event.BUBBLING_PHASE },
{ name: 'pointerup', id: 'outer', phase: Event.BUBBLING_PHASE },
{ name: 'mouseup', id: 'top_four', phase: Event.AT_TARGET },
{ name: 'mouseup', id: 'top', phase: Event.BUBBLING_PHASE },
{ name: 'mouseup', id: 'outer', phase: Event.BUBBLING_PHASE },
{ name: 'click', id: 'top_four', phase: Event.AT_TARGET },
{ name: 'click', id: 'top', phase: Event.BUBBLING_PHASE },
{ name: 'click', id: 'outer', phase: Event.BUBBLING_PHASE },
// actions.move_to_element(top_six).pause(_SLEEP_AFTER_MOVE_TIME)
{ name: 'pointerout', id: 'top_four', phase: Event.AT_TARGET },
{ name: 'pointerout', id: 'top', phase: Event.BUBBLING_PHASE },
{ name: 'pointerout', id: 'outer', phase: Event.BUBBLING_PHASE },
{ name: 'pointerleave', id: 'top_four', phase: Event.AT_TARGET },
{ name: 'mouseout', id: 'top_four', phase: Event.AT_TARGET },
{ name: 'mouseout', id: 'top', phase: Event.BUBBLING_PHASE },
{ name: 'mouseout', id: 'outer', phase: Event.BUBBLING_PHASE },
{ name: 'mouseleave', id: 'top_four', phase: Event.AT_TARGET },
{ name: 'pointermove', id: 'top_six', phase: Event.AT_TARGET },
{ name: 'pointermove', id: 'top', phase: Event.BUBBLING_PHASE },
{ name: 'pointermove', id: 'outer', phase: Event.BUBBLING_PHASE },
{ name: 'mousemove', id: 'top_six', phase: Event.AT_TARGET },
{ name: 'mousemove', id: 'top', phase: Event.BUBBLING_PHASE },
{ name: 'mousemove', id: 'outer', phase: Event.BUBBLING_PHASE },
{ name: 'pointerover', id: 'top_six', phase: Event.AT_TARGET },
{ name: 'pointerover', id: 'top', phase: Event.BUBBLING_PHASE },
{ name: 'pointerover', id: 'outer', phase: Event.BUBBLING_PHASE },
{ name: 'pointerenter', id: 'top_six', phase: Event.AT_TARGET },
{ name: 'mouseover', id: 'top_six', phase: Event.AT_TARGET },
{ name: 'mouseover', id: 'top', phase: Event.BUBBLING_PHASE },
{ name: 'mouseover', id: 'outer', phase: Event.BUBBLING_PHASE },
{ name: 'mouseenter', id: 'top_six', phase: Event.AT_TARGET },
// actions.move_to_element(bottom_six).pause(_SLEEP_AFTER_MOVE_TIME)
{ name: 'pointerout', id: 'top_six', phase: Event.AT_TARGET },
{ name: 'pointerout', id: 'top', phase: Event.BUBBLING_PHASE },
{ name: 'pointerout', id: 'outer', phase: Event.BUBBLING_PHASE },
{ name: 'pointerleave', id: 'top_six', phase: Event.AT_TARGET },
{ name: 'pointerleave', id: 'top', phase: Event.AT_TARGET },
{ name: 'mouseout', id: 'top_six', phase: Event.AT_TARGET },
{ name: 'mouseout', id: 'top', phase: Event.BUBBLING_PHASE },
{ name: 'mouseout', id: 'outer', phase: Event.BUBBLING_PHASE },
{ name: 'mouseleave', id: 'top_six', phase: Event.AT_TARGET },
{ name: 'mouseleave', id: 'top', phase: Event.AT_TARGET },
{ name: 'pointermove', id: 'bottom_six', phase: Event.AT_TARGET },
{ name: 'pointermove', id: 'bottom', phase: Event.BUBBLING_PHASE },
{ name: 'pointermove', id: 'outer', phase: Event.BUBBLING_PHASE },
{ name: 'mousemove', id: 'bottom_six', phase: Event.AT_TARGET },
{ name: 'mousemove', id: 'bottom', phase: Event.BUBBLING_PHASE },
{ name: 'mousemove', id: 'outer', phase: Event.BUBBLING_PHASE },
{ name: 'pointerover', id: 'bottom_six', phase: Event.AT_TARGET },
{ name: 'pointerover', id: 'bottom', phase: Event.BUBBLING_PHASE },
{ name: 'pointerover', id: 'outer', phase: Event.BUBBLING_PHASE },
{ name: 'pointerenter', id: 'bottom_six', phase: Event.AT_TARGET },
{ name: 'pointerenter', id: 'bottom', phase: Event.AT_TARGET },
{ name: 'mouseover', id: 'bottom_six', phase: Event.AT_TARGET },
{ name: 'mouseover', id: 'bottom', phase: Event.BUBBLING_PHASE },
{ name: 'mouseover', id: 'outer', phase: Event.BUBBLING_PHASE },
{ name: 'mouseenter', id: 'bottom_six', phase: Event.AT_TARGET },
{ name: 'mouseenter', id: 'bottom', phase: Event.AT_TARGET },
// actions.click(bottom_five)
{ name: 'pointerout', id: 'bottom_six', phase: Event.AT_TARGET },
{ name: 'pointerout', id: 'bottom', phase: Event.BUBBLING_PHASE },
{ name: 'pointerout', id: 'outer', phase: Event.BUBBLING_PHASE },
{ name: 'pointerleave', id: 'bottom_six', phase: Event.AT_TARGET },
{ name: 'mouseout', id: 'bottom_six', phase: Event.AT_TARGET },
{ name: 'mouseout', id: 'bottom', phase: Event.BUBBLING_PHASE },
{ name: 'mouseout', id: 'outer', phase: Event.BUBBLING_PHASE },
{ name: 'mouseleave', id: 'bottom_six', phase: Event.AT_TARGET },
{ name: 'pointermove', id: 'bottom_five', phase: Event.AT_TARGET },
{ name: 'pointermove', id: 'bottom', phase: Event.BUBBLING_PHASE },
{ name: 'pointermove', id: 'outer', phase: Event.BUBBLING_PHASE },
{ name: 'mousemove', id: 'bottom_five', phase: Event.AT_TARGET },
{ name: 'mousemove', id: 'bottom', phase: Event.BUBBLING_PHASE },
{ name: 'mousemove', id: 'outer', phase: Event.BUBBLING_PHASE },
{ name: 'pointerover', id: 'bottom_five', phase: Event.AT_TARGET },
{ name: 'pointerover', id: 'bottom', phase: Event.BUBBLING_PHASE },
{ name: 'pointerover', id: 'outer', phase: Event.BUBBLING_PHASE },
{ name: 'pointerenter', id: 'bottom_five', phase: Event.AT_TARGET },
{ name: 'mouseover', id: 'bottom_five', phase: Event.AT_TARGET },
{ name: 'mouseover', id: 'bottom', phase: Event.BUBBLING_PHASE },
{ name: 'mouseover', id: 'outer', phase: Event.BUBBLING_PHASE },
{ name: 'mouseenter', id: 'bottom_five', phase: Event.AT_TARGET },
{ name: 'pointerdown', id: 'bottom_five', phase: Event.AT_TARGET },
{ name: 'pointerdown', id: 'bottom', phase: Event.BUBBLING_PHASE },
{ name: 'pointerdown', id: 'outer', phase: Event.BUBBLING_PHASE },
{ name: 'pointerup', id: 'bottom_five', phase: Event.AT_TARGET },
{ name: 'pointerup', id: 'bottom', phase: Event.BUBBLING_PHASE },
{ name: 'pointerup', id: 'outer', phase: Event.BUBBLING_PHASE },
{ name: 'click', id: 'bottom_five', phase: Event.AT_TARGET },
{ name: 'click', id: 'bottom', phase: Event.BUBBLING_PHASE },
{ name: 'click', id: 'outer', phase: Event.BUBBLING_PHASE },
// actions.click_and_hold(bottom_four)
{ name: 'pointerout', id: 'bottom_five', phase: Event.AT_TARGET },
{ name: 'pointerout', id: 'bottom', phase: Event.BUBBLING_PHASE },
{ name: 'pointerout', id: 'outer', phase: Event.BUBBLING_PHASE },
{ name: 'pointerleave', id: 'bottom_five', phase: Event.AT_TARGET },
{ name: 'mouseout', id: 'bottom_five', phase: Event.AT_TARGET },
{ name: 'mouseout', id: 'bottom', phase: Event.BUBBLING_PHASE },
{ name: 'mouseout', id: 'outer', phase: Event.BUBBLING_PHASE },
{ name: 'mouseleave', id: 'bottom_five', phase: Event.AT_TARGET },
{ name: 'pointermove', id: 'bottom_four', phase: Event.AT_TARGET },
{ name: 'pointermove', id: 'bottom', phase: Event.BUBBLING_PHASE },
{ name: 'pointermove', id: 'outer', phase: Event.BUBBLING_PHASE },
{ name: 'mousemove', id: 'bottom_four', phase: Event.AT_TARGET },
{ name: 'mousemove', id: 'bottom', phase: Event.BUBBLING_PHASE },
{ name: 'mousemove', id: 'outer', phase: Event.BUBBLING_PHASE },
{ name: 'pointerover', id: 'bottom_four', phase: Event.AT_TARGET },
{ name: 'pointerover', id: 'bottom', phase: Event.BUBBLING_PHASE },
{ name: 'pointerover', id: 'outer', phase: Event.BUBBLING_PHASE },
{ name: 'pointerenter', id: 'bottom_four', phase: Event.AT_TARGET },
{ name: 'mouseover', id: 'bottom_four', phase: Event.AT_TARGET },
{ name: 'mouseover', id: 'bottom', phase: Event.BUBBLING_PHASE },
{ name: 'mouseover', id: 'outer', phase: Event.BUBBLING_PHASE },
{ name: 'mouseenter', id: 'bottom_four', phase: Event.AT_TARGET },
{ name: 'pointerdown', id: 'bottom_four', phase: Event.AT_TARGET },
{ name: 'pointerdown', id: 'bottom', phase: Event.BUBBLING_PHASE },
{ name: 'pointerdown', id: 'outer', phase: Event.BUBBLING_PHASE },
// actions.release(bottom_three)
{ name: 'pointermove', id: 'bottom_four', phase: Event.AT_TARGET },
{ name: 'pointermove', id: 'bottom', phase: Event.BUBBLING_PHASE },
{ name: 'pointermove', id: 'outer', phase: Event.BUBBLING_PHASE },
{ name: 'pointerup', id: 'bottom_four', phase: Event.AT_TARGET },
{ name: 'pointerup', id: 'bottom', phase: Event.BUBBLING_PHASE },
{ name: 'pointerup', id: 'outer', phase: Event.BUBBLING_PHASE },
{ name: 'click', id: 'bottom_four', phase: Event.AT_TARGET },
{ name: 'click', id: 'bottom', phase: Event.BUBBLING_PHASE },
{ name: 'click', id: 'outer', phase: Event.BUBBLING_PHASE },
// actions.move_to_element(bottom_two).pause(_SLEEP_AFTER_MOVE_TIME)
{ name: 'pointerout', id: 'bottom_four', phase: Event.AT_TARGET },
{ name: 'pointerout', id: 'bottom', phase: Event.BUBBLING_PHASE },
{ name: 'pointerout', id: 'outer', phase: Event.BUBBLING_PHASE },
{ name: 'pointerleave', id: 'bottom_four', phase: Event.AT_TARGET },
{ name: 'mouseout', id: 'bottom_four', phase: Event.AT_TARGET },
{ name: 'mouseout', id: 'bottom', phase: Event.BUBBLING_PHASE },
{ name: 'mouseout', id: 'outer', phase: Event.BUBBLING_PHASE },
{ name: 'mouseleave', id: 'bottom_four', phase: Event.AT_TARGET },
{ name: 'pointermove', id: 'bottom_two', phase: Event.AT_TARGET },
{ name: 'mousemove', id: 'bottom_two', phase: Event.AT_TARGET },
{ name: 'pointerover', id: 'bottom_two', phase: Event.AT_TARGET },
{ name: 'pointerenter', id: 'bottom_two', phase: Event.AT_TARGET },
{ name: 'mouseover', id: 'bottom_two', phase: Event.AT_TARGET },
{ name: 'mouseenter', id: 'bottom_two', phase: Event.AT_TARGET },
// actions.move_to_element(bottom_one).pause(_SLEEP_AFTER_MOVE_TIME)
{ name: 'pointerout', id: 'bottom_two', phase: Event.AT_TARGET },
{ name: 'pointerleave', id: 'bottom_two', phase: Event.AT_TARGET },
{ name: 'mouseout', id: 'bottom_two', phase: Event.AT_TARGET },
{ name: 'mouseleave', id: 'bottom_two', phase: Event.AT_TARGET },
{ name: 'pointermove', id: 'bottom_one', phase: Event.AT_TARGET },
{ name: 'mousemove', id: 'bottom_one', phase: Event.AT_TARGET },
{ name: 'pointerover', id: 'bottom_one', phase: Event.AT_TARGET },
{ name: 'pointerenter', id: 'bottom_one', phase: Event.AT_TARGET },
{ name: 'mouseover', id: 'bottom_one', phase: Event.AT_TARGET },
{ name: 'mouseenter', id: 'bottom_one', phase: Event.AT_TARGET },
// find_element_by_id(runner, 'end').click()
{ name: 'pointerout', id: 'bottom_one', phase: Event.AT_TARGET },
{ name: 'pointerleave', id: 'bottom_one', phase: Event.AT_TARGET },
{ name: 'pointerleave', id: 'bottom', phase: Event.AT_TARGET },
{ name: 'mouseout', id: 'bottom_one', phase: Event.AT_TARGET },
{ name: 'mouseleave', id: 'bottom_one', phase: Event.AT_TARGET },
{ name: 'mouseleave', id: 'bottom', phase: Event.AT_TARGET },
{ name: 'pointermove', id: 'end', phase: Event.AT_TARGET },
{ name: 'pointermove', id: 'outer', phase: Event.BUBBLING_PHASE },
{ name: 'mousemove', id: 'end', phase: Event.AT_TARGET },
{ name: 'mousemove', id: 'outer', phase: Event.BUBBLING_PHASE },
{ name: 'pointerover', id: 'end', phase: Event.AT_TARGET },
{ name: 'pointerover', id: 'outer', phase: Event.BUBBLING_PHASE },
{ name: 'pointerenter', id: 'end', phase: Event.AT_TARGET },
{ name: 'mouseover', id: 'end', phase: Event.AT_TARGET },
{ name: 'mouseover', id: 'outer', phase: Event.BUBBLING_PHASE },
{ name: 'mouseenter', id: 'end', phase: Event.AT_TARGET },
{ name: 'pointerdown', id: 'end', phase: Event.AT_TARGET },
{ name: 'pointerdown', id: 'outer', phase: Event.BUBBLING_PHASE },
{ name: 'mousedown', id: 'end', phase: Event.AT_TARGET },
{ name: 'mousedown', id: 'outer', phase: Event.BUBBLING_PHASE },
{ name: 'pointerup', id: 'end', phase: Event.AT_TARGET },
{ name: 'pointerup', id: 'outer', phase: Event.BUBBLING_PHASE },
{ name: 'mouseup', id: 'end', phase: Event.AT_TARGET },
{ name: 'mouseup', id: 'outer', phase: Event.BUBBLING_PHASE },
{ name: 'click', id: 'end', phase: Event.AT_TARGET },
{ name: 'click', id: 'outer', phase: Event.BUBBLING_PHASE }]
function endTest(e) {
console.log('Ending test.')
assertTrue(failure_count == 0);
onEndTest();
}
function cancel(e) {
console.log('cancel');
e.preventDefault();
}
function stop(e) {
console.log('stop');
e.stopPropagation();
}
function capture(e) {
console.log('capture');
e.target.setPointerCapture(e.pointerId);
}
// If the event type has value 'type', then report an error if the
// 'name' property on the event target already has 'value'. Otherwise,
// set it to the 'value'. This is used to detect erroneous boundary
// events (enter/leave, over/out), and up/down event sequences on an
// element.
function trackAndVerifyTargetState(event, type, name, value) {
if (event.type == type) {
if (event.target[name] == value) {
console.log('ERROR: ' + type + 'event received while ' +
name + ' == ' + event.target[name]);
assertTrue(event.target[name] != value);
}
event.target[name] = value;
}
}
function checkState(e) {
// Check the target element state when the event is 'at target'.
if (e.eventPhase == 2) {
// Verify that there is not a duplicated or missing event for enter,
// leave, over, out, up, or down.
trackAndVerifyTargetState(e, 'mouseenter', 'mouseenter', true);
trackAndVerifyTargetState(e, 'mouseleave', 'mouseenter', false);
trackAndVerifyTargetState(e, 'mouseover', 'mouseover', true);
trackAndVerifyTargetState(e, 'mouseout', 'mouseover', false);
trackAndVerifyTargetState(e, 'mousedown', 'mousedown', true);
trackAndVerifyTargetState(e, 'mouseup', 'mousedown', false);
trackAndVerifyTargetState(e, 'pointerenter', 'pointerenter', true);
trackAndVerifyTargetState(e, 'pointerleave', 'pointerenter', false);
trackAndVerifyTargetState(e, 'pointerover', 'pointerover', true);
trackAndVerifyTargetState(e, 'pointerout', 'pointerover', false);
trackAndVerifyTargetState(e, 'pointerdown', 'pointerdown', true);
trackAndVerifyTargetState(e, 'pointerup', 'pointerdown', false);
}
}
function setAllHandlers(prefix, selector, callback) {
setHandlers(prefix + 'enter', selector, callback);
setHandlers(prefix + 'leave', selector, callback);
setHandlers(prefix + 'over', selector, callback);
setHandlers(prefix + 'out', selector, callback);
setHandlers(prefix + 'down', selector, callback);
setHandlers(prefix + 'up', selector, callback);
setHandlers(prefix + 'move', selector, callback);
}
window.onload = function () {
setAllHandlers('mouse', '.track', logEvent);
setAllHandlers('pointer', '.track', logEvent);
setHandlers('click', '.track', logEvent);
setAllHandlers('mouse', '.cancel', cancel);
setAllHandlers('pointer', '.cancel', cancel);
setAllHandlers('mouse', '.stop', stop);
setAllHandlers('pointer', '.stop', stop);
setHandlers('pointerdown', '.capture', capture);
setHandlers('click', '.end', endTest);
setAllHandlers('mouse', '*', checkState);
setAllHandlers('pointer', '*', checkState);
console.log("Setup finished");
setupFinished();
}
</script>
<div id="outer" class="track size40 grey">
<div id="top" class="track size20 blue">
<span id="top_one" class="track size10 cyan"></span>
<span id="top_two" class="track size10 purple"></span>
*A*
<span id="top_three" class="track size10 yellow"></span>
*B*
<span id="top_four" class="track capture size10 grey"></span>
<span id="top_five" class="track size10 green"></span>
<span id="top_six" class="track size10 cyan"></span>
</div>
<div id="bottom" class="track size20 green">
<span id="bottom_one" class="track stop size10 cyan"></span>
<span id="bottom_two" class="track stop size10 purple"></span>
*A*
<span id="bottom_three" class="track cancel size10 yellow"></span>
*B*
<span id="bottom_four" class="track cancel capture size10 grey"></span>
<span id="bottom_five" class="track cancel size10 blue"></span>
<span id="bottom_six" class="track size10 cyan"></span>
</div>
<div id="end" class="end track size10 blue">
</div>
</body>
</html>