From 041decaab1f5e12df23ec79d03053e8cc1aa81ae Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jindra=20Pet=C5=99=C3=ADk?= Date: Thu, 4 Feb 2021 19:24:53 +0100 Subject: [PATCH] added air as3 test as3 decompile tests moved to special directory --- .../ActionScript3AssembledDecompileTest.java | 3 +- .../ActionScript3ClassTest.java | 3 +- .../ActionScript3ClassicAirDecompileTest.java | 1476 +++++++++++++++++ .../ActionScript3ClassicDecompileTest.java | 3 +- ...ctionScript3CrossCompileDecompileTest.java | 3 +- ...ipt3CrossCompileSwfToolsDecompileTest.java | 3 +- .../flash/generators/AS3Generator.java | 7 +- 7 files changed, 1491 insertions(+), 7 deletions(-) rename libsrc/ffdec_lib/test/com/jpexs/decompiler/flash/{ => as3decompile}/ActionScript3AssembledDecompileTest.java (97%) rename libsrc/ffdec_lib/test/com/jpexs/decompiler/flash/{ => as3decompile}/ActionScript3ClassTest.java (98%) create mode 100644 libsrc/ffdec_lib/test/com/jpexs/decompiler/flash/as3decompile/ActionScript3ClassicAirDecompileTest.java rename libsrc/ffdec_lib/test/com/jpexs/decompiler/flash/{ => as3decompile}/ActionScript3ClassicDecompileTest.java (99%) rename libsrc/ffdec_lib/test/com/jpexs/decompiler/flash/{ => as3decompile}/ActionScript3CrossCompileDecompileTest.java (99%) rename libsrc/ffdec_lib/test/com/jpexs/decompiler/flash/{ => as3decompile}/ActionScript3CrossCompileSwfToolsDecompileTest.java (99%) diff --git a/libsrc/ffdec_lib/test/com/jpexs/decompiler/flash/ActionScript3AssembledDecompileTest.java b/libsrc/ffdec_lib/test/com/jpexs/decompiler/flash/as3decompile/ActionScript3AssembledDecompileTest.java similarity index 97% rename from libsrc/ffdec_lib/test/com/jpexs/decompiler/flash/ActionScript3AssembledDecompileTest.java rename to libsrc/ffdec_lib/test/com/jpexs/decompiler/flash/as3decompile/ActionScript3AssembledDecompileTest.java index 8ba0f1d13..c7d4ce8e0 100644 --- a/libsrc/ffdec_lib/test/com/jpexs/decompiler/flash/ActionScript3AssembledDecompileTest.java +++ b/libsrc/ffdec_lib/test/com/jpexs/decompiler/flash/as3decompile/ActionScript3AssembledDecompileTest.java @@ -1,5 +1,6 @@ -package com.jpexs.decompiler.flash; +package com.jpexs.decompiler.flash.as3decompile; +import com.jpexs.decompiler.flash.ActionScript3DecompileTestBase; import java.io.IOException; import org.testng.annotations.BeforeClass; import org.testng.annotations.Test; diff --git a/libsrc/ffdec_lib/test/com/jpexs/decompiler/flash/ActionScript3ClassTest.java b/libsrc/ffdec_lib/test/com/jpexs/decompiler/flash/as3decompile/ActionScript3ClassTest.java similarity index 98% rename from libsrc/ffdec_lib/test/com/jpexs/decompiler/flash/ActionScript3ClassTest.java rename to libsrc/ffdec_lib/test/com/jpexs/decompiler/flash/as3decompile/ActionScript3ClassTest.java index e977aaa6e..6dc891b21 100644 --- a/libsrc/ffdec_lib/test/com/jpexs/decompiler/flash/ActionScript3ClassTest.java +++ b/libsrc/ffdec_lib/test/com/jpexs/decompiler/flash/as3decompile/ActionScript3ClassTest.java @@ -1,5 +1,6 @@ -package com.jpexs.decompiler.flash; +package com.jpexs.decompiler.flash.as3decompile; +import com.jpexs.decompiler.flash.ActionScript3DecompileTestBase; import com.jpexs.decompiler.flash.abc.ABC; import com.jpexs.decompiler.flash.abc.ScriptPack; import com.jpexs.decompiler.flash.abc.types.ConvertData; diff --git a/libsrc/ffdec_lib/test/com/jpexs/decompiler/flash/as3decompile/ActionScript3ClassicAirDecompileTest.java b/libsrc/ffdec_lib/test/com/jpexs/decompiler/flash/as3decompile/ActionScript3ClassicAirDecompileTest.java new file mode 100644 index 000000000..27b5a53ad --- /dev/null +++ b/libsrc/ffdec_lib/test/com/jpexs/decompiler/flash/as3decompile/ActionScript3ClassicAirDecompileTest.java @@ -0,0 +1,1476 @@ +package com.jpexs.decompiler.flash.as3decompile; + +import com.jpexs.decompiler.flash.ActionScript3DecompileTestBase; +import java.io.IOException; +import org.testng.annotations.BeforeClass; +import org.testng.annotations.Test; + +/** + * + * @author JPEXS + */ +public class ActionScript3ClassicAirDecompileTest extends ActionScript3DecompileTestBase { + + @BeforeClass + public void init() throws IOException, InterruptedException { + addSwf("classic_air", "testdata/as3_new/bin/as3_new.air.swf"); + } + + @Test + public void testArguments() { + decompileMethod("classic_air", "testArguments", "return arguments[0];\r\n", + false); + } + + @Test + public void testCatchFinally() { + decompileMethod("classic_air", "testCatchFinally", "var a:int = 5;\r\n" + + "try\r\n" + + "{\r\n" + + "a = 9;\r\n" + + "trace(\"intry\");\r\n" + + "}\r\n" + + "catch(e:*)\r\n" + + "{\r\n" + + "trace(\"incatch\");\r\n" + + "}\r\n" + + "finally\r\n" + + "{\r\n" + + "trace(\"infinally\");\r\n" + + "}\r\n" + + "trace(\"after\");\r\n", + false); + } + + @Test + public void testChain2() { + decompileMethod("classic_air", "testChain2", "var g:Array = null;\r\n" + + "var h:Boolean = false;\r\n" + + "var extraLine:Boolean = false;\r\n" + + "var r:int = 7;\r\n" + + "var t:int = 0;\r\n" + + "t = this.getInt();\r\n" + + "if(t + 1 < g.length)\r\n" + + "{\r\n" + + "t++;\r\n" + + "h = true;\r\n" + + "}\r\n" + + "if(t >= 0)\r\n" + + "{\r\n" + + "trace(\"ch\");\r\n" + + "}\r\n", + false); + } + + @Test + public void testChainedAssignments() { + decompileMethod("classic_air", "testChainedAssignments", "var a:int = 0;\r\n" + + "var b:int = 0;\r\n" + + "var c:int = 0;\r\n" + + "var d:int = 0;\r\n" + + "d = c = b = a = 5;\r\n" + + "var e:TestClass2 = TestClass2.createMe(\"test\");\r\n" + + "e.attrib1 = e.attrib2 = e.attrib3 = this.getCounter();\r\n" + + "this.traceIt(e.toString());\r\n", + false); + } + + @Test + public void testComplexExpressions() { + decompileMethod("classic_air", "testComplexExpressions", "var i:int = 0;\r\n" + + "var j:int = 0;\r\n" + + "j = i = i + (i = i + i++);\r\n", + false); + } + + @Test + public void testContinueLevels() { + decompileMethod("classic_air", "testContinueLevels", "var b:* = undefined;\r\n" + + "var c:* = undefined;\r\n" + + "var d:* = undefined;\r\n" + + "var e:* = undefined;\r\n" + + "var a:int = 5;\r\n" + + "loop3:\r\n" + + "switch(a)\r\n" + + "{\r\n" + + "case 57 * a:\r\n" + + "trace(\"fiftyseven multiply a\");\r\n" + + "b = 0;\r\n" + + "while(b < 50)\r\n" + + "{\r\n" + + "if(b == 10)\r\n" + + "{\r\n" + + "break;\r\n" + + "}\r\n" + + "if(b == 15)\r\n" + + "{\r\n" + + "break loop3;\r\n" + + "}\r\n" + + "b = b + 1;\r\n" + + "}\r\n" + + "break;\r\n" + + "case 13:\r\n" + + "trace(\"thirteen\");\r\n" + + "case 14:\r\n" + + "trace(\"fourteen\");\r\n" + + "break;\r\n" + + "case 89:\r\n" + + "trace(\"eightynine\");\r\n" + + "break;\r\n" + + "default:\r\n" + + "trace(\"default clause\");\r\n" + + "}\r\n" + + "loop1:\r\n" + + "for(c = 0; c < 8; c = c + 1)\r\n" + + "{\r\n" + + "for(d = 0; d < 25; d++)\r\n" + + "{\r\n" + + "e = 0;\r\n" + + "if(e >= 50)\r\n" + + "{\r\n" + + "continue;\r\n" + + "}\r\n" + + "if(e == 9)\r\n" + + "{\r\n" + + "break;\r\n" + + "}\r\n" + + "if(e != 20)\r\n" + + "{\r\n" + + "if(e != 8)\r\n" + + "{\r\n" + + "break loop1;\r\n" + + "}\r\n" + + "continue;\r\n" + + "}\r\n" + + "continue loop1;\r\n" + + "}\r\n" + + "trace(\"hello\");\r\n" + + "}\r\n", + false); + } + + @Test + public void testDecl2() { + decompileMethod("classic_air", "testDecl2", "var k:int = 0;\r\n" + + "var i:int = 5;\r\n" + + "i = i + 7;\r\n" + + "if(i == 5)\r\n" + + "{\r\n" + + "if(i < 8)\r\n" + + "{\r\n" + + "k = 6;\r\n" + + "}\r\n" + + "}\r\n" + + "k = 7;\r\n", + false); + } + + @Test + public void testDeclarations() { + decompileMethod("classic_air", "testDeclarations", "var vall:* = undefined;\r\n" + + "var vstr:String = null;\r\n" + + "var vint:int = 0;\r\n" + + "var vuint:uint = 0;\r\n" + + "var vclass:TestClass1 = null;\r\n" + + "var vnumber:* = NaN;\r\n" + + "var vobject:Object = null;\r\n" + + "vall = 6;\r\n" + + "vstr = \"hello\";\r\n" + + "vuint = 7;\r\n" + + "vint = -4;\r\n" + + "vclass = new TestClass1();\r\n" + + "vnumber = 0.5;\r\n" + + "vnumber = 6;\r\n" + + "vobject = vclass;\r\n", + false); + } + + @Test + public void testDefaultNotLastGrouped() { + decompileMethod("classic_air", "testDefaultNotLastGrouped", "var k:int = 10;\r\n" + + "switch(k)\r\n" + + "{\r\n" + + "default:\r\n" + + "case \"six\":\r\n" + + "trace(\"def and 6\");\r\n" + + "case \"five\":\r\n" + + "trace(\"def and 6 and 5\");\r\n" + + "break;\r\n" + + "case \"four\":\r\n" + + "trace(\"4\");\r\n" + + "}\r\n" + + "trace(\"after switch\");\r\n", + false); + } + + @Test + public void testDoWhile() { + decompileMethod("classic_air", "testDoWhile", "var a:int = 8;\r\n" + + "do\r\n" + + "{\r\n" + + "trace(\"a=\" + a);\r\n" + + "a++;\r\n" + + "}\r\n" + + "while(a < 20);\r\n", + false); + } + + @Test + public void testDoWhile2() { + decompileMethod("classic_air", "testDoWhile2", "var k:int = 5;\r\n" + + "do\r\n" + + "{\r\n" + + "k++;\r\n" + + "if(k == 7)\r\n" + + "{\r\n" + + "k = 5 * k;\r\n" + + "}\r\n" + + "else\r\n" + + "{\r\n" + + "k = 5 - k;\r\n" + + "}\r\n" + + "k--;\r\n" + + "}\r\n" + + "while(k < 9);\r\n" + + "return 2;\r\n", + false); + } + + @Test + public void testDoWhile3() { + decompileMethod("classic_air", "testDoWhile3", "do\r\n" + + "{\r\n" + + "nextChar();\r\n" + + "}\r\n" + + "while(ch != \"\\n\" && ch != \"\");\r\n", + false); + } + + @Test + public void testDotParent() { + decompileMethod("classic_air", "testDotParent", "var d:* = new TestClass1();\r\n" + + "var k:* = null;\r\n" + + "k.(++d.attrib, false);\r\n" + + "trace(\"between\");\r\n" + + "var g:* = k.(++d.attrib, false);\r\n" + + "trace(\"end\");\r\n", + false); + } + + @Test + public void testExpressions() { + decompileMethod("classic_air", "testExpressions", "var arr:Array = null;\r\n" + + "var i:int = 5;\r\n" + + "var j:int = 5;\r\n" + + "if((i = i = i / 2) == 1 || i == 2)\r\n" + + "{\r\n" + + "arguments.concat(i);\r\n" + + "}\r\n" + + "else if(i == 0)\r\n" + + "{\r\n" + + "i = j++;\r\n" + + "}\r\n" + + "else\r\n" + + "{\r\n" + + "arr[0]();\r\n" + + "}\r\n" + + "return i == 0;\r\n", + false); + } + + @Test + public void testFinallyZeroJump() { + decompileMethod("classic_air", "testFinallyZeroJump", "var str:* = param1;\r\n" + + "try\r\n" + + "{\r\n" + + "}\r\n" + + "catch(e:Error)\r\n" + + "{\r\n" + + "trace(\"error is :\" + e.message);\r\n" + + "}\r\n" + + "finally\r\n" + + "{\r\n" + + "trace(\"hi \");\r\n" + + "if(false)\r\n" + + "{\r\n" + + "return str;\r\n" + + "}\r\n" + + "return \"hu\" + str;\r\n" + + "}\r\n", + false); + } + + @Test + public void testFor() { + decompileMethod("classic_air", "testFor", "var a:* = undefined;\r\n" + + "for(a = 0; a < 10; )\r\n" + + "{\r\n" + + "trace(\"a=\" + a);\r\n" + + "a++;\r\n" + + "}\r\n", + false); + } + + @Test + public void testForAnd() { + decompileMethod("classic_air", "testForAnd", "var x:Boolean = false;\r\n" + + "var i:* = 0;\r\n" + + "var len:int = 5;\r\n" + + "var a:int = 4;\r\n" + + "var b:int = 7;\r\n" + + "var c:int = 9;\r\n" + + "for(i = uint(0); i < len; x = a > 4 && b < 2 || c > 10)\r\n" + + "{\r\n" + + "c = 1;\r\n" + + "if(c == 2)\r\n" + + "{\r\n" + + "trace(\"A\");\r\n" + + "if(c == 7)\r\n" + + "{\r\n" + + "trace(\"B\");\r\n" + + "continue;\r\n" + + "}\r\n" + + "trace(\"C\");\r\n" + + "}\r\n" + + "trace(\"D\");\r\n" + + "}\r\n", + false); + } + + @Test + public void testForBreak() { + decompileMethod("classic_air", "testForBreak", "var a:* = undefined;\r\n" + + "for(a = 0; a < 10; )\r\n" + + "{\r\n" + + "if(a == 5)\r\n" + + "{\r\n" + + "break;\r\n" + + "}\r\n" + + "trace(\"hello:\" + a);\r\n" + + "a++;\r\n" + + "}\r\n", + false); + } + + @Test + public void testForContinue() { + decompileMethod("classic_air", "testForContinue", "var a:* = undefined;\r\n" + + "for(a = 0; a < 10; a = a + 1)\r\n" + + "{\r\n" + + "if(a == 9)\r\n" + + "{\r\n" + + "if(a == 5)\r\n" + + "{\r\n" + + "trace(\"part1\");\r\n" + + "continue;\r\n" + + "}\r\n" + + "trace(\"a=\" + a);\r\n" + + "if(a == 7)\r\n" + + "{\r\n" + + "trace(\"part2\");\r\n" + + "continue;\r\n" + + "}\r\n" + + "trace(\"part3\");\r\n" + + "}\r\n" + + "else\r\n" + + "{\r\n" + + "trace(\"part4\");\r\n" + + "}\r\n" + + "trace(\"part5\");\r\n" + + "}\r\n", + false); + } + + @Test + public void testForEach() { + decompileMethod("classic_air", "testForEach", "var list:Array = null;\r\n" + + "var item:* = undefined;\r\n" + + "list = [];\r\n" + + "list[0] = \"first\";\r\n" + + "list[1] = \"second\";\r\n" + + "list[2] = \"third\";\r\n" + + "for each(item in list)\r\n" + + "{\r\n" + + "trace(\"item #\" + item);\r\n" + + "}\r\n", + false); + } + + @Test + public void testForEachObjectArray() { + decompileMethod("classic_air", "testForEachObjectArray", "var list:Array = null;\r\n" + + "var test:Array = null;\r\n" + + "list = [];\r\n" + + "list[0] = \"first\";\r\n" + + "list[1] = \"second\";\r\n" + + "list[2] = \"third\";\r\n" + + "test = [];\r\n" + + "test[0] = 0;\r\n" + + "for each(test[0] in list)\r\n" + + "{\r\n" + + "trace(\"item #\" + test[0]);\r\n" + + "}\r\n", + false); + } + + @Test + public void testForEachObjectAttribute() { + decompileMethod("classic_air", "testForEachObjectAttribute", "var list:Array = null;\r\n" + + "list = [];\r\n" + + "list[0] = \"first\";\r\n" + + "list[1] = \"second\";\r\n" + + "list[2] = \"third\";\r\n" + + "for each(this.testPriv in list)\r\n" + + "{\r\n" + + "trace(\"item #\" + this.testPriv);\r\n" + + "}\r\n", + false); + } + + @Test + public void testForGoto() { + decompileMethod("classic_air", "testForGoto", "var i:* = 0;\r\n" + + "var c:int = 0;\r\n" + + "var len:int = 5;\r\n" + + "for(i = uint(0); i < len; i++)\r\n" + + "{\r\n" + + "c = 1;\r\n" + + "if(c == 2)\r\n" + + "{\r\n" + + "trace(\"A\");\r\n" + + "}\r\n" + + "else\r\n" + + "{\r\n" + + "if(c != 3)\r\n" + + "{\r\n" + + "continue;\r\n" + + "}\r\n" + + "trace(\"B\");\r\n" + + "}\r\n" + + "trace(\"C\");\r\n" + + "}\r\n" + + "trace(\"exit\");\r\n", + false); + } + + @Test + public void testForIn() { + decompileMethod("classic_air", "testForIn", "var dic:Dictionary = null;\r\n" + + "var item:* = null;\r\n" + + "for(item in dic)\r\n" + + "{\r\n" + + "trace(item);\r\n" + + "}\r\n" + + "for each(item in dic)\r\n" + + "{\r\n" + + "trace(item);\r\n" + + "}\r\n", + false); + } + + @Test + public void testForXml() { + decompileMethod("classic_air", "testForXml", "var i:int = 0;\r\n" + + "var c:int = 0;\r\n" + + "var name:String = \"ahoj\";\r\n" + + "var myXML:XML = \r\n" + + "\r\n" + + "{name}\r\n" + + "\r\n" + + ";\r\n" + + "var k:* = null;\r\n" + + "var len:int = 5;\r\n" + + "var a:int = 5;\r\n" + + "var b:int = 6;\r\n" + + "for(i = 0; i < len; k = myXML.book.(@isbn == \"12345\"))\r\n" + + "{\r\n" + + "if((c = 1) == 2)\r\n" + + "{\r\n" + + "trace(\"A\");\r\n" + + "}\r\n" + + "else\r\n" + + "{\r\n" + + "if(c != 3)\r\n" + + "{\r\n" + + "continue;\r\n" + + "}\r\n" + + "trace(\"B\");\r\n" + + "}\r\n" + + "trace(\"C\");\r\n" + + "}\r\n", + false); + } + + @Test + public void testGotos() { + decompileMethod("classic_air", "testGotos", "var a:Boolean = true;\r\n" + + "var b:Boolean = false;\r\n" + + "if(a)\r\n" + + "{\r\n" + + "trace(\"A\");\r\n" + + "}\r\n" + + "else if(b)\r\n" + + "{\r\n" + + "trace(\"B\");\r\n" + + "}\r\n" + + "else\r\n" + + "{\r\n" + + "try\r\n" + + "{\r\n" + + "if(a)\r\n" + + "{\r\n" + + "return 7;\r\n" + + "}\r\n" + + "trace(\"x\");\r\n" + + "}\r\n" + + "catch(e:Error)\r\n" + + "{\r\n" + + "trace(\"z\");\r\n" + + "}\r\n" + + "trace(\"after\");\r\n" + + "}\r\n" + + "return 89;\r\n", + false); + } + + @Test + public void testGotos2() { + decompileMethod("classic_air", "testGotos2", "var a:Boolean = true;\r\n" + + "var b:Boolean = false;\r\n" + + "var c:Boolean = true;\r\n" + + "if(a)\r\n" + + "{\r\n" + + "if(b)\r\n" + + "{\r\n" + + "trace(\"A\");\r\n" + + "if(c)\r\n" + + "{\r\n" + + "trace(\"B\");\r\n" + + "}\r\n" + + "}\r\n" + + "}\r\n" + + "else\r\n" + + "{\r\n" + + "trace(\"E\");\r\n" + + "}\r\n" + + "return 5;\r\n", + false); + } + + @Test + public void testGotos3() { + decompileMethod("classic_air", "testGotos3", "var i:int = 0;\r\n" + + "var a:int = 5;\r\n" + + "if(a > 5)\r\n" + + "{\r\n" + + "for(i = 0; i < 5; )\r\n" + + "{\r\n" + + "if(i > 3)\r\n" + + "{\r\n" + + "trace(\"A\");\r\n" + + "if(i == 4)\r\n" + + "{\r\n" + + "break;\r\n" + + "}\r\n" + + "}\r\n" + + "trace(\"B\");\r\n" + + "i++;\r\n" + + "}\r\n" + + "}\r\n" + + "else\r\n" + + "{\r\n" + + "trace(\"C\");\r\n" + + "}\r\n" + + "trace(\"return\");\r\n", + false); + } + + @Test + public void testGotos4() { + decompileMethod("classic_air", "testGotos4", "var a:int = 5;\r\n" + + "if(a > 3)\r\n" + + "{\r\n" + + "if(a < 7)\r\n" + + "{\r\n" + + "try\r\n" + + "{\r\n" + + "trace(\"A\");\r\n" + + "}\r\n" + + "catch(error:Error)\r\n" + + "{\r\n" + + "}\r\n" + + "trace(\"B\");\r\n" + + "}\r\n" + + "}\r\n" + + "trace(\"return\");\r\n", + false); + } + + @Test + public void testGotos5() { + decompileMethod("classic_air", "testGotos5", "var j:int = 0;\r\n" + + "var s:String = \"A\";\r\n" + + "var i:int = 0;\r\n" + + "for(; i < 10; i++)\r\n" + + "{\r\n" + + "if(s == \"B\")\r\n" + + "{\r\n" + + "if(s == \"C\")\r\n" + + "{\r\n" + + "continue;\r\n" + + "}\r\n" + + "}\r\n" + + "trace(\"D\");\r\n" + + "j = 0;\r\n" + + "while(j < 29)\r\n" + + "{\r\n" + + "trace(\"E\");\r\n" + + "j++;\r\n" + + "}\r\n" + + "}\r\n", + false); + } + + @Test + public void testGotos6() { + decompileMethod("classic_air", "testGotos6", "var a:Boolean = true;\r\n" + + "var s:String = \"a\";\r\n" + + "if(a)\r\n" + + "{\r\n" + + "switch(s)\r\n" + + "{\r\n" + + "case \"a\":\r\n" + + "trace(\"is A\");\r\n" + + "break;\r\n" + + "case \"b\":\r\n" + + "trace(\"is B\");\r\n" + + "case \"c\":\r\n" + + "trace(\"is BC\");\r\n" + + "}\r\n" + + "}\r\n" + + "else\r\n" + + "{\r\n" + + "trace(\"D\");\r\n" + + "}\r\n" + + "trace(\"finish\");\r\n", + false); + } + + @Test + public void testGotos7() { + decompileMethod("classic_air", "testGotos7", "var i:int = 0;\r\n" + + "for(i = 0; i < 10; i++)\r\n" + + "{\r\n" + + "switch(int(i))\r\n" + + "{\r\n" + + "case 0:\r\n" + + "trace(\"zero\");\r\n" + + "continue;\r\n" + + "case 1:\r\n" + + "if(i == 7)\r\n" + + "{\r\n" + + "continue;\r\n" + + "}\r\n" + + "trace(\"one\");\r\n" + + "default:\r\n" + + "trace(\"def\");\r\n" + + "break;\r\n" + + "case 5:\r\n" + + "trace(\"five\");\r\n" + + "break;\r\n" + + "case 10:\r\n" + + "trace(\"ten\");\r\n" + + "}\r\n" + + "trace(\"before loop end\");\r\n" + + "}\r\n", + false); + } + + @Test + public void testHello() { + decompileMethod("classic_air", "testHello", "trace(\"hello\");\r\n", + false); + } + + @Test + public void testIf() { + decompileMethod("classic_air", "testIf", "var a:int = 5;\r\n" + + "if(a == 7)\r\n" + + "{\r\n" + + "trace(\"onTrue\");\r\n" + + "}\r\n", + false); + } + + @Test + public void testIfElse() { + decompileMethod("classic_air", "testIfElse", "var a:int = 5;\r\n" + + "if(a == 7)\r\n" + + "{\r\n" + + "trace(\"onTrue\");\r\n" + + "}\r\n" + + "else\r\n" + + "{\r\n" + + "trace(\"onFalse\");\r\n" + + "}\r\n", + false); + } + + @Test + public void testIfInIf() { + decompileMethod("classic_air", "testIfInIf", "var k:int = 5;\r\n" + + "if(k > 5 && k < 20)\r\n" + + "{\r\n" + + "trace(\"A\");\r\n" + + "if(k < 4)\r\n" + + "{\r\n" + + "return 1;\r\n" + + "}\r\n" + + "}\r\n" + + "else if(k > 4 && k < 10)\r\n" + + "{\r\n" + + "trace(\"B\");\r\n" + + "if(k < 7)\r\n" + + "{\r\n" + + "return 2;\r\n" + + "}\r\n" + + "}\r\n" + + "trace(\"C\");\r\n" + + "return 7;\r\n", + false); + } + + @Test + public void testInc2() { + decompileMethod("classic_air", "testInc2", "var a:* = [1];\r\n" + + "a[this.getInt()]++;\r\n" + + "var d:* = a[this.getInt()]++;\r\n" + + "var e:* = ++a[this.getInt()];\r\n" + + "a[this.getInt()]++;\r\n" + + "++a[this.getInt()];\r\n" + + "var b:* = 1;\r\n" + + "b++;\r\n" + + "var c:int = 1;\r\n" + + "b = c++;\r\n", + false); + } + + @Test + public void testIncDec() { + decompileMethod("classic_air", "testIncDec", "var a:int = 5;\r\n" + + "var b:* = 0;\r\n" + + "trace(\"++var\");\r\n" + + "b = ++a;\r\n" + + "trace(\"var++\");\r\n" + + "b = a++;\r\n" + + "trace(\"--var\");\r\n" + + "b = --a;\r\n" + + "trace(\"var--\");\r\n" + + "b = a--;\r\n" + + "var c:* = [1,2,3,4,5];\r\n" + + "trace(\"++arr\");\r\n" + + "b = ++c[2];\r\n" + + "trace(\"arr++\");\r\n" + + "b = c[2]++;\r\n" + + "trace(\"--arr\");\r\n" + + "b = --c[2];\r\n" + + "trace(\"arr--\");\r\n" + + "b = c[2]--;\r\n" + + "var d:* = new TestClass1();\r\n" + + "trace(\"++property\");\r\n" + + "trace(++d.attrib);\r\n" + + "trace(\"property++\");\r\n" + + "trace(d.attrib++);\r\n" + + "trace(\"--property\");\r\n" + + "trace(--d.attrib);\r\n" + + "trace(\"property--\");\r\n" + + "trace(d.attrib--);\r\n" + + "trace(\"arr[e++]\");\r\n" + + "var chars:Array = new Array(36);\r\n" + + "var index:uint = 0;\r\n" + + "chars[index++] = 5;\r\n" + + "trace(\"arr[++e]\");\r\n" + + "chars[++index] = 5;\r\n", + false); + } + + @Test + public void testInlineFunctions() { + decompileMethod("classic_air", "testInlineFunctions", "var first:String = \"value1\";\r\n" + + "var traceParameter:Function = function(aParam:String):String\r\n" + + "{\r\n" + + "aParam = aParam;\r\n" + + "var second:String = \"value2\";\r\n" + + "second = second + \"cc\";\r\n" + + "var traceParam2:Function = function(bParam:String):String\r\n" + + "{\r\n" + + "trace(bParam + \",\" + aParam);\r\n" + + "return first + second + aParam + bParam;\r\n" + + "};\r\n" + + "trace(second);\r\n" + + "traceParam2(aParam);\r\n" + + "return first;\r\n" + + "};\r\n" + + "traceParameter(\"hello\");\r\n", + false); + } + + @Test + public void testInnerFunctions() { + decompileMethod("classic_air", "testInnerFunctions", "a = a;\r\n" + + "var s:int = 0;\r\n" + + "var innerFunc:Function = function(b:String):*\r\n" + + "{\r\n" + + "trace(b);\r\n" + + "};\r\n" + + "var k:int = 5;\r\n" + + "if(k == 6)\r\n" + + "{\r\n" + + "s = 8;\r\n" + + "}\r\n" + + "innerFunc(a);\r\n", + false); + } + + @Test + public void testInnerIf() { + decompileMethod("classic_air", "testInnerIf", "var a:int = 5;\r\n" + + "var b:int = 4;\r\n" + + "if(a == 5)\r\n" + + "{\r\n" + + "if(b == 6)\r\n" + + "{\r\n" + + "trace(\"b==6\");\r\n" + + "}\r\n" + + "else\r\n" + + "{\r\n" + + "trace(\"b!=6\");\r\n" + + "}\r\n" + + "}\r\n" + + "else if(b == 7)\r\n" + + "{\r\n" + + "trace(\"b==7\");\r\n" + + "}\r\n" + + "else\r\n" + + "{\r\n" + + "trace(\"b!=7\");\r\n" + + "}\r\n" + + "trace(\"end\");\r\n", + false); + } + + @Test + public void testInnerTry() { + decompileMethod("classic_air", "testInnerTry", "try\r\n" + + "{\r\n" + + "try\r\n" + + "{\r\n" + + "trace(\"try body 1\");\r\n" + + "}\r\n" + + "catch(e:DefinitionError)\r\n" + + "{\r\n" + + "trace(\"catched DefinitionError\");\r\n" + + "}\r\n" + + "trace(\"after try 1\");\r\n" + + "}\r\n" + + "catch(e:Error)\r\n" + + "{\r\n" + + "trace(\"catched Error\");\r\n" + + "}\r\n" + + "finally\r\n" + + "{\r\n" + + "trace(\"finally block\");\r\n" + + "}\r\n", + false); + } + + @Test + public void testLogicalComputing() { + decompileMethod("classic_air", "testLogicalComputing", "var b:Boolean = false;\r\n" + + "var i:int = 5;\r\n" + + "var j:int = 7;\r\n" + + "if(i > j)\r\n" + + "{\r\n" + + "j = 9;\r\n" + + "b = true;\r\n" + + "}\r\n" + + "b = (i == 0 || i == 1) && j == 0;\r\n", + false); + } + + @Test + public void testManualConvert() { + decompileMethod("classic_air", "testManualConvert", "trace(\"String(this).length\");\r\n" + + "trace(String(this).length);\r\n", + false); + } + + @Test + public void testMissingDefault() { + decompileMethod("classic_air", "testMissingDefault", "var jj:int = 1;\r\n" + + "switch(int(jj) - 1)\r\n" + + "{\r\n" + + "case 0:\r\n" + + "jj = 1;\r\n" + + "break;\r\n" + + "case 1:\r\n" + + "jj = 2;\r\n" + + "break;\r\n" + + "default:\r\n" + + "jj = 3;\r\n" + + "}\r\n", + false); + } + + @Test + public void testMultipleCondition() { + decompileMethod("classic_air", "testMultipleCondition", "var a:int = 5;\r\n" + + "var b:int = 8;\r\n" + + "var c:int = 9;\r\n" + + "if((a <= 4 || b <= 8) && c == 7)\r\n" + + "{\r\n" + + "trace(\"onTrue\");\r\n" + + "}\r\n" + + "else\r\n" + + "{\r\n" + + "trace(\"onFalse\");\r\n" + + "}\r\n", + false); + } + + @Test + public void testNamedAnonFunctions() { + decompileMethod("classic_air", "testNamedAnonFunctions", "var test:* = new function():*\r\n" + + "{\r\n" + + "return var testFunc:Function = function(param1:*, param2:int, param3:Array):Boolean\r\n" + + "{\r\n" + + "return (param1 as TestClass2).attrib1 == 5;\r\n" + + "};\r\n" + + "}()();\r\n", + false); + } + + @Test + public void testNames() { + decompileMethod("classic_air", "testNames", "var ns:* = this.getNamespace();\r\n" + + "var name:* = this.getName();\r\n" + + "var a:* = ns::unnamespacedFunc();\r\n" + + "var b:* = ns::[name];\r\n" + + "trace(b.c);\r\n" + + "var c:* = myInternal::neco;\r\n", + false); + } + + @Test + public void testParamNames() { + decompileMethod("classic_air", "testParamNames", "return firstp + secondp + thirdp;\r\n", + false); + } + + @Test + public void testParamsCount() { + decompileMethod("classic_air", "testParamsCount", "return firstp;\r\n", + false); + } + + @Test + public void testPrecedence() { + decompileMethod("classic_air", "testPrecedence", "var a:* = 0;\r\n" + + "a = 77;\r\n" + + "a = 25;\r\n" + + "a = 47;\r\n" + + "a = 12;\r\n" + + "a = 5;\r\n" + + "a = 5 % 7368;\r\n" + + "a = 1.5;\r\n" + + "a = 0.166666666666667;\r\n" + + "a = 6;\r\n" + + "a = 0.666666666666667;\r\n" + + "trace(\"a=\" + a);\r\n", + false); + } + + @Test + public void testPrecedenceX() { + decompileMethod("classic_air", "testPrecedenceX", "var a:int = 5;\r\n" + + "var b:int = 2;\r\n" + + "var c:int = 3;\r\n" + + "var d:* = a << (b >>> c);\r\n" + + "var e:* = a << b >>> c;\r\n", + false); + } + + @Test + public void testProperty() { + decompileMethod("classic_air", "testProperty", "var d:* = new TestClass1();\r\n" + + "var k:int = 15;\r\n" + + "if(k == 15)\r\n" + + "{\r\n" + + "d.method(d.attrib * 5);\r\n" + + "}\r\n", + false); + } + + @Test + public void testRegExp() { + decompileMethod("classic_air", "testRegExp", "var a1:* = /[a-z\\r\\n0-9\\\\]+/i;\r\n" + + "var a2:* = /[a-z\\r\\n0-9\\\\]+/i;\r\n" + + "var b1:* = /[0-9AB]+/;\r\n" + + "var b2:* = /[0-9AB]+/;\r\n", + false); + } + + @Test + public void testRest() { + decompileMethod("classic_air", "testRest", "trace(\"firstRest:\" + restval[0]);\r\n" + + "return firstp;\r\n", + false); + } + + @Test + public void testStrictEquals() { + decompileMethod("classic_air", "testStrictEquals", "var k:int = 6;\r\n" + + "if(this.f() !== this.f())\r\n" + + "{\r\n" + + "trace(\"is eight\");\r\n" + + "}\r\n", + false); + } + + @Test + public void testStringConcat() { + decompileMethod("classic_air", "testStringConcat", "var k:int = 8;\r\n" + + "this.traceIt(\"hello30\");\r\n" + + "this.traceIt(\"hello\" + (k - 1));\r\n" + + "this.traceIt(\"hello56\");\r\n", + false); + } + + @Test + public void testStrings() { + decompileMethod("classic_air", "testStrings", "trace(\"hello\");\r\n" + + "trace(\"quotes:\\\"hello!\\\"\");\r\n" + + "trace(\"backslash: \\\\ \");\r\n" + + "trace(\"single quotes: \\'hello!\\'\");\r\n" + + "trace(\"new line \\r\\n hello!\");\r\n", + false); + } + + @Test + public void testSwitch() { + decompileMethod("classic_air", "testSwitch", "var a:int = 5;\r\n" + + "switch(a)\r\n" + + "{\r\n" + + "case 57 * a:\r\n" + + "trace(\"fiftyseven multiply a\");\r\n" + + "break;\r\n" + + "case 13:\r\n" + + "trace(\"thirteen\");\r\n" + + "case 14:\r\n" + + "trace(\"fourteen\");\r\n" + + "break;\r\n" + + "case 89:\r\n" + + "trace(\"eightynine\");\r\n" + + "}\r\n", + false); + } + + @Test + public void testSwitchComma() { + decompileMethod("classic_air", "testSwitchComma", "var b:int = 5;\r\n" + + "var a:String = \"A\";\r\n" + + "switch(a)\r\n" + + "{\r\n" + + "case \"A\":\r\n" + + "trace(\"is A\");\r\n" + + "break;\r\n" + + "case \"B\":\r\n" + + "trace(\"is B\");\r\n" + + "case \"C\":\r\n" + + "trace(\"is C\");\r\n" + + "}\r\n", + false); + } + + @Test + public void testSwitchDefault() { + decompileMethod("classic_air", "testSwitchDefault", "var a:int = 5;\r\n" + + "switch(a)\r\n" + + "{\r\n" + + "case 57 * a:\r\n" + + "trace(\"fiftyseven multiply a\");\r\n" + + "break;\r\n" + + "case 13:\r\n" + + "trace(\"thirteen\");\r\n" + + "case 14:\r\n" + + "trace(\"fourteen\");\r\n" + + "break;\r\n" + + "case 89:\r\n" + + "trace(\"eightynine\");\r\n" + + "break;\r\n" + + "default:\r\n" + + "trace(\"default clause\");\r\n" + + "}\r\n", + false); + } + + @Test + public void testTernarOperator() { + decompileMethod("classic_air", "testTernarOperator", "var a:int = 5;\r\n" + + "var b:int = 4;\r\n" + + "var c:int = 4;\r\n" + + "var d:int = 78;\r\n" + + "var e:* = a == b?c == d?1:7:3;\r\n" + + "trace(\"e=\" + e);\r\n", + false); + } + + @Test + public void testTry() { + decompileMethod("classic_air", "testTry", "var i:int = 0;\r\n" + + "i = 7;\r\n" + + "try\r\n" + + "{\r\n" + + "trace(\"try body\");\r\n" + + "}\r\n" + + "catch(e:DefinitionError)\r\n" + + "{\r\n" + + "trace(\"catched DefinitionError\");\r\n" + + "}\r\n" + + "catch(e:Error)\r\n" + + "{\r\n" + + "trace(\"Error message:\" + e.message);\r\n" + + "trace(\"Stacktrace:\" + e.getStackTrace());\r\n" + + "}\r\n" + + "finally\r\n" + + "{\r\n" + + "trace(\"Finally part\");\r\n" + + "}\r\n" + + "trace(\"end\");\r\n", + false); + } + + @Test + public void testTryReturn() { + decompileMethod("classic_air", "testTryReturn", "var i:int = 0;\r\n" + + "var b:Boolean = false;\r\n" + + "try\r\n" + + "{\r\n" + + "i = 0;\r\n" + + "b = true;\r\n" + + "if(i > 0)\r\n" + + "{\r\n" + + "while(this.testDoWhile2())\r\n" + + "{\r\n" + + "if(b)\r\n" + + "{\r\n" + + "return 5;\r\n" + + "}\r\n" + + "}\r\n" + + "}\r\n" + + "i++;\r\n" + + "return 2;\r\n" + + "}\r\n" + + "catch(e:Error)\r\n" + + "{\r\n" + + "return 4;\r\n" + + "}\r\n", + false); + } + + @Test + public void testTryReturn2() { + decompileMethod("classic_air", "testTryReturn2", "trace(\"before\");\r\n" + + "var a:Boolean = true;\r\n" + + "var b:Boolean = false;\r\n" + + "var c:Boolean = true;\r\n" + + "var d:Boolean = false;\r\n" + + "var e:Boolean = true;\r\n" + + "try\r\n" + + "{\r\n" + + "if(a)\r\n" + + "{\r\n" + + "return \"A\";\r\n" + + "}\r\n" + + "if(b)\r\n" + + "{\r\n" + + "return \"B\";\r\n" + + "}\r\n" + + "}\r\n" + + "catch(e:Error)\r\n" + + "{\r\n" + + "if(c)\r\n" + + "{\r\n" + + "return \"C\";\r\n" + + "}\r\n" + + "}\r\n" + + "finally\r\n" + + "{\r\n" + + "if(d)\r\n" + + "{\r\n" + + "return \"D\";\r\n" + + "}\r\n" + + "if(e)\r\n" + + "{\r\n" + + "return \"E\";\r\n" + + "}\r\n" + + "}\r\n" + + "trace(\"after\");\r\n" + + "return \"X\";\r\n", + false); + } + + @Test + public void testUsagesTry() { + decompileMethod("classic_air", "testUsagesTry", "var k:int = 5;\r\n" + + "switch(int(k))\r\n" + + "{\r\n" + + "case 0:\r\n" + + "trace(\"1\");\r\n" + + "break;\r\n" + + "case 1:\r\n" + + "trace(\"2\");\r\n" + + "}\r\n" + + "var a:Boolean = true;\r\n" + + "var b:Boolean = true;\r\n" + + "try\r\n" + + "{\r\n" + + "if(b)\r\n" + + "{\r\n" + + "return \"B\";\r\n" + + "}\r\n" + + "trace(\"A\");\r\n" + + "}\r\n" + + "catch(e:Error)\r\n" + + "{\r\n" + + "trace(\"E\");\r\n" + + "}\r\n" + + "finally\r\n" + + "{\r\n" + + "trace(\"finally\");\r\n" + + "}\r\n" + + "trace(\"after\");\r\n" + + "return \"X\";\r\n", + false); + } + + @Test + public void testVector() { + decompileMethod("classic_air", "testVector", "var v:Vector. = new Vector.();\r\n" + + "v.push(\"hello\");\r\n" + + "v[0] = \"hi\";\r\n" + + "var a:int = 5;\r\n" + + "v[a * 8 - 39] = \"hi2\";\r\n" + + "trace(v[0]);\r\n", + false); + } + + @Test + public void testVector2() { + decompileMethod("classic_air", "testVector2", "var a:Vector.> = new Vector.>();\r\n" + + "var b:Vector. = new [10,20,30];\r\n", + false); + } + + @Test + public void testWhileAnd() { + decompileMethod("classic_air", "testWhileAnd", "var a:int = 5;\r\n" + + "var b:int = 10;\r\n" + + "while(a < 10 && b > 1)\r\n" + + "{\r\n" + + "a++;\r\n" + + "b--;\r\n" + + "}\r\n" + + "a = 7;\r\n" + + "b = 9;\r\n", + false); + } + + @Test + public void testWhileContinue() { + decompileMethod("classic_air", "testWhileContinue", "var a:int = 5;\r\n" + + "while(true)\r\n" + + "{\r\n" + + "if(a == 9)\r\n" + + "{\r\n" + + "if(a == 8)\r\n" + + "{\r\n" + + "continue;\r\n" + + "}\r\n" + + "if(a == 9)\r\n" + + "{\r\n" + + "break;\r\n" + + "}\r\n" + + "trace(\"hello 1\");\r\n" + + "}\r\n" + + "trace(\"hello2\");\r\n" + + "}\r\n", + false); + } + + @Test + public void testWhileTry() { + decompileMethod("classic_air", "testWhileTry", "while(true)\r\n" + + "{\r\n" + + "try\r\n" + + "{\r\n" + + "while(true)\r\n" + + "{\r\n" + + "trace(\"a\");\r\n" + + "}\r\n" + + "}\r\n" + + "catch(e:EOFError)\r\n" + + "{\r\n" + + "continue;\r\n" + + "}\r\n" + + "catch(e:Error)\r\n" + + "{\r\n" + + "continue;\r\n" + + "}\r\n" + + "}\r\n", + false); + } + + @Test + public void testWhileTry2() { + decompileMethod("classic_air", "testWhileTry2", "var i:* = undefined;\r\n" + + "var j:* = undefined;\r\n" + + "for(i = 0; i < 100; i++)\r\n" + + "{\r\n" + + "try\r\n" + + "{\r\n" + + "for(j = 0; j < 20; )\r\n" + + "{\r\n" + + "trace(\"a\");\r\n" + + "j++;\r\n" + + "}\r\n" + + "}\r\n" + + "catch(e:EOFError)\r\n" + + "{\r\n" + + "continue;\r\n" + + "}\r\n" + + "catch(e:Error)\r\n" + + "{\r\n" + + "continue;\r\n" + + "}\r\n" + + "trace(\"after_try\");\r\n" + + "}\r\n" + + "trace(\"end\");\r\n", + false); + } + + @Test + public void testXml() { + decompileMethod("classic_air", "testXml", "var name:String = \"ahoj\";\r\n" + + "var myXML:XML = \r\n" + + "\r\n" + + "{name}\r\n" + + "\r\n" + + ";\r\n" + + "var k:* = myXML.@id;\r\n" + + "var all:String = myXML.@*.toXMLString();\r\n" + + "k = myXML.book;\r\n" + + "k = myXML.book.(@isbn == \"12345\");\r\n" + + "var g:XML = ;\r\n", + false); + } +} diff --git a/libsrc/ffdec_lib/test/com/jpexs/decompiler/flash/ActionScript3ClassicDecompileTest.java b/libsrc/ffdec_lib/test/com/jpexs/decompiler/flash/as3decompile/ActionScript3ClassicDecompileTest.java similarity index 99% rename from libsrc/ffdec_lib/test/com/jpexs/decompiler/flash/ActionScript3ClassicDecompileTest.java rename to libsrc/ffdec_lib/test/com/jpexs/decompiler/flash/as3decompile/ActionScript3ClassicDecompileTest.java index 83c6eac77..8fda2670f 100644 --- a/libsrc/ffdec_lib/test/com/jpexs/decompiler/flash/ActionScript3ClassicDecompileTest.java +++ b/libsrc/ffdec_lib/test/com/jpexs/decompiler/flash/as3decompile/ActionScript3ClassicDecompileTest.java @@ -1,5 +1,6 @@ -package com.jpexs.decompiler.flash; +package com.jpexs.decompiler.flash.as3decompile; +import com.jpexs.decompiler.flash.ActionScript3DecompileTestBase; import java.io.IOException; import org.testng.annotations.BeforeClass; import org.testng.annotations.Test; diff --git a/libsrc/ffdec_lib/test/com/jpexs/decompiler/flash/ActionScript3CrossCompileDecompileTest.java b/libsrc/ffdec_lib/test/com/jpexs/decompiler/flash/as3decompile/ActionScript3CrossCompileDecompileTest.java similarity index 99% rename from libsrc/ffdec_lib/test/com/jpexs/decompiler/flash/ActionScript3CrossCompileDecompileTest.java rename to libsrc/ffdec_lib/test/com/jpexs/decompiler/flash/as3decompile/ActionScript3CrossCompileDecompileTest.java index f32ca599f..d992a58cc 100644 --- a/libsrc/ffdec_lib/test/com/jpexs/decompiler/flash/ActionScript3CrossCompileDecompileTest.java +++ b/libsrc/ffdec_lib/test/com/jpexs/decompiler/flash/as3decompile/ActionScript3CrossCompileDecompileTest.java @@ -1,5 +1,6 @@ -package com.jpexs.decompiler.flash; +package com.jpexs.decompiler.flash.as3decompile; +import com.jpexs.decompiler.flash.ActionScript3DecompileTestBase; import java.io.IOException; import org.testng.annotations.BeforeClass; import org.testng.annotations.DataProvider; diff --git a/libsrc/ffdec_lib/test/com/jpexs/decompiler/flash/ActionScript3CrossCompileSwfToolsDecompileTest.java b/libsrc/ffdec_lib/test/com/jpexs/decompiler/flash/as3decompile/ActionScript3CrossCompileSwfToolsDecompileTest.java similarity index 99% rename from libsrc/ffdec_lib/test/com/jpexs/decompiler/flash/ActionScript3CrossCompileSwfToolsDecompileTest.java rename to libsrc/ffdec_lib/test/com/jpexs/decompiler/flash/as3decompile/ActionScript3CrossCompileSwfToolsDecompileTest.java index 420f9e0fa..fc67777b5 100644 --- a/libsrc/ffdec_lib/test/com/jpexs/decompiler/flash/ActionScript3CrossCompileSwfToolsDecompileTest.java +++ b/libsrc/ffdec_lib/test/com/jpexs/decompiler/flash/as3decompile/ActionScript3CrossCompileSwfToolsDecompileTest.java @@ -1,5 +1,6 @@ -package com.jpexs.decompiler.flash; +package com.jpexs.decompiler.flash.as3decompile; +import com.jpexs.decompiler.flash.ActionScript3DecompileTestBase; import java.io.IOException; import org.testng.annotations.BeforeClass; import org.testng.annotations.Test; diff --git a/libsrc/ffdec_lib/test/com/jpexs/decompiler/flash/generators/AS3Generator.java b/libsrc/ffdec_lib/test/com/jpexs/decompiler/flash/generators/AS3Generator.java index 87a7f479f..e17b09041 100644 --- a/libsrc/ffdec_lib/test/com/jpexs/decompiler/flash/generators/AS3Generator.java +++ b/libsrc/ffdec_lib/test/com/jpexs/decompiler/flash/generators/AS3Generator.java @@ -60,8 +60,9 @@ public class AS3Generator { for (ScriptPack pack : scriptPacks) { sortedPacks.put(pack.getClassPath().toRawString(), pack); } - s.append("package com.jpexs.decompiler.flash;\r\n"); + s.append("package com.jpexs.decompiler.flash.as3decompile;\r\n"); s.append("\r\n"); + s.append("import com.jpexs.decompiler.flash.ActionScript3DecompileTestBase;\r\n"); s.append("import java.io.IOException;\r\n"); s.append("import org.testng.annotations.BeforeClass;\r\n"); if (multipleProviders) { @@ -162,7 +163,7 @@ public class AS3Generator { } s.append("}\r\n"); - String testPath = "test/com/jpexs/decompiler/flash/"; + String testPath = "test/com/jpexs/decompiler/flash/as3decompile/"; Helper.writeFile(testPath + testClassName + ".java", s.toString().getBytes("UTF-8")); } @@ -172,6 +173,8 @@ public class AS3Generator { useFile("ActionScript3ClassicDecompileTest", new String[][]{{"testdata/as3_new/bin/as3_new.flex.swf", "classic"}}, false); + useFile("ActionScript3ClassicAirDecompileTest", new String[][]{{"testdata/as3_new/bin/as3_new.air.swf", "classic_air"}}, false); + useFile("ActionScript3CrossCompileDecompileTest", new String[][]{ {"testdata/as3_cross_compile/bin/as3_cross_compile.flex.swf", "flex"}, {"testdata/as3_cross_compile/bin/as3_cross_compile.air.swf", "air"}