diff --git a/tests/tests/swfs/avm2/focus_events_mouse_same_object/Test.as b/tests/tests/swfs/avm2/focus_events_mouse_same_object/Test.as new file mode 100644 index 000000000..a0fb9aa43 --- /dev/null +++ b/tests/tests/swfs/avm2/focus_events_mouse_same_object/Test.as @@ -0,0 +1,76 @@ +package { + +import flash.display.InteractiveObject; +import flash.display.MovieClip; +import flash.display.Sprite; +import flash.events.Event; +import flash.events.KeyboardEvent; +import flash.events.MouseEvent; + +[SWF(width="200", height="200")] +public class Test extends MovieClip { + private var spriteA: Sprite; + + private var preventDefault: Boolean = false; + + public function Test() { + super(); + + spriteA = newSprite(); + spriteA.name = "spriteA"; + spriteA.x = 0; + spriteA.y = 100; + + spriteA.tabEnabled = true; + spriteA.tabIndex = 1; + + stage.addChild(spriteA); + + stage.addEventListener("keyDown", function(evt:KeyboardEvent):void { + if (evt.keyCode == 27) { + trace("Escape pressed"); + preventDefault = true; + stage.focus = null; + } + }); + + function eventListener(obj: InteractiveObject): Function { + return function(evt: Event): void { + var str; + if (evt is MouseEvent) { + str = evt.formatToString( + "MouseEvent", "type", "cancelable", "eventPhase", + "relatedObject", "ctrlKey", "altKey", "shiftKey"); + } else { + str = evt.toString(); + } + trace(" " + obj.name + ", " + evt.target.name + ": " + str); + if (preventDefault && obj != stage) { + evt.preventDefault(); + } + } + } + + for each (var obj: InteractiveObject in [spriteA, stage]) { + obj.addEventListener("focusIn", eventListener(obj)); + obj.addEventListener("focusOut", eventListener(obj)); + obj.addEventListener("mouseDown", eventListener(obj)); + obj.addEventListener("mouseUp", eventListener(obj)); + obj.addEventListener("click", eventListener(obj)); + obj.addEventListener("mouseFocusChange", eventListener(obj)); + obj.addEventListener("keyFocusChange", eventListener(obj)); + obj.addEventListener("rollOut", eventListener(obj)); + obj.addEventListener("rollOver", eventListener(obj)); + obj.addEventListener("mouseOver", eventListener(obj)); + } + } + + private function newSprite(): Sprite { + var s:Sprite = new Sprite(); + s.graphics.beginFill(0x00FFFF); + s.graphics.drawRect(0, 0, 100, 100); + s.graphics.endFill(); + return s; + } +} +} diff --git a/tests/tests/swfs/avm2/focus_events_mouse_same_object/input.json b/tests/tests/swfs/avm2/focus_events_mouse_same_object/input.json new file mode 100644 index 000000000..349f27e15 --- /dev/null +++ b/tests/tests/swfs/avm2/focus_events_mouse_same_object/input.json @@ -0,0 +1,20 @@ +[ + { "type": "MouseMove", "pos": [1, 101] }, + { "type": "MouseDown", "pos": [1, 101], "btn": "Left" }, + { "type": "MouseUp", "pos": [1, 101], "btn": "Left" }, + { "type": "MouseMove", "pos": [1, 101] }, + { "type": "MouseDown", "pos": [1, 101], "btn": "Left" }, + { "type": "MouseUp", "pos": [1, 101], "btn": "Left" }, + { "type": "KeyDown", "key_code": 27 }, + { "type": "KeyUp", "key_code": 27 }, + { "type": "MouseMove", "pos": [1, 101] }, + { "type": "MouseDown", "pos": [1, 101], "btn": "Left" }, + { "type": "MouseUp", "pos": [1, 101], "btn": "Left" }, + { "type": "MouseMove", "pos": [1, 101] }, + { "type": "MouseDown", "pos": [1, 101], "btn": "Left" }, + { "type": "MouseUp", "pos": [1, 101], "btn": "Left" }, + { "type": "KeyDown", "key_code": 27 }, + { "type": "KeyUp", "key_code": 27 }, + { "type": "MouseMove", "pos": [1, 1] }, + { "type": "Wait" } +] diff --git a/tests/tests/swfs/avm2/focus_events_mouse_same_object/input.json.py b/tests/tests/swfs/avm2/focus_events_mouse_same_object/input.json.py new file mode 100755 index 000000000..c34d4e5fe --- /dev/null +++ b/tests/tests/swfs/avm2/focus_events_mouse_same_object/input.json.py @@ -0,0 +1,35 @@ +#!/usr/bin/env python3 + +coord_map = { + 'void': [1, 1], + 'spriteA': [1, 101], + 'mc1A': [101, 101], + 'mc2A': [201, 101], + 'mc3A': [301, 101], + 'textA': [401, 101], + 'buttonA': [501, 101], +} + +click_seq = [ + 'spriteA', + 'spriteA', + 'esc', + 'spriteA', + 'spriteA', + 'esc', +] + +print('[') + +for obj in click_seq: + if obj == 'esc': + print(f' {{ "type": "KeyDown", "key_code": 27 }},') + print(f' {{ "type": "KeyUp", "key_code": 27 }},') + continue + pos = coord_map[obj] + print(f' {{ "type": "MouseMove", "pos": {pos} }},') + print(f' {{ "type": "MouseDown", "pos": {pos}, "btn": "Left" }},') + print(f' {{ "type": "MouseUp", "pos": {pos}, "btn": "Left" }},') + +print(f' {{ "type": "Wait" }}') +print(']') diff --git a/tests/tests/swfs/avm2/focus_events_mouse_same_object/output.txt b/tests/tests/swfs/avm2/focus_events_mouse_same_object/output.txt new file mode 100644 index 000000000..1619f7126 --- /dev/null +++ b/tests/tests/swfs/avm2/focus_events_mouse_same_object/output.txt @@ -0,0 +1,40 @@ + spriteA, spriteA: [MouseEvent type="rollOver" cancelable=false eventPhase=2 relatedObject=null ctrlKey=false altKey=false shiftKey=false] + spriteA, spriteA: [MouseEvent type="mouseOver" cancelable=false eventPhase=2 relatedObject=null ctrlKey=false altKey=false shiftKey=false] + null, spriteA: [MouseEvent type="mouseOver" cancelable=false eventPhase=3 relatedObject=null ctrlKey=false altKey=false shiftKey=false] + null, null: [FocusEvent type="mouseFocusChange" bubbles=true cancelable=true eventPhase=2 relatedObject=[object Sprite] shiftKey=false keyCode=0] + spriteA, spriteA: [FocusEvent type="focusIn" bubbles=true cancelable=false eventPhase=2 relatedObject=null shiftKey=false keyCode=0] + null, spriteA: [FocusEvent type="focusIn" bubbles=true cancelable=false eventPhase=3 relatedObject=null shiftKey=false keyCode=0] + spriteA, spriteA: [MouseEvent type="mouseDown" cancelable=false eventPhase=2 relatedObject=null ctrlKey=false altKey=false shiftKey=false] + null, spriteA: [MouseEvent type="mouseDown" cancelable=false eventPhase=3 relatedObject=null ctrlKey=false altKey=false shiftKey=false] + spriteA, spriteA: [MouseEvent type="mouseUp" cancelable=false eventPhase=2 relatedObject=null ctrlKey=false altKey=false shiftKey=false] + null, spriteA: [MouseEvent type="mouseUp" cancelable=false eventPhase=3 relatedObject=null ctrlKey=false altKey=false shiftKey=false] + spriteA, spriteA: [MouseEvent type="click" cancelable=false eventPhase=2 relatedObject=null ctrlKey=false altKey=false shiftKey=false] + null, spriteA: [MouseEvent type="click" cancelable=false eventPhase=3 relatedObject=null ctrlKey=false altKey=false shiftKey=false] + spriteA, spriteA: [MouseEvent type="mouseDown" cancelable=false eventPhase=2 relatedObject=null ctrlKey=false altKey=false shiftKey=false] + null, spriteA: [MouseEvent type="mouseDown" cancelable=false eventPhase=3 relatedObject=null ctrlKey=false altKey=false shiftKey=false] + spriteA, spriteA: [MouseEvent type="mouseUp" cancelable=false eventPhase=2 relatedObject=null ctrlKey=false altKey=false shiftKey=false] + null, spriteA: [MouseEvent type="mouseUp" cancelable=false eventPhase=3 relatedObject=null ctrlKey=false altKey=false shiftKey=false] + spriteA, spriteA: [MouseEvent type="click" cancelable=false eventPhase=2 relatedObject=null ctrlKey=false altKey=false shiftKey=false] + null, spriteA: [MouseEvent type="click" cancelable=false eventPhase=3 relatedObject=null ctrlKey=false altKey=false shiftKey=false] +Escape pressed + spriteA, spriteA: [FocusEvent type="focusOut" bubbles=true cancelable=false eventPhase=2 relatedObject=null shiftKey=false keyCode=0] + null, spriteA: [FocusEvent type="focusOut" bubbles=true cancelable=false eventPhase=3 relatedObject=null shiftKey=false keyCode=0] + null, null: [FocusEvent type="mouseFocusChange" bubbles=true cancelable=true eventPhase=2 relatedObject=[object Sprite] shiftKey=false keyCode=0] + spriteA, spriteA: [FocusEvent type="focusIn" bubbles=true cancelable=false eventPhase=2 relatedObject=null shiftKey=false keyCode=0] + null, spriteA: [FocusEvent type="focusIn" bubbles=true cancelable=false eventPhase=3 relatedObject=null shiftKey=false keyCode=0] + spriteA, spriteA: [MouseEvent type="mouseDown" cancelable=false eventPhase=2 relatedObject=null ctrlKey=false altKey=false shiftKey=false] + null, spriteA: [MouseEvent type="mouseDown" cancelable=false eventPhase=3 relatedObject=null ctrlKey=false altKey=false shiftKey=false] + spriteA, spriteA: [MouseEvent type="mouseUp" cancelable=false eventPhase=2 relatedObject=null ctrlKey=false altKey=false shiftKey=false] + null, spriteA: [MouseEvent type="mouseUp" cancelable=false eventPhase=3 relatedObject=null ctrlKey=false altKey=false shiftKey=false] + spriteA, spriteA: [MouseEvent type="click" cancelable=false eventPhase=2 relatedObject=null ctrlKey=false altKey=false shiftKey=false] + null, spriteA: [MouseEvent type="click" cancelable=false eventPhase=3 relatedObject=null ctrlKey=false altKey=false shiftKey=false] + spriteA, spriteA: [MouseEvent type="mouseDown" cancelable=false eventPhase=2 relatedObject=null ctrlKey=false altKey=false shiftKey=false] + null, spriteA: [MouseEvent type="mouseDown" cancelable=false eventPhase=3 relatedObject=null ctrlKey=false altKey=false shiftKey=false] + spriteA, spriteA: [MouseEvent type="mouseUp" cancelable=false eventPhase=2 relatedObject=null ctrlKey=false altKey=false shiftKey=false] + null, spriteA: [MouseEvent type="mouseUp" cancelable=false eventPhase=3 relatedObject=null ctrlKey=false altKey=false shiftKey=false] + spriteA, spriteA: [MouseEvent type="click" cancelable=false eventPhase=2 relatedObject=null ctrlKey=false altKey=false shiftKey=false] + null, spriteA: [MouseEvent type="click" cancelable=false eventPhase=3 relatedObject=null ctrlKey=false altKey=false shiftKey=false] +Escape pressed + spriteA, spriteA: [FocusEvent type="focusOut" bubbles=true cancelable=false eventPhase=2 relatedObject=null shiftKey=false keyCode=0] + null, spriteA: [FocusEvent type="focusOut" bubbles=true cancelable=false eventPhase=3 relatedObject=null shiftKey=false keyCode=0] + spriteA, spriteA: [MouseEvent type="rollOut" cancelable=false eventPhase=2 relatedObject=null ctrlKey=false altKey=false shiftKey=false] diff --git a/tests/tests/swfs/avm2/focus_events_mouse_same_object/test.swf b/tests/tests/swfs/avm2/focus_events_mouse_same_object/test.swf new file mode 100644 index 000000000..7560fe1f1 Binary files /dev/null and b/tests/tests/swfs/avm2/focus_events_mouse_same_object/test.swf differ diff --git a/tests/tests/swfs/avm2/focus_events_mouse_same_object/test.toml b/tests/tests/swfs/avm2/focus_events_mouse_same_object/test.toml new file mode 100644 index 000000000..cf6123969 --- /dev/null +++ b/tests/tests/swfs/avm2/focus_events_mouse_same_object/test.toml @@ -0,0 +1 @@ +num_ticks = 1