summaryrefslogtreecommitdiff
path: root/test
diff options
context:
space:
mode:
Diffstat (limited to 'test')
-rw-r--r--test/cuchaz/enigma/TestDeobfuscator.java4
-rw-r--r--test/cuchaz/enigma/TestInnerClasses.java23
-rw-r--r--test/cuchaz/enigma/TestSourceIndex.java4
-rw-r--r--test/cuchaz/enigma/TestTokensConstructors.java18
-rw-r--r--test/cuchaz/enigma/TokenChecker.java4
-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.java21
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
14import static org.junit.Assert.*; 14import static org.junit.Assert.*;
15 15
16import java.io.File;
17import java.io.IOException; 16import java.io.IOException;
18import java.util.List; 17import java.util.List;
18import java.util.jar.JarFile;
19 19
20import org.junit.Test; 20import org.junit.Test;
21 21
@@ -26,7 +26,7 @@ import cuchaz.enigma.mapping.ClassEntry;
26public class TestDeobfuscator { 26public 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;
23public class TestInnerClasses { 23public 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 ******************************************************************************/
12package cuchaz.enigma; 12package cuchaz.enigma;
13 13
14import java.io.File;
15import java.util.Set; 14import java.util.Set;
15import java.util.jar.JarFile;
16 16
17import org.junit.Test; 17import 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 ******************************************************************************/
11package cuchaz.enigma; 11package cuchaz.enigma;
12 12
13import static cuchaz.enigma.EntryFactory.newBehaviorReferenceByConstructor; 13import static cuchaz.enigma.EntryFactory.*;
14import static cuchaz.enigma.EntryFactory.newBehaviorReferenceByMethod; 14import static org.hamcrest.MatcherAssert.*;
15import static cuchaz.enigma.EntryFactory.newConstructor; 15import static org.hamcrest.Matchers.*;
16import static org.hamcrest.MatcherAssert.assertThat;
17import static org.hamcrest.Matchers.containsInAnyOrder;
18import static org.hamcrest.Matchers.is;
19import static org.hamcrest.Matchers.nullValue;
20 16
21import java.io.File; 17import java.util.jar.JarFile;
22 18
23import org.junit.Test; 19import org.junit.Test;
24 20
@@ -27,7 +23,7 @@ import cuchaz.enigma.mapping.BehaviorEntry;
27public class TestTokensConstructors extends TokenChecker { 23public 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 ******************************************************************************/
11package cuchaz.enigma; 11package cuchaz.enigma;
12 12
13import java.io.File;
14import java.io.IOException; 13import java.io.IOException;
15import java.util.Collection; 14import java.util.Collection;
16import java.util.List; 15import java.util.List;
16import java.util.jar.JarFile;
17 17
18import com.google.common.collect.Lists; 18import com.google.common.collect.Lists;
19import com.strobel.decompiler.languages.java.ast.CompilationUnit; 19import 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 @@
1package cuchaz.enigma.inputs.innerClasses; 1package cuchaz.enigma.inputs.innerClasses;
2 2
3public class Anonymous { 3public 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 @@
1package cuchaz.enigma.inputs.innerClasses; 1package cuchaz.enigma.inputs.innerClasses;
2 2
3public class AnonymousWithScopeArgs { 3public 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 @@
1package cuchaz.enigma.inputs.innerClasses; 1package cuchaz.enigma.inputs.innerClasses;
2 2
3@SuppressWarnings("unused") 3@SuppressWarnings("unused")
4public class ConstructorArgs { 4public 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 @@
1package cuchaz.enigma.inputs.innerClasses; 1package cuchaz.enigma.inputs.innerClasses;
2 2
3public class Simple { 3public 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 @@
1package cuchaz.enigma.inputs.innerClasses;
2
3public 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}