summaryrefslogtreecommitdiff
path: root/enigma/src/test
diff options
context:
space:
mode:
authorGravatar 2xsaiko2020-10-02 14:55:22 +0200
committerGravatar GitHub2020-10-02 14:55:22 +0200
commit112a49dccb1fe7792366112bc829352462cd298c (patch)
treecfdd8f3af8744abc52581383e7f4cbbdc9f3aebe /enigma/src/test
parentDon't save duplicate messages in validation context (diff)
parentallow name clashes to pass where javac would accept them (diff)
downloadenigma-fork-112a49dccb1fe7792366112bc829352462cd298c.tar.gz
enigma-fork-112a49dccb1fe7792366112bc829352462cd298c.tar.xz
enigma-fork-112a49dccb1fe7792366112bc829352462cd298c.zip
Merge pull request #299 from thiakil/validation-changes
Validation improvements
Diffstat (limited to 'enigma/src/test')
-rw-r--r--enigma/src/test/java/cuchaz/enigma/TestAllowableClashes.java52
-rw-r--r--enigma/src/test/java/cuchaz/enigma/ValidationContextMatcher.java35
-rw-r--r--enigma/src/test/java/cuchaz/enigma/inputs/visibility/ClassA.java28
-rw-r--r--enigma/src/test/java/cuchaz/enigma/inputs/visibility/ClassB.java31
4 files changed, 146 insertions, 0 deletions
diff --git a/enigma/src/test/java/cuchaz/enigma/TestAllowableClashes.java b/enigma/src/test/java/cuchaz/enigma/TestAllowableClashes.java
new file mode 100644
index 0000000..bfc21de
--- /dev/null
+++ b/enigma/src/test/java/cuchaz/enigma/TestAllowableClashes.java
@@ -0,0 +1,52 @@
1package cuchaz.enigma;
2
3import cuchaz.enigma.classprovider.ClasspathClassProvider;
4import cuchaz.enigma.translation.mapping.EntryMapping;
5import cuchaz.enigma.translation.mapping.EntryRemapper;
6import cuchaz.enigma.translation.mapping.serde.MappingFormat;
7import cuchaz.enigma.translation.mapping.serde.MappingParseException;
8import cuchaz.enigma.translation.mapping.tree.EntryTree;
9import cuchaz.enigma.translation.mapping.tree.EntryTreeNode;
10import cuchaz.enigma.translation.representation.entry.MethodEntry;
11import cuchaz.enigma.utils.validation.ValidationContext;
12import org.hamcrest.MatcherAssert;
13import org.junit.Assert;
14import org.junit.Test;
15
16import java.io.IOException;
17import java.nio.file.Paths;
18
19/**
20 * Test that we can accept some name clashes that are allowed by javac
21 */
22public class TestAllowableClashes {
23
24 private static final String inputBaseName = "build/test-obf/visibility";
25
26 @Test
27 public void test() throws IOException, MappingParseException {
28 //Load produced mappings
29 Enigma enigma = Enigma.create();
30 EnigmaProject project = enigma.openJar(Paths.get(inputBaseName + ".jar"), new ClasspathClassProvider(), ProgressListener.none());
31 EntryTree<EntryMapping> obfToDeobf = MappingFormat.PROGUARD.read(Paths.get(inputBaseName + "-mapping.txt"), ProgressListener.none(), null);
32
33 //Load them into enigma, none should conflict
34 EntryRemapper mapper = project.getMapper();
35 for (int round=0; round<2; round++) {
36 for (EntryTreeNode<EntryMapping> node : obfToDeobf) {
37 Assert.assertNotEquals(null, node.getValue());
38 if (node.getEntry() instanceof MethodEntry && (node.getEntry()
39 .getName()
40 .equals("<init>") || node.getEntry().getName().equals("<clinit>"))) {
41 //skip proguard's constructor entries
42 continue;
43 }
44 System.out.println(node.getEntry().toString() + " -> " + node.getValue().getTargetName());
45 ValidationContext vc = new ValidationContext();
46 mapper.mapFromObf(vc, node.getEntry(), node.getValue());
47 MatcherAssert.assertThat(vc, ValidationContextMatcher.INSTANCE);
48 }
49 }
50 }
51
52}
diff --git a/enigma/src/test/java/cuchaz/enigma/ValidationContextMatcher.java b/enigma/src/test/java/cuchaz/enigma/ValidationContextMatcher.java
new file mode 100644
index 0000000..5404077
--- /dev/null
+++ b/enigma/src/test/java/cuchaz/enigma/ValidationContextMatcher.java
@@ -0,0 +1,35 @@
1package cuchaz.enigma;
2
3import cuchaz.enigma.utils.validation.ParameterizedMessage;
4import cuchaz.enigma.utils.validation.ValidationContext;
5import org.hamcrest.CustomMatcher;
6import org.hamcrest.Description;
7
8class ValidationContextMatcher extends CustomMatcher<ValidationContext> {
9 public static final ValidationContextMatcher INSTANCE = new ValidationContextMatcher();
10
11 private ValidationContextMatcher() {
12 super("ValidationContext can proceed");
13 }
14
15 @Override
16 public boolean matches(Object item) {
17 return item instanceof ValidationContext && ((ValidationContext) item).canProceed();
18 }
19
20 @Override
21 public void describeMismatch(Object item, Description description) {
22 if (!(item instanceof ValidationContext)) {
23 description.appendText("expected ValidationContext, was").appendValue(item);
24 return;
25 }
26 ValidationContext vc = (ValidationContext) item;
27 for (ParameterizedMessage message : vc.getMessages()) {
28 description.appendText(message.getText());
29 String longMessage = message.getLongText();
30 if (longMessage != null && !longMessage.trim().isEmpty()){
31 description.appendText(longMessage);
32 }
33 }
34 }
35}
diff --git a/enigma/src/test/java/cuchaz/enigma/inputs/visibility/ClassA.java b/enigma/src/test/java/cuchaz/enigma/inputs/visibility/ClassA.java
new file mode 100644
index 0000000..458f7c0
--- /dev/null
+++ b/enigma/src/test/java/cuchaz/enigma/inputs/visibility/ClassA.java
@@ -0,0 +1,28 @@
1package cuchaz.enigma.inputs.visibility;
2
3class ClassA {
4
5 protected Object protectedParentPrivateChild;
6 public Object publicParentPrivateChild;
7
8 public static Object LOGGER = null;
9
10 protected static Object LOGGER2 = null;
11
12 public Object publicPublic;
13
14 public static void equalAccessStatic() {}
15
16 protected static void protectedPublicStatic(){}
17
18 private static void privateStaticParentPublicStaticChild(){}
19
20 private void privateParentPublicStaticChild() {}
21
22 static void packagePrivateParentProtectedChild(){}
23
24 private static void packagePrivateChild(){}
25
26 public ClassA returningSubclass(){return null;}
27
28} \ No newline at end of file
diff --git a/enigma/src/test/java/cuchaz/enigma/inputs/visibility/ClassB.java b/enigma/src/test/java/cuchaz/enigma/inputs/visibility/ClassB.java
new file mode 100644
index 0000000..2a1b68a
--- /dev/null
+++ b/enigma/src/test/java/cuchaz/enigma/inputs/visibility/ClassB.java
@@ -0,0 +1,31 @@
1package cuchaz.enigma.inputs.visibility;
2
3public class ClassB extends ClassA {
4 private Object protectedParentPrivateChild;
5
6 private Object publicParentPrivateChild;
7
8 public Object publicPublic;
9
10 public static Object LOGGER;
11
12 public static Object LOGGER2 = null;
13
14 public static void equalAccessStatic() {
15 }
16
17 public static void protectedPublicStatic() {
18 }
19
20 public static void privateStaticParentPublicStaticChild() {
21 }
22
23 public static void privateParentPublicStaticChild() {
24 }
25
26 protected static void packagePrivateParentProtectedChild(){}
27
28 static void packagePrivateChild(){}
29
30 public ClassB returningSubclass(){return null;}
31}