| <!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> |