diff options
Diffstat (limited to 'test/cuchaz/enigma/TestTranslator.java')
| -rw-r--r-- | test/cuchaz/enigma/TestTranslator.java | 86 |
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 @@ | |||
| 1 | package cuchaz.enigma; | 1 | package cuchaz.enigma; |
| 2 | 2 | ||
| 3 | import static cuchaz.enigma.EntryFactory.*; | 3 | import static cuchaz.enigma.TestEntryFactory.*; |
| 4 | import static org.hamcrest.MatcherAssert.*; | 4 | import static org.hamcrest.MatcherAssert.*; |
| 5 | import static org.hamcrest.Matchers.*; | 5 | import static org.hamcrest.Matchers.*; |
| 6 | 6 | ||
| @@ -8,8 +8,10 @@ import java.io.InputStream; | |||
| 8 | import java.io.InputStreamReader; | 8 | import java.io.InputStreamReader; |
| 9 | import java.util.jar.JarFile; | 9 | import java.util.jar.JarFile; |
| 10 | 10 | ||
| 11 | import org.junit.BeforeClass; | ||
| 11 | import org.junit.Test; | 12 | import org.junit.Test; |
| 12 | 13 | ||
| 14 | import cuchaz.enigma.mapping.Entry; | ||
| 13 | import cuchaz.enigma.mapping.Mappings; | 15 | import cuchaz.enigma.mapping.Mappings; |
| 14 | import cuchaz.enigma.mapping.MappingsReader; | 16 | import cuchaz.enigma.mapping.MappingsReader; |
| 15 | import cuchaz.enigma.mapping.TranslationDirection; | 17 | import cuchaz.enigma.mapping.TranslationDirection; |
| @@ -18,25 +20,85 @@ import cuchaz.enigma.mapping.Translator; | |||
| 18 | 20 | ||
| 19 | public class TestTranslator { | 21 | public 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 | } |