summaryrefslogtreecommitdiffstats
path: root/jack-tests
diff options
context:
space:
mode:
authormikaelpeltier <mikaelpeltier@google.com>2015-04-13 17:55:06 +0200
committermikaelpeltier <mikaelpeltier@google.com>2015-04-28 12:09:39 +0200
commit88ac57db8ef6442d2a87aacad089104b488052e0 (patch)
tree02658f780e4ea5692a6d3749e09ec93c7931f30c /jack-tests
parent923fed570156cb3e14ae2cb21829bc0e70d3f9be (diff)
downloadtoolchain_jack-88ac57db8ef6442d2a87aacad089104b488052e0.tar.gz
toolchain_jack-88ac57db8ef6442d2a87aacad089104b488052e0.tar.bz2
toolchain_jack-88ac57db8ef6442d2a87aacad089104b488052e0.zip
During shrinking generate error if they are unknow types
- When shrinking all used types must be passed into classpath, without these types into classpath, Jack could shrink class members that it should not. Bug: 20135591 Change-Id: I4b4b03581141df0e40b1f27ccfc2f3a481b5d069
Diffstat (limited to 'jack-tests')
-rw-r--r--jack-tests/tests/com/android/jack/fileconflict/FileConflictTests.java2
-rw-r--r--jack-tests/tests/com/android/jack/resource/ResourceTests.java4
-rw-r--r--jack-tests/tests/com/android/jack/shrob/ShrinkTests.java124
-rw-r--r--jack-tests/tests/com/android/jack/withphantom/WithPhantomTests.java11
4 files changed, 140 insertions, 1 deletions
diff --git a/jack-tests/tests/com/android/jack/fileconflict/FileConflictTests.java b/jack-tests/tests/com/android/jack/fileconflict/FileConflictTests.java
index 44128a9d..a31cc2ca 100644
--- a/jack-tests/tests/com/android/jack/fileconflict/FileConflictTests.java
+++ b/jack-tests/tests/com/android/jack/fileconflict/FileConflictTests.java
@@ -577,6 +577,8 @@ public class FileConflictTests {
toolchain = getToolchain(isApiTest);
toolchain.addProguardFlags(new File(TEST001_DIR, "proguard.flags"));
toolchain.addStaticLibs(jackImport1, jackImport2);
+ toolchain.addToClasspath(toolchain.getDefaultBootClasspath());
+
if (collisionPolicy != null) {
toolchain.addProperty(JayceFileImporter.COLLISION_POLICY.getName(), collisionPolicy);
}
diff --git a/jack-tests/tests/com/android/jack/resource/ResourceTests.java b/jack-tests/tests/com/android/jack/resource/ResourceTests.java
index a5d46ff9..ca8ee9b0 100644
--- a/jack-tests/tests/com/android/jack/resource/ResourceTests.java
+++ b/jack-tests/tests/com/android/jack/resource/ResourceTests.java
@@ -143,6 +143,7 @@ public class ResourceTests {
File shrobbedJackAr =
AbstractTestTools.createTempFile("shrobbedJackAr", toolchain.getLibraryExtension());
toolchain.addProguardFlags(new File(FILE, "proguard.flags"));
+ toolchain.addToClasspath(toolchain.getDefaultBootClasspath());
toolchain.libToLib(jackAr, shrobbedJackAr, /* zipFiles = */ true);
// check that resources are contained in dex archive
@@ -170,6 +171,7 @@ public class ResourceTests {
File shrobbedJackAr =
AbstractTestTools.createTempFile("shrobbedJackAr", toolchain.getLibraryExtension());
toolchain.addProguardFlags(new File(FILE, "proguard.flags"));
+ toolchain.addToClasspath(toolchain.getDefaultBootClasspath());
toolchain.libToLib(jackFolder, shrobbedJackAr, /* zipFiles = */ true);
// check that resources are contained in Jack archive
@@ -189,6 +191,7 @@ public class ResourceTests {
File shrobbedJackDir = AbstractTestTools.createTempDir();
JackBasedToolchain toolchain = AbstractTestTools.getCandidateToolchain(JackBasedToolchain.class);
toolchain.addProguardFlags(new File(FILE, "proguard.flags"));
+ toolchain.addToClasspath(toolchain.getDefaultBootClasspath());
toolchain.libToLib(jackAr, shrobbedJackDir, /* zipFiles = */ false);
// check that resources are contained in Jack dir
@@ -215,6 +218,7 @@ public class ResourceTests {
File shrobbedJackDir = AbstractTestTools.createTempDir();
toolchain = AbstractTestTools.getCandidateToolchain(JackBasedToolchain.class);
toolchain.addProguardFlags(new File(FILE, "proguard.flags"));
+ toolchain.addToClasspath(toolchain.getDefaultBootClasspath());
toolchain.libToLib(jackFolder, shrobbedJackDir, /* zipFiles = */ false);
// check that resources are contained in Jack dir
diff --git a/jack-tests/tests/com/android/jack/shrob/ShrinkTests.java b/jack-tests/tests/com/android/jack/shrob/ShrinkTests.java
index 6ffa637c..8e03f6ac 100644
--- a/jack-tests/tests/com/android/jack/shrob/ShrinkTests.java
+++ b/jack-tests/tests/com/android/jack/shrob/ShrinkTests.java
@@ -16,18 +16,25 @@
package com.android.jack.shrob;
+import com.google.common.io.NullOutputStream;
+
+import com.android.jack.JackAbortException;
import com.android.jack.Main;
import com.android.jack.Options;
import com.android.jack.ProguardFlags;
import com.android.jack.shrob.shrink.ShrinkStructurePrinter;
+import com.android.jack.shrob.shrink.ShrinkingException;
import com.android.jack.test.comparator.ComparatorMapping;
import com.android.jack.test.helper.SourceToDexComparisonTestHelper;
import com.android.jack.test.toolchain.AbstractTestTools;
import com.android.jack.test.toolchain.DummyToolchain;
+import com.android.jack.test.toolchain.IToolchain;
import com.android.jack.test.toolchain.JackApiToolchainBase;
import com.android.jack.test.toolchain.JackBasedToolchain;
import com.android.jack.util.TextUtils;
+import junit.framework.Assert;
+
import org.junit.BeforeClass;
import org.junit.Test;
@@ -113,6 +120,7 @@ public class ShrinkTests extends AbstractTest {
toolchain.addProguardFlags(
dontObfuscateFlagFile,
new ProguardFlags(new File(shrobTestsDir, "test020"),"proguard.flags"));
+ toolchain.addToClasspath(toolchain.getDefaultBootClasspath());
toolchain.libToLib(
testOut,
shrinkOut,
@@ -162,6 +170,7 @@ public class ShrinkTests extends AbstractTest {
dontObfuscateFlagFile,
new ProguardFlags(new File( shrobTestsDir, "test021"),"proguard.flags001"));
shrinkOut = AbstractTestTools.createTempDir();
+ toolchain.addToClasspath(toolchain.getDefaultBootClasspath());
toolchain.libToLib(jackOut, shrinkOut, /* zipFiles = */ false);
new ComparatorMapping(candidateNodeListing,
@@ -169,6 +178,7 @@ public class ShrinkTests extends AbstractTest {
dexOut = AbstractTestTools.createTempDir();
toolchain = AbstractTestTools.getCandidateToolchain(JackApiToolchainBase.class);
+ toolchain.addToClasspath(toolchain.getDefaultBootClasspath());
toolchain.libToExe(shrinkOut, dexOut, /* zipFile = */ false);
} catch (Exception e) {
@@ -228,4 +238,118 @@ public class ShrinkTests extends AbstractTest {
public void test42_003() throws Exception {
runTest("042", "003", "");
}
+
+ /**
+ * Check that a program importing a library using another library is well shrinked, if the used
+ * library is on the classpath. If the used library is not on the classpath, Jack must generate
+ * an error otherwise it could shrink class members that are needed.
+ */
+ @Test
+ public void test45_001() throws Exception {
+ String testNumber = "045";
+ String flagNumber = "001";
+
+ File lib2Out = AbstractTestTools.createTempDir();
+ JackBasedToolchain toolchainLib2 =
+ AbstractTestTools.getCandidateToolchain(JackBasedToolchain.class);
+ toolchainLib2.addToClasspath(toolchainLib2.getDefaultBootClasspath()).srcToLib(lib2Out,
+ /* zipFiles = */false, new File(shrobTestsDir, "test" + testNumber + "/lib2"));
+
+ File lib1Out = AbstractTestTools.createTempDir();
+ JackBasedToolchain toolchainLib1 =
+ AbstractTestTools.getCandidateToolchain(JackBasedToolchain.class);
+ toolchainLib1.addToClasspath(lib2Out);
+ toolchainLib1.addToClasspath(toolchainLib1.getDefaultBootClasspath()).srcToLib(lib1Out,
+ /* zipFiles = */false, new File(shrobTestsDir, "test" + testNumber + "/lib1"));
+
+ JackBasedToolchain toolchain =
+ AbstractTestTools.getCandidateToolchain(JackBasedToolchain.class);
+
+ File testFolder = new File(shrobTestsDir, "test" + testNumber);
+ File refFolder = new File(testFolder, "refsShrinking");
+
+ File candidateNodeListing = AbstractTestTools.createTempFile("nodeListing", ".txt");
+ toolchain.addProperty(ShrinkStructurePrinter.STRUCTURE_PRINTING.getName(), "true");
+ toolchain.addProperty(ShrinkStructurePrinter.STRUCTURE_PRINTING_FILE.getName(),
+ candidateNodeListing.getPath());
+ toolchain.addProperty(Options.METHOD_FILTER.getName(), "supported-methods");
+ toolchain.disableDxOptimizations();
+ toolchain.addStaticLibs(lib1Out);
+ toolchain.addToClasspath(lib2Out);
+
+ File outFolder = AbstractTestTools.createTempDir();
+
+ SourceToDexComparisonTestHelper env =
+ new SourceToDexComparisonTestHelper(new File(testFolder, "jack"));
+
+ env.setWithDebugInfo(true);
+ env.setCandidateTestTools(toolchain);
+ env.setReferenceTestTools(new DummyToolchain());
+ env.setProguardFlags(dontObfuscateFlagFile,
+ new ProguardFlags(testFolder, "proguard.flags" + flagNumber));
+
+ env.runTest(new ComparatorMapping(new File(refFolder, "expected-" + flagNumber + ".txt"),
+ candidateNodeListing));
+ }
+
+ /**
+ * Check that a program importing a library using another library generate an error if the use
+ * library is not into the classpath. If the used library is not on the classpath, Jack must
+ * generate an error otherwise it could shrink class members that are needed.
+ */
+ @Test
+ public void test45_001_bis() throws Exception {
+ String testNumber = "045";
+ String flagNumber = "001";
+
+ File lib2Out = AbstractTestTools.createTempDir();
+ JackApiToolchainBase toolchainLib2 =
+ AbstractTestTools.getCandidateToolchain(JackApiToolchainBase.class);
+ toolchainLib2.addToClasspath(toolchainLib2.getDefaultBootClasspath()).srcToLib(lib2Out,
+ /* zipFiles = */false, new File(shrobTestsDir, "test" + testNumber + "/lib2"));
+
+ File lib1Out = AbstractTestTools.createTempDir();
+ JackApiToolchainBase toolchainLib1 =
+ AbstractTestTools.getCandidateToolchain(JackApiToolchainBase.class);
+ toolchainLib1.addToClasspath(lib2Out);
+ toolchainLib1.addToClasspath(toolchainLib1.getDefaultBootClasspath()).srcToLib(lib1Out,
+ /* zipFiles = */false, new File(shrobTestsDir, "test" + testNumber + "/lib1"));
+
+ JackApiToolchainBase toolchain =
+ AbstractTestTools.getCandidateToolchain(JackApiToolchainBase.class);
+
+ File testFolder = new File(shrobTestsDir, "test" + testNumber);
+ File refFolder = new File(testFolder, "refsShrinking");
+
+ File candidateNodeListing = AbstractTestTools.createTempFile("nodeListing", ".txt");
+ toolchain.addProperty(ShrinkStructurePrinter.STRUCTURE_PRINTING.getName(), "true");
+ toolchain.addProperty(ShrinkStructurePrinter.STRUCTURE_PRINTING_FILE.getName(),
+ candidateNodeListing.getPath());
+ toolchain.addProperty(Options.METHOD_FILTER.getName(), "supported-methods");
+ toolchain.disableDxOptimizations();
+ toolchain.addStaticLibs(lib1Out);
+ toolchain.setErrorStream(new NullOutputStream());
+ File outFolder = AbstractTestTools.createTempDir();
+
+ SourceToDexComparisonTestHelper env =
+ new SourceToDexComparisonTestHelper(new File(testFolder, "jack"));
+
+ env.setWithDebugInfo(true);
+ env.setCandidateTestTools(toolchain);
+ env.setReferenceTestTools(new DummyToolchain());
+ env.setProguardFlags(dontObfuscateFlagFile,
+ new ProguardFlags(testFolder, "proguard.flags" + flagNumber));
+
+ try {
+ env.runTest(new ComparatorMapping(new File(refFolder, "expected-" + flagNumber + ".txt"),
+ candidateNodeListing));
+ } catch (JackAbortException e) {
+ Assert.assertTrue(e.getCause() instanceof ShrinkingException);
+ Assert
+ .assertEquals(
+ "Error during the skrinking: Unknown referenced type 'com.android.jack.shrob.test045."
+ + "lib2.A'. Add type into your classpath.",
+ e.getMessage());
+ }
+ }
}
diff --git a/jack-tests/tests/com/android/jack/withphantom/WithPhantomTests.java b/jack-tests/tests/com/android/jack/withphantom/WithPhantomTests.java
index 8967a4d5..e3918efa 100644
--- a/jack-tests/tests/com/android/jack/withphantom/WithPhantomTests.java
+++ b/jack-tests/tests/com/android/jack/withphantom/WithPhantomTests.java
@@ -77,21 +77,26 @@ public class WithPhantomTests {
File tempOut1 = AbstractTestTools.createTempDir();
toolchain = AbstractTestTools.getCandidateToolchain(JackBasedToolchain.class, exclude);
toolchain.addProguardFlags(new ProguardFlags(testFolder, "shrink1.flags"))
+ .addToClasspath(toolchain.getDefaultBootClasspath())
.libToLib(tempJackFolder, tempOut1, /* zipFiles = */ false);
File tempOut2 = AbstractTestTools.createTempDir();
toolchain = AbstractTestTools.getCandidateToolchain(JackBasedToolchain.class, exclude);
- toolchain.addProguardFlags(new ProguardFlags(testFolder, "shrink2.flags"))
+ toolchain.addToClasspath(toolchain.getDefaultBootClasspath())
+ .addProguardFlags(new ProguardFlags(testFolder, "shrink2.flags"))
+
.libToLib(tempJackFolder, tempOut2, /* zipFiles = */ false);
File tempOut3 = AbstractTestTools.createTempDir();
toolchain = AbstractTestTools.getCandidateToolchain(JackBasedToolchain.class, exclude);
toolchain.addProguardFlags(new ProguardFlags(testFolder, "obf1.flags"))
+ .addToClasspath(toolchain.getDefaultBootClasspath())
.libToLib(tempJackFolder, tempOut3, /* zipFiles = */ false);
File tempOut4 = AbstractTestTools.createTempDir();
toolchain = AbstractTestTools.getCandidateToolchain(JackBasedToolchain.class, exclude);
toolchain.addProguardFlags(new ProguardFlags(testFolder, "obf2.flags"))
+ .addToClasspath(toolchain.getDefaultBootClasspath())
.libToLib(tempJackFolder, tempOut4, /* zipFiles = */ false);
File tempOut5 = AbstractTestTools.createTempDir();
@@ -126,21 +131,25 @@ public class WithPhantomTests {
File tempOut1 = AbstractTestTools.createTempDir();
toolchain = AbstractTestTools.getCandidateToolchain(JackBasedToolchain.class);
toolchain.addProguardFlags(new ProguardFlags(testFolder, "shrink1.flags"))
+ .addToClasspath(toolchain.getDefaultBootClasspath())
.libToLib(tempJackFolder, tempOut1, /* zipFiles = */ false);
File tempOut2 = AbstractTestTools.createTempDir();
toolchain = AbstractTestTools.getCandidateToolchain(JackBasedToolchain.class);
toolchain.addProguardFlags(new ProguardFlags(testFolder, "shrink2.flags"))
+ .addToClasspath(toolchain.getDefaultBootClasspath())
.libToLib(tempJackFolder, tempOut2, /* zipFiles = */ false);
File tempOut3 = AbstractTestTools.createTempDir();
toolchain = AbstractTestTools.getCandidateToolchain(JackBasedToolchain.class);
toolchain.addProguardFlags(new ProguardFlags(testFolder, "obf1.flags"))
+ .addToClasspath(toolchain.getDefaultBootClasspath())
.libToLib(tempJackFolder, tempOut3, /* zipFiles = */ false);
File tempOut4 = AbstractTestTools.createTempDir();
toolchain = AbstractTestTools.getCandidateToolchain(JackBasedToolchain.class);
toolchain.addProguardFlags(new ProguardFlags(testFolder, "obf2.flags"))
+ .addToClasspath(toolchain.getDefaultBootClasspath())
.libToLib(tempJackFolder, tempOut4, /* zipFiles = */ false);
File tempOutFolder = AbstractTestTools.createTempDir();