From 47e936fcc25d221fc76b2bb16b2a9057c43dd15d Mon Sep 17 00:00:00 2001 From: Mike Welsh Date: Wed, 1 Apr 2020 04:24:46 -0700 Subject: [PATCH] tests: Add tests for Array.sort --- core/tests/regression_tests.rs | 1 + core/tests/swfs/avm1/array_sort/output.txt | 144 +++++++++++++++++++++ core/tests/swfs/avm1/array_sort/test.fla | Bin 0 -> 6373 bytes core/tests/swfs/avm1/array_sort/test.swf | Bin 0 -> 1591 bytes 4 files changed, 145 insertions(+) create mode 100644 core/tests/swfs/avm1/array_sort/output.txt create mode 100644 core/tests/swfs/avm1/array_sort/test.fla create mode 100644 core/tests/swfs/avm1/array_sort/test.swf diff --git a/core/tests/regression_tests.rs b/core/tests/regression_tests.rs index 3f35acb9b..adcff5de0 100644 --- a/core/tests/regression_tests.rs +++ b/core/tests/regression_tests.rs @@ -100,6 +100,7 @@ swf_tests! { (array_properties, "avm1/array_properties", 1), (array_prototyping, "avm1/array_prototyping", 1), (array_vs_object_length, "avm1/array_vs_object_length", 1), + (array_sort, "avm1/array_sort", 1), (timeline_function_def, "avm1/timeline_function_def", 3), (root_global_parent, "avm1/root_global_parent", 3), (register_underflow, "avm1/register_underflow", 1), diff --git a/core/tests/swfs/avm1/array_sort/output.txt b/core/tests/swfs/avm1/array_sort/output.txt new file mode 100644 index 000000000..30259f6ca --- /dev/null +++ b/core/tests/swfs/avm1/array_sort/output.txt @@ -0,0 +1,144 @@ +// ["d", "c", "a", "b"].sort() +true +a,b,c,d + +// [1, 2].sort(undefined) +undefined + +// [1, 2].sort(true) +undefined + +// [1, 2].sort(true, 0) +undefined + +// [1, 2].sort(undefined, 0) +undefined + +// [1, 2].sort(null, 0) +undefined + +// [1, 2].sort(NaN) +1,2 + +// [undefined, null, true, false, o].sort() +AAA,false,null,true,undefined + +// ["d", "c", "a", "b"].sort(Array.DESCENDING) +d,c,b,a + +// [4, 1, 3, 22, 2, 3].sort() +1,2,22,3,3,4 + +// [4, 1, 3, 22, 2, 3].sort(Array.NUMERIC) +1,2,3,3,4,22 + +// [4, 1, 3, 22, 2, 3].sort(Array.DESCENDING | Array.NUMERIC) +22,4,3,3,2,1 + +// [4, 1, 3, 22, 2].sort(Array.UNIQUESORT) +1,2,22,3,4 +1,2,22,3,4 + +// [4, 1, 3, 22, 2, 3].sort(Array.UNIQUESORT) +0 +4,1,3,22,2,3 + +// ["hëllo", "HËLLO", "TeSt", "test"].sort(Array.CASEINSENSITIVE) +hëllo,HËLLO,TeSt,test + +// ["TeSt", "hëllo", "HËLLO", "test"].sort(Array.CASEINSENSITIVE | Array.UNIQUESORT) +0 +TeSt,hëllo,HËLLO,test + +// ["d", "c", "a", "b"].sort(Array.RETURNINDEXEDARRAY) +2,3,1,0 +d,c,a,b + +// ["test", 4, 1, "22", undefined, 3, 23, 2, true].sort(Array.NUMERIC | Array.CASEINSENSITIVE | Array.DESCENDING | Array.UNIQUESORT | Array.RETURNINDEXEDARRAY) +4,8,0,6,1,5,3,7,2 +test,4,1,22,undefined,3,23,2,true + +// [objects..].sort(mySort) +{n: 1},{n: 1},{n: 2},{n: 3},{n: 5} + +// [objects..].sort(mySort, Array.DESCENDING) +{n: 5},{n: 3},{n: 2},{n: 1},{n: 1} + +// [objects..].sort(mySort, Array.UNIQUESORT) +0 +{n: 3},{n: 5},{n: 1},{n: 2},{n: 1} + +// [objects..].sort({}) +[object Object],[object Object],[object Object],[object Object],[object Object] +{n: 3},{n: 5},{n: 1},{n: 2},{n: 1} + +// [objects..].sort({}, undefined) +[object Object],[object Object],[object Object],[object Object],[object Object] + +// [2, 3, 1].sort(55, undefined) +3,2,1 + +// [2, 3, 1].sort(Array.DESCENDING, Array.NUMERIC) +1,2,3 + +// [objects..].sortOn("n") +true +{n: 1},{n: 2},{n: 22},{n: 3},{n: 5} + +// [objects..].sortOn("n", Array.DESCENDING) +{n: 5},{n: 3},{n: 22},{n: 2},{n: 1} + +// [objects..].sortOn("n", Array.NUMERIC) +{n: 1},{n: 2},{n: 3},{n: 5},{n: 22} + +// [objects..].sortOn("n", "n", Array.CASEINSENSITIVE) +{n: hello},{n: HELLO},{n: test},{n: TEST} + +// [objects..].sortOn("n", Array.UNIQUESORT) +0 +{n: test},{n: hello},{n: TEST},{n: hello} + +// [objects..].sortOn("n", Array.UNIQUESORT) +4,3,2,0,1 +{n: 3},{n: 5},{n: 22},{n: 2},{n: 1} + +// [objects..].sortOn("n", Array.NUMERIC | Array.CASEINSENSITIVE | Array.DESCENDING | Array.UNIQUESORT | Array.RETURNINDEXEDARRAY) +2,1,0,3,4 +{n: 3},{n: 5},{n: 22},{n: 2},{n: 1} + +// [stringobjs..].sortOn("length", Array.NUMERIC) +a,bar,test,hello,asdasdasdsad + +// [objects..].sortOn(["n", "b"]) +{n: 1, b: 2},{n: 2, b: 2},{n: 2, b: 3},{n: 3, b: 1} + +// [objects..].sortOn(["n", "b"], [Array.CASEINSENSITIVE, Array.NUMERIC]) +{n: bar, b: 3},{n: BAR, b: 22},{n: foo, b: 1},{n: foo, b: 2} + +// [objects..].sortOn(["n", "b"], [Array.DESCENDING]) +{n: BAR, b: 22},{n: bar, b: 3},{n: foo, b: 1},{n: foo, b: 2} + +// [objects..].sortOn(["n", "b"], [Array.DESCENDING, Array.0, 0]) +{n: BAR, b: 22},{n: bar, b: 3},{n: foo, b: 1},{n: foo, b: 2} + +// [objects..].sortOn(["n", "b"], [Array.UNIQUESORT, Array.0]) +0 +{n: 3, b: 1},{n: 2, b: 3},{n: 2, b: 2},{n: 1, b: 2},{n: 3, b: 1} + +// [objects..].sortOn(["n", "b"], [Array.RETURNINDEXEDARRAY, 0]) +3,2,1,0,4 +{n: 3, b: 1},{n: 2, b: 3},{n: 2, b: 2},{n: 1, b: 2},{n: 3, b: 1} + +// [objects..].sortOn(["n", "b"], [0, Array.RETURNINDEXEDARRAY | Array.UNIQUESORT]) +[object Object],[object Object],[object Object],[object Object],[object Object] +{n: 1, b: 2},{n: 2, b: 2},{n: 2, b: 3},{n: 3, b: 1},{n: 3, b: 1} + +// [1, 2].sortOn([]) +1,2 + +// [1, 2].sortOn() +undefined + +// [1, 2].sortOn(undefined) +1,2 + diff --git a/core/tests/swfs/avm1/array_sort/test.fla b/core/tests/swfs/avm1/array_sort/test.fla new file mode 100644 index 0000000000000000000000000000000000000000..71526eb1c52b736cf9affd1eadbafe6ad1db41d3 GIT binary patch literal 6373 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 OUAlLZYTex#0PufS$SceM literal 0 HcmV?d00001 diff --git a/core/tests/swfs/avm1/array_sort/test.swf b/core/tests/swfs/avm1/array_sort/test.swf new file mode 100644 index 0000000000000000000000000000000000000000..b5223d9b6a543fbc0b8be4a5102c69e42d35c735 GIT binary patch literal 1591 zcmV-72FUqCS5ptt9RL7$oZVPkZxcrpK6`OIfh0fzF{J@qw`}5cn*;-eQb=&@tz!xs zu$^9nP_;?SO{tA+M=GK`w^CIeSE{N?eMIV0e?monO#ekXm%YsFC0>UTP@`ma=j=J( z`Oal#cJm#iz5zJ&JHT-X%0~eIl;oYAoh9YPNq`^!L2J;0_WGmdMh`A$;qi9&0Xzjg z3y<0lTks5e?Ru~Cuyr3Ecm=$w)&)VwZOWTWO*HDX{j`d`&Y}8AJS+1IuJWvVv5^8^5&tfv?FrNbc z!*>FD+*1Z_uH7_h)e@%9ZW5UI-m~9l11Mo@!F0{6-d;26tF=ZR{QCqxdBa|_+k-~4 z-h-8wKi#;o3J+fXv9;A^sbu#gi|iq}Bf8{D48_!ziglxE)(x{>ZB)N7@(>U(OxHdN zyDz4fBR+%#Rj(P1wVGKq%f?qmxmc?ezs^Hg2899xqdfF1%VMrj!1r7WlC++qX(eqK z)c_vNIQkJ)_apK|QLG6+wjXro<{aPOKB?nN9@rIn9c!b>dOKcQ4>8#dTaQV5Q2Xh# zI60R=rc$7ZJnJZ2xX?!-$X1V9ECIKxt(jaa$F{iDR=h^ST!_k^2pu3H^&4j-$#$$q;QJ8!yFjtL6v*wGZuV018dSjO;5&cnTS z8i_eeoyQBm|)Z-=T`Go%>B|&Nyq&EBswv2Jhctlc_K>sX&E&m{a zoS`~v_!ewDtzxY?Y6n=PWC$|_$rZ{_Rm=(opxiKTrIx`2|K1_^D%Msr_9&<-O1TO{ zwF(ofM4Wae7+WQgjRRKq$l&-p@jkCEl`9VYVdBThtOe|BJ9z70o^bXatSozcF+ut&*%TsAQc^PIW14;1CxWfyBvzA}eag2|k{M+L zBRQGTaXP*;WgmqE0jYpaAoOdBI2a;rhTdIti&~3WkI#T?xF??7difC3RI?dc!WZPjKHUEsB*(MCl-UZgP#E6n(e; zX|XJxKZCd}^59ERo&-XI+mg7+gx$We)+mX`=Uc?A{OV`#Akok&8%+AyHDX%fCnNl1 znx7QCi9mlP)ZhmqsEm`38ZV7#)c+zV*%Kc7Sg{fiD@-i;VxbMIbaNU-?uUbTnnX7L zIBWjvB8S7I(?7?u$$-odNm1GLT^QYnEi%z#EQ6H$t=HE~`KGv;I-gc=9Zgfi-;3V) z?0-!0#Fae}cN#X_YZLHV``BMwtK#>ex34B^nfN{6%|~`CDzf?iLu9wbgGSi2$NZ3A pElfPtgg55p-TrCf@4