summaryrefslogtreecommitdiff
path: root/test/cuchaz/enigma/TestInnerClasses.java
diff options
context:
space:
mode:
authorGravatar Michael Smith2015-05-21 23:30:00 +0100
committerGravatar Michael Smith2015-05-21 23:30:00 +0100
commite3f452250e51b7271f3989c7dfd12e4422934942 (patch)
tree5aa482f9a6e21eb318a3e23e7d8274d77c73faf6 /test/cuchaz/enigma/TestInnerClasses.java
downloadenigma-fork-e3f452250e51b7271f3989c7dfd12e4422934942.tar.gz
enigma-fork-e3f452250e51b7271f3989c7dfd12e4422934942.tar.xz
enigma-fork-e3f452250e51b7271f3989c7dfd12e4422934942.zip
Support Gradle alongside SSJB
This makes builds faster, simpler and better automated but still keeps Cuchaz happy. :)
Diffstat (limited to 'test/cuchaz/enigma/TestInnerClasses.java')
-rw-r--r--test/cuchaz/enigma/TestInnerClasses.java132
1 files changed, 132 insertions, 0 deletions
diff --git a/test/cuchaz/enigma/TestInnerClasses.java b/test/cuchaz/enigma/TestInnerClasses.java
new file mode 100644
index 0000000..a4f9021
--- /dev/null
+++ b/test/cuchaz/enigma/TestInnerClasses.java
@@ -0,0 +1,132 @@
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 org.hamcrest.MatcherAssert.*;
14import static org.hamcrest.Matchers.*;
15
16import java.util.jar.JarFile;
17
18import org.junit.Test;
19
20import static cuchaz.enigma.TestEntryFactory.*;
21
22import cuchaz.enigma.analysis.JarIndex;
23import cuchaz.enigma.mapping.ClassEntry;
24
25public class TestInnerClasses {
26
27 private JarIndex m_index;
28 private Deobfuscator m_deobfuscator;
29
30 private static final ClassEntry AnonymousOuter = newClass("none/a");
31 private static final ClassEntry AnonymousInner = newClass("none/a$1");
32 private static final ClassEntry SimpleOuter = newClass("none/d");
33 private static final ClassEntry SimpleInner = newClass("none/d$a");
34 private static final ClassEntry ConstructorArgsOuter = newClass("none/c");
35 private static final ClassEntry ConstructorArgsInner = newClass("none/c$a");
36 private static final ClassEntry AnonymousWithScopeArgsOuter = newClass("none/b");
37 private static final ClassEntry AnonymousWithScopeArgsInner = newClass("none/b$1");
38 private static final ClassEntry AnonymousWithOuterAccessOuter = newClass("none/e");
39 private static final ClassEntry AnonymousWithOuterAccessInner = newClass("none/e$1");
40 private static final ClassEntry ClassTreeRoot = newClass("none/f");
41 private static final ClassEntry ClassTreeLevel1 = newClass("none/f$a");
42 private static final ClassEntry ClassTreeLevel2 = newClass("none/f$a$a");
43 private static final ClassEntry ClassTreeLevel3 = newClass("none/f$a$a$a");
44
45 public TestInnerClasses()
46 throws Exception {
47 m_index = new JarIndex();
48 JarFile jar = new JarFile("build/test-obf/innerClasses.jar");
49 m_index.indexJar(jar, true);
50 m_deobfuscator = new Deobfuscator(jar);
51 }
52
53 @Test
54 public void simple() {
55 assertThat(m_index.getOuterClass(SimpleInner), is(SimpleOuter));
56 assertThat(m_index.getInnerClasses(SimpleOuter), containsInAnyOrder(SimpleInner));
57 assertThat(m_index.isAnonymousClass(SimpleInner), is(false));
58 decompile(SimpleOuter);
59 }
60
61 @Test
62 public void anonymous() {
63 assertThat(m_index.getOuterClass(AnonymousInner), is(AnonymousOuter));
64 assertThat(m_index.getInnerClasses(AnonymousOuter), containsInAnyOrder(AnonymousInner));
65 assertThat(m_index.isAnonymousClass(AnonymousInner), is(true));
66 decompile(AnonymousOuter);
67 }
68
69 @Test
70 public void constructorArgs() {
71 assertThat(m_index.getOuterClass(ConstructorArgsInner), is(ConstructorArgsOuter));
72 assertThat(m_index.getInnerClasses(ConstructorArgsOuter), containsInAnyOrder(ConstructorArgsInner));
73 assertThat(m_index.isAnonymousClass(ConstructorArgsInner), is(false));
74 decompile(ConstructorArgsOuter);
75 }
76
77 @Test
78 public void anonymousWithScopeArgs() {
79 assertThat(m_index.getOuterClass(AnonymousWithScopeArgsInner), is(AnonymousWithScopeArgsOuter));
80 assertThat(m_index.getInnerClasses(AnonymousWithScopeArgsOuter), containsInAnyOrder(AnonymousWithScopeArgsInner));
81 assertThat(m_index.isAnonymousClass(AnonymousWithScopeArgsInner), is(true));
82 decompile(AnonymousWithScopeArgsOuter);
83 }
84
85 @Test
86 public void anonymousWithOuterAccess() {
87 assertThat(m_index.getOuterClass(AnonymousWithOuterAccessInner), is(AnonymousWithOuterAccessOuter));
88 assertThat(m_index.getInnerClasses(AnonymousWithOuterAccessOuter), containsInAnyOrder(AnonymousWithOuterAccessInner));
89 assertThat(m_index.isAnonymousClass(AnonymousWithOuterAccessInner), is(true));
90 decompile(AnonymousWithOuterAccessOuter);
91 }
92
93 @Test
94 public void classTree() {
95
96 // root level
97 assertThat(m_index.containsObfClass(ClassTreeRoot), is(true));
98 assertThat(m_index.getOuterClass(ClassTreeRoot), is(nullValue()));
99 assertThat(m_index.getInnerClasses(ClassTreeRoot), containsInAnyOrder(ClassTreeLevel1));
100
101 // level 1
102 ClassEntry fullClassEntry = new ClassEntry(ClassTreeRoot.getName()
103 + "$" + ClassTreeLevel1.getInnermostClassName()
104 );
105 assertThat(m_index.containsObfClass(fullClassEntry), is(true));
106 assertThat(m_index.getOuterClass(ClassTreeLevel1), is(ClassTreeRoot));
107 assertThat(m_index.getInnerClasses(ClassTreeLevel1), containsInAnyOrder(ClassTreeLevel2));
108
109 // level 2
110 fullClassEntry = new ClassEntry(ClassTreeRoot.getName()
111 + "$" + ClassTreeLevel1.getInnermostClassName()
112 + "$" + ClassTreeLevel2.getInnermostClassName()
113 );
114 assertThat(m_index.containsObfClass(fullClassEntry), is(true));
115 assertThat(m_index.getOuterClass(ClassTreeLevel2), is(ClassTreeLevel1));
116 assertThat(m_index.getInnerClasses(ClassTreeLevel2), containsInAnyOrder(ClassTreeLevel3));
117
118 // level 3
119 fullClassEntry = new ClassEntry(ClassTreeRoot.getName()
120 + "$" + ClassTreeLevel1.getInnermostClassName()
121 + "$" + ClassTreeLevel2.getInnermostClassName()
122 + "$" + ClassTreeLevel3.getInnermostClassName()
123 );
124 assertThat(m_index.containsObfClass(fullClassEntry), is(true));
125 assertThat(m_index.getOuterClass(ClassTreeLevel3), is(ClassTreeLevel2));
126 assertThat(m_index.getInnerClasses(ClassTreeLevel3), is(empty()));
127 }
128
129 private void decompile(ClassEntry classEntry) {
130 m_deobfuscator.getSourceTree(classEntry.getName());
131 }
132}