From 7202946003edcf4519957238ef61347774032844 Mon Sep 17 00:00:00 2001 From: Nathan Adams Date: Thu, 16 Mar 2023 12:48:12 +0100 Subject: [PATCH] tests: Add tests for Graphics commands (line/curve/move) --- .../avm2/graphics_direct_commands/Test.as | 89 ++++++++++++++++++ .../graphics_direct_commands/expected.png | Bin 0 -> 6766 bytes .../avm2/graphics_direct_commands/output.txt | 0 .../avm2/graphics_direct_commands/test.fla | Bin 0 -> 4520 bytes .../avm2/graphics_direct_commands/test.swf | Bin 0 -> 1263 bytes .../avm2/graphics_direct_commands/test.toml | 7 ++ 6 files changed, 96 insertions(+) create mode 100644 tests/tests/swfs/avm2/graphics_direct_commands/Test.as create mode 100644 tests/tests/swfs/avm2/graphics_direct_commands/expected.png create mode 100644 tests/tests/swfs/avm2/graphics_direct_commands/output.txt create mode 100644 tests/tests/swfs/avm2/graphics_direct_commands/test.fla create mode 100644 tests/tests/swfs/avm2/graphics_direct_commands/test.swf create mode 100644 tests/tests/swfs/avm2/graphics_direct_commands/test.toml diff --git a/tests/tests/swfs/avm2/graphics_direct_commands/Test.as b/tests/tests/swfs/avm2/graphics_direct_commands/Test.as new file mode 100644 index 000000000..c9ca8aeba --- /dev/null +++ b/tests/tests/swfs/avm2/graphics_direct_commands/Test.as @@ -0,0 +1,89 @@ +package { + + import flash.display.CapsStyle; + import flash.display.JointStyle; + import flash.display.LineScaleMode; + import flash.display.MovieClip; + import flash.display.Graphics; + import flash.display.Shape; + + + public class Test extends MovieClip { + + + public function Test() { + trapezoid(); + dashes(); + // cubicCircle(); // currently broken in ruffle at time of writing + curveCircle(); + } + + function trapezoid() { + var trapezoid:Shape = new Shape(); + + trapezoid.graphics.lineStyle(10, 0xFFD700, 1, false, LineScaleMode.VERTICAL, + CapsStyle.NONE, JointStyle.MITER, 10); + + trapezoid.graphics.moveTo(100, 100); + + trapezoid.graphics.lineTo(120, 50); + trapezoid.graphics.lineTo(200, 50); + trapezoid.graphics.lineTo(220, 100); + trapezoid.graphics.lineTo(100, 100); + + this.addChild(trapezoid); + } + + function dashes() { + var shape:Shape = new Shape(); + shape.graphics.lineStyle(3, 0x990000, 0.25, false, + LineScaleMode.NONE, CapsStyle.SQUARE); + + shape.graphics.moveTo(10, 20); + shape.graphics.lineTo(20, 20); + shape.graphics.moveTo(30, 20); + shape.graphics.lineTo(50, 20); + shape.graphics.moveTo(60, 20); + shape.graphics.lineTo(80, 20); + shape.graphics.moveTo(90, 20); + shape.graphics.lineTo(110, 20); + shape.graphics.moveTo(120, 20); + shape.graphics.lineTo(130, 20); + this.addChild(shape); + } + + function cubicCircle() { + var shape:Shape = new Shape(); + + shape.graphics.beginFill(0x0000FF); + shape.graphics.moveTo(250, 0); + shape.graphics.cubicCurveTo(275, 0, 300, 25, 300, 50); + shape.graphics.cubicCurveTo(300, 75, 275, 100, 250, 100); + shape.graphics.cubicCurveTo(225, 100, 200, 75, 200, 50); + shape.graphics.cubicCurveTo(200, 25, 225, 0, 250, 0); + shape.graphics.endFill(); + + shape.x = 100; + + this.addChild(shape); + } + + function curveCircle() { + var shape:Shape = new Shape(); + + shape.graphics.beginFill(0x00FF00); + shape.graphics.moveTo(250, 0); + shape.graphics.curveTo(300, 0, 300, 50); + shape.graphics.curveTo(300, 100, 250, 100); + shape.graphics.curveTo(200, 100, 200, 50); + shape.graphics.curveTo(200, 0, 250, 0); + shape.graphics.endFill(); + + shape.x = 100; + shape.y = 100; + + this.addChild(shape); + } + } + +} diff --git a/tests/tests/swfs/avm2/graphics_direct_commands/expected.png b/tests/tests/swfs/avm2/graphics_direct_commands/expected.png new file mode 100644 index 0000000000000000000000000000000000000000..45cb1377a76447daa81eb35656e1ffa091c32e9d GIT binary patch literal 6766 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 literal 0 HcmV?d00001 diff --git a/tests/tests/swfs/avm2/graphics_direct_commands/test.toml b/tests/tests/swfs/avm2/graphics_direct_commands/test.toml new file mode 100644 index 000000000..83d67fa61 --- /dev/null +++ b/tests/tests/swfs/avm2/graphics_direct_commands/test.toml @@ -0,0 +1,7 @@ +num_frames = 1 + +[image_comparison] +tolerance = 1 + +[player_options] +with_renderer = { optional = false, sample_count = 1 } \ No newline at end of file