tests: Add avm2/focus_events_mouse_same_object test

This test verifies the behavior of focus-related events when
changing focus to the same object using mouse.
This commit is contained in:
Kamil Jarosz 2024-07-13 01:57:37 +02:00
parent dd4b859268
commit be903d2cd5
6 changed files with 172 additions and 0 deletions

View File

@ -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;
}
}
}

View File

@ -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" }
]

View File

@ -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(']')

View File

@ -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]

Binary file not shown.

View File

@ -0,0 +1 @@
num_ticks = 1