summaryrefslogtreecommitdiff
path: root/src/test/java/cuchaz/enigma/TestTranslator.java
diff options
context:
space:
mode:
authorGravatar lclc982016-06-30 00:49:21 +1000
committerGravatar GitHub2016-06-30 00:49:21 +1000
commit4be005617b3b8c3578cca07c5d085d12916f0d1d (patch)
treedb163431f38703e26da417ef05eaea2b27a498b9 /src/test/java/cuchaz/enigma/TestTranslator.java
parentSome small changes to fix idea importing (diff)
downloadenigma-fork-4be005617b3b8c3578cca07c5d085d12916f0d1d.tar.gz
enigma-fork-4be005617b3b8c3578cca07c5d085d12916f0d1d.tar.xz
enigma-fork-4be005617b3b8c3578cca07c5d085d12916f0d1d.zip
Json format (#2)
* Added new format * Fixed bug * Updated Version
Diffstat (limited to 'src/test/java/cuchaz/enigma/TestTranslator.java')
-rw-r--r--src/test/java/cuchaz/enigma/TestTranslator.java171
1 files changed, 171 insertions, 0 deletions
diff --git a/src/test/java/cuchaz/enigma/TestTranslator.java b/src/test/java/cuchaz/enigma/TestTranslator.java
new file mode 100644
index 0000000..7a430d3
--- /dev/null
+++ b/src/test/java/cuchaz/enigma/TestTranslator.java
@@ -0,0 +1,171 @@
1/*******************************************************************************
2 * Copyright (c) 2015 Jeff Martin.
3 * All rights reserved. This program and the accompanying materials
4 * are made available under the terms of the GNU Lesser General Public
5 * License v3.0 which accompanies this distribution, and is available at
6 * http://www.gnu.org/licenses/lgpl.html
7 *
8 * Contributors:
9 * Jeff Martin - initial API and implementation
10 ******************************************************************************/
11package cuchaz.enigma;
12
13import static cuchaz.enigma.TestEntryFactory.*;
14import static org.hamcrest.MatcherAssert.*;
15import static org.hamcrest.Matchers.*;
16
17import java.io.InputStream;
18import java.io.InputStreamReader;
19import java.util.jar.JarFile;
20
21import org.junit.BeforeClass;
22import org.junit.Test;
23
24import cuchaz.enigma.mapping.Entry;
25import cuchaz.enigma.mapping.Mappings;
26import cuchaz.enigma.mapping.MappingsReader;
27import cuchaz.enigma.mapping.TranslationDirection;
28import cuchaz.enigma.mapping.Translator;
29
30
31public class TestTranslator {
32
33 private static Deobfuscator m_deobfuscator;
34 private static Mappings m_mappings;
35 private static Translator m_deobfTranslator;
36 private static Translator m_obfTranslator;
37
38 @BeforeClass
39 public static void beforeClass()
40 throws Exception {
41 //TODO FIx
42// m_deobfuscator = new Deobfuscator(new JarFile("build/test-obf/translation.jar"));
43// try (InputStream in = TestTranslator.class.getResourceAsStream("/cuchaz/enigma/resources/translation.mappings")) {
44// m_mappings = new MappingsReader().read(new InputStreamReader(in));
45// m_deobfuscator.setMappings(m_mappings);
46// m_deobfTranslator = m_deobfuscator.getTranslator(TranslationDirection.Deobfuscating);
47// m_obfTranslator = m_deobfuscator.getTranslator(TranslationDirection.Obfuscating);
48// }
49 }
50
51 @Test
52 public void basicClasses() {
53 assertMapping(newClass("none/a"), newClass("deobf/A_Basic"));
54 assertMapping(newClass("none/b"), newClass("deobf/B_BaseClass"));
55 assertMapping(newClass("none/c"), newClass("deobf/C_SubClass"));
56 }
57
58 @Test
59 public void basicFields() {
60 assertMapping(newField("none/a", "a", "I"), newField("deobf/A_Basic", "f1", "I"));
61 assertMapping(newField("none/a", "a", "F"), newField("deobf/A_Basic", "f2", "F"));
62 assertMapping(newField("none/a", "a", "Ljava/lang/String;"), newField("deobf/A_Basic", "f3", "Ljava/lang/String;"));
63 }
64
65 @Test
66 public void basicMethods() {
67 assertMapping(newMethod("none/a", "a", "()V"), newMethod("deobf/A_Basic", "m1", "()V"));
68 assertMapping(newMethod("none/a", "a", "()I"), newMethod("deobf/A_Basic", "m2", "()I"));
69 assertMapping(newMethod("none/a", "a", "(I)V"), newMethod("deobf/A_Basic", "m3", "(I)V"));
70 assertMapping(newMethod("none/a", "a", "(I)I"), newMethod("deobf/A_Basic", "m4", "(I)I"));
71 }
72
73 // TODO: basic constructors
74
75 @Test
76 public void inheritanceFields() {
77 assertMapping(newField("none/b", "a", "I"), newField("deobf/B_BaseClass", "f1", "I"));
78 assertMapping(newField("none/b", "a", "C"), newField("deobf/B_BaseClass", "f2", "C"));
79 assertMapping(newField("none/c", "b", "I"), newField("deobf/C_SubClass", "f3", "I"));
80 assertMapping(newField("none/c", "c", "I"), newField("deobf/C_SubClass", "f4", "I"));
81 }
82
83 @Test
84 public void inheritanceFieldsShadowing() {
85 assertMapping(newField("none/c", "b", "C"), newField("deobf/C_SubClass", "f2", "C"));
86 }
87
88 @Test
89 public void inheritanceFieldsBySubClass() {
90 assertMapping(newField("none/c", "a", "I"), newField("deobf/C_SubClass", "f1", "I"));
91 // NOTE: can't reference b.C by subclass since it's shadowed
92 }
93
94 @Test
95 public void inheritanceMethods() {
96 assertMapping(newMethod("none/b", "a", "()I"), newMethod("deobf/B_BaseClass", "m1", "()I"));
97 assertMapping(newMethod("none/b", "b", "()I"), newMethod("deobf/B_BaseClass", "m2", "()I"));
98 assertMapping(newMethod("none/c", "c", "()I"), newMethod("deobf/C_SubClass", "m3", "()I"));
99 }
100
101 @Test
102 public void inheritanceMethodsOverrides() {
103 assertMapping(newMethod("none/c", "a", "()I"), newMethod("deobf/C_SubClass", "m1", "()I"));
104 }
105
106 @Test
107 public void inheritanceMethodsBySubClass() {
108 assertMapping(newMethod("none/c", "b", "()I"), newMethod("deobf/C_SubClass", "m2", "()I"));
109 }
110
111 @Test
112 public void innerClasses() {
113
114 // classes
115 assertMapping(newClass("none/g"), newClass("deobf/G_OuterClass"));
116 assertMapping(newClass("none/g$a"), newClass("deobf/G_OuterClass$A_InnerClass"));
117 assertMapping(newClass("none/g$a$a"), newClass("deobf/G_OuterClass$A_InnerClass$A_InnerInnerClass"));
118 assertMapping(newClass("none/g$b"), newClass("deobf/G_OuterClass$b"));
119 assertMapping(newClass("none/g$b$a"), newClass("deobf/G_OuterClass$b$A_NamedInnerClass"));
120
121 // fields
122 assertMapping(newField("none/g$a", "a", "I"), newField("deobf/G_OuterClass$A_InnerClass", "f1", "I"));
123 assertMapping(newField("none/g$a", "a", "Ljava/lang/String;"), newField("deobf/G_OuterClass$A_InnerClass", "f2", "Ljava/lang/String;"));
124 assertMapping(newField("none/g$a$a", "a", "I"), newField("deobf/G_OuterClass$A_InnerClass$A_InnerInnerClass", "f3", "I"));
125 assertMapping(newField("none/g$b$a", "a", "I"), newField("deobf/G_OuterClass$b$A_NamedInnerClass", "f4", "I"));
126
127 // methods
128 assertMapping(newMethod("none/g$a", "a", "()V"), newMethod("deobf/G_OuterClass$A_InnerClass", "m1", "()V"));
129 assertMapping(newMethod("none/g$a$a", "a", "()V"), newMethod("deobf/G_OuterClass$A_InnerClass$A_InnerInnerClass", "m2", "()V"));
130 }
131
132 @Test
133 public void namelessClass() {
134 assertMapping(newClass("none/h"), newClass("none/h"));
135 }
136
137 @Test
138 public void testGenerics() {
139
140 // classes
141 assertMapping(newClass("none/i"), newClass("deobf/I_Generics"));
142 assertMapping(newClass("none/i$a"), newClass("deobf/I_Generics$A_Type"));
143 assertMapping(newClass("none/i$b"), newClass("deobf/I_Generics$B_Generic"));
144
145 // fields
146 assertMapping(newField("none/i", "a", "Ljava/util/List;"), newField("deobf/I_Generics", "f1", "Ljava/util/List;"));
147 assertMapping(newField("none/i", "b", "Ljava/util/List;"), newField("deobf/I_Generics", "f2", "Ljava/util/List;"));
148 assertMapping(newField("none/i", "a", "Ljava/util/Map;"), newField("deobf/I_Generics", "f3", "Ljava/util/Map;"));
149 assertMapping(newField("none/i$b", "a", "Ljava/lang/Object;"), newField("deobf/I_Generics$B_Generic", "f4", "Ljava/lang/Object;"));
150 assertMapping(newField("none/i", "a", "Lnone/i$b;"), newField("deobf/I_Generics", "f5", "Ldeobf/I_Generics$B_Generic;"));
151 assertMapping(newField("none/i", "b", "Lnone/i$b;"), newField("deobf/I_Generics", "f6", "Ldeobf/I_Generics$B_Generic;"));
152
153 // methods
154 assertMapping(newMethod("none/i$b", "a", "()Ljava/lang/Object;"), newMethod("deobf/I_Generics$B_Generic", "m1", "()Ljava/lang/Object;"));
155 }
156
157 private void assertMapping(Entry obf, Entry deobf) {
158 assertThat(m_deobfTranslator.translateEntry(obf), is(deobf));
159 assertThat(m_obfTranslator.translateEntry(deobf), is(obf));
160
161 String deobfName = m_deobfTranslator.translate(obf);
162 if (deobfName != null) {
163 assertThat(deobfName, is(deobf.getName()));
164 }
165
166 String obfName = m_obfTranslator.translate(deobf);
167 if (obfName != null) {
168 assertThat(obfName, is(obf.getName()));
169 }
170 }
171}