diff options
Diffstat (limited to 'test/cuchaz/enigma/TestJarIndexInheritanceTree.java')
| -rw-r--r-- | test/cuchaz/enigma/TestJarIndexInheritanceTree.java | 254 |
1 files changed, 122 insertions, 132 deletions
diff --git a/test/cuchaz/enigma/TestJarIndexInheritanceTree.java b/test/cuchaz/enigma/TestJarIndexInheritanceTree.java index 50c2282..caf6578 100644 --- a/test/cuchaz/enigma/TestJarIndexInheritanceTree.java +++ b/test/cuchaz/enigma/TestJarIndexInheritanceTree.java | |||
| @@ -30,209 +30,199 @@ import cuchaz.enigma.mapping.ConstructorEntry; | |||
| 30 | import cuchaz.enigma.mapping.FieldEntry; | 30 | import cuchaz.enigma.mapping.FieldEntry; |
| 31 | import cuchaz.enigma.mapping.MethodEntry; | 31 | import cuchaz.enigma.mapping.MethodEntry; |
| 32 | 32 | ||
| 33 | public class TestJarIndexInheritanceTree | 33 | public class TestJarIndexInheritanceTree { |
| 34 | { | 34 | |
| 35 | private JarIndex m_index; | 35 | private JarIndex m_index; |
| 36 | 36 | ||
| 37 | private ClassEntry m_baseClass = new ClassEntry( "none/a" ); | 37 | private ClassEntry m_baseClass = new ClassEntry("none/a"); |
| 38 | private ClassEntry m_subClassA = new ClassEntry( "none/b" ); | 38 | private ClassEntry m_subClassA = new ClassEntry("none/b"); |
| 39 | private ClassEntry m_subClassAA = new ClassEntry( "none/d" ); | 39 | private ClassEntry m_subClassAA = new ClassEntry("none/d"); |
| 40 | private ClassEntry m_subClassB = new ClassEntry( "none/c" ); | 40 | private ClassEntry m_subClassB = new ClassEntry("none/c"); |
| 41 | private FieldEntry m_nameField = new FieldEntry( m_baseClass, "a" ); | 41 | private FieldEntry m_nameField = new FieldEntry(m_baseClass, "a"); |
| 42 | private FieldEntry m_numThingsField = new FieldEntry( m_subClassB, "a" ); | 42 | private FieldEntry m_numThingsField = new FieldEntry(m_subClassB, "a"); |
| 43 | 43 | ||
| 44 | public TestJarIndexInheritanceTree( ) | 44 | public TestJarIndexInheritanceTree() throws Exception { |
| 45 | throws Exception | ||
| 46 | { | ||
| 47 | m_index = new JarIndex(); | 45 | m_index = new JarIndex(); |
| 48 | m_index.indexJar( new JarFile( "build/libs/testInheritanceTree.obf.jar" ), false ); | 46 | m_index.indexJar(new JarFile("build/libs/testInheritanceTree.obf.jar"), false); |
| 49 | } | 47 | } |
| 50 | 48 | ||
| 51 | @Test | 49 | @Test |
| 52 | public void obfEntries( ) | 50 | public void obfEntries() { |
| 53 | { | 51 | assertThat(m_index.getObfClassEntries(), containsInAnyOrder( |
| 54 | assertThat( m_index.getObfClassEntries(), containsInAnyOrder( | 52 | newClass("cuchaz/enigma/inputs/Keep"), |
| 55 | newClass( "cuchaz/enigma/inputs/Keep" ), | ||
| 56 | m_baseClass, | 53 | m_baseClass, |
| 57 | m_subClassA, | 54 | m_subClassA, |
| 58 | m_subClassAA, | 55 | m_subClassAA, |
| 59 | m_subClassB | 56 | m_subClassB |
| 60 | ) ); | 57 | )); |
| 61 | } | 58 | } |
| 62 | 59 | ||
| 63 | @Test | 60 | @Test |
| 64 | public void translationIndex( ) | 61 | public void translationIndex() { |
| 65 | { | 62 | |
| 66 | TranslationIndex index = m_index.getTranslationIndex(); | 63 | TranslationIndex index = m_index.getTranslationIndex(); |
| 67 | 64 | ||
| 68 | // base class | 65 | // base class |
| 69 | assertThat( index.getSuperclassName( m_baseClass.getName() ), is( nullValue() ) ); | 66 | assertThat(index.getSuperclassName(m_baseClass.getName()), is(nullValue())); |
| 70 | assertThat( index.getAncestry( m_baseClass.getName() ), is( empty() ) ); | 67 | assertThat(index.getAncestry(m_baseClass.getName()), is(empty())); |
| 71 | assertThat( index.getSubclassNames( m_baseClass.getName() ), containsInAnyOrder( | 68 | assertThat(index.getSubclassNames(m_baseClass.getName()), containsInAnyOrder( |
| 72 | m_subClassA.getName(), | 69 | m_subClassA.getName(), |
| 73 | m_subClassB.getName() | 70 | m_subClassB.getName() |
| 74 | ) ); | 71 | )); |
| 75 | 72 | ||
| 76 | // subclass a | 73 | // subclass a |
| 77 | assertThat( index.getSuperclassName( m_subClassA.getName() ), is( m_baseClass.getName() ) ); | 74 | assertThat(index.getSuperclassName(m_subClassA.getName()), is(m_baseClass.getName())); |
| 78 | assertThat( index.getAncestry( m_subClassA.getName() ), contains( m_baseClass.getName() ) ); | 75 | assertThat(index.getAncestry(m_subClassA.getName()), contains(m_baseClass.getName())); |
| 79 | assertThat( index.getSubclassNames( m_subClassA.getName() ), contains( m_subClassAA.getName() ) ); | 76 | assertThat(index.getSubclassNames(m_subClassA.getName()), contains(m_subClassAA.getName())); |
| 80 | 77 | ||
| 81 | // subclass aa | 78 | // subclass aa |
| 82 | assertThat( index.getSuperclassName( m_subClassAA.getName() ), is( m_subClassA.getName() ) ); | 79 | assertThat(index.getSuperclassName(m_subClassAA.getName()), is(m_subClassA.getName())); |
| 83 | assertThat( index.getAncestry( m_subClassAA.getName() ), contains( | 80 | assertThat(index.getAncestry(m_subClassAA.getName()), contains(m_subClassA.getName(), m_baseClass.getName())); |
| 84 | m_subClassA.getName(), | 81 | assertThat(index.getSubclassNames(m_subClassAA.getName()), is(empty())); |
| 85 | m_baseClass.getName() | ||
| 86 | ) ); | ||
| 87 | assertThat( index.getSubclassNames( m_subClassAA.getName() ), is( empty() ) ); | ||
| 88 | 82 | ||
| 89 | // subclass b | 83 | // subclass b |
| 90 | assertThat( index.getSuperclassName( m_subClassB.getName() ), is( m_baseClass.getName() ) ); | 84 | assertThat(index.getSuperclassName(m_subClassB.getName()), is(m_baseClass.getName())); |
| 91 | assertThat( index.getAncestry( m_subClassB.getName() ), contains( m_baseClass.getName() ) ); | 85 | assertThat(index.getAncestry(m_subClassB.getName()), contains(m_baseClass.getName())); |
| 92 | assertThat( index.getSubclassNames( m_subClassB.getName() ), is( empty() ) ); | 86 | assertThat(index.getSubclassNames(m_subClassB.getName()), is(empty())); |
| 93 | } | 87 | } |
| 94 | 88 | ||
| 95 | @Test | 89 | @Test |
| 96 | public void access( ) | 90 | public void access() { |
| 97 | { | 91 | assertThat(m_index.getAccess(m_nameField), is(Access.Private)); |
| 98 | assertThat( m_index.getAccess( m_nameField ), is( Access.Private ) ); | 92 | assertThat(m_index.getAccess(m_numThingsField), is(Access.Private)); |
| 99 | assertThat( m_index.getAccess( m_numThingsField ), is( Access.Private ) ); | ||
| 100 | } | 93 | } |
| 101 | 94 | ||
| 102 | @Test | 95 | @Test |
| 103 | public void relatedMethodImplementations( ) | 96 | public void relatedMethodImplementations() { |
| 104 | { | 97 | |
| 105 | Set<MethodEntry> entries; | 98 | Set<MethodEntry> entries; |
| 106 | 99 | ||
| 107 | // getName() | 100 | // getName() |
| 108 | entries = m_index.getRelatedMethodImplementations( new MethodEntry( m_baseClass, "a", "()Ljava/lang/String;" ) ); | 101 | entries = m_index.getRelatedMethodImplementations(new MethodEntry(m_baseClass, "a", "()Ljava/lang/String;")); |
| 109 | assertThat( entries, containsInAnyOrder( | 102 | assertThat(entries, containsInAnyOrder( |
| 110 | new MethodEntry( m_baseClass, "a", "()Ljava/lang/String;" ), | 103 | new MethodEntry(m_baseClass, "a", "()Ljava/lang/String;"), |
| 111 | new MethodEntry( m_subClassAA, "a", "()Ljava/lang/String;" ) | 104 | new MethodEntry(m_subClassAA, "a", "()Ljava/lang/String;") |
| 112 | ) ); | 105 | )); |
| 113 | entries = m_index.getRelatedMethodImplementations( new MethodEntry( m_subClassAA, "a", "()Ljava/lang/String;" ) ); | 106 | entries = m_index.getRelatedMethodImplementations(new MethodEntry(m_subClassAA, "a", "()Ljava/lang/String;")); |
| 114 | assertThat( entries, containsInAnyOrder( | 107 | assertThat(entries, containsInAnyOrder( |
| 115 | new MethodEntry( m_baseClass, "a", "()Ljava/lang/String;" ), | 108 | new MethodEntry(m_baseClass, "a", "()Ljava/lang/String;"), |
| 116 | new MethodEntry( m_subClassAA, "a", "()Ljava/lang/String;" ) | 109 | new MethodEntry(m_subClassAA, "a", "()Ljava/lang/String;") |
| 117 | ) ); | 110 | )); |
| 118 | 111 | ||
| 119 | // doBaseThings() | 112 | // doBaseThings() |
| 120 | entries = m_index.getRelatedMethodImplementations( new MethodEntry( m_baseClass, "a", "()V" ) ); | 113 | entries = m_index.getRelatedMethodImplementations(new MethodEntry(m_baseClass, "a", "()V")); |
| 121 | assertThat( entries, containsInAnyOrder( | 114 | assertThat(entries, containsInAnyOrder( |
| 122 | new MethodEntry( m_baseClass, "a", "()V" ), | 115 | new MethodEntry(m_baseClass, "a", "()V"), |
| 123 | new MethodEntry( m_subClassAA, "a", "()V" ), | 116 | new MethodEntry(m_subClassAA, "a", "()V"), |
| 124 | new MethodEntry( m_subClassB, "a", "()V" ) | 117 | new MethodEntry(m_subClassB, "a", "()V") |
| 125 | ) ); | 118 | )); |
| 126 | entries = m_index.getRelatedMethodImplementations( new MethodEntry( m_subClassAA, "a", "()V" ) ); | 119 | entries = m_index.getRelatedMethodImplementations(new MethodEntry(m_subClassAA, "a", "()V")); |
| 127 | assertThat( entries, containsInAnyOrder( | 120 | assertThat(entries, containsInAnyOrder( |
| 128 | new MethodEntry( m_baseClass, "a", "()V" ), | 121 | new MethodEntry(m_baseClass, "a", "()V"), |
| 129 | new MethodEntry( m_subClassAA, "a", "()V" ), | 122 | new MethodEntry(m_subClassAA, "a", "()V"), |
| 130 | new MethodEntry( m_subClassB, "a", "()V" ) | 123 | new MethodEntry(m_subClassB, "a", "()V") |
| 131 | ) ); | 124 | )); |
| 132 | entries = m_index.getRelatedMethodImplementations( new MethodEntry( m_subClassB, "a", "()V" ) ); | 125 | entries = m_index.getRelatedMethodImplementations(new MethodEntry(m_subClassB, "a", "()V")); |
| 133 | assertThat( entries, containsInAnyOrder( | 126 | assertThat(entries, containsInAnyOrder( |
| 134 | new MethodEntry( m_baseClass, "a", "()V" ), | 127 | new MethodEntry(m_baseClass, "a", "()V"), |
| 135 | new MethodEntry( m_subClassAA, "a", "()V" ), | 128 | new MethodEntry(m_subClassAA, "a", "()V"), |
| 136 | new MethodEntry( m_subClassB, "a", "()V" ) | 129 | new MethodEntry(m_subClassB, "a", "()V") |
| 137 | ) ); | 130 | )); |
| 138 | 131 | ||
| 139 | // doBThings | 132 | // doBThings |
| 140 | entries = m_index.getRelatedMethodImplementations( new MethodEntry( m_subClassB, "b", "()V" ) ); | 133 | entries = m_index.getRelatedMethodImplementations(new MethodEntry(m_subClassB, "b", "()V")); |
| 141 | assertThat( entries, containsInAnyOrder( | 134 | assertThat(entries, containsInAnyOrder(new MethodEntry(m_subClassB, "b", "()V"))); |
| 142 | new MethodEntry( m_subClassB, "b", "()V" ) | ||
| 143 | ) ); | ||
| 144 | } | 135 | } |
| 145 | 136 | ||
| 146 | @Test | 137 | @Test |
| 147 | @SuppressWarnings( "unchecked" ) | 138 | @SuppressWarnings("unchecked") |
| 148 | public void fieldReferences( ) | 139 | public void fieldReferences() { |
| 149 | { | ||
| 150 | Collection<EntryReference<FieldEntry,BehaviorEntry>> references; | 140 | Collection<EntryReference<FieldEntry,BehaviorEntry>> references; |
| 151 | 141 | ||
| 152 | // name | 142 | // name |
| 153 | references = m_index.getFieldReferences( m_nameField ); | 143 | references = m_index.getFieldReferences(m_nameField); |
| 154 | assertThat( references, containsInAnyOrder( | 144 | assertThat(references, containsInAnyOrder( |
| 155 | newFieldReferenceByConstructor( m_nameField, m_baseClass.getName(), "(Ljava/lang/String;)V" ), | 145 | newFieldReferenceByConstructor(m_nameField, m_baseClass.getName(), "(Ljava/lang/String;)V"), |
| 156 | newFieldReferenceByMethod( m_nameField, m_baseClass.getName(), "a", "()Ljava/lang/String;" ) | 146 | newFieldReferenceByMethod(m_nameField, m_baseClass.getName(), "a", "()Ljava/lang/String;") |
| 157 | ) ); | 147 | )); |
| 158 | 148 | ||
| 159 | // numThings | 149 | // numThings |
| 160 | references = m_index.getFieldReferences( m_numThingsField ); | 150 | references = m_index.getFieldReferences(m_numThingsField); |
| 161 | assertThat( references, containsInAnyOrder( | 151 | assertThat(references, containsInAnyOrder( |
| 162 | newFieldReferenceByConstructor( m_numThingsField, m_subClassB.getName(), "()V" ), | 152 | newFieldReferenceByConstructor(m_numThingsField, m_subClassB.getName(), "()V"), |
| 163 | newFieldReferenceByMethod( m_numThingsField, m_subClassB.getName(), "b", "()V" ) | 153 | newFieldReferenceByMethod(m_numThingsField, m_subClassB.getName(), "b", "()V") |
| 164 | ) ); | 154 | )); |
| 165 | } | 155 | } |
| 166 | 156 | ||
| 167 | @Test | 157 | @Test |
| 168 | @SuppressWarnings( "unchecked" ) | 158 | @SuppressWarnings("unchecked") |
| 169 | public void behaviorReferences( ) | 159 | public void behaviorReferences() { |
| 170 | { | 160 | |
| 171 | BehaviorEntry source; | 161 | BehaviorEntry source; |
| 172 | Collection<EntryReference<BehaviorEntry,BehaviorEntry>> references; | 162 | Collection<EntryReference<BehaviorEntry,BehaviorEntry>> references; |
| 173 | 163 | ||
| 174 | // baseClass constructor | 164 | // baseClass constructor |
| 175 | source = new ConstructorEntry( m_baseClass, "(Ljava/lang/String;)V" ); | 165 | source = new ConstructorEntry(m_baseClass, "(Ljava/lang/String;)V"); |
| 176 | references = m_index.getBehaviorReferences( source ); | 166 | references = m_index.getBehaviorReferences(source); |
| 177 | assertThat( references, containsInAnyOrder( | 167 | assertThat(references, containsInAnyOrder( |
| 178 | newBehaviorReferenceByConstructor( source, m_subClassA.getName(), "(Ljava/lang/String;)V" ), | 168 | newBehaviorReferenceByConstructor(source, m_subClassA.getName(), "(Ljava/lang/String;)V"), |
| 179 | newBehaviorReferenceByConstructor( source, m_subClassB.getName(), "()V" ) | 169 | newBehaviorReferenceByConstructor(source, m_subClassB.getName(), "()V") |
| 180 | ) ); | 170 | )); |
| 181 | 171 | ||
| 182 | // subClassA constructor | 172 | // subClassA constructor |
| 183 | source = new ConstructorEntry( m_subClassA, "(Ljava/lang/String;)V" ); | 173 | source = new ConstructorEntry(m_subClassA, "(Ljava/lang/String;)V"); |
| 184 | references = m_index.getBehaviorReferences( source ); | 174 | references = m_index.getBehaviorReferences(source); |
| 185 | assertThat( references, containsInAnyOrder( | 175 | assertThat(references, containsInAnyOrder( |
| 186 | newBehaviorReferenceByConstructor( source, m_subClassAA.getName(), "()V" ) | 176 | newBehaviorReferenceByConstructor(source, m_subClassAA.getName(), "()V") |
| 187 | ) ); | 177 | )); |
| 188 | 178 | ||
| 189 | // baseClass.getName() | 179 | // baseClass.getName() |
| 190 | source = new MethodEntry( m_baseClass, "a", "()Ljava/lang/String;" ); | 180 | source = new MethodEntry(m_baseClass, "a", "()Ljava/lang/String;"); |
| 191 | references = m_index.getBehaviorReferences( source ); | 181 | references = m_index.getBehaviorReferences(source); |
| 192 | assertThat( references, containsInAnyOrder( | 182 | assertThat(references, containsInAnyOrder( |
| 193 | newBehaviorReferenceByMethod( source, m_subClassAA.getName(), "a", "()Ljava/lang/String;" ), | 183 | newBehaviorReferenceByMethod(source, m_subClassAA.getName(), "a", "()Ljava/lang/String;"), |
| 194 | newBehaviorReferenceByMethod( source, m_subClassB.getName(), "a", "()V" ) | 184 | newBehaviorReferenceByMethod(source, m_subClassB.getName(), "a", "()V") |
| 195 | ) ); | 185 | )); |
| 196 | 186 | ||
| 197 | // subclassAA.getName() | 187 | // subclassAA.getName() |
| 198 | source = new MethodEntry( m_subClassAA, "a", "()Ljava/lang/String;" ); | 188 | source = new MethodEntry(m_subClassAA, "a", "()Ljava/lang/String;"); |
| 199 | references = m_index.getBehaviorReferences( source ); | 189 | references = m_index.getBehaviorReferences(source); |
| 200 | assertThat( references, containsInAnyOrder( | 190 | assertThat(references, containsInAnyOrder( |
| 201 | newBehaviorReferenceByMethod( source, m_subClassAA.getName(), "a", "()V" ) | 191 | newBehaviorReferenceByMethod(source, m_subClassAA.getName(), "a", "()V") |
| 202 | ) ); | 192 | )); |
| 203 | } | 193 | } |
| 204 | 194 | ||
| 205 | @Test | 195 | @Test |
| 206 | public void containsEntries( ) | 196 | public void containsEntries() { |
| 207 | { | 197 | |
| 208 | // classes | 198 | // classes |
| 209 | assertThat( m_index.containsObfClass( m_baseClass ), is( true ) ); | 199 | assertThat(m_index.containsObfClass(m_baseClass), is(true)); |
| 210 | assertThat( m_index.containsObfClass( m_subClassA ), is( true ) ); | 200 | assertThat(m_index.containsObfClass(m_subClassA), is(true)); |
| 211 | assertThat( m_index.containsObfClass( m_subClassAA ), is( true ) ); | 201 | assertThat(m_index.containsObfClass(m_subClassAA), is(true)); |
| 212 | assertThat( m_index.containsObfClass( m_subClassB ), is( true ) ); | 202 | assertThat(m_index.containsObfClass(m_subClassB), is(true)); |
| 213 | 203 | ||
| 214 | // fields | 204 | // fields |
| 215 | assertThat( m_index.containsObfField( m_nameField ), is( true ) ); | 205 | assertThat(m_index.containsObfField(m_nameField), is(true)); |
| 216 | assertThat( m_index.containsObfField( m_numThingsField ), is( true ) ); | 206 | assertThat(m_index.containsObfField(m_numThingsField), is(true)); |
| 217 | 207 | ||
| 218 | // methods | 208 | // methods |
| 219 | // getName() | 209 | // getName() |
| 220 | assertThat( m_index.containsObfBehavior( new MethodEntry( m_baseClass, "a", "()Ljava/lang/String;" ) ), is( true ) ); | 210 | assertThat(m_index.containsObfBehavior(new MethodEntry(m_baseClass, "a", "()Ljava/lang/String;")), is(true)); |
| 221 | assertThat( m_index.containsObfBehavior( new MethodEntry( m_subClassA, "a", "()Ljava/lang/String;" ) ), is( false ) ); | 211 | assertThat(m_index.containsObfBehavior(new MethodEntry(m_subClassA, "a", "()Ljava/lang/String;")), is(false)); |
| 222 | assertThat( m_index.containsObfBehavior( new MethodEntry( m_subClassAA, "a", "()Ljava/lang/String;" ) ), is( true ) ); | 212 | assertThat(m_index.containsObfBehavior(new MethodEntry(m_subClassAA, "a", "()Ljava/lang/String;")), is(true)); |
| 223 | assertThat( m_index.containsObfBehavior( new MethodEntry( m_subClassB, "a", "()Ljava/lang/String;" ) ), is( false ) ); | 213 | assertThat(m_index.containsObfBehavior(new MethodEntry(m_subClassB, "a", "()Ljava/lang/String;")), is(false)); |
| 224 | 214 | ||
| 225 | // doBaseThings() | 215 | // doBaseThings() |
| 226 | assertThat( m_index.containsObfBehavior( new MethodEntry( m_baseClass, "a", "()V" ) ), is( true ) ); | 216 | assertThat(m_index.containsObfBehavior(new MethodEntry(m_baseClass, "a", "()V")), is(true)); |
| 227 | assertThat( m_index.containsObfBehavior( new MethodEntry( m_subClassA, "a", "()V" ) ), is( false ) ); | 217 | assertThat(m_index.containsObfBehavior(new MethodEntry(m_subClassA, "a", "()V")), is(false)); |
| 228 | assertThat( m_index.containsObfBehavior( new MethodEntry( m_subClassAA, "a", "()V" ) ), is( true ) ); | 218 | assertThat(m_index.containsObfBehavior(new MethodEntry(m_subClassAA, "a", "()V")), is(true)); |
| 229 | assertThat( m_index.containsObfBehavior( new MethodEntry( m_subClassB, "a", "()V" ) ), is( true ) ); | 219 | assertThat(m_index.containsObfBehavior(new MethodEntry(m_subClassB, "a", "()V")), is(true)); |
| 230 | 220 | ||
| 231 | // doBThings() | 221 | // doBThings() |
| 232 | assertThat( m_index.containsObfBehavior( new MethodEntry( m_baseClass, "b", "()V" ) ), is( false ) ); | 222 | assertThat(m_index.containsObfBehavior(new MethodEntry(m_baseClass, "b", "()V")), is(false)); |
| 233 | assertThat( m_index.containsObfBehavior( new MethodEntry( m_subClassA, "b", "()V" ) ), is( false ) ); | 223 | assertThat(m_index.containsObfBehavior(new MethodEntry(m_subClassA, "b", "()V")), is(false)); |
| 234 | assertThat( m_index.containsObfBehavior( new MethodEntry( m_subClassAA, "b", "()V" ) ), is( false ) ); | 224 | assertThat(m_index.containsObfBehavior(new MethodEntry(m_subClassAA, "b", "()V")), is(false)); |
| 235 | assertThat( m_index.containsObfBehavior( new MethodEntry( m_subClassB, "b", "()V" ) ), is( true ) ); | 225 | assertThat(m_index.containsObfBehavior(new MethodEntry(m_subClassB, "b", "()V")), is(true)); |
| 236 | 226 | ||
| 237 | } | 227 | } |
| 238 | } | 228 | } |