diff options
| author | 2015-02-23 23:29:22 -0500 | |
|---|---|---|
| committer | 2015-02-23 23:29:22 -0500 | |
| commit | 2dc7428e37bdd7a119f53d02ce157675509b0d63 (patch) | |
| tree | 68f409ac726166e427eea3a199eb462130c53ccd /test/cuchaz/enigma/TestInnerClasses.java | |
| parent | make types serializable (diff) | |
| download | enigma-fork-2dc7428e37bdd7a119f53d02ce157675509b0d63.tar.gz enigma-fork-2dc7428e37bdd7a119f53d02ce157675509b0d63.tar.xz enigma-fork-2dc7428e37bdd7a119f53d02ce157675509b0d63.zip | |
lots of work in better handling of inner classes
also working on recognizing unobfuscated and deobfuscated jars
(needed for M3L)
Diffstat (limited to '')
| -rw-r--r-- | test/cuchaz/enigma/TestInnerClasses.java | 67 |
1 files changed, 55 insertions, 12 deletions
diff --git a/test/cuchaz/enigma/TestInnerClasses.java b/test/cuchaz/enigma/TestInnerClasses.java index 2e16a33..2eb5acc 100644 --- a/test/cuchaz/enigma/TestInnerClasses.java +++ b/test/cuchaz/enigma/TestInnerClasses.java | |||
| @@ -18,23 +18,30 @@ import java.util.jar.JarFile; | |||
| 18 | 18 | ||
| 19 | import org.junit.Test; | 19 | import org.junit.Test; |
| 20 | 20 | ||
| 21 | import static cuchaz.enigma.TestEntryFactory.*; | ||
| 22 | |||
| 21 | import cuchaz.enigma.analysis.JarIndex; | 23 | import cuchaz.enigma.analysis.JarIndex; |
| 24 | import cuchaz.enigma.mapping.ClassEntry; | ||
| 22 | 25 | ||
| 23 | public class TestInnerClasses { | 26 | public 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 | } |