diff options
| author | 2015-02-02 21:26:10 -0500 | |
|---|---|---|
| committer | 2015-02-02 21:26:10 -0500 | |
| commit | 448685653e90415ebe10b08e8335462b81c30421 (patch) | |
| tree | 474d9bcc08c2b5441b704595992d3beff1d2587f /test | |
| parent | avoid concurrent modification exception (diff) | |
| download | enigma-448685653e90415ebe10b08e8335462b81c30421.tar.gz enigma-448685653e90415ebe10b08e8335462b81c30421.tar.xz enigma-448685653e90415ebe10b08e8335462b81c30421.zip | |
fix issue with bridge methods
Diffstat (limited to 'test')
| -rw-r--r-- | test/cuchaz/enigma/TestDeobfuscator.java | 4 | ||||
| -rw-r--r-- | test/cuchaz/enigma/TestInnerClasses.java | 23 | ||||
| -rw-r--r-- | test/cuchaz/enigma/TestSourceIndex.java | 4 | ||||
| -rw-r--r-- | test/cuchaz/enigma/TestTokensConstructors.java | 18 | ||||
| -rw-r--r-- | test/cuchaz/enigma/TokenChecker.java | 4 | ||||
| -rw-r--r-- | test/cuchaz/enigma/inputs/innerClasses/A_Anonymous.java (renamed from test/cuchaz/enigma/inputs/innerClasses/Anonymous.java) | 2 | ||||
| -rw-r--r-- | test/cuchaz/enigma/inputs/innerClasses/B_AnonymousWithScopeArgs.java (renamed from test/cuchaz/enigma/inputs/innerClasses/AnonymousWithScopeArgs.java) | 4 | ||||
| -rw-r--r-- | test/cuchaz/enigma/inputs/innerClasses/C_ConstructorArgs.java (renamed from test/cuchaz/enigma/inputs/innerClasses/ConstructorArgs.java) | 2 | ||||
| -rw-r--r-- | test/cuchaz/enigma/inputs/innerClasses/D_Simple.java (renamed from test/cuchaz/enigma/inputs/innerClasses/Simple.java) | 2 | ||||
| -rw-r--r-- | test/cuchaz/enigma/inputs/innerClasses/E_AnonymousWithOuterAccess.java | 21 |
10 files changed, 61 insertions, 23 deletions
diff --git a/test/cuchaz/enigma/TestDeobfuscator.java b/test/cuchaz/enigma/TestDeobfuscator.java index 6ac4c786..129d7b25 100644 --- a/test/cuchaz/enigma/TestDeobfuscator.java +++ b/test/cuchaz/enigma/TestDeobfuscator.java | |||
| @@ -13,9 +13,9 @@ package cuchaz.enigma; | |||
| 13 | 13 | ||
| 14 | import static org.junit.Assert.*; | 14 | import static org.junit.Assert.*; |
| 15 | 15 | ||
| 16 | import java.io.File; | ||
| 17 | import java.io.IOException; | 16 | import java.io.IOException; |
| 18 | import java.util.List; | 17 | import java.util.List; |
| 18 | import java.util.jar.JarFile; | ||
| 19 | 19 | ||
| 20 | import org.junit.Test; | 20 | import org.junit.Test; |
| 21 | 21 | ||
| @@ -26,7 +26,7 @@ import cuchaz.enigma.mapping.ClassEntry; | |||
| 26 | public class TestDeobfuscator { | 26 | public class TestDeobfuscator { |
| 27 | 27 | ||
| 28 | private Deobfuscator getDeobfuscator() throws IOException { | 28 | private Deobfuscator getDeobfuscator() throws IOException { |
| 29 | return new Deobfuscator(new File("build/testLoneClass.obf.jar")); | 29 | return new Deobfuscator(new JarFile("build/testLoneClass.obf.jar")); |
| 30 | } | 30 | } |
| 31 | 31 | ||
| 32 | @Test | 32 | @Test |
diff --git a/test/cuchaz/enigma/TestInnerClasses.java b/test/cuchaz/enigma/TestInnerClasses.java index 51fb5e35..63c9b719 100644 --- a/test/cuchaz/enigma/TestInnerClasses.java +++ b/test/cuchaz/enigma/TestInnerClasses.java | |||
| @@ -23,6 +23,7 @@ import cuchaz.enigma.analysis.JarIndex; | |||
| 23 | public class TestInnerClasses { | 23 | public class TestInnerClasses { |
| 24 | 24 | ||
| 25 | private JarIndex m_index; | 25 | private JarIndex m_index; |
| 26 | private Deobfuscator m_deobfuscator; | ||
| 26 | 27 | ||
| 27 | private static final String AnonymousOuter = "none/a"; | 28 | private static final String AnonymousOuter = "none/a"; |
| 28 | private static final String AnonymousInner = "b"; | 29 | private static final String AnonymousInner = "b"; |
| @@ -32,10 +33,14 @@ public class TestInnerClasses { | |||
| 32 | private static final String ConstructorArgsInner = "f"; | 33 | private static final String ConstructorArgsInner = "f"; |
| 33 | private static final String AnonymousWithScopeArgsOuter = "none/c"; | 34 | private static final String AnonymousWithScopeArgsOuter = "none/c"; |
| 34 | private static final String AnonymousWithScopeArgsInner = "d"; | 35 | private static final String AnonymousWithScopeArgsInner = "d"; |
| 36 | private static final String AnonymousWithOuterAccessOuter = "none/i"; | ||
| 37 | private static final String AnonymousWithOuterAccessInner = "j"; | ||
| 35 | 38 | ||
| 36 | public TestInnerClasses() throws Exception { | 39 | public TestInnerClasses() throws Exception { |
| 37 | m_index = new JarIndex(); | 40 | m_index = new JarIndex(); |
| 38 | m_index.indexJar(new JarFile("build/testInnerClasses.obf.jar"), true); | 41 | JarFile jar = new JarFile("build/testInnerClasses.obf.jar"); |
| 42 | m_index.indexJar(jar, true); | ||
| 43 | m_deobfuscator = new Deobfuscator(jar); | ||
| 39 | } | 44 | } |
| 40 | 45 | ||
| 41 | @Test | 46 | @Test |
| @@ -43,6 +48,7 @@ public class TestInnerClasses { | |||
| 43 | assertThat(m_index.getOuterClass(SimpleInner), is(SimpleOuter)); | 48 | assertThat(m_index.getOuterClass(SimpleInner), is(SimpleOuter)); |
| 44 | assertThat(m_index.getInnerClasses(SimpleOuter), containsInAnyOrder(SimpleInner)); | 49 | assertThat(m_index.getInnerClasses(SimpleOuter), containsInAnyOrder(SimpleInner)); |
| 45 | assertThat(m_index.isAnonymousClass(SimpleInner), is(false)); | 50 | assertThat(m_index.isAnonymousClass(SimpleInner), is(false)); |
| 51 | decompile(SimpleOuter); | ||
| 46 | } | 52 | } |
| 47 | 53 | ||
| 48 | @Test | 54 | @Test |
| @@ -50,6 +56,7 @@ public class TestInnerClasses { | |||
| 50 | assertThat(m_index.getOuterClass(AnonymousInner), is(AnonymousOuter)); | 56 | assertThat(m_index.getOuterClass(AnonymousInner), is(AnonymousOuter)); |
| 51 | assertThat(m_index.getInnerClasses(AnonymousOuter), containsInAnyOrder(AnonymousInner)); | 57 | assertThat(m_index.getInnerClasses(AnonymousOuter), containsInAnyOrder(AnonymousInner)); |
| 52 | assertThat(m_index.isAnonymousClass(AnonymousInner), is(true)); | 58 | assertThat(m_index.isAnonymousClass(AnonymousInner), is(true)); |
| 59 | decompile(AnonymousOuter); | ||
| 53 | } | 60 | } |
| 54 | 61 | ||
| 55 | @Test | 62 | @Test |
| @@ -57,6 +64,7 @@ public class TestInnerClasses { | |||
| 57 | assertThat(m_index.getOuterClass(ConstructorArgsInner), is(ConstructorArgsOuter)); | 64 | assertThat(m_index.getOuterClass(ConstructorArgsInner), is(ConstructorArgsOuter)); |
| 58 | assertThat(m_index.getInnerClasses(ConstructorArgsOuter), containsInAnyOrder(ConstructorArgsInner)); | 65 | assertThat(m_index.getInnerClasses(ConstructorArgsOuter), containsInAnyOrder(ConstructorArgsInner)); |
| 59 | assertThat(m_index.isAnonymousClass(ConstructorArgsInner), is(false)); | 66 | assertThat(m_index.isAnonymousClass(ConstructorArgsInner), is(false)); |
| 67 | decompile(ConstructorArgsOuter); | ||
| 60 | } | 68 | } |
| 61 | 69 | ||
| 62 | @Test | 70 | @Test |
| @@ -64,5 +72,18 @@ public class TestInnerClasses { | |||
| 64 | assertThat(m_index.getOuterClass(AnonymousWithScopeArgsInner), is(AnonymousWithScopeArgsOuter)); | 72 | assertThat(m_index.getOuterClass(AnonymousWithScopeArgsInner), is(AnonymousWithScopeArgsOuter)); |
| 65 | assertThat(m_index.getInnerClasses(AnonymousWithScopeArgsOuter), containsInAnyOrder(AnonymousWithScopeArgsInner)); | 73 | assertThat(m_index.getInnerClasses(AnonymousWithScopeArgsOuter), containsInAnyOrder(AnonymousWithScopeArgsInner)); |
| 66 | assertThat(m_index.isAnonymousClass(AnonymousWithScopeArgsInner), is(true)); | 74 | assertThat(m_index.isAnonymousClass(AnonymousWithScopeArgsInner), is(true)); |
| 75 | decompile(AnonymousWithScopeArgsOuter); | ||
| 76 | } | ||
| 77 | |||
| 78 | @Test | ||
| 79 | public void anonymousWithOuterAccess() { | ||
| 80 | assertThat(m_index.getOuterClass(AnonymousWithOuterAccessInner), is(AnonymousWithOuterAccessOuter)); | ||
| 81 | assertThat(m_index.getInnerClasses(AnonymousWithOuterAccessOuter), containsInAnyOrder(AnonymousWithOuterAccessInner)); | ||
| 82 | assertThat(m_index.isAnonymousClass(AnonymousWithOuterAccessInner), is(true)); | ||
| 83 | decompile(AnonymousWithOuterAccessOuter); | ||
| 84 | } | ||
| 85 | |||
| 86 | private void decompile(String name) { | ||
| 87 | m_deobfuscator.getSourceTree(name); | ||
| 67 | } | 88 | } |
| 68 | } | 89 | } |
diff --git a/test/cuchaz/enigma/TestSourceIndex.java b/test/cuchaz/enigma/TestSourceIndex.java index ba7fc797..70a5ee4c 100644 --- a/test/cuchaz/enigma/TestSourceIndex.java +++ b/test/cuchaz/enigma/TestSourceIndex.java | |||
| @@ -11,8 +11,8 @@ | |||
| 11 | ******************************************************************************/ | 11 | ******************************************************************************/ |
| 12 | package cuchaz.enigma; | 12 | package cuchaz.enigma; |
| 13 | 13 | ||
| 14 | import java.io.File; | ||
| 15 | import java.util.Set; | 14 | import java.util.Set; |
| 15 | import java.util.jar.JarFile; | ||
| 16 | 16 | ||
| 17 | import org.junit.Test; | 17 | import org.junit.Test; |
| 18 | 18 | ||
| @@ -26,7 +26,7 @@ public class TestSourceIndex { | |||
| 26 | // TEMP | 26 | // TEMP |
| 27 | @Test | 27 | @Test |
| 28 | public void indexEverything() throws Exception { | 28 | public void indexEverything() throws Exception { |
| 29 | Deobfuscator deobfuscator = new Deobfuscator(new File("input/1.8.jar")); | 29 | Deobfuscator deobfuscator = new Deobfuscator(new JarFile("input/1.8.jar")); |
| 30 | 30 | ||
| 31 | // get all classes that aren't inner classes | 31 | // get all classes that aren't inner classes |
| 32 | Set<ClassEntry> classEntries = Sets.newHashSet(); | 32 | Set<ClassEntry> classEntries = Sets.newHashSet(); |
diff --git a/test/cuchaz/enigma/TestTokensConstructors.java b/test/cuchaz/enigma/TestTokensConstructors.java index 9f85e81d..56424ae8 100644 --- a/test/cuchaz/enigma/TestTokensConstructors.java +++ b/test/cuchaz/enigma/TestTokensConstructors.java | |||
| @@ -10,15 +10,11 @@ | |||
| 10 | ******************************************************************************/ | 10 | ******************************************************************************/ |
| 11 | package cuchaz.enigma; | 11 | package cuchaz.enigma; |
| 12 | 12 | ||
| 13 | import static cuchaz.enigma.EntryFactory.newBehaviorReferenceByConstructor; | 13 | import static cuchaz.enigma.EntryFactory.*; |
| 14 | import static cuchaz.enigma.EntryFactory.newBehaviorReferenceByMethod; | 14 | import static org.hamcrest.MatcherAssert.*; |
| 15 | import static cuchaz.enigma.EntryFactory.newConstructor; | 15 | import static org.hamcrest.Matchers.*; |
| 16 | import static org.hamcrest.MatcherAssert.assertThat; | ||
| 17 | import static org.hamcrest.Matchers.containsInAnyOrder; | ||
| 18 | import static org.hamcrest.Matchers.is; | ||
| 19 | import static org.hamcrest.Matchers.nullValue; | ||
| 20 | 16 | ||
| 21 | import java.io.File; | 17 | import java.util.jar.JarFile; |
| 22 | 18 | ||
| 23 | import org.junit.Test; | 19 | import org.junit.Test; |
| 24 | 20 | ||
| @@ -27,7 +23,7 @@ import cuchaz.enigma.mapping.BehaviorEntry; | |||
| 27 | public class TestTokensConstructors extends TokenChecker { | 23 | public class TestTokensConstructors extends TokenChecker { |
| 28 | 24 | ||
| 29 | public TestTokensConstructors() throws Exception { | 25 | public TestTokensConstructors() throws Exception { |
| 30 | super(new File("build/testConstructors.obf.jar")); | 26 | super(new JarFile("build/testConstructors.obf.jar")); |
| 31 | } | 27 | } |
| 32 | 28 | ||
| 33 | @Test | 29 | @Test |
| @@ -63,11 +59,11 @@ public class TestTokensConstructors extends TokenChecker { | |||
| 63 | ); | 59 | ); |
| 64 | assertThat( | 60 | assertThat( |
| 65 | getReferenceTokens(newBehaviorReferenceByConstructor(source, "none/d", "()V")), | 61 | getReferenceTokens(newBehaviorReferenceByConstructor(source, "none/d", "()V")), |
| 66 | containsInAnyOrder("super") // implicit call, decompiled to "super" | 62 | is(empty()) // implicit call, not decompiled to token |
| 67 | ); | 63 | ); |
| 68 | assertThat( | 64 | assertThat( |
| 69 | getReferenceTokens(newBehaviorReferenceByConstructor(source, "none/d", "(III)V")), | 65 | getReferenceTokens(newBehaviorReferenceByConstructor(source, "none/d", "(III)V")), |
| 70 | containsInAnyOrder("super") // implicit call, decompiled to "super" | 66 | is(empty()) // implicit call, not decompiled to token |
| 71 | ); | 67 | ); |
| 72 | } | 68 | } |
| 73 | 69 | ||
diff --git a/test/cuchaz/enigma/TokenChecker.java b/test/cuchaz/enigma/TokenChecker.java index 524c5ec5..febea2ae 100644 --- a/test/cuchaz/enigma/TokenChecker.java +++ b/test/cuchaz/enigma/TokenChecker.java | |||
| @@ -10,10 +10,10 @@ | |||
| 10 | ******************************************************************************/ | 10 | ******************************************************************************/ |
| 11 | package cuchaz.enigma; | 11 | package cuchaz.enigma; |
| 12 | 12 | ||
| 13 | import java.io.File; | ||
| 14 | import java.io.IOException; | 13 | import java.io.IOException; |
| 15 | import java.util.Collection; | 14 | import java.util.Collection; |
| 16 | import java.util.List; | 15 | import java.util.List; |
| 16 | import java.util.jar.JarFile; | ||
| 17 | 17 | ||
| 18 | import com.google.common.collect.Lists; | 18 | import com.google.common.collect.Lists; |
| 19 | import com.strobel.decompiler.languages.java.ast.CompilationUnit; | 19 | import com.strobel.decompiler.languages.java.ast.CompilationUnit; |
| @@ -27,7 +27,7 @@ public class TokenChecker { | |||
| 27 | 27 | ||
| 28 | private Deobfuscator m_deobfuscator; | 28 | private Deobfuscator m_deobfuscator; |
| 29 | 29 | ||
| 30 | protected TokenChecker(File jarFile) throws IOException { | 30 | protected TokenChecker(JarFile jarFile) throws IOException { |
| 31 | m_deobfuscator = new Deobfuscator(jarFile); | 31 | m_deobfuscator = new Deobfuscator(jarFile); |
| 32 | } | 32 | } |
| 33 | 33 | ||
diff --git a/test/cuchaz/enigma/inputs/innerClasses/Anonymous.java b/test/cuchaz/enigma/inputs/innerClasses/A_Anonymous.java index f5d9d1cf..f7118f63 100644 --- a/test/cuchaz/enigma/inputs/innerClasses/Anonymous.java +++ b/test/cuchaz/enigma/inputs/innerClasses/A_Anonymous.java | |||
| @@ -1,6 +1,6 @@ | |||
| 1 | package cuchaz.enigma.inputs.innerClasses; | 1 | package cuchaz.enigma.inputs.innerClasses; |
| 2 | 2 | ||
| 3 | public class Anonymous { | 3 | public class A_Anonymous { |
| 4 | 4 | ||
| 5 | public void foo() { | 5 | public void foo() { |
| 6 | Runnable runnable = new Runnable() { | 6 | Runnable runnable = new Runnable() { |
diff --git a/test/cuchaz/enigma/inputs/innerClasses/AnonymousWithScopeArgs.java b/test/cuchaz/enigma/inputs/innerClasses/B_AnonymousWithScopeArgs.java index b3ba1af8..42fba9a8 100644 --- a/test/cuchaz/enigma/inputs/innerClasses/AnonymousWithScopeArgs.java +++ b/test/cuchaz/enigma/inputs/innerClasses/B_AnonymousWithScopeArgs.java | |||
| @@ -1,8 +1,8 @@ | |||
| 1 | package cuchaz.enigma.inputs.innerClasses; | 1 | package cuchaz.enigma.inputs.innerClasses; |
| 2 | 2 | ||
| 3 | public class AnonymousWithScopeArgs { | 3 | public class B_AnonymousWithScopeArgs { |
| 4 | 4 | ||
| 5 | public static void foo(final Simple arg) { | 5 | public static void foo(final D_Simple arg) { |
| 6 | System.out.println(new Object() { | 6 | System.out.println(new Object() { |
| 7 | @Override | 7 | @Override |
| 8 | public String toString() { | 8 | public String toString() { |
diff --git a/test/cuchaz/enigma/inputs/innerClasses/ConstructorArgs.java b/test/cuchaz/enigma/inputs/innerClasses/C_ConstructorArgs.java index 08135fe5..8fa6c5b8 100644 --- a/test/cuchaz/enigma/inputs/innerClasses/ConstructorArgs.java +++ b/test/cuchaz/enigma/inputs/innerClasses/C_ConstructorArgs.java | |||
| @@ -1,7 +1,7 @@ | |||
| 1 | package cuchaz.enigma.inputs.innerClasses; | 1 | package cuchaz.enigma.inputs.innerClasses; |
| 2 | 2 | ||
| 3 | @SuppressWarnings("unused") | 3 | @SuppressWarnings("unused") |
| 4 | public class ConstructorArgs { | 4 | public class C_ConstructorArgs { |
| 5 | 5 | ||
| 6 | class Inner { | 6 | class Inner { |
| 7 | 7 | ||
diff --git a/test/cuchaz/enigma/inputs/innerClasses/Simple.java b/test/cuchaz/enigma/inputs/innerClasses/D_Simple.java index cb536fa6..c4fc0ef9 100644 --- a/test/cuchaz/enigma/inputs/innerClasses/Simple.java +++ b/test/cuchaz/enigma/inputs/innerClasses/D_Simple.java | |||
| @@ -1,6 +1,6 @@ | |||
| 1 | package cuchaz.enigma.inputs.innerClasses; | 1 | package cuchaz.enigma.inputs.innerClasses; |
| 2 | 2 | ||
| 3 | public class Simple { | 3 | public class D_Simple { |
| 4 | 4 | ||
| 5 | class Inner { | 5 | class Inner { |
| 6 | // nothing to do | 6 | // nothing to do |
diff --git a/test/cuchaz/enigma/inputs/innerClasses/E_AnonymousWithOuterAccess.java b/test/cuchaz/enigma/inputs/innerClasses/E_AnonymousWithOuterAccess.java new file mode 100644 index 00000000..e1de53cb --- /dev/null +++ b/test/cuchaz/enigma/inputs/innerClasses/E_AnonymousWithOuterAccess.java | |||
| @@ -0,0 +1,21 @@ | |||
| 1 | package cuchaz.enigma.inputs.innerClasses; | ||
| 2 | |||
| 3 | public class E_AnonymousWithOuterAccess { | ||
| 4 | |||
| 5 | // reproduction of error case documented at: | ||
| 6 | // https://bitbucket.org/cuchaz/enigma/issue/61/stackoverflowerror-when-deobfuscating | ||
| 7 | |||
| 8 | public Object makeInner() { | ||
| 9 | outerMethod(); | ||
| 10 | return new Object() { | ||
| 11 | @Override | ||
| 12 | public String toString() { | ||
| 13 | return outerMethod(); | ||
| 14 | } | ||
| 15 | }; | ||
| 16 | } | ||
| 17 | |||
| 18 | private String outerMethod() { | ||
| 19 | return "foo"; | ||
| 20 | } | ||
| 21 | } | ||