From c2ad376e2cd3f9bef0189b051475c55ea38d0128 Mon Sep 17 00:00:00 2001 From: MrCheeze Date: Wed, 4 Jan 2023 18:33:17 -0500 Subject: [PATCH] tests: Add test for AVM2 hitTestPoint (without shapeFlag) and hitTestObject. This is a port of a similar regression test written for AVM1. AVM1 also has a test for hitTestPoint with shapeFlag=true, but it can't be ported for now, because the implementation of AVM2 hit testing is not yet accurate enough for it. --- tests/tests/regression_tests.rs | 1 + .../swfs/avm2/movieclip_hittest/output.txt | 68 ++++++++++++++++++ .../swfs/avm2/movieclip_hittest/test.fla | Bin 0 -> 8170 bytes .../swfs/avm2/movieclip_hittest/test.swf | Bin 0 -> 1459 bytes 4 files changed, 69 insertions(+) create mode 100644 tests/tests/swfs/avm2/movieclip_hittest/output.txt create mode 100644 tests/tests/swfs/avm2/movieclip_hittest/test.fla create mode 100644 tests/tests/swfs/avm2/movieclip_hittest/test.swf diff --git a/tests/tests/regression_tests.rs b/tests/tests/regression_tests.rs index 72f52893b..f31d84b02 100644 --- a/tests/tests/regression_tests.rs +++ b/tests/tests/regression_tests.rs @@ -439,6 +439,7 @@ swf_tests! { (as3_movieclip_gotoandstop_framescripts2, "avm2/movieclip_gotoandstop_framescripts2", 1), (as3_movieclip_gotoandstop_framescripts_self, "avm2/movieclip_gotoandstop_framescripts_self", 1), (as3_movieclip_gotoandstop_queueing, "avm2/movieclip_gotoandstop_queueing", 2), + (as3_movieclip_hittest, "avm2/movieclip_hittest", 1), (as3_movieclip_next_frame, "avm2/movieclip_next_frame", 5), (as3_movieclip_next_scene, "avm2/movieclip_next_scene", 5), (as3_movieclip_play, "avm2/movieclip_play", 5), diff --git a/tests/tests/swfs/avm2/movieclip_hittest/output.txt b/tests/tests/swfs/avm2/movieclip_hittest/output.txt new file mode 100644 index 000000000..b6b8fb202 --- /dev/null +++ b/tests/tests/swfs/avm2/movieclip_hittest/output.txt @@ -0,0 +1,68 @@ +// Top left just outside of circle. Within BB, but not the actual shape. +// circle.hitTestPoint(234, 122) +true + + +// Bottom right just outside of circle. Within BB, but not the actual shape. +// circle.hitTestPoint(348, 233) +true + + +// Inside the circle. +// circle.hitTestPoint(269, 181) +true + + +// In the gap inside the circle. +// circle.hitTestPoint(313, 183) +true + + +// Outside of the circles BB, to the left. +// circle.hitTestPoint(216, 229) +false + + +// Outside of the circles BB, to the right. +// circle.hitTestPoint(377, 131) +false + + +// Inside the circle within the gap of the big circle. +// circle.hitTestPoint(340, 184) +true + + +// Above and to the right of the circle, not overlapping at all. +// circle.hitTestObject(upper) +false + +// upper.hitTestObject(circle) +false + + +// Below and to the right of the circle, overlapping only with BB. +// circle.hitTestObject(lower) +true + +// lower.hitTestObject(circle) +true + + +// Transforming root +// Inside upper in stage coordinates, but false because hitTestPoint uses root coordinates. +// circle.hitTestPoint(335, 290) +false + +// Just above circle, inside now because of _root._rotation. +// circle.hitTestPoint(234, 105) +true + +// Bottom right just outside of circle. Inside now because of _root._rotation. +// circle.hitTestPoint(348, 233) +true + +// Above and to the right of the circle, Inside now because of _root._rotation. +// circle.hitTestObject(upper) +true + diff --git a/tests/tests/swfs/avm2/movieclip_hittest/test.fla b/tests/tests/swfs/avm2/movieclip_hittest/test.fla new file mode 100644 index 0000000000000000000000000000000000000000..f67e79114dfcf62a06ae7c2793b857230b94fe85 GIT binary patch literal 8170 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 KHS`<+@c#gI${oP~ literal 0 HcmV?d00001 diff --git a/tests/tests/swfs/avm2/movieclip_hittest/test.swf b/tests/tests/swfs/avm2/movieclip_hittest/test.swf new file mode 100644 index 0000000000000000000000000000000000000000..230218ae903a7f575331d7a26cbdc57726306dca GIT binary patch literal 1459 zcmV;k1x)%wS5ps(3jhFkoV8Y6Y!p=#zH@hGZoB>4LU*B1$|$?gfu+oL+d_dzX|Ylx z6hc#}g5BxtY0RCWnkOw2iDCGfyiIhz+MvYG@B>F&_ zXrd$}^~_ASf3Rs^oNVsdocrDHeCOPA@5~9r^&wPo4xyC{+EZDC5NgL$Q&U&{CGeL) zhZNONg$P1ZRXvWwicW~WzsFKmQ+cqmXiQ)bQ-z#oiU~~wS6{k_*6sXNxir!7)V++? zNTP|B8`-SJo#%lDp{uAHcrZ#L|4zgm zuw9Aokk9|gdv)aeyH|S4U(+sp`hqdqpZ#6ApF|(t%as0>)h2pxq9Z@Ia>+Ry*V38W_2}7bEm0&trhC zI(_m72XU3JgmFCvP|c~`zKo(-imrm3c5w43f!Fmg7xpr?9MGeG^L}#wozIxB&mmLq zzWfS9|gl;n>=xTxr z$A;2WFo$Sbi>rc}5Ztx(!t)wUYKG9(78d%4s9=~>ph;Db6*?sALOLm@00czS_@qX= zLCgVDGiY5yv@tA18XCmXx$frx-DXm14hohwko+%oSo9`iN5r zC~ILk&Uq5;Y3JYL1+bQBQsx9R!lxBkR}Z_Ux5zT7Of}P}vJamn8|j2;4cf77{EM?& zN}SduWQN8wluzSIUet@@5V!l zrKKqEZf2=_;i|)`LDLma+hz}3zA{yks#Uhfy@y?BWv4+^xK*h(th%1Sy!m$1pl~_E z6?`aVX;dWvCg54g1^5+AAc9s91{2H@mJqgxu*HP)61Ie}<%C^B*e40Qj<7+(h6uZ! zup0=wg|HIg8widP+(>W}!ObjM_%IAE@*vE5>=!y~51c)?FM7tqFf3!gPnlw`Cnr4v zE|&3@jB+{YC<&K#5e7_|V{!>k=uam2az_z%-TXXL;Tqoz_7@!bgDC*6bj`9E@F^Vn zybyS~YpQ0zU*gagg}{E-1ZKcLGNHSLz$;v{at8bWhh8lNu6E6;8SwWwbfpk@wQFkf z;9P?1C}!qCYNzKom|i$HZPvO*m}OxXBA=L^V+*jvyrDB#E&+3skxOIVV6|N4jO8$H zmMZ{O=b}Z|Y@EsOHV&P~3-jCLn(*9~&=!I=Kc*M{eWX7d>H&53=O*>C#fh_DaDpavE@>%N{acVSU`$l_#H-T+$U+%>{`AGx!+d#Z>0Kp N-$?ei+JA45E6Wyl)$jlS literal 0 HcmV?d00001