From cb8823eb0b446d5c1b9b580e5578866e691771d8 Mon Sep 17 00:00:00 2001 From: liach Date: Wed, 15 May 2019 22:03:13 -0700 Subject: Feature/weave (#138) * Add weave/stitch style command system to enigma Also fixed divide by zero stupidity Signed-off-by: liach * Add tests for package access index and command Signed-off-by: liach * Minor tweaks Signed-off-by: liach --- .../cuchaz/enigma/PackageVisibilityIndexTest.java | 55 ++++++++++++++++++++++ .../enigma/command/CheckMappingsCommandTest.java | 20 ++++++++ .../cuchaz/enigma/inputs/packageAccess/Base.java | 7 +++ .../inputs/packageAccess/SamePackageChild.java | 12 +++++ .../packageAccess/sub/OtherPackageChild.java | 14 ++++++ 5 files changed, 108 insertions(+) create mode 100644 src/test/java/cuchaz/enigma/PackageVisibilityIndexTest.java create mode 100644 src/test/java/cuchaz/enigma/command/CheckMappingsCommandTest.java create mode 100644 src/test/java/cuchaz/enigma/inputs/packageAccess/Base.java create mode 100644 src/test/java/cuchaz/enigma/inputs/packageAccess/SamePackageChild.java create mode 100644 src/test/java/cuchaz/enigma/inputs/packageAccess/sub/OtherPackageChild.java (limited to 'src/test/java') diff --git a/src/test/java/cuchaz/enigma/PackageVisibilityIndexTest.java b/src/test/java/cuchaz/enigma/PackageVisibilityIndexTest.java new file mode 100644 index 00000000..ae5d6d2c --- /dev/null +++ b/src/test/java/cuchaz/enigma/PackageVisibilityIndexTest.java @@ -0,0 +1,55 @@ +/******************************************************************************* + * Copyright (c) 2015 Jeff Martin. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the GNU Lesser General Public + * License v3.0 which accompanies this distribution, and is available at + * http://www.gnu.org/licenses/lgpl.html + * + * Contributors: + * Jeff Martin - initial API and implementation + ******************************************************************************/ + +package cuchaz.enigma; + +import cuchaz.enigma.analysis.ParsedJar; +import cuchaz.enigma.analysis.index.JarIndex; +import cuchaz.enigma.analysis.index.PackageVisibilityIndex; +import cuchaz.enigma.translation.representation.entry.ClassEntry; +import org.junit.Test; + +import java.util.jar.JarFile; + +import static cuchaz.enigma.TestEntryFactory.newClass; +import static org.hamcrest.MatcherAssert.assertThat; +import static org.hamcrest.Matchers.contains; +import static org.hamcrest.Matchers.containsInAnyOrder; + +public class PackageVisibilityIndexTest { + + private static final ClassEntry KEEP = newClass("cuchaz/enigma/inputs/Keep"); + private static final ClassEntry BASE = newClass("a"); + private static final ClassEntry SAME_PACKAGE_CHILD = newClass("b"); + private static final ClassEntry SAME_PACKAGE_CHILD_INNER = newClass("b$a"); + private static final ClassEntry OTHER_PACKAGE_CHILD = newClass("c"); + private static final ClassEntry OTHER_PACKAGE_CHILD_INNER = newClass("c$a"); + private final JarIndex jarIndex; + + public PackageVisibilityIndexTest() throws Exception { + jarIndex = JarIndex.empty(); + ParsedJar jar = new ParsedJar(new JarFile("build/test-obf/packageAccess.jar")); + jarIndex.indexJar(jar, s -> { + }); + } + + @Test + public void test() { + PackageVisibilityIndex visibilityIndex = jarIndex.getPackageVisibilityIndex(); + assertThat(visibilityIndex.getPartition(BASE), containsInAnyOrder(BASE, SAME_PACKAGE_CHILD, SAME_PACKAGE_CHILD_INNER)); + System.out.println(visibilityIndex.getPartitions()); + assertThat(visibilityIndex.getPartitions(), containsInAnyOrder( + containsInAnyOrder(BASE, SAME_PACKAGE_CHILD, SAME_PACKAGE_CHILD_INNER), + containsInAnyOrder(OTHER_PACKAGE_CHILD, OTHER_PACKAGE_CHILD_INNER), + contains(KEEP) + )); + } +} diff --git a/src/test/java/cuchaz/enigma/command/CheckMappingsCommandTest.java b/src/test/java/cuchaz/enigma/command/CheckMappingsCommandTest.java new file mode 100644 index 00000000..f3b9f85e --- /dev/null +++ b/src/test/java/cuchaz/enigma/command/CheckMappingsCommandTest.java @@ -0,0 +1,20 @@ +package cuchaz.enigma.command; + +import org.junit.Test; + +import java.io.File; + +public class CheckMappingsCommandTest { + + @Test(expected = IllegalStateException.class) + public void testWrong() throws Exception { + new CheckMappingsCommand().run(new File("build/test-obf/packageAccess.jar").getAbsolutePath(), new File("src/test/resources" + + "/packageAccess/wrongMappings").getAbsolutePath()); + } + + @Test + public void testRight() throws Exception { + new CheckMappingsCommand().run(new File("build/test-obf/packageAccess.jar").getAbsolutePath(), new File("src/test/resources" + + "/packageAccess/correctMappings").getAbsolutePath()); + } +} diff --git a/src/test/java/cuchaz/enigma/inputs/packageAccess/Base.java b/src/test/java/cuchaz/enigma/inputs/packageAccess/Base.java new file mode 100644 index 00000000..6f5fe304 --- /dev/null +++ b/src/test/java/cuchaz/enigma/inputs/packageAccess/Base.java @@ -0,0 +1,7 @@ +package cuchaz.enigma.inputs.packageAccess; + +public class Base { + protected int make() { + return 42; + } +} diff --git a/src/test/java/cuchaz/enigma/inputs/packageAccess/SamePackageChild.java b/src/test/java/cuchaz/enigma/inputs/packageAccess/SamePackageChild.java new file mode 100644 index 00000000..cf0f6574 --- /dev/null +++ b/src/test/java/cuchaz/enigma/inputs/packageAccess/SamePackageChild.java @@ -0,0 +1,12 @@ +package cuchaz.enigma.inputs.packageAccess; + +public class SamePackageChild extends Base { + + class Inner { + final int value; + + Inner() { + value = SamePackageChild.this.make(); // no synthetic method + } + } +} diff --git a/src/test/java/cuchaz/enigma/inputs/packageAccess/sub/OtherPackageChild.java b/src/test/java/cuchaz/enigma/inputs/packageAccess/sub/OtherPackageChild.java new file mode 100644 index 00000000..19fb19c2 --- /dev/null +++ b/src/test/java/cuchaz/enigma/inputs/packageAccess/sub/OtherPackageChild.java @@ -0,0 +1,14 @@ +package cuchaz.enigma.inputs.packageAccess.sub; + +import cuchaz.enigma.inputs.packageAccess.Base; + +public class OtherPackageChild extends Base { + + class Inner { + final int value; + + Inner() { + value = OtherPackageChild.this.make(); // synthetic method call + } + } +} -- cgit v1.2.3