From 7752c32c8e37a2bf883c45f17ab1728a872bba9b Mon Sep 17 00:00:00 2001 From: Aaron Hill Date: Sat, 9 Mar 2024 17:01:10 -0500 Subject: [PATCH] avm2: Stub GameInput.getDeviceAt and GameInputControl (#15409) --- core/src/avm2/globals/flash/ui/GameInput.as | 5 +++ .../avm2/globals/flash/ui/GameInputControl.as | 8 +++++ core/src/avm2/globals/globals.as | 1 + tests/tests/swfs/avm2/game_input/Test.as | 29 ++++++++++++++++++ tests/tests/swfs/avm2/game_input/output.txt | 4 +++ tests/tests/swfs/avm2/game_input/test.fla | Bin 0 -> 3822 bytes tests/tests/swfs/avm2/game_input/test.swf | Bin 0 -> 571 bytes tests/tests/swfs/avm2/game_input/test.toml | 1 + 8 files changed, 48 insertions(+) create mode 100644 core/src/avm2/globals/flash/ui/GameInputControl.as create mode 100755 tests/tests/swfs/avm2/game_input/Test.as create mode 100644 tests/tests/swfs/avm2/game_input/output.txt create mode 100755 tests/tests/swfs/avm2/game_input/test.fla create mode 100755 tests/tests/swfs/avm2/game_input/test.swf create mode 100644 tests/tests/swfs/avm2/game_input/test.toml diff --git a/core/src/avm2/globals/flash/ui/GameInput.as b/core/src/avm2/globals/flash/ui/GameInput.as index f6bb5b588..851f7cdfc 100644 --- a/core/src/avm2/globals/flash/ui/GameInput.as +++ b/core/src/avm2/globals/flash/ui/GameInput.as @@ -1,6 +1,7 @@ package flash.ui { import flash.events.EventDispatcher; + [API("688")] public final class GameInput extends EventDispatcher { public static function get isSupported():Boolean { return false; @@ -9,5 +10,9 @@ package flash.ui { public static function get numDevices():int { return 0; } + + public static function getDeviceAt(index:int):GameInputDevice { + throw new RangeError("Error #1506: The specified range is invalid.", 1506); + } } } \ No newline at end of file diff --git a/core/src/avm2/globals/flash/ui/GameInputControl.as b/core/src/avm2/globals/flash/ui/GameInputControl.as new file mode 100644 index 000000000..4466b6408 --- /dev/null +++ b/core/src/avm2/globals/flash/ui/GameInputControl.as @@ -0,0 +1,8 @@ +package flash.ui { + [API("688")] + public dynamic class GameInputControl { + public function GameInputControl() { + throw new ArgumentError("Error #2012: GameInputControl$ class cannot be instantiated.", 2012) + } + } +} \ No newline at end of file diff --git a/core/src/avm2/globals/globals.as b/core/src/avm2/globals/globals.as index 9ab88c323..e5eaafad8 100644 --- a/core/src/avm2/globals/globals.as +++ b/core/src/avm2/globals/globals.as @@ -388,6 +388,7 @@ include "flash/ui/ContextMenuBuiltInItems.as" include "flash/ui/ContextMenuClipboardItems.as" include "flash/ui/ContextMenuItem.as" include "flash/ui/GameInput.as" +include "flash/ui/GameInputControl.as" include "flash/ui/GameInputDevice.as" include "flash/ui/Keyboard.as" include "flash/ui/KeyboardType.as" diff --git a/tests/tests/swfs/avm2/game_input/Test.as b/tests/tests/swfs/avm2/game_input/Test.as new file mode 100755 index 000000000..91ac1472e --- /dev/null +++ b/tests/tests/swfs/avm2/game_input/Test.as @@ -0,0 +1,29 @@ +package { + + import flash.display.MovieClip; + import flash.ui.GameInput; + import flash.ui.GameInputControl; + + + public class Test extends MovieClip { + + + public function Test() { + var gameInput = new GameInput(); + trace("gameInput: " + gameInput); + trace("GameInput.numDevices: " + GameInput.numDevices); + try { + GameInput.getDeviceAt(0); + } catch (e) { + trace("Caught error: " + e); + } + try { + new GameInputControl(); + } catch (e) { + trace("Caught error: " + e); + } + + } + } + +} diff --git a/tests/tests/swfs/avm2/game_input/output.txt b/tests/tests/swfs/avm2/game_input/output.txt new file mode 100644 index 000000000..12b404a7e --- /dev/null +++ b/tests/tests/swfs/avm2/game_input/output.txt @@ -0,0 +1,4 @@ +gameInput: [object GameInput] +GameInput.numDevices: 0 +Caught error: RangeError: Error #1506: The specified range is invalid. +Caught error: ArgumentError: Error #2012: GameInputControl$ class cannot be instantiated. diff --git a/tests/tests/swfs/avm2/game_input/test.fla b/tests/tests/swfs/avm2/game_input/test.fla new file mode 100755 index 0000000000000000000000000000000000000000..bcb1ebf746292931764ce3ac356efbc197e0943f GIT binary patch literal 3822 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 RP)iNGER^goI3;XnWY literal 0 HcmV?d00001 diff --git a/tests/tests/swfs/avm2/game_input/test.swf b/tests/tests/swfs/avm2/game_input/test.swf new file mode 100755 index 0000000000000000000000000000000000000000..dc9d146480fb2cbb96430d219fc8f3c989f2d754 GIT binary patch literal 571 zcmV-B0>u48S5qqr0{{ScoLy4QZqq;zo>@CtJI;Swr>#`TAr}ftwv+=(kpLxCl%P^j zL7*sAZNeroN}SZ*r0JEX;6~r1uMiIK8ki>t>zW3^%9`2l+i%A6c|C{N89?R=U=yL9 z(*U4GmdoYc>~yQNS85%VUcGJ~K61|A&MVD!!+p8$%*T%}_uzWNkXnS3E_Zox58!(J zD+vj?vQQ4wHt27-FDhYB!;tC?ZGTYy==hVNeW@RfXAZ9ooymT?+VQ5n-jH{Ml=*+6 zf6?{2H5%Wb#H6G^$tERRN^~D2x)(&ED>noZL=`~-)Dy~r zH6*1dM*a)_iU-Dmz1#iHej)`!f+hq>j;BgXfzKlhQm5(zgX0jdj#UiO5+yCA7rQ}O zODVx|9D`i;4#0waV{O>|vCHnuy1Z0oIEm_ZG!kr_(iVk#fw|J+t+w#LcDq5I9KHa} zIlll6_0R*67WB%3$$>QvR)Sduvy#k8F)Pii46}%Q-os9`2BEQ-wE1*Rhv=h(zYjc< Jo8R