From 850ebc88a283e2ca630175fa2d3511b03024303d Mon Sep 17 00:00:00 2001 From: David Wendt Date: Tue, 23 Jun 2020 19:28:33 -0400 Subject: [PATCH] Add test for truthiness. As compiled by Adobe Animate CC 2020, this test appears to only use `iffalse`. However, both `op_is_false` and `op_is_true` coerce in the same manner, so I'm not entirely sure this is a problem for now. --- core/tests/regression_tests.rs | 1 + core/tests/swfs/avm2/truthiness/Test.as | 57 +++++++++++++++++++++ core/tests/swfs/avm2/truthiness/output.txt | 30 +++++++++++ core/tests/swfs/avm2/truthiness/test.fla | Bin 0 -> 4015 bytes core/tests/swfs/avm2/truthiness/test.swf | Bin 0 -> 959 bytes 5 files changed, 88 insertions(+) create mode 100644 core/tests/swfs/avm2/truthiness/Test.as create mode 100644 core/tests/swfs/avm2/truthiness/output.txt create mode 100644 core/tests/swfs/avm2/truthiness/test.fla create mode 100644 core/tests/swfs/avm2/truthiness/test.swf diff --git a/core/tests/regression_tests.rs b/core/tests/regression_tests.rs index d4f176a05..5e75139da 100644 --- a/core/tests/regression_tests.rs +++ b/core/tests/regression_tests.rs @@ -273,6 +273,7 @@ swf_tests! { (as3_es4_interfaces, "avm2/es4_interfaces", 1), (as3_istype, "avm2/istype", 1), (as3_instanceof, "avm2/instanceof", 1), + (as3_truthiness, "avm2/truthiness", 1), } // TODO: These tests have some inaccuracies currently, so we use approx_eq to test that numeric values are close enough. diff --git a/core/tests/swfs/avm2/truthiness/Test.as b/core/tests/swfs/avm2/truthiness/Test.as new file mode 100644 index 000000000..c69047534 --- /dev/null +++ b/core/tests/swfs/avm2/truthiness/Test.as @@ -0,0 +1,57 @@ +package { + public class Test { + } +} + +function assert_truthiness(val) { + if (val) { + trace("Value is truthy"); + } else { + trace("Value is falsy"); + } +} + +trace("//if (true)"); +assert_truthiness(true); + +trace("//if (false)"); +assert_truthiness(false); + +trace("//if (null)"); +assert_truthiness(null); + +trace("//if (undefined)"); +assert_truthiness(undefined); + +trace("//if (\"\")"); +assert_truthiness(""); + +trace("//if (\"str\")"); +assert_truthiness("str"); + +trace("//if (\"true\")"); +assert_truthiness("true"); + +trace("//if (\"false\")"); +assert_truthiness("false"); + +trace("//if (0.0)"); +assert_truthiness(0.0); + +trace("//if (NaN)"); +assert_truthiness(NaN); + +trace("//if (-0.0)"); +assert_truthiness(-0.0); + +trace("//if (Infinity)"); +assert_truthiness(Infinity); + +trace("//if (1.0)"); +assert_truthiness(1.0); + +trace("//if (-1.0)"); +assert_truthiness(-1.0); + +trace("//if (new Object())"); +assert_truthiness({}); \ No newline at end of file diff --git a/core/tests/swfs/avm2/truthiness/output.txt b/core/tests/swfs/avm2/truthiness/output.txt new file mode 100644 index 000000000..fa55cfc5c --- /dev/null +++ b/core/tests/swfs/avm2/truthiness/output.txt @@ -0,0 +1,30 @@ +//if (true) +Value is truthy +//if (false) +Value is falsy +//if (null) +Value is falsy +//if (undefined) +Value is falsy +//if ("") +Value is falsy +//if ("str") +Value is truthy +//if ("true") +Value is truthy +//if ("false") +Value is truthy +//if (0.0) +Value is falsy +//if (NaN) +Value is falsy +//if (-0.0) +Value is falsy +//if (Infinity) +Value is truthy +//if (1.0) +Value is truthy +//if (-1.0) +Value is truthy +//if (new Object()) +Value is truthy diff --git a/core/tests/swfs/avm2/truthiness/test.fla b/core/tests/swfs/avm2/truthiness/test.fla new file mode 100644 index 0000000000000000000000000000000000000000..c41c9f293fb7c78fa71ee8c1c86cc722ceeec41d GIT binary patch literal 4015 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 E0~{Gfr2qf` literal 0 HcmV?d00001 diff --git a/core/tests/swfs/avm2/truthiness/test.swf b/core/tests/swfs/avm2/truthiness/test.swf new file mode 100644 index 0000000000000000000000000000000000000000..2d3ab177c5434a3fa4cb051dab18080d11932ba5 GIT binary patch literal 959 zcmV;w13>&kS5qrd1^@tfoRyT_QrkupfOqw?EBW927>9(!F%F;rwt%Dw-SRElVlI)bbOrNAL&}Yain2SC~%@fdbESZpLI-TxFyXSo8>^ZAFyZV)= zr-WpGC!|QpZeAmV)TQg|>(_IHJjnI$R5mKlT9xg+qr)HD)&2K9@nlf5kSk4D)ch>x_x?j@0|$3svT6ep6}Q}ApGz&^!s7g@k9_1 z9j!I&9)-}Ic3gYs(006c&Y5t*rFKI*zI`S(R{z86HdQbzJO23>(F(PRN9wjm8bHvk zww>VIwJ-F;-oO!c*Eyg4W;_-xA@Svd^8ffCZLjaOLZ|1+1KWLeu+ymb+M?n2I~`Xv zT0LJhFm%ueK6ZkJJviHJe3|>=MI2cTeY+*H?`^j)N={H3yIf>$^p5QY7s*=9>6BK$ zCX7@hBNs+&@cOQ6}6)FV^5Jege%LceUt(5GX7vCD>nLncP!6lFsl zkBJDHRnv&YBm2mZp^MkBj;3rRA9#?~2`>z7BE@qyz-Qu*@^rj@@v#)uZpAPbCIzY9 zF33)NC^B}ty@%3C%XiMh#eZ?Wt)-&Mi-GXMAo~V~T{s1H*y;*Dy&D~fD1H9G3k4J; zbOs_Kg|F=Oo)&>S8Rn7IQ)hFJ0+($EB5vh=28Hl+__p-Vw$R^lb;VvY>N zD`32=#g>j49pwScA(*n*GJ+WZMFg`JDfs~L`fILL91f+~)*d+JfH#}=Lb7nJdHmA(ywAobP h`9K$<)|IcGjEXSj`{{WS{no#EmB>r5{0%eusb|!}*Z2Sc literal 0 HcmV?d00001