diff options
Diffstat (limited to 'enigma/src/test/java/cuchaz')
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 @@ | |||
| 1 | package cuchaz.enigma; | ||
| 2 | |||
| 3 | import cuchaz.enigma.classprovider.ClasspathClassProvider; | ||
| 4 | import cuchaz.enigma.translation.mapping.EntryMapping; | ||
| 5 | import cuchaz.enigma.translation.mapping.EntryRemapper; | ||
| 6 | import cuchaz.enigma.translation.mapping.serde.MappingFormat; | ||
| 7 | import cuchaz.enigma.translation.mapping.serde.MappingParseException; | ||
| 8 | import cuchaz.enigma.translation.mapping.tree.EntryTree; | ||
| 9 | import cuchaz.enigma.translation.mapping.tree.EntryTreeNode; | ||
| 10 | import cuchaz.enigma.translation.representation.entry.MethodEntry; | ||
| 11 | import cuchaz.enigma.utils.validation.ValidationContext; | ||
| 12 | import org.hamcrest.MatcherAssert; | ||
| 13 | import org.junit.Assert; | ||
| 14 | import org.junit.Test; | ||
| 15 | |||
| 16 | import java.io.IOException; | ||
| 17 | import java.nio.file.Paths; | ||
| 18 | |||
| 19 | /** | ||
| 20 | * Test that we can accept some name clashes that are allowed by javac | ||
| 21 | */ | ||
| 22 | public 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 @@ | |||
| 1 | package cuchaz.enigma; | ||
| 2 | |||
| 3 | import cuchaz.enigma.utils.validation.ParameterizedMessage; | ||
| 4 | import cuchaz.enigma.utils.validation.ValidationContext; | ||
| 5 | import org.hamcrest.CustomMatcher; | ||
| 6 | import org.hamcrest.Description; | ||
| 7 | |||
| 8 | class 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 @@ | |||
| 1 | package cuchaz.enigma.inputs.visibility; | ||
| 2 | |||
| 3 | class 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 @@ | |||
| 1 | package cuchaz.enigma.inputs.visibility; | ||
| 2 | |||
| 3 | public 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 | } | ||