summaryrefslogtreecommitdiff
path: root/test/cuchaz/enigma/TestTranslator.java
diff options
context:
space:
mode:
Diffstat (limited to 'test/cuchaz/enigma/TestTranslator.java')
-rw-r--r--test/cuchaz/enigma/TestTranslator.java86
1 files changed, 74 insertions, 12 deletions
diff --git a/test/cuchaz/enigma/TestTranslator.java b/test/cuchaz/enigma/TestTranslator.java
index f91c585..3fe1680 100644
--- a/test/cuchaz/enigma/TestTranslator.java
+++ b/test/cuchaz/enigma/TestTranslator.java
@@ -1,6 +1,6 @@
1package cuchaz.enigma; 1package cuchaz.enigma;
2 2
3import static cuchaz.enigma.EntryFactory.*; 3import static cuchaz.enigma.TestEntryFactory.*;
4import static org.hamcrest.MatcherAssert.*; 4import static org.hamcrest.MatcherAssert.*;
5import static org.hamcrest.Matchers.*; 5import static org.hamcrest.Matchers.*;
6 6
@@ -8,8 +8,10 @@ import java.io.InputStream;
8import java.io.InputStreamReader; 8import java.io.InputStreamReader;
9import java.util.jar.JarFile; 9import java.util.jar.JarFile;
10 10
11import org.junit.BeforeClass;
11import org.junit.Test; 12import org.junit.Test;
12 13
14import cuchaz.enigma.mapping.Entry;
13import cuchaz.enigma.mapping.Mappings; 15import cuchaz.enigma.mapping.Mappings;
14import cuchaz.enigma.mapping.MappingsReader; 16import cuchaz.enigma.mapping.MappingsReader;
15import cuchaz.enigma.mapping.TranslationDirection; 17import cuchaz.enigma.mapping.TranslationDirection;
@@ -18,25 +20,85 @@ import cuchaz.enigma.mapping.Translator;
18 20
19public class TestTranslator { 21public class TestTranslator {
20 22
21 private Deobfuscator m_deobfuscator; 23 private static Deobfuscator m_deobfuscator;
22 private Mappings m_mappings; 24 private static Mappings m_mappings;
25 private static Translator m_deobfTranslator;
26 private static Translator m_obfTranslator;
23 27
24 public TestTranslator() 28 @BeforeClass
29 public static void beforeClass()
25 throws Exception { 30 throws Exception {
26 m_deobfuscator = new Deobfuscator(new JarFile("build/testTranslation.obf.jar")); 31 m_deobfuscator = new Deobfuscator(new JarFile("build/testTranslation.obf.jar"));
27 try (InputStream in = getClass().getResourceAsStream("/cuchaz/enigma/resources/translation.mappings")) { 32 try (InputStream in = TestTranslator.class.getResourceAsStream("/cuchaz/enigma/resources/translation.mappings")) {
28 m_mappings = new MappingsReader().read(new InputStreamReader(in)); 33 m_mappings = new MappingsReader().read(new InputStreamReader(in));
29 m_deobfuscator.setMappings(m_mappings); 34 m_deobfuscator.setMappings(m_mappings);
35 m_deobfTranslator = m_deobfuscator.getTranslator(TranslationDirection.Deobfuscating);
36 m_obfTranslator = m_deobfuscator.getTranslator(TranslationDirection.Obfuscating);
30 } 37 }
31 } 38 }
32 39
33 @Test 40 @Test
34 public void deobfuscatingTranslations() 41 public void basicClasses() {
35 throws Exception { 42 assertMapping(newClass("none/a"), newClass("deobf/A_Basic"));
36 Translator translator = m_deobfuscator.getTranslator(TranslationDirection.Deobfuscating); 43 assertMapping(newClass("none/b"), newClass("deobf/B_BaseClass"));
37 assertThat(translator.translateEntry(newClass("none/a")), is(newClass("deobf/A"))); 44 assertMapping(newClass("none/c"), newClass("deobf/C_SubClass"));
38 assertThat(translator.translateEntry(newField("none/a", "a", "I")), is(newField("deobf/A", "one", "I"))); 45 }
39 assertThat(translator.translateEntry(newField("none/a", "a", "F")), is(newField("deobf/A", "two", "F"))); 46
40 assertThat(translator.translateEntry(newField("none/a", "a", "Ljava/lang/String;")), is(newField("deobf/A", "three", "Ljava/lang/String;"))); 47 @Test
48 public void basicFields() {
49 assertMapping(newField("none/a", "a", "I"), newField("deobf/A_Basic", "f1", "I"));
50 assertMapping(newField("none/a", "a", "F"), newField("deobf/A_Basic", "f2", "F"));
51 assertMapping(newField("none/a", "a", "Ljava/lang/String;"), newField("deobf/A_Basic", "f3", "Ljava/lang/String;"));
52 }
53
54 @Test
55 public void basicMethods() {
56 assertMapping(newMethod("none/a", "a", "()V"), newMethod("deobf/A_Basic", "m1", "()V"));
57 assertMapping(newMethod("none/a", "a", "()I"), newMethod("deobf/A_Basic", "m2", "()I"));
58 assertMapping(newMethod("none/a", "a", "(I)V"), newMethod("deobf/A_Basic", "m3", "(I)V"));
59 assertMapping(newMethod("none/a", "a", "(I)I"), newMethod("deobf/A_Basic", "m4", "(I)I"));
60 }
61
62 // TODO: basic constructors
63
64 @Test
65 public void inheritanceFields() {
66 assertMapping(newField("none/b", "a", "I"), newField("deobf/B_BaseClass", "f1", "I"));
67 assertMapping(newField("none/b", "a", "C"), newField("deobf/B_BaseClass", "f2", "C"));
68 assertMapping(newField("none/c", "b", "I"), newField("deobf/C_SubClass", "f3", "I"));
69 assertMapping(newField("none/c", "c", "I"), newField("deobf/C_SubClass", "f4", "I"));
70 }
71
72 @Test
73 public void inheritanceFieldsShadowing() {
74 assertMapping(newField("none/c", "b", "C"), newField("deobf/C_SubClass", "f2", "C"));
75 }
76
77 @Test
78 public void inheritanceFieldsBySubClass() {
79 assertMapping(newField("none/c", "a", "I"), newField("deobf/C_SubClass", "f1", "I"));
80 // NOTE: can't reference b.C by subclass since it's shadowed
81 }
82
83 @Test
84 public void inheritanceMethods() {
85 assertMapping(newMethod("none/b", "a", "()I"), newMethod("deobf/B_BaseClass", "m1", "()I"));
86 assertMapping(newMethod("none/b", "b", "()I"), newMethod("deobf/B_BaseClass", "m2", "()I"));
87 assertMapping(newMethod("none/c", "c", "()I"), newMethod("deobf/C_SubClass", "m3", "()I"));
88 }
89
90 @Test
91 public void inheritanceMethodsOverrides() {
92 assertMapping(newMethod("none/c", "a", "()I"), newMethod("deobf/C_SubClass", "m1", "()I"));
93 }
94
95 @Test
96 public void inheritanceMethodsBySubClass() {
97 assertMapping(newMethod("none/c", "b", "()I"), newMethod("deobf/C_SubClass", "m2", "()I"));
98 }
99
100 private void assertMapping(Entry obf, Entry deobf) {
101 assertThat(m_deobfTranslator.translateEntry(obf), is(deobf));
102 assertThat(m_obfTranslator.translateEntry(deobf), is(obf));
41 } 103 }
42} 104}