summaryrefslogtreecommitdiff
path: root/test/cuchaz
diff options
context:
space:
mode:
Diffstat (limited to 'test/cuchaz')
-rw-r--r--test/cuchaz/enigma/TestInnerClasses.java67
-rw-r--r--test/cuchaz/enigma/TestJarIndexLoneClass.java7
-rw-r--r--test/cuchaz/enigma/TestTranslator.java36
-rw-r--r--test/cuchaz/enigma/inputs/innerClasses/F_ClassTree.java20
-rw-r--r--test/cuchaz/enigma/inputs/translation/G_ObjectMethods.java (renamed from test/cuchaz/enigma/inputs/translation/F_ObjectMethods.java)2
-rw-r--r--test/cuchaz/enigma/inputs/translation/H_OuterClass.java26
-rw-r--r--test/cuchaz/enigma/inputs/translation/M_NamelessClass.java26
-rw-r--r--test/cuchaz/enigma/resources/translation.mappings12
8 files changed, 179 insertions, 17 deletions
diff --git a/test/cuchaz/enigma/TestInnerClasses.java b/test/cuchaz/enigma/TestInnerClasses.java
index 2e16a330..2eb5accc 100644
--- a/test/cuchaz/enigma/TestInnerClasses.java
+++ b/test/cuchaz/enigma/TestInnerClasses.java
@@ -18,23 +18,30 @@ import java.util.jar.JarFile;
18 18
19import org.junit.Test; 19import org.junit.Test;
20 20
21import static cuchaz.enigma.TestEntryFactory.*;
22
21import cuchaz.enigma.analysis.JarIndex; 23import cuchaz.enigma.analysis.JarIndex;
24import cuchaz.enigma.mapping.ClassEntry;
22 25
23public class TestInnerClasses { 26public class TestInnerClasses {
24 27
25 private JarIndex m_index; 28 private JarIndex m_index;
26 private Deobfuscator m_deobfuscator; 29 private Deobfuscator m_deobfuscator;
27 30
28 private static final String AnonymousOuter = "none/a"; 31 private static final ClassEntry AnonymousOuter = newClass("none/a");
29 private static final String AnonymousInner = "b"; 32 private static final ClassEntry AnonymousInner = newClass("none/b");
30 private static final String SimpleOuter = "none/g"; 33 private static final ClassEntry SimpleOuter = newClass("none/g");
31 private static final String SimpleInner = "h"; 34 private static final ClassEntry SimpleInner = newClass("none/h");
32 private static final String ConstructorArgsOuter = "none/e"; 35 private static final ClassEntry ConstructorArgsOuter = newClass("none/e");
33 private static final String ConstructorArgsInner = "f"; 36 private static final ClassEntry ConstructorArgsInner = newClass("none/f");
34 private static final String AnonymousWithScopeArgsOuter = "none/c"; 37 private static final ClassEntry AnonymousWithScopeArgsOuter = newClass("none/c");
35 private static final String AnonymousWithScopeArgsInner = "d"; 38 private static final ClassEntry AnonymousWithScopeArgsInner = newClass("none/d");
36 private static final String AnonymousWithOuterAccessOuter = "none/i"; 39 private static final ClassEntry AnonymousWithOuterAccessOuter = newClass("none/i");
37 private static final String AnonymousWithOuterAccessInner = "j"; 40 private static final ClassEntry AnonymousWithOuterAccessInner = newClass("none/j");
41 private static final ClassEntry ClassTreeRoot = newClass("none/k");
42 private static final ClassEntry ClassTreeLevel1 = newClass("none/l");
43 private static final ClassEntry ClassTreeLevel2 = newClass("none/m");
44 private static final ClassEntry ClassTreeLevel3 = newClass("none/n");
38 45
39 public TestInnerClasses() 46 public TestInnerClasses()
40 throws Exception { 47 throws Exception {
@@ -84,7 +91,43 @@ public class TestInnerClasses {
84 decompile(AnonymousWithOuterAccessOuter); 91 decompile(AnonymousWithOuterAccessOuter);
85 } 92 }
86 93
87 private void decompile(String name) { 94 @Test
88 m_deobfuscator.getSourceTree(name); 95 public void classTree() {
96
97 // root level
98 assertThat(m_index.containsObfClass(ClassTreeRoot), is(true));
99 assertThat(m_index.getOuterClass(ClassTreeRoot), is(nullValue()));
100 assertThat(m_index.getInnerClasses(ClassTreeRoot), containsInAnyOrder(ClassTreeLevel1));
101
102 // level 1
103 ClassEntry fullClassEntry = new ClassEntry(ClassTreeRoot.getName()
104 + "$" + ClassTreeLevel1.getSimpleName()
105 );
106 assertThat(m_index.containsObfClass(fullClassEntry), is(true));
107 assertThat(m_index.getOuterClass(ClassTreeLevel1), is(ClassTreeRoot));
108 assertThat(m_index.getInnerClasses(ClassTreeLevel1), containsInAnyOrder(ClassTreeLevel2));
109
110 // level 2
111 fullClassEntry = new ClassEntry(ClassTreeRoot.getName()
112 + "$" + ClassTreeLevel1.getSimpleName()
113 + "$" + ClassTreeLevel2.getSimpleName()
114 );
115 assertThat(m_index.containsObfClass(fullClassEntry), is(true));
116 assertThat(m_index.getOuterClass(ClassTreeLevel2), is(ClassTreeLevel1));
117 assertThat(m_index.getInnerClasses(ClassTreeLevel2), containsInAnyOrder(ClassTreeLevel3));
118
119 // level 3
120 fullClassEntry = new ClassEntry(ClassTreeRoot.getName()
121 + "$" + ClassTreeLevel1.getSimpleName()
122 + "$" + ClassTreeLevel2.getSimpleName()
123 + "$" + ClassTreeLevel3.getSimpleName()
124 );
125 assertThat(m_index.containsObfClass(fullClassEntry), is(true));
126 assertThat(m_index.getOuterClass(ClassTreeLevel3), is(ClassTreeLevel2));
127 assertThat(m_index.getInnerClasses(ClassTreeLevel3), is(empty()));
128 }
129
130 private void decompile(ClassEntry classEntry) {
131 m_deobfuscator.getSourceTree(classEntry.getName());
89 } 132 }
90} 133}
diff --git a/test/cuchaz/enigma/TestJarIndexLoneClass.java b/test/cuchaz/enigma/TestJarIndexLoneClass.java
index 768284f9..0c126ad0 100644
--- a/test/cuchaz/enigma/TestJarIndexLoneClass.java
+++ b/test/cuchaz/enigma/TestJarIndexLoneClass.java
@@ -26,7 +26,6 @@ import cuchaz.enigma.analysis.ClassImplementationsTreeNode;
26import cuchaz.enigma.analysis.ClassInheritanceTreeNode; 26import cuchaz.enigma.analysis.ClassInheritanceTreeNode;
27import cuchaz.enigma.analysis.EntryReference; 27import cuchaz.enigma.analysis.EntryReference;
28import cuchaz.enigma.analysis.JarIndex; 28import cuchaz.enigma.analysis.JarIndex;
29import cuchaz.enigma.analysis.MethodImplementationsTreeNode;
30import cuchaz.enigma.analysis.MethodInheritanceTreeNode; 29import cuchaz.enigma.analysis.MethodInheritanceTreeNode;
31import cuchaz.enigma.mapping.BehaviorEntry; 30import cuchaz.enigma.mapping.BehaviorEntry;
32import cuchaz.enigma.mapping.ClassEntry; 31import cuchaz.enigma.mapping.ClassEntry;
@@ -125,17 +124,17 @@ public class TestJarIndexLoneClass {
125 124
126 @Test 125 @Test
127 public void innerClasses() { 126 public void innerClasses() {
128 assertThat(m_index.getInnerClasses("none/a"), is(empty())); 127 assertThat(m_index.getInnerClasses(newClass("none/a")), is(empty()));
129 } 128 }
130 129
131 @Test 130 @Test
132 public void outerClass() { 131 public void outerClass() {
133 assertThat(m_index.getOuterClass("a"), is(nullValue())); 132 assertThat(m_index.getOuterClass(newClass("a")), is(nullValue()));
134 } 133 }
135 134
136 @Test 135 @Test
137 public void isAnonymousClass() { 136 public void isAnonymousClass() {
138 assertThat(m_index.isAnonymousClass("none/a"), is(false)); 137 assertThat(m_index.isAnonymousClass(newClass("none/a")), is(false));
139 } 138 }
140 139
141 @Test 140 @Test
diff --git a/test/cuchaz/enigma/TestTranslator.java b/test/cuchaz/enigma/TestTranslator.java
index 3fe1680f..02526050 100644
--- a/test/cuchaz/enigma/TestTranslator.java
+++ b/test/cuchaz/enigma/TestTranslator.java
@@ -97,8 +97,44 @@ public class TestTranslator {
97 assertMapping(newMethod("none/c", "b", "()I"), newMethod("deobf/C_SubClass", "m2", "()I")); 97 assertMapping(newMethod("none/c", "b", "()I"), newMethod("deobf/C_SubClass", "m2", "()I"));
98 } 98 }
99 99
100 @Test
101 public void innerClasses() {
102
103 // classes
104 assertMapping(newClass("none/h"), newClass("deobf/H_OuterClass"));
105 assertMapping(newClass("none/h$i"), newClass("deobf/H_OuterClass$I_InnerClass"));
106 assertMapping(newClass("none/h$i$j"), newClass("deobf/H_OuterClass$I_InnerClass$J_InnerInnerClass"));
107 assertMapping(newClass("none/h$k"), newClass("deobf/H_OuterClass$k"));
108 assertMapping(newClass("none/h$k$l"), newClass("deobf/H_OuterClass$k$L_NamedInnerClass"));
109
110 // fields
111 assertMapping(newField("none/h$i", "a", "I"), newField("deobf/H_OuterClass$I_InnerClass", "f1", "I"));
112 assertMapping(newField("none/h$i", "a", "Ljava/lang/String;"), newField("deobf/H_OuterClass$I_InnerClass", "f2", "Ljava/lang/String;"));
113 assertMapping(newField("none/h$i$j", "a", "I"), newField("deobf/H_OuterClass$I_InnerClass$J_InnerInnerClass", "f3", "I"));
114 assertMapping(newField("none/h$k$l", "a", "I"), newField("deobf/H_OuterClass$k$L_NamedInnerClass", "f4", "I"));
115
116 // methods
117 assertMapping(newMethod("none/h$i", "a", "()V"), newMethod("deobf/H_OuterClass$I_InnerClass", "m1", "()V"));
118 assertMapping(newMethod("none/h$i$j", "a", "()V"), newMethod("deobf/H_OuterClass$I_InnerClass$J_InnerInnerClass", "m2", "()V"));
119 }
120
121 @Test
122 public void namelessClass() {
123 assertMapping(newClass("none/m"), newClass("none/m"));
124 }
125
100 private void assertMapping(Entry obf, Entry deobf) { 126 private void assertMapping(Entry obf, Entry deobf) {
101 assertThat(m_deobfTranslator.translateEntry(obf), is(deobf)); 127 assertThat(m_deobfTranslator.translateEntry(obf), is(deobf));
102 assertThat(m_obfTranslator.translateEntry(deobf), is(obf)); 128 assertThat(m_obfTranslator.translateEntry(deobf), is(obf));
129
130 String deobfName = m_deobfTranslator.translate(obf);
131 if (deobfName != null) {
132 assertThat(deobfName, is(deobf.getName()));
133 }
134
135 String obfName = m_obfTranslator.translate(deobf);
136 if (obfName != null) {
137 assertThat(obfName, is(obf.getName()));
138 }
103 } 139 }
104} 140}
diff --git a/test/cuchaz/enigma/inputs/innerClasses/F_ClassTree.java b/test/cuchaz/enigma/inputs/innerClasses/F_ClassTree.java
new file mode 100644
index 00000000..6552d8a6
--- /dev/null
+++ b/test/cuchaz/enigma/inputs/innerClasses/F_ClassTree.java
@@ -0,0 +1,20 @@
1package cuchaz.enigma.inputs.innerClasses;
2
3
4public class F_ClassTree {
5
6 public class Level1 {
7
8 public int f1;
9
10 public class Level2 {
11
12 public int f2;
13
14 public class Level3 {
15
16 public int f3;
17 }
18 }
19 }
20}
diff --git a/test/cuchaz/enigma/inputs/translation/F_ObjectMethods.java b/test/cuchaz/enigma/inputs/translation/G_ObjectMethods.java
index 4e091797..ebad5a38 100644
--- a/test/cuchaz/enigma/inputs/translation/F_ObjectMethods.java
+++ b/test/cuchaz/enigma/inputs/translation/G_ObjectMethods.java
@@ -1,6 +1,6 @@
1package cuchaz.enigma.inputs.translation; 1package cuchaz.enigma.inputs.translation;
2 2
3public class F_ObjectMethods { 3public class G_ObjectMethods {
4 4
5 public void callEmAll() 5 public void callEmAll()
6 throws Throwable { 6 throws Throwable {
diff --git a/test/cuchaz/enigma/inputs/translation/H_OuterClass.java b/test/cuchaz/enigma/inputs/translation/H_OuterClass.java
new file mode 100644
index 00000000..995c65d2
--- /dev/null
+++ b/test/cuchaz/enigma/inputs/translation/H_OuterClass.java
@@ -0,0 +1,26 @@
1package cuchaz.enigma.inputs.translation;
2
3
4public class H_OuterClass {
5
6 public class I_InnerClass {
7
8 public int f1;
9 public String f2;
10
11 public void m1() {}
12
13 public class J_InnerInnerClass {
14
15 public int f3;
16
17 public void m2() {}
18 }
19 }
20
21 public class K_NamelessClass {
22 public class L_NamedInnerClass {
23 public int f4;
24 }
25 }
26}
diff --git a/test/cuchaz/enigma/inputs/translation/M_NamelessClass.java b/test/cuchaz/enigma/inputs/translation/M_NamelessClass.java
new file mode 100644
index 00000000..afc9a9a5
--- /dev/null
+++ b/test/cuchaz/enigma/inputs/translation/M_NamelessClass.java
@@ -0,0 +1,26 @@
1package cuchaz.enigma.inputs.translation;
2
3
4public class M_NamelessClass {
5
6 public class I_InnerClass {
7
8 public int f1;
9 public String f2;
10
11 public void m1() {}
12
13 public class J_InnerInnerClass {
14
15 public int f3;
16
17 public void m2() {}
18 }
19 }
20
21 public class K_NamelessClass {
22 public class L_NamedInnerClass {
23 public int f4;
24 }
25 }
26}
diff --git a/test/cuchaz/enigma/resources/translation.mappings b/test/cuchaz/enigma/resources/translation.mappings
index d87d437c..5dffaf1d 100644
--- a/test/cuchaz/enigma/resources/translation.mappings
+++ b/test/cuchaz/enigma/resources/translation.mappings
@@ -17,3 +17,15 @@ CLASS none/c deobf/C_SubClass
17 FIELD c f4 I 17 FIELD c f4 I
18 METHOD a m1 ()I 18 METHOD a m1 ()I
19 METHOD c m3 ()I 19 METHOD c m3 ()I
20CLASS none/h deobf/H_OuterClass
21 CLASS none/i I_InnerClass
22 CLASS none/j J_InnerInnerClass
23 FIELD a f3 I
24 METHOD a m2 ()V
25 FIELD a f1 I
26 FIELD a f2 Ljava/lang/String;
27 METHOD a m1 ()V
28 CLASS none/k
29 CLASS none/l L_NamedInnerClass
30 FIELD a f4 I
31CLASS none/m \ No newline at end of file