summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--jack-api/rsc/jack-api-version.properties (renamed from jack-launcher/rsc/jack-launcher.properties)12
-rw-r--r--jack-launcher/rsc/jack-launcher-version.properties26
-rw-r--r--jack-tests/src/com/android/jack/test/toolchain/JackApiV01Toolchain.java2
-rw-r--r--jack-tests/src/com/android/jack/test/toolchain/JackBasedToolchain.java12
-rw-r--r--jack-tests/src/com/android/jack/test/toolchain/JackCliToolchain.java10
-rw-r--r--jack-tests/src/com/android/jack/test/toolchain/LegacyJillToolchain.java14
-rw-r--r--jack-tests/tests/com/android/jack/annotation/processor/AnnotationProcessorTests.java4
-rw-r--r--jack-tests/tests/com/android/jack/error/AnnotationProcessorErrorTest.java2
-rw-r--r--jack-tests/tests/com/android/jack/fileconflict/FileConflictTests.java433
-rw-r--r--jack-tests/tests/com/android/jack/fileconflict/test002/jack/lib1/rsc/rsc/Resource1 (renamed from jack-tests/tests/com/android/jack/fileconflict/test002/jack/lib1/rsc/Resource1)0
-rw-r--r--jack-tests/tests/com/android/jack/fileconflict/test002/jack/lib1/rsc/rsc/Resource2 (renamed from jack-tests/tests/com/android/jack/fileconflict/test002/jack/lib1/rsc/Resource2)0
-rw-r--r--jack-tests/tests/com/android/jack/fileconflict/test002/jack/lib2/rsc/rsc/Resource1 (renamed from jack-tests/tests/com/android/jack/fileconflict/test002/jack/lib2/rsc/Resource1)0
-rw-r--r--jack-tests/tests/com/android/jack/fileconflict/test002/jack/lib2/rsc/rsc/Resource3 (renamed from jack-tests/tests/com/android/jack/fileconflict/test002/jack/lib2/rsc/Resource3)0
-rw-r--r--jack-tests/tests/com/android/jack/fileconflict/test003/jack/proguard.flags2
-rw-r--r--jack-tests/tests/com/android/jack/fileconflict/test003/jack/rsc1/Resource (renamed from jack-tests/tests/com/android/jack/fileconflict/test003/jack/Resource)0
-rw-r--r--jack-tests/tests/com/android/jack/fileconflict/test003/jack/rsc2/Resource (renamed from jack-tests/tests/com/android/jack/fileconflict/test003/jack/Resource2)0
-rw-r--r--jack-tests/tests/com/android/jack/fileconflict/test004/jack/rsc1/com/android/jack/fileconflict/test004/jack/MyClass.txt (renamed from jack-tests/tests/com/android/jack/fileconflict/test004/jack/MyClass.txt)0
-rw-r--r--jack-tests/tests/com/android/jack/fileconflict/test004/jack/rsc2/pcz/nbqfcvq/wnpx/svyrpcbsyvph/hrgh004/wnpx/ZmPyngg.txt (renamed from jack-tests/tests/com/android/jack/fileconflict/test004/jack/a.txt)0
-rw-r--r--jack-tests/tests/com/android/jack/library/LibraryTests.java2
-rw-r--r--jack-tests/tests/com/android/jack/multidex/MultiDexTests.java76
-rw-r--r--jack-tests/tests/com/android/jack/multidex/jpp/config-001.jpp (renamed from jack-tests/tests/com/android/jack/multidex/test002/jack/config-001.jpp)2
-rw-r--r--jack-tests/tests/com/android/jack/resource/ResourceTests.java14
-rw-r--r--jack-tests/tests/com/android/jack/withphantom/WithPhantomTests.java93
-rw-r--r--jack/rsc/jack-version.properties26
-rw-r--r--jack/src/com/android/jack/api/v01/impl/Api01ConfigImpl.java9
-rw-r--r--jack/src/com/android/jack/backend/jayce/JayceFileImporter.java3
-rw-r--r--jack/src/com/android/jack/library/InputJackLibraryCodec.java3
-rw-r--r--jack/src/com/android/jack/library/JackLibrary.java4
-rw-r--r--jack/src/com/android/jack/resource/ResourceImportConflictException.java13
-rw-r--r--jack/src/com/android/jack/resource/ResourceImporter.java3
-rw-r--r--sched/src/com/android/sched/util/codec/ZipFSCodec.java10
-rw-r--r--sched/src/com/android/sched/util/codec/ZipInputOutputVFSCodec.java72
-rw-r--r--sched/src/com/android/sched/vfs/CaseInsensitiveFS.java17
-rw-r--r--sched/src/com/android/sched/vfs/ReadWriteZipFS.java15
-rw-r--r--sched/tests/com/android/sched/vfs/VFSTest.java31
35 files changed, 441 insertions, 469 deletions
diff --git a/jack-launcher/rsc/jack-launcher.properties b/jack-api/rsc/jack-api-version.properties
index be45bd3..9a505b2 100644
--- a/jack-launcher/rsc/jack-launcher.properties
+++ b/jack-api/rsc/jack-api-version.properties
@@ -13,4 +13,14 @@
# See the License for the specific language governing permissions and
# limitations under the License.
#
-jack-launcher.version=1.1-rc4
+version-file.version.code=1
+
+version=1.1-rc4
+version.release.name=Brest
+version.release.code=2
+version.sub-release.kind=CANDIDATE
+version.sub-release.code=17
+
+# These properties are added by the release step
+# version.buildid=<BUILDID>
+# version.sha=<SHA>
diff --git a/jack-launcher/rsc/jack-launcher-version.properties b/jack-launcher/rsc/jack-launcher-version.properties
new file mode 100644
index 0000000..9a505b2
--- /dev/null
+++ b/jack-launcher/rsc/jack-launcher-version.properties
@@ -0,0 +1,26 @@
+#
+# Copyright (C) 2015 The Android Open Source Project
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+version-file.version.code=1
+
+version=1.1-rc4
+version.release.name=Brest
+version.release.code=2
+version.sub-release.kind=CANDIDATE
+version.sub-release.code=17
+
+# These properties are added by the release step
+# version.buildid=<BUILDID>
+# version.sha=<SHA>
diff --git a/jack-tests/src/com/android/jack/test/toolchain/JackApiV01Toolchain.java b/jack-tests/src/com/android/jack/test/toolchain/JackApiV01Toolchain.java
index 5593472..6e69be5 100644
--- a/jack-tests/src/com/android/jack/test/toolchain/JackApiV01Toolchain.java
+++ b/jack-tests/src/com/android/jack/test/toolchain/JackApiV01Toolchain.java
@@ -184,6 +184,7 @@ public class JackApiV01Toolchain extends JackApiToolchainBase {
apiV01Config.setImportedJackLibraryFiles(staticLibs);
apiV01Config.setSourceEntries(Lists.newArrayList(sources));
apiV01Config.setResourceDirs(resImport);
+ apiV01Config.setMetaDirs(metaImport);
apiV01Config.setProguardConfigFiles(proguardFlags);
if (!jarjarRules.isEmpty()) {
apiV01Config.setJarJarConfigFiles(jarjarRules);
@@ -210,6 +211,7 @@ public class JackApiV01Toolchain extends JackApiToolchainBase {
Collections.addAll(importedLibs, in);
apiV01Config.setImportedJackLibraryFiles(importedLibs);
apiV01Config.setResourceDirs(resImport);
+ apiV01Config.setMetaDirs(metaImport);
apiV01Config.setProguardConfigFiles(proguardFlags);
if (jarjarRules != null) {
apiV01Config.setJarJarConfigFiles(jarjarRules);
diff --git a/jack-tests/src/com/android/jack/test/toolchain/JackBasedToolchain.java b/jack-tests/src/com/android/jack/test/toolchain/JackBasedToolchain.java
index a08fe71..92bd82a 100644
--- a/jack-tests/src/com/android/jack/test/toolchain/JackBasedToolchain.java
+++ b/jack-tests/src/com/android/jack/test/toolchain/JackBasedToolchain.java
@@ -47,6 +47,8 @@ public abstract class JackBasedToolchain extends AndroidToolchain {
@Nonnull
protected List<File> resImport = new ArrayList<File>();
@Nonnull
+ protected List<File> metaImport = new ArrayList<File>();
+ @Nonnull
protected final Map<String, String> annotationProcessorOptions = new HashMap<String, String>();
@CheckForNull
protected String processorPath;
@@ -87,8 +89,14 @@ public abstract class JackBasedToolchain extends AndroidToolchain {
}
@Nonnull
- public JackBasedToolchain addResource(@Nonnull File resource) {
- resImport.add(resource);
+ public JackBasedToolchain addResourceDir(@Nonnull File resourceDir) {
+ resImport.add(resourceDir);
+ return this;
+ }
+
+ @Nonnull
+ public JackBasedToolchain addMetaDir(@Nonnull File metaDir) {
+ metaImport.add(metaDir);
return this;
}
diff --git a/jack-tests/src/com/android/jack/test/toolchain/JackCliToolchain.java b/jack-tests/src/com/android/jack/test/toolchain/JackCliToolchain.java
index fdcfedc..b9de041 100644
--- a/jack-tests/src/com/android/jack/test/toolchain/JackCliToolchain.java
+++ b/jack-tests/src/com/android/jack/test/toolchain/JackCliToolchain.java
@@ -163,6 +163,11 @@ public class JackCliToolchain extends JackBasedToolchain {
args.add(res.getPath());
}
+ for (File meta : metaImport) {
+ args.add("--import-meta");
+ args.add(meta.getPath());
+ }
+
args.addAll(extraJackArgs);
for (File jarjarFile : jarjarRules) {
@@ -266,6 +271,11 @@ public class JackCliToolchain extends JackBasedToolchain {
args.add(res.getPath());
}
+ for (File meta : metaImport) {
+ args.add("--import-meta");
+ args.add(meta.getPath());
+ }
+
addProperties(properties, args);
if (!classpath.equals("")) {
diff --git a/jack-tests/src/com/android/jack/test/toolchain/LegacyJillToolchain.java b/jack-tests/src/com/android/jack/test/toolchain/LegacyJillToolchain.java
index 8592ee6..98004b4 100644
--- a/jack-tests/src/com/android/jack/test/toolchain/LegacyJillToolchain.java
+++ b/jack-tests/src/com/android/jack/test/toolchain/LegacyJillToolchain.java
@@ -114,7 +114,7 @@ public class LegacyJillToolchain extends JillBasedToolchain {
if (resImport.size() > 0) {
resDestDir = new File(classesDir, FileType.RSC.getPrefix());
if (!resDestDir.exists() && !resDestDir.mkdir()) {
- throw new AssertionError("Could not create rsc dir");
+ throw new AssertionError("Could not create resource dir");
}
for (File res : resImport) {
@@ -122,6 +122,18 @@ public class LegacyJillToolchain extends JillBasedToolchain {
}
}
+ File metaDestDir;
+ if (metaImport.size() > 0) {
+ metaDestDir = new File(classesDir, FileType.JPP.getPrefix());
+ if (!metaDestDir.exists() && !metaDestDir.mkdir()) {
+ throw new AssertionError("Could not create meta dir");
+ }
+
+ for (File meta : metaImport) {
+ AbstractTestTools.copyDirectory(meta, metaDestDir);
+ }
+ }
+
File tmpJarsDir = AbstractTestTools.createTempDir();
File jarFile = new File(tmpJarsDir, "legacyLib.jar");
File jarFileJarjar = new File(tmpJarsDir, "legacyLibJarjar.jar");
diff --git a/jack-tests/tests/com/android/jack/annotation/processor/AnnotationProcessorTests.java b/jack-tests/tests/com/android/jack/annotation/processor/AnnotationProcessorTests.java
index cc65221..9b1e7cc 100644
--- a/jack-tests/tests/com/android/jack/annotation/processor/AnnotationProcessorTests.java
+++ b/jack-tests/tests/com/android/jack/annotation/processor/AnnotationProcessorTests.java
@@ -239,7 +239,7 @@ public class AnnotationProcessorTests {
{
JackBasedToolchain jack = AbstractTestTools.getCandidateToolchain(JackBasedToolchain.class);
jack.setAnnotationProcessorPath(processors.getPath());
- jack.addResource(classesOut);
+ jack.addResourceDir(classesOut);
jack.addToClasspath(jack.getDefaultBootClasspath());
jack.srcToLib(jackOut,
/*zipFiles=*/false,
@@ -250,7 +250,7 @@ public class AnnotationProcessorTests {
{
JackBasedToolchain jack = AbstractTestTools.getCandidateToolchain(JackBasedToolchain.class);
jack.setAnnotationProcessorPath(processors.getPath());
- jack.addResource(classesOut);
+ jack.addResourceDir(classesOut);
jack.addToClasspath(jack.getDefaultBootClasspath());
jack.srcToLib(jackOut,
/*zipFiles=*/false,
diff --git a/jack-tests/tests/com/android/jack/error/AnnotationProcessorErrorTest.java b/jack-tests/tests/com/android/jack/error/AnnotationProcessorErrorTest.java
index 99b58f2..9eb04ed 100644
--- a/jack-tests/tests/com/android/jack/error/AnnotationProcessorErrorTest.java
+++ b/jack-tests/tests/com/android/jack/error/AnnotationProcessorErrorTest.java
@@ -84,7 +84,7 @@ public class AnnotationProcessorErrorTest {
Collections.singletonList(ResourceAnnotationProcessor.class.getName()));
ByteArrayOutputStream errOut = new ByteArrayOutputStream();
jackApiToolchain.setErrorStream(errOut);
- jackApiToolchain.addResource(te.getOutputDexFolder());
+ jackApiToolchain.addResourceDir(te.getOutputDexFolder());
jackApiToolchain.addProperty(ResourceImporter.RESOURCE_COLLISION_POLICY.getName(),
CollisionPolicy.FAIL.name());
diff --git a/jack-tests/tests/com/android/jack/fileconflict/FileConflictTests.java b/jack-tests/tests/com/android/jack/fileconflict/FileConflictTests.java
index 9537ffe..eb90ff2 100644
--- a/jack-tests/tests/com/android/jack/fileconflict/FileConflictTests.java
+++ b/jack-tests/tests/com/android/jack/fileconflict/FileConflictTests.java
@@ -20,7 +20,8 @@ import com.android.jack.JackAbortException;
import com.android.jack.backend.jayce.JayceFileImporter;
import com.android.jack.backend.jayce.TypeImportConflictException;
import com.android.jack.library.FileType;
-import com.android.jack.library.JackLibrary;
+import com.android.jack.library.FileTypeDoesNotExistException;
+import com.android.jack.library.InputJackLibrary;
import com.android.jack.library.LibraryReadingException;
import com.android.jack.resource.ResourceImportConflictException;
import com.android.jack.resource.ResourceImporter;
@@ -32,78 +33,48 @@ import com.android.jack.test.toolchain.JackApiToolchainBase;
import com.android.jack.test.toolchain.JackBasedToolchain;
import com.android.jack.test.toolchain.JackCliToolchain;
import com.android.jack.test.toolchain.LegacyJillToolchain;
+import com.android.sched.util.location.FileLocation;
+import com.android.sched.vfs.InputVFile;
+import com.android.sched.vfs.VPath;
import junit.framework.Assert;
import org.junit.BeforeClass;
-import org.junit.Ignore;
import org.junit.Test;
import org.junit.experimental.categories.Category;
import java.io.BufferedReader;
import java.io.ByteArrayOutputStream;
import java.io.File;
-import java.io.FileInputStream;
import java.io.IOException;
-import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.util.ArrayList;
import java.util.List;
-import java.util.zip.ZipEntry;
-import java.util.zip.ZipFile;
import javax.annotation.CheckForNull;
import javax.annotation.Nonnull;
/**
- * JUnit tests for resource support.
+ * JUnit tests for conflicts between Jayce files and resources.
*/
public class FileConflictTests {
@Nonnull
- private static final String COMMON_PATH_001 = "com/android/jack/fileconflict/test001/jack/";
+ private static final VPath TYPE1_PATH =
+ new VPath("com/android/jack/fileconflict/test001/jack/MyClass", '/');
@Nonnull
- private static final String COMMON_PATH_002 = "com/android/jack/fileconflict/test002/jack/";
+ private static final VPath TYPE2_PATH =
+ new VPath("com/android/jack/fileconflict/test001/jack/MyClass2", '/');
@Nonnull
- private static final String JACK_FILE_PATH_1 =
- FileType.JAYCE.getPrefix() + "/" + COMMON_PATH_001 + "MyClass.jayce";
+ private static final VPath TYPE3_PATH =
+ new VPath("com/android/jack/fileconflict/test001/jack/MyClass3", '/');
@Nonnull
- private static final String JACK_FILE_PATH_2 =
- FileType.JAYCE.getPrefix() + "/" + COMMON_PATH_001 + "MyClass2.jayce";
+ private static final VPath RESOURCE1_PATH = new VPath("rsc/Resource1", '/');
@Nonnull
- private static final String JACK_FILE_PATH_3 =
- FileType.JAYCE.getPrefix() + "/" + COMMON_PATH_001 + "MyClass3.jayce";
+ private static final VPath RESOURCE2_PATH = new VPath("rsc/Resource2", '/');
@Nonnull
- private static final String DEX_FILE_PATH_1 =
- FileType.DEX.getPrefix() + "/" + COMMON_PATH_001 + "MyClass.dex";
- @Nonnull
- private static final String DEX_FILE_PATH_2 =
- FileType.DEX.getPrefix() + "/" + COMMON_PATH_001 + "MyClass2.dex";
- @Nonnull
- private static final String DEX_FILE_PATH_3 =
- FileType.DEX.getPrefix() + "/" + COMMON_PATH_001 + "MyClass3.dex";
- @Nonnull
- private static final String JACK_FILE_PATH_002_1 =
- FileType.JAYCE.getPrefix() + "/" + COMMON_PATH_002 + "IrrelevantForTest.jayce";
- @Nonnull
- private static final String JACK_FILE_PATH_002_2 =
- FileType.JAYCE.getPrefix() + "/" + COMMON_PATH_002 + "IrrelevantForTest2.jayce";
- @Nonnull
- private static final String RESOURCE1_SHORTPATH = "Resource1";
- @Nonnull
- private static final String RESOURCE2_SHORTPATH = "Resource2";
- @Nonnull
- private static final String RESOURCE3_SHORTPATH = "Resource3";
- @Nonnull
- private static final String RESOURCE1_LONGPATH = FileType.RSC.getPrefix() + "/"
- + RESOURCE1_SHORTPATH;
- @Nonnull
- private static final String RESOURCE2_LONGPATH = FileType.RSC.getPrefix() + "/"
- + RESOURCE2_SHORTPATH;
- @Nonnull
- private static final String RESOURCE3_LONGPATH = FileType.RSC.getPrefix() + "/"
- + RESOURCE3_SHORTPATH;
+ private static final VPath RESOURCE3_PATH = new VPath("rsc/Resource3", '/');
@Nonnull
private static final File TEST001_DIR =
@@ -124,7 +95,6 @@ public class FileConflictTests {
* @throws Exception
*/
@Test
- @Ignore
public void test001a() throws Exception {
File jackOutput = AbstractTestTools.createTempDir();
ByteArrayOutputStream errOut = new ByteArrayOutputStream();
@@ -147,7 +117,6 @@ public class FileConflictTests {
* @throws Exception
*/
@Test
- @Ignore
public void test001b() throws Exception {
File jackOutput = AbstractTestTools.createTempDir();
ByteArrayOutputStream errOut = new ByteArrayOutputStream();
@@ -171,19 +140,28 @@ public class FileConflictTests {
* @throws Exception
*/
@Test
- @Ignore
public void test001c() throws Exception {
File jackOutput = AbstractTestTools.createTempDir();
ByteArrayOutputStream errOut = new ByteArrayOutputStream();
runTest001(jackOutput, "keep-first", errOut /* errorStream */, /* isApiTest = */ false,
/* verbose = */ false);
- File myClass1 = new File(jackOutput, JACK_FILE_PATH_1);
- File myClass2 = new File(jackOutput, JACK_FILE_PATH_2);
- File myClass3 = new File(jackOutput, JACK_FILE_PATH_3);
- Assert.assertTrue(myClass1.exists());
- Assert.assertTrue(myClass2.exists());
- Assert.assertTrue(myClass3.exists());
- Assert.assertTrue(errOut.toString().isEmpty());
+ InputJackLibrary outputLib = null;
+ try {
+ outputLib = AbstractTestTools.getInputJackLibrary(jackOutput);
+ InputVFile myClass1 = outputLib.getFile(FileType.JAYCE, TYPE1_PATH);
+ InputVFile myClass2 = outputLib.getFile(FileType.JAYCE, TYPE2_PATH);
+ InputVFile myClass3 = outputLib.getFile(FileType.JAYCE, TYPE3_PATH);
+ checkJayceNotEmpty(myClass1);
+ checkJayceNotEmpty(myClass2);
+ checkJayceNotEmpty(myClass3);
+ } catch (FileTypeDoesNotExistException e) {
+ Assert.fail();
+ } finally {
+ if (outputLib != null) {
+ outputLib.close();
+ }
+ Assert.assertTrue(errOut.toString().isEmpty());
+ }
}
/**
@@ -199,20 +177,30 @@ public class FileConflictTests {
ByteArrayOutputStream errOut = new ByteArrayOutputStream();
runTest001(jackOutput, "keep-first", errOut /* errorStream */, /* isApiTest = */ false,
/* verbose = */ true);
- File myClass1 = new File(jackOutput, JACK_FILE_PATH_1);
- File myClass2 = new File(jackOutput, JACK_FILE_PATH_2);
- File myClass3 = new File(jackOutput, JACK_FILE_PATH_3);
- Assert.assertTrue(myClass1.exists());
- Assert.assertTrue(myClass2.exists());
- Assert.assertTrue(myClass3.exists());
- String errString = errOut.toString();
- Assert.assertTrue(
- errString.contains("Type com.android.jack.fileconflict.test001.jack.MyClass"));
- Assert.assertTrue(
- errString.contains("Type com.android.jack.fileconflict.test001.jack.MyClass2"));
- Assert.assertTrue(
- errString.contains("Type com.android.jack.fileconflict.test001.jack.MyClass3"));
- Assert.assertTrue(errString.contains("has already been imported"));
+ InputJackLibrary outputLib = null;
+ try {
+ outputLib = AbstractTestTools.getInputJackLibrary(jackOutput);
+ InputVFile myClass1 = outputLib.getFile(FileType.JAYCE, TYPE1_PATH);
+ InputVFile myClass2 = outputLib.getFile(FileType.JAYCE, TYPE2_PATH);
+ InputVFile myClass3 = outputLib.getFile(FileType.JAYCE, TYPE3_PATH);
+ checkJayceNotEmpty(myClass1);
+ checkJayceNotEmpty(myClass2);
+ checkJayceNotEmpty(myClass3);
+ } catch (FileTypeDoesNotExistException e) {
+ Assert.fail();
+ } finally {
+ if (outputLib != null) {
+ outputLib.close();
+ }
+ String errString = errOut.toString();
+ Assert.assertTrue(
+ errString.contains("Type com.android.jack.fileconflict.test001.jack.MyClass"));
+ Assert.assertTrue(
+ errString.contains("Type com.android.jack.fileconflict.test001.jack.MyClass2"));
+ Assert.assertTrue(
+ errString.contains("Type com.android.jack.fileconflict.test001.jack.MyClass3"));
+ Assert.assertTrue(errString.contains("has already been imported"));
+ }
}
/**
@@ -221,7 +209,6 @@ public class FileConflictTests {
* @throws Exception
*/
@Test
- @Ignore
public void test002a() throws Exception {
File jackOutput;
ByteArrayOutputStream errOut = new ByteArrayOutputStream();
@@ -233,7 +220,6 @@ public class FileConflictTests {
Assert.assertTrue(e.getCause() instanceof LibraryReadingException);
Assert.assertTrue(e.getCause().getCause() instanceof ResourceImportConflictException);
String errString = errOut.toString();
- Assert.assertTrue(errString.contains("Resource in"));
Assert.assertTrue(errString.contains("rsc/Resource1"));
Assert.assertTrue(errString.contains("has already been imported"));
}
@@ -245,7 +231,6 @@ public class FileConflictTests {
* @throws Exception
*/
@Test
- @Ignore
public void test002b() throws Exception {
File jackOutput;
ByteArrayOutputStream errOut = new ByteArrayOutputStream();
@@ -257,7 +242,6 @@ public class FileConflictTests {
Assert.assertTrue(e.getCause() instanceof LibraryReadingException);
Assert.assertTrue(e.getCause().getCause() instanceof ResourceImportConflictException);
String errString = errOut.toString();
- Assert.assertTrue(errString.contains("Resource in"));
Assert.assertTrue(errString.contains("rsc/Resource1"));
Assert.assertTrue(errString.contains("has already been imported"));
}
@@ -270,15 +254,22 @@ public class FileConflictTests {
* @throws Exception
*/
@Test
- @Ignore
public void test002c() throws Exception {
File jackOutput;
ByteArrayOutputStream errOut = new ByteArrayOutputStream();
jackOutput = runTest002(false /* non-zipped */, "keep-first", errOut, /* isApiTest = */ false,
/* verbose = */ false);
- checkResourceContent(jackOutput, RESOURCE1_LONGPATH, "Res1");
- checkResourceContent(jackOutput, RESOURCE2_LONGPATH, "Res2");
- checkResourceContent(jackOutput, RESOURCE3_LONGPATH, "Res3");
+ InputJackLibrary lib = null;
+ try {
+ lib = AbstractTestTools.getInputJackLibrary(jackOutput);
+ checkResourceContent(lib, RESOURCE1_PATH, "Res1");
+ checkResourceContent(lib, RESOURCE2_PATH, "Res2");
+ checkResourceContent(lib, RESOURCE3_PATH, "Res3");
+ } finally {
+ if (lib != null) {
+ lib.close();
+ }
+ }
Assert.assertTrue(errOut.toString().isEmpty());
}
@@ -288,7 +279,6 @@ public class FileConflictTests {
* @throws Exception
*/
@Test
- @Ignore
public void test002d() throws Exception {
File jackOutput;
ByteArrayOutputStream errOut = new ByteArrayOutputStream();
@@ -300,7 +290,6 @@ public class FileConflictTests {
Assert.assertTrue(e.getCause() instanceof LibraryReadingException);
Assert.assertTrue(e.getCause().getCause() instanceof ResourceImportConflictException);
String errString = errOut.toString();
- Assert.assertTrue(errString.contains("Resource in"));
Assert.assertTrue(errString.contains("rsc/Resource1"));
Assert.assertTrue(errString.contains("has already been imported"));
}
@@ -312,7 +301,6 @@ public class FileConflictTests {
* @throws Exception
*/
@Test
- @Ignore
public void test002e() throws Exception {
File jackOutput;
ByteArrayOutputStream errOut = new ByteArrayOutputStream();
@@ -324,7 +312,6 @@ public class FileConflictTests {
Assert.assertTrue(e.getCause() instanceof LibraryReadingException);
Assert.assertTrue(e.getCause().getCause() instanceof ResourceImportConflictException);
String errString = errOut.toString();
- Assert.assertTrue(errString.contains("Resource in"));
Assert.assertTrue(errString.contains("rsc/Resource1"));
Assert.assertTrue(errString.contains("has already been imported"));
}
@@ -342,10 +329,17 @@ public class FileConflictTests {
ByteArrayOutputStream errOut = new ByteArrayOutputStream();
jackOutput = runTest002(true /* zipped */, "keep-first", errOut, /* isApiTest = */ false,
/* verbose = */ false);
- ZipFile zipFile = new ZipFile(jackOutput);
- checkResourceContent(zipFile, RESOURCE1_LONGPATH, "Res1");
- checkResourceContent(zipFile, RESOURCE2_LONGPATH, "Res2");
- checkResourceContent(zipFile, RESOURCE3_LONGPATH, "Res3");
+ InputJackLibrary lib = null;
+ try {
+ lib = AbstractTestTools.getInputJackLibrary(jackOutput);
+ checkResourceContent(lib, RESOURCE1_PATH, "Res1");
+ checkResourceContent(lib, RESOURCE2_PATH, "Res2");
+ checkResourceContent(lib, RESOURCE3_PATH, "Res3");
+ } finally {
+ if (lib != null) {
+ lib.close();
+ }
+ }
Assert.assertTrue(errOut.toString().isEmpty());
}
@@ -362,12 +356,18 @@ public class FileConflictTests {
ByteArrayOutputStream errOut = new ByteArrayOutputStream();
jackOutput = runTest002(true /* zipped */, "keep-first", errOut, /* isApiTest = */ false,
/* verbose = */ true);
- ZipFile zipFile = new ZipFile(jackOutput);
- checkResourceContent(zipFile, RESOURCE1_LONGPATH, "Res1");
- checkResourceContent(zipFile, RESOURCE2_LONGPATH, "Res2");
- checkResourceContent(zipFile, RESOURCE3_LONGPATH, "Res3");
+ InputJackLibrary lib = null;
+ try {
+ lib = AbstractTestTools.getInputJackLibrary(jackOutput);
+ checkResourceContent(lib, RESOURCE1_PATH, "Res1");
+ checkResourceContent(lib, RESOURCE2_PATH, "Res2");
+ checkResourceContent(lib, RESOURCE3_PATH, "Res3");
+ } finally {
+ if (lib != null) {
+ lib.close();
+ }
+ }
String errString = errOut.toString();
- Assert.assertTrue(errString.contains("Resource in"));
Assert.assertTrue(errString.contains("rsc/Resource1"));
Assert.assertTrue(errString.contains("has already been imported"));
}
@@ -378,9 +378,8 @@ public class FileConflictTests {
* @throws Exception
*/
@Test
- @Ignore
- public void test003a() throws Exception {
- // compile source files to a Jack dir
+ public void test003() throws Exception {
+
File jackOutput = AbstractTestTools.createTempDir();
File testSrcDir = AbstractTestTools.getTestRootDir("com.android.jack.fileconflict.test003");
File tempJackFolder = AbstractTestTools.createTempDir();
@@ -389,141 +388,99 @@ public class FileConflictTests {
exclude.add(LegacyJillToolchain.class);
JackBasedToolchain toolchain =
AbstractTestTools.getCandidateToolchain(JackBasedToolchain.class, exclude);
- toolchain.addToClasspath(toolchain.getDefaultBootClasspath())
+ toolchain.addResourceDir(new File(testSrcDir, "jack/rsc1"))
+ .addToClasspath(toolchain.getDefaultBootClasspath())
.srcToLib(
tempJackFolder,
/* zipFiles = */ false,
testSrcDir);
- // get paths for Jack files
- String jackFilePath =
- FileType.JAYCE.getPrefix() + "/com/android/jack/fileconflict/test003/jack/MyClass.jayce";
- File myClass1 = new File(tempJackFolder, jackFilePath);
-
- // get paths for Dex files
- String dexFilePath =
- FileType.DEX.getPrefix() + "/com/android/jack/fileconflict/test003/jack/MyClass.dex";
- File myClass1Dex = new File(tempJackFolder, dexFilePath);
-
- String libPropName = JackLibrary.LIBRARY_PROPERTIES_VPATH.getPathAsString('/');
- File libProperties = new File(tempJackFolder, libPropName);
- File digestFile = new File(tempJackFolder, FileType.DEX.getPrefix() + "/digest");
-
-
- // create Jack dirs to import
- File jackImport1 = AbstractTestTools.createTempDir();
- AbstractTestTools.copyFileToDir(libProperties, libPropName, jackImport1);
- AbstractTestTools.copyFileToDir(myClass1, jackFilePath, jackImport1);
- AbstractTestTools.copyFileToDir(myClass1Dex, dexFilePath, jackImport1);
- AbstractTestTools.copyFileToDir(digestFile, FileType.DEX.getPrefix() + "/digest", jackImport1);
-
- // copy Jack file to output dir
- AbstractTestTools.copyFileToDir(myClass1, jackFilePath, jackOutput);
- AbstractTestTools.copyFileToDir(myClass1Dex, dexFilePath, jackOutput);
-
- toolchain = AbstractTestTools.getCandidateToolchain(JackBasedToolchain.class, exclude);
- toolchain.addProguardFlags(new File(testSrcDir, "proguard.flags"));
- toolchain.libToLib(jackImport1, jackOutput, false);
- }
-
- /**
- * Test the behavior of Jack when outputting a resource to a Jack folder where a file of the
- * same name already exists. We expect the previous file to be overridden.
- * @throws Exception
- */
- @Test
- @Ignore("Now jack generate library, a previous file can not exists")
- public void test003b() throws Exception {
- File jackOutput = AbstractTestTools.createTempDir();
-
- // compile source files to a Jack dir
- File testSrcDir = AbstractTestTools.getTestRootDir("com.android.jack.fileconflict.test003.jack");
- File tempJackFolder = AbstractTestTools.createTempDir();
- JackBasedToolchain toolchain =
- AbstractTestTools.getCandidateToolchain(JackBasedToolchain.class);
- toolchain.addToClasspath(toolchain.getDefaultBootClasspath())
+ toolchain =
+ AbstractTestTools.getCandidateToolchain(JackBasedToolchain.class, exclude);
+ toolchain.addResourceDir(new File(testSrcDir, "jack/rsc2"))
+ .addToClasspath(toolchain.getDefaultBootClasspath())
.srcToLib(
tempJackFolder,
/* zipFiles = */ false,
testSrcDir);
- // get paths for Jack files
- String jackFilePath =
- FileType.JAYCE.getPrefix() + "/com/android/jack/fileconflict/test003/jack/MyClass.jayce";
- File myClass1 = new File(tempJackFolder, jackFilePath);
-
- String libPropName = JackLibrary.LIBRARY_PROPERTIES_VPATH.getPathAsString('/');
- File libProperties = new File(tempJackFolder, libPropName);
-
- // create Jack dirs to import
- File jackImport1 = AbstractTestTools.createTempDir();
- String resourcePath = "com/android/jack/fileconflict/test003/jack/Resource";
- File resource = new File(testSrcDir, "Resource");
- AbstractTestTools.copyFileToDir(libProperties, libPropName, jackImport1);
- AbstractTestTools.copyFileToDir(myClass1, jackFilePath, jackImport1);
- AbstractTestTools.copyFileToDir(resource, resourcePath, jackImport1);
-
- // copy a different resource to output dir with the same name
- File resource2 = new File(testSrcDir, "Resource2");
- AbstractTestTools.copyFileToDir(resource2, resourcePath, jackOutput);
-
- // run Jack on Jack dir
- toolchain = AbstractTestTools.getCandidateToolchain(JackBasedToolchain.class);
- toolchain.libToLib(jackImport1, jackOutput, /* zipFiles = */ false);
+ VPath typePath = new VPath("com/android/jack/fileconflict/test003/jack/MyClass", '/');
+ InputJackLibrary lib = null;
+ try {
+ lib = AbstractTestTools.getInputJackLibrary(tempJackFolder);
- checkResourceContent(jackOutput, resourcePath, "Res1");
+ // check Jayce file is not empty
+ InputVFile jayceFile = lib.getFile(FileType.JAYCE, typePath);
+ checkJayceNotEmpty(jayceFile);
+ // check Resource file content
+ checkResourceContent(lib, new VPath("Resource", '/'), "Res2");
+ } finally {
+ if (lib != null) {
+ lib.close();
+ }
+ }
}
/**
- * Test the behavior of Jack when renaming a Jack file along with the resource with a matching
+ * Test the behavior of Jack when renaming a Jayce file along with the resource with a matching
* name, and when a resource with the same name (after renaming) already exists.
* @throws Exception
*/
@Test
- @Category(KnownBugs.class)
public void test004() throws Exception {
File jackOutput = AbstractTestTools.createTempDir();
+ VPath pathToType = new VPath("com/android/jack/fileconflict/test004/jack/MyClass", '/');
+ VPath pathToRenamedType = new VPath("pcz/nbqfcvq/wnpx/svyrpcbsyvph/hrgh004/wnpx/ZmPyngg", '/');
+ VPath pathToResource2 = pathToRenamedType.clone().addSuffix(".txt");
- // compile source files to a Jack dir
- File testSrcDir = AbstractTestTools.getTestRootDir("com.android.jack.fileconflict.test004.jack");
- File tempJackFolder = AbstractTestTools.createTempDir();
+ // compile source files to a lib dir while importing ZmPyngg.txt
+ File testSrcDir =
+ AbstractTestTools.getTestRootDir("com.android.jack.fileconflict.test004.jack");
+ File jackImport1 = AbstractTestTools.createTempDir();
JackApiToolchainBase toolchain =
AbstractTestTools.getCandidateToolchain(JackApiToolchainBase.class);
- toolchain.addToClasspath(toolchain.getDefaultBootClasspath())
+ toolchain.addResourceDir(new File(testSrcDir, "rsc2"))
+ .addToClasspath(toolchain.getDefaultBootClasspath())
.srcToLib(
- tempJackFolder,
+ jackImport1,
/* zipFiles = */ false,
testSrcDir);
- // get paths for Jack files
- String jackFilePath =
- FileType.JAYCE.getPrefix() + "/com/android/jack/fileconflict/test004/jack/MyClass.jayce";
- File myClass1 = new File(tempJackFolder, jackFilePath);
-
- String libPropName = JackLibrary.LIBRARY_PROPERTIES_VPATH.getPathAsString('/');
- File libProperties = new File(tempJackFolder, libPropName);
-
- // create Jack dirs to import
- File jackImport1 = AbstractTestTools.createTempDir();
- File resource = new File(testSrcDir, "MyClass.txt");
- AbstractTestTools.copyFileToDir(libProperties, libPropName, jackImport1);
- AbstractTestTools.copyFileToDir(myClass1, jackFilePath, jackImport1);
- AbstractTestTools.copyFileToDir(resource, "com/android/jack/fileconflict/test004/jack/MyClass.txt", jackImport1);
-
- // copy a different resource to output dir with the same name
- File resource2 = new File(testSrcDir, "a.txt");
- AbstractTestTools.copyFileToDir(resource2, "pcz/nbqfcvq/wnpx/svyrpcbsyvph/hrgh004/wnpx/ZmPyngg.txt", jackOutput);
+ InputJackLibrary lib = null;
+ try {
+ lib = AbstractTestTools.getInputJackLibrary(jackImport1);
+ checkResourceContent(lib, pathToResource2, "a");
+ checkJayceNotEmpty(lib.getFile(FileType.JAYCE, pathToType));
+ } finally {
+ if (lib != null) {
+ lib.close();
+ }
+ }
- // run Jack on Jack dir
+ // compile source files to the same lib dir while importing MyClass.txt which should be
+ // obfuscated as ZmPyngg.txt
toolchain = AbstractTestTools.getCandidateToolchain(JackApiToolchainBase.class);
+ toolchain.addResourceDir(new File(testSrcDir, "rsc1"));
toolchain.addProguardFlags(new File(testSrcDir, "proguard.flags"));
toolchain.addProperty(NameProviderFactory.NAMEPROVIDER.getName(), "rot13");
- toolchain.libToLib(jackImport1, jackOutput, /* zipFiles = */ false);
+ toolchain.addToClasspath(toolchain.getDefaultBootClasspath())
+ .srcToLib(
+ jackImport1,
+ /* zipFiles = */ false,
+ testSrcDir);
- checkResourceContent(jackOutput, "pcz/nbqfcvq/wnpx/svyrpcbsyvph/hrgh004/wnpx/ZmPyngg.txt",
- "MyClass");
+ try {
+ lib = AbstractTestTools.getInputJackLibrary(jackImport1);
+ checkResourceContent(lib, pathToResource2, "MyClass");
+ checkJayceNotEmpty(lib.getFile(FileType.JAYCE, pathToRenamedType));
+ checkJayceNotEmpty(lib.getFile(FileType.JAYCE, pathToType)); // still here from 1st run
+ } finally {
+ if (lib != null) {
+ lib.close();
+ }
+ }
}
@Nonnull
@@ -538,54 +495,39 @@ public class FileConflictTests {
private void runTest001(@Nonnull File jackOutput, @CheckForNull String collisionPolicy,
@CheckForNull OutputStream errorStream, boolean isApiTest, boolean verbose) throws Exception {
- // compile source files to a Jack dir
- File tempJackFolder = AbstractTestTools.createTempDir();
- JackBasedToolchain toolchain = getToolchain(isApiTest);
+ // create Jack dirs to import
+ File jackLib1 = AbstractTestTools.createTempDir();
+ File jackLib2 = AbstractTestTools.createTempDir();
+
+ File srcFile1 = new File(TEST001_DIR, "MyClass.java");
+ File srcFile2 = new File(TEST001_DIR, "MyClass2.java");
+ File srcFile3 = new File(TEST001_DIR, "MyClass3.java");
+ JackBasedToolchain toolchain = getToolchain(isApiTest);
if (errorStream != null) {
toolchain.setErrorStream(errorStream);
}
toolchain.setVerbose(verbose);
toolchain.addToClasspath(toolchain.getDefaultBootClasspath()).srcToLib(
- tempJackFolder,
+ jackLib1,
/* zipFile = */ false,
- TEST001_DIR);
-
- // get paths for Jack files
- File myClass1 = new File(tempJackFolder, JACK_FILE_PATH_1);
- File myClass2 = new File(tempJackFolder, JACK_FILE_PATH_2);
- File myClass3 = new File(tempJackFolder, JACK_FILE_PATH_3);
-
- // get paths for dex files
- File myClass1Dex = new File(tempJackFolder, DEX_FILE_PATH_1);
- File myClass2Dex = new File(tempJackFolder, DEX_FILE_PATH_2);
- File myClass3Dex = new File(tempJackFolder, DEX_FILE_PATH_3);
+ srcFile1, srcFile2);
- String libPropName = JackLibrary.LIBRARY_PROPERTIES_VPATH.getPathAsString('/');
- File libProperties = new File(tempJackFolder, libPropName);
- File digestFile = new File(tempJackFolder, FileType.DEX.getPrefix() + "/digest");
-
- // create Jack dirs to import
- File jackImport1 = AbstractTestTools.createTempDir();
- File jackImport2 = AbstractTestTools.createTempDir();
- AbstractTestTools.copyFileToDir(digestFile, FileType.DEX.getPrefix() + "/digest", jackImport1);
- AbstractTestTools.copyFileToDir(digestFile, FileType.DEX.getPrefix() + "/digest", jackImport2);
- AbstractTestTools.copyFileToDir(libProperties, libPropName, jackImport1);
- AbstractTestTools.copyFileToDir(myClass1, JACK_FILE_PATH_1, jackImport1);
- AbstractTestTools.copyFileToDir(myClass1Dex, DEX_FILE_PATH_1, jackImport1);
- AbstractTestTools.copyFileToDir(myClass2, JACK_FILE_PATH_2, jackImport1);
- AbstractTestTools.copyFileToDir(myClass2Dex, DEX_FILE_PATH_2, jackImport1);
- AbstractTestTools.copyFileToDir(libProperties, libPropName, jackImport2);
- AbstractTestTools.copyFileToDir(myClass1, JACK_FILE_PATH_1, jackImport2);
- AbstractTestTools.copyFileToDir(myClass1Dex, DEX_FILE_PATH_1, jackImport2);
- AbstractTestTools.copyFileToDir(myClass3, JACK_FILE_PATH_3, jackImport2);
- AbstractTestTools.copyFileToDir(myClass3Dex, DEX_FILE_PATH_3, jackImport2);
+ toolchain = getToolchain(isApiTest);
+ if (errorStream != null) {
+ toolchain.setErrorStream(errorStream);
+ }
+ toolchain.setVerbose(verbose);
+ toolchain.addToClasspath(toolchain.getDefaultBootClasspath()).srcToLib(
+ jackLib2,
+ /* zipFile = */ false,
+ srcFile1, srcFile3);
// run Jack on Jack dirs
toolchain = getToolchain(isApiTest);
toolchain.addProguardFlags(new File(TEST001_DIR, "proguard.flags"));
- toolchain.addStaticLibs(jackImport1, jackImport2);
+ toolchain.addStaticLibs(jackLib1, jackLib2);
toolchain.addToClasspath(toolchain.getDefaultBootClasspath());
if (collisionPolicy != null) {
toolchain.addProperty(JayceFileImporter.COLLISION_POLICY.getName(), collisionPolicy);
@@ -593,7 +535,7 @@ public class FileConflictTests {
if (errorStream != null) {
toolchain.setErrorStream(errorStream);
}
- toolchain.libToLib(new File [] {jackImport1, jackImport2}, jackOutput, /* zipFiles = */ false);
+ toolchain.libToLib(new File [] {jackLib1, jackLib2}, jackOutput, /* zipFiles = */ false);
}
@Nonnull
@@ -604,7 +546,7 @@ public class FileConflictTests {
File lib1 = new File(TEST002_DIR, "lib1");
JackBasedToolchain toolchain = getToolchain(isApiTest);
- toolchain.addResource(new File(lib1, "rsc"));
+ toolchain.addResourceDir(new File(lib1, "rsc"));
if (errorStream != null) {
toolchain.setErrorStream(errorStream);
}
@@ -618,7 +560,7 @@ public class FileConflictTests {
File jackImport2 = AbstractTestTools.createTempDir();
File lib2 = new File(TEST002_DIR, "lib2");
toolchain = getToolchain(isApiTest);
- toolchain.addResource(new File(lib2, "rsc"));
+ toolchain.addResourceDir(new File(lib2, "rsc"));
if (errorStream != null) {
toolchain.setErrorStream(errorStream);
}
@@ -647,15 +589,12 @@ public class FileConflictTests {
return jackOutput;
}
- private void checkResourceContent(@Nonnull File dir, @Nonnull String path,
- @Nonnull String expectedContent) throws IOException {
- assert dir.isDirectory();
- File file = new File(dir, path);
- Assert.assertTrue(file.exists());
+ private void checkResourceContent(@Nonnull InputJackLibrary lib, @Nonnull VPath path,
+ @Nonnull String expectedContent) throws IOException, FileTypeDoesNotExistException {
BufferedReader reader = null;
try {
- InputStream in = new FileInputStream(file);
- reader = new BufferedReader(new InputStreamReader(in));
+ reader = new BufferedReader(
+ new InputStreamReader(lib.getFile(FileType.RSC, path).getInputStream()));
String line = reader.readLine();
Assert.assertEquals(expectedContent, line);
} finally {
@@ -665,20 +604,8 @@ public class FileConflictTests {
}
}
- private void checkResourceContent(@Nonnull ZipFile zipFile, @Nonnull String entryName,
- @Nonnull String expectedContent) throws IOException {
- ZipEntry entry = zipFile.getEntry(entryName);
- Assert.assertNotNull(entry);
- BufferedReader reader = null;
- try {
- InputStream in = zipFile.getInputStream(entry);
- reader = new BufferedReader(new InputStreamReader(in));
- String line = reader.readLine();
- Assert.assertEquals(expectedContent, line);
- } finally {
- if (reader != null) {
- reader.close();
- }
- }
+ private void checkJayceNotEmpty(@Nonnull InputVFile jayceFile) {
+ File file = new File(((FileLocation) jayceFile.getLocation()).getPath());
+ Assert.assertTrue(file.length() > 0);
}
}
diff --git a/jack-tests/tests/com/android/jack/fileconflict/test002/jack/lib1/rsc/Resource1 b/jack-tests/tests/com/android/jack/fileconflict/test002/jack/lib1/rsc/rsc/Resource1
index b98ccd9..b98ccd9 100644
--- a/jack-tests/tests/com/android/jack/fileconflict/test002/jack/lib1/rsc/Resource1
+++ b/jack-tests/tests/com/android/jack/fileconflict/test002/jack/lib1/rsc/rsc/Resource1
diff --git a/jack-tests/tests/com/android/jack/fileconflict/test002/jack/lib1/rsc/Resource2 b/jack-tests/tests/com/android/jack/fileconflict/test002/jack/lib1/rsc/rsc/Resource2
index 1bcdbc0..1bcdbc0 100644
--- a/jack-tests/tests/com/android/jack/fileconflict/test002/jack/lib1/rsc/Resource2
+++ b/jack-tests/tests/com/android/jack/fileconflict/test002/jack/lib1/rsc/rsc/Resource2
diff --git a/jack-tests/tests/com/android/jack/fileconflict/test002/jack/lib2/rsc/Resource1 b/jack-tests/tests/com/android/jack/fileconflict/test002/jack/lib2/rsc/rsc/Resource1
index b98ccd9..b98ccd9 100644
--- a/jack-tests/tests/com/android/jack/fileconflict/test002/jack/lib2/rsc/Resource1
+++ b/jack-tests/tests/com/android/jack/fileconflict/test002/jack/lib2/rsc/rsc/Resource1
diff --git a/jack-tests/tests/com/android/jack/fileconflict/test002/jack/lib2/rsc/Resource3 b/jack-tests/tests/com/android/jack/fileconflict/test002/jack/lib2/rsc/rsc/Resource3
index d0da24e..d0da24e 100644
--- a/jack-tests/tests/com/android/jack/fileconflict/test002/jack/lib2/rsc/Resource3
+++ b/jack-tests/tests/com/android/jack/fileconflict/test002/jack/lib2/rsc/rsc/Resource3
diff --git a/jack-tests/tests/com/android/jack/fileconflict/test003/jack/proguard.flags b/jack-tests/tests/com/android/jack/fileconflict/test003/jack/proguard.flags
deleted file mode 100644
index b46ee55..0000000
--- a/jack-tests/tests/com/android/jack/fileconflict/test003/jack/proguard.flags
+++ /dev/null
@@ -1,2 +0,0 @@
--keep class com.android.jack.fileconflict.test003.jack.*
--dontobfuscate
diff --git a/jack-tests/tests/com/android/jack/fileconflict/test003/jack/Resource b/jack-tests/tests/com/android/jack/fileconflict/test003/jack/rsc1/Resource
index b98ccd9..b98ccd9 100644
--- a/jack-tests/tests/com/android/jack/fileconflict/test003/jack/Resource
+++ b/jack-tests/tests/com/android/jack/fileconflict/test003/jack/rsc1/Resource
diff --git a/jack-tests/tests/com/android/jack/fileconflict/test003/jack/Resource2 b/jack-tests/tests/com/android/jack/fileconflict/test003/jack/rsc2/Resource
index 1bcdbc0..1bcdbc0 100644
--- a/jack-tests/tests/com/android/jack/fileconflict/test003/jack/Resource2
+++ b/jack-tests/tests/com/android/jack/fileconflict/test003/jack/rsc2/Resource
diff --git a/jack-tests/tests/com/android/jack/fileconflict/test004/jack/MyClass.txt b/jack-tests/tests/com/android/jack/fileconflict/test004/jack/rsc1/com/android/jack/fileconflict/test004/jack/MyClass.txt
index cc5c81f..cc5c81f 100644
--- a/jack-tests/tests/com/android/jack/fileconflict/test004/jack/MyClass.txt
+++ b/jack-tests/tests/com/android/jack/fileconflict/test004/jack/rsc1/com/android/jack/fileconflict/test004/jack/MyClass.txt
diff --git a/jack-tests/tests/com/android/jack/fileconflict/test004/jack/a.txt b/jack-tests/tests/com/android/jack/fileconflict/test004/jack/rsc2/pcz/nbqfcvq/wnpx/svyrpcbsyvph/hrgh004/wnpx/ZmPyngg.txt
index 7898192..7898192 100644
--- a/jack-tests/tests/com/android/jack/fileconflict/test004/jack/a.txt
+++ b/jack-tests/tests/com/android/jack/fileconflict/test004/jack/rsc2/pcz/nbqfcvq/wnpx/svyrpcbsyvph/hrgh004/wnpx/ZmPyngg.txt
diff --git a/jack-tests/tests/com/android/jack/library/LibraryTests.java b/jack-tests/tests/com/android/jack/library/LibraryTests.java
index a9bb144..c482827 100644
--- a/jack-tests/tests/com/android/jack/library/LibraryTests.java
+++ b/jack-tests/tests/com/android/jack/library/LibraryTests.java
@@ -121,7 +121,7 @@ public class LibraryTests {
AbstractTestTools.getCandidateToolchain(JackBasedToolchain.class);
File emptyLib = AbstractTestTools.createTempFile("rsc", toolchain.getLibraryExtension());
- toolchain.addResource(AbstractTestTools.getTestRootDir("com.android.jack.library.test001.lib"));
+ toolchain.addResourceDir(AbstractTestTools.getTestRootDir("com.android.jack.library.test001.lib"));
toolchain.srcToLib(emptyLib, /* zipFiles = */ true);
return emptyLib;
diff --git a/jack-tests/tests/com/android/jack/multidex/MultiDexTests.java b/jack-tests/tests/com/android/jack/multidex/MultiDexTests.java
index 303a672..e9ec887 100644
--- a/jack-tests/tests/com/android/jack/multidex/MultiDexTests.java
+++ b/jack-tests/tests/com/android/jack/multidex/MultiDexTests.java
@@ -16,15 +16,12 @@
package com.android.jack.multidex;
-import com.google.common.io.Files;
-
import com.android.jack.Options;
import com.android.jack.backend.dex.DexFileWriter;
import com.android.jack.backend.dex.MultiDexLegacy;
import com.android.jack.comparator.DifferenceFoundException;
import com.android.jack.dx.io.ClassDef;
import com.android.jack.dx.io.DexBuffer;
-import com.android.jack.library.FileType;
import com.android.jack.preprocessor.PreProcessor;
import com.android.jack.shrob.ListingComparator;
import com.android.jack.test.category.KnownBugs;
@@ -45,19 +42,15 @@ import com.android.sched.util.TextUtils;
import junit.framework.Assert;
import org.junit.BeforeClass;
-import org.junit.Ignore;
import org.junit.Test;
import org.junit.experimental.categories.Category;
import java.io.File;
-import java.io.FileInputStream;
import java.io.FileNotFoundException;
-import java.io.FileOutputStream;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
-import java.util.Properties;
import javax.annotation.Nonnull;
@@ -263,7 +256,8 @@ public class MultiDexTests {
}
@Nonnull
- private static File prepareLib(@Nonnull File sources, @Nonnull File... classpath) throws Exception {
+ private static File prepareLib(@Nonnull File sources, @Nonnull File... classpath)
+ throws Exception {
File outDir = AbstractTestTools.createTempDir();
List<Class<? extends IToolchain>> exclude = new ArrayList<Class<? extends IToolchain>>();
exclude.add(LegacyJillToolchain.class);
@@ -289,37 +283,27 @@ public class MultiDexTests {
}
@Nonnull
- private static File prepareLibrary(@Nonnull File frameworks) throws IOException, Exception {
+ private static File prepareLibrary(@Nonnull File classpath) throws IOException, Exception {
return prepareLib(AbstractTestTools.getTestRootDir("com.android.jack.multidex.fakelibrary"),
- frameworks);
+ classpath);
}
- private static void setMetaIntoJackProperties(@Nonnull File library) throws IOException {
- File jackProperties = new File(library, "jack.properties");
- Properties libraryProperties = new Properties();
- FileInputStream fis = null;
- FileOutputStream fos = null;
- try {
- fis = new FileInputStream(jackProperties);
- libraryProperties.load(fis);
- } catch (IOException e) {
- Assert.fail();
- } finally {
- if (fis != null) {
- fis.close();
- }
- }
- try {
- fos = new FileOutputStream(jackProperties);
- libraryProperties.put(FileType.JPP.buildPropertyName(null /*suffix*/), "true");
- libraryProperties.store(fos, "Library properties");
- } catch (IOException e) {
- Assert.fail();
- } finally {
- if (fos != null) {
- fos.close();
- }
- }
+ @Nonnull
+ private static File prepareAutoLibrary() throws Exception {
+ File jppDir = AbstractTestTools.getTestRootDir("com.android.jack.multidex.jpp");
+ File autoLibrary = AbstractTestTools.createTempDir();
+ List<Class<? extends IToolchain>> exclude = new ArrayList<Class<? extends IToolchain>>();
+ exclude.add(LegacyJillToolchain.class);
+ JackBasedToolchain toolchain =
+ AbstractTestTools.getCandidateToolchain(JackBasedToolchain.class, exclude);
+ toolchain.addMetaDir(jppDir)
+ .addToClasspath(toolchain.getDefaultBootClasspath())
+ .addToClasspath(frameworks)
+ .srcToLib(
+ autoLibrary,
+ /* zipFiles = */ false,
+ AbstractTestTools.getTestRootDir("com.android.jack.multidex.fakelibrary"));
+ return autoLibrary;
}
@Test
@@ -330,7 +314,8 @@ public class MultiDexTests {
JackApiToolchainBase toolchain =
AbstractTestTools.getCandidateToolchain(JackApiToolchainBase.class);
- addCommonOptionsForMultiDex(toolchain, new File(testFolder, "config-001.jpp"));
+ File jppDir = AbstractTestTools.getTestRootDir("com.android.jack.multidex.jpp");
+ addCommonOptionsForMultiDex(toolchain, new File(jppDir, "config-001.jpp"));
toolchain.addProperty(DexFileWriter.DEX_WRITING_POLICY.getName(), "multidex");
toolchain.addProperty(Options.USE_DEFAULT_LIBRARIES.getName(), "false");
@@ -361,7 +346,8 @@ public class MultiDexTests {
JackApiToolchainBase toolchain =
AbstractTestTools.getCandidateToolchain(JackApiToolchainBase.class);
- addCommonOptionsForMultiDex(toolchain, new File(testFolder, "config-001.jpp"));
+ File jppDir = AbstractTestTools.getTestRootDir("com.android.jack.multidex.jpp");
+ addCommonOptionsForMultiDex(toolchain, new File(jppDir, "config-001.jpp"));
toolchain.addProperty(DexFileWriter.DEX_WRITING_POLICY.getName(), "minimal-multidex");
toolchain.addStaticLibs(library);
toolchain.addProperty(Options.USE_DEFAULT_LIBRARIES.getName(), "false");
@@ -388,14 +374,9 @@ public class MultiDexTests {
@Test
@Category(SlowTests.class)
- @Ignore
public void legacyAppTest002b_auto() throws Exception {
File testFolder = AbstractTestTools.getTestRootDir("com.android.jack.multidex.test002.jack");
- File autoLibrary = prepareLibrary(frameworks);
- setMetaIntoJackProperties(autoLibrary);
- File jackInf = new File(autoLibrary, FileType.JPP.getPrefix());
- Assert.assertTrue(jackInf.mkdir());
- Files.copy(new File(testFolder,"config-001.jpp"), new File(jackInf, "config-001.jpp"));
+ File autoLibrary = prepareAutoLibrary();
JackApiToolchainBase toolchain =
AbstractTestTools.getCandidateToolchain(JackApiToolchainBase.class);
@@ -479,14 +460,9 @@ public class MultiDexTests {
}
@Test
- @Ignore
public void legacyAppTest002b_auto_withoutAnnotations() throws Exception {
File testFolder = AbstractTestTools.getTestRootDir("com.android.jack.multidex.test002.jack");
- File autoLibrary = prepareLibrary(frameworks);
- setMetaIntoJackProperties(autoLibrary);
- File jackInf = new File(autoLibrary, FileType.JPP.getPrefix());
- Assert.assertTrue(jackInf.mkdir());
- Files.copy(new File(testFolder,"config-001.jpp"), new File(jackInf, "config-001.jpp"));
+ File autoLibrary = prepareAutoLibrary();
File out = AbstractTestTools.createTempDir();
List<Class<? extends IToolchain>> exclude = new ArrayList<Class<? extends IToolchain>>();
diff --git a/jack-tests/tests/com/android/jack/multidex/test002/jack/config-001.jpp b/jack-tests/tests/com/android/jack/multidex/jpp/config-001.jpp
index cbcfdf5..2a3eb03 100644
--- a/jack-tests/tests/com/android/jack/multidex/test002/jack/config-001.jpp
+++ b/jack-tests/tests/com/android/jack/multidex/jpp/config-001.jpp
@@ -1,4 +1,4 @@
-multidexInstanciable:
+multidexInstantiable:
@@com.android.jack.annotations.MultiDexInstaller
class *
is {
diff --git a/jack-tests/tests/com/android/jack/resource/ResourceTests.java b/jack-tests/tests/com/android/jack/resource/ResourceTests.java
index 7098d91..edac93e 100644
--- a/jack-tests/tests/com/android/jack/resource/ResourceTests.java
+++ b/jack-tests/tests/com/android/jack/resource/ResourceTests.java
@@ -115,7 +115,7 @@ public class ResourceTests {
// compile source file to a Jack dir
File jackFolder = AbstractTestTools.createTempDir();
JackBasedToolchain toolchain = AbstractTestTools.getCandidateToolchain(JackBasedToolchain.class);
- toolchain.addResource(new File(FILE, "rsc"));
+ toolchain.addResourceDir(new File(FILE, "rsc"));
toolchain.addToClasspath(toolchain.getDefaultBootClasspath())
.srcToLib(
jackFolder,
@@ -168,7 +168,7 @@ public class ResourceTests {
// compile source file to a Jack dir
File jackFolder = AbstractTestTools.createTempDir();
JackBasedToolchain toolchain = AbstractTestTools.getCandidateToolchain(JackBasedToolchain.class);
- toolchain.addResource(new File(FILE, "rsc"));
+ toolchain.addResourceDir(new File(FILE, "rsc"));
toolchain.addToClasspath(toolchain.getDefaultBootClasspath())
.srcToLib(
jackFolder,
@@ -230,7 +230,7 @@ public class ResourceTests {
// compile source file to a Jack dir
File jackFolder = AbstractTestTools.createTempDir();
JackBasedToolchain toolchain = AbstractTestTools.getCandidateToolchain(JackBasedToolchain.class);
- toolchain.addResource(new File(FILE, "rsc"));
+ toolchain.addResourceDir(new File(FILE, "rsc"));
toolchain.addToClasspath(toolchain.getDefaultBootClasspath())
.srcToLib(
jackFolder,
@@ -264,7 +264,7 @@ public class ResourceTests {
// compile source file to a Jack dir
File jackFolder = AbstractTestTools.createTempDir();
JackBasedToolchain toolchain = AbstractTestTools.getCandidateToolchain(JackBasedToolchain.class);
- toolchain.addResource(new File(FILE, "rsc"));
+ toolchain.addResourceDir(new File(FILE, "rsc"));
toolchain.addToClasspath(toolchain.getDefaultBootClasspath())
.srcToLib(
jackFolder,
@@ -288,7 +288,7 @@ public class ResourceTests {
// compile source file to a Jack dir
File jackFolder = AbstractTestTools.createTempDir();
JackBasedToolchain toolchain = AbstractTestTools.getCandidateToolchain(JackBasedToolchain.class);
- toolchain.addResource(new File(FILE, "rsc"));
+ toolchain.addResourceDir(new File(FILE, "rsc"));
toolchain.addToClasspath(toolchain.getDefaultBootClasspath())
.srcToLib(
jackFolder,
@@ -321,7 +321,7 @@ public class ResourceTests {
String resource2LongPath = "com/android/jack/resource/test003/jack/A.txt";
JackBasedToolchain toolchain =
AbstractTestTools.getCandidateToolchain(JackBasedToolchain.class);
- toolchain.addResource(rscFolder).addToClasspath(toolchain.getDefaultBootClasspath())
+ toolchain.addResourceDir(rscFolder).addToClasspath(toolchain.getDefaultBootClasspath())
.srcToLib(
jackOutputFolder,
/* zipFiles = */ false,
@@ -370,7 +370,7 @@ public class ResourceTests {
// compile source file to a Jack file
JackBasedToolchain toolchain = AbstractTestTools.getCandidateToolchain(JackBasedToolchain.class);
File jackAr = AbstractTestTools.createTempFile("resourcetestjack", toolchain.getLibraryExtension());
- toolchain.addResource(new File(FILE, "rsc"));
+ toolchain.addResourceDir(new File(FILE, "rsc"));
toolchain.addToClasspath(toolchain.getDefaultBootClasspath())
.srcToLib(
jackAr,
diff --git a/jack-tests/tests/com/android/jack/withphantom/WithPhantomTests.java b/jack-tests/tests/com/android/jack/withphantom/WithPhantomTests.java
index 98f8bca..368e2ab 100644
--- a/jack-tests/tests/com/android/jack/withphantom/WithPhantomTests.java
+++ b/jack-tests/tests/com/android/jack/withphantom/WithPhantomTests.java
@@ -18,21 +18,20 @@ package com.android.jack.withphantom;
import com.android.jack.ProguardFlags;
import com.android.jack.library.FileType;
-import com.android.jack.test.category.KnownBugs;
+import com.android.jack.library.InputJackLibrary;
import com.android.jack.test.toolchain.AbstractTestTools;
import com.android.jack.test.toolchain.IToolchain;
import com.android.jack.test.toolchain.JackBasedToolchain;
import com.android.jack.test.toolchain.LegacyJillToolchain;
+import com.android.sched.vfs.InputVFile;
+import com.android.sched.vfs.VPath;
-import junit.framework.Assert;
-
-import org.junit.Ignore;
import org.junit.Test;
import org.junit.experimental.categories.Category;
import java.io.File;
-import java.io.FilenameFilter;
import java.util.ArrayList;
+import java.util.Iterator;
import java.util.List;
import javax.annotation.Nonnull;
@@ -50,13 +49,7 @@ public class WithPhantomTests {
@Nonnull
private static final String TEST002_JACK = TEST002 + ".jack";
- @Nonnull
- private static String fixPath(@Nonnull String unixPath) {
- return unixPath.replace('/', File.separatorChar);
- }
-
@Test
- @Ignore
public void testPhantomOuter() throws Exception {
File tempJackFolder = AbstractTestTools.createTempDir();
List<Class<? extends IToolchain>> exclude = new ArrayList<Class<? extends IToolchain>>();
@@ -69,10 +62,16 @@ public class WithPhantomTests {
/* zipFiles = */ false,
AbstractTestTools.getTestRootDir(TEST001_JACK));
- boolean deleted =
- new File(tempJackFolder, FileType.JAYCE.getPrefix() + File.separatorChar
- + fixPath("com/android/jack/withphantom/test001/jack/A.jayce")).delete();
- Assert.assertTrue(deleted);
+ InputJackLibrary lib = null;
+ try {
+ lib = AbstractTestTools.getInputJackLibrary(tempJackFolder);
+ lib.getFile(FileType.JAYCE, new VPath("com/android/jack/withphantom/test001/jack/A", '/'))
+ .delete();
+ } finally {
+ if (lib != null) {
+ lib.close();
+ }
+ }
File testFolder = AbstractTestTools.getTestRootDir(TEST001);
@@ -93,6 +92,7 @@ public class WithPhantomTests {
File tempOut4 = AbstractTestTools.createTempDir();
toolchain = AbstractTestTools.getCandidateToolchain(JackBasedToolchain.class, exclude);
+ toolchain.addToClasspath(toolchain.getDefaultBootClasspath());
toolchain.addProguardFlags(new ProguardFlags(testFolder, "obf2.flags"))
.libToLib(tempJackFolder, tempOut4, /* zipFiles = */ false);
@@ -102,7 +102,6 @@ public class WithPhantomTests {
}
@Test
- @Ignore
public void testPhantomInner() throws Exception {
File tempJackFolder = AbstractTestTools.createTempDir();
List<Class<? extends IToolchain>> exclude = new ArrayList<Class<? extends IToolchain>>();
@@ -115,19 +114,22 @@ public class WithPhantomTests {
/* zipFiles = */ false,
AbstractTestTools.getTestRootDir(TEST001_JACK));
- boolean deleted =
- new File(tempJackFolder, fixPath(FileType.JAYCE.getPrefix() + File.separatorChar
- + "com/android/jack/withphantom/test001/jack/A$Inner1.jayce")).delete();
- Assert.assertTrue(deleted);
- deleted =
- new File(tempJackFolder, fixPath(FileType.DEX.getPrefix() + File.separatorChar
- + "com/android/jack/withphantom/test001/jack/A$Inner1.dex")).delete();
- Assert.assertTrue(deleted);
+ InputJackLibrary lib = null;
+ try {
+ lib = AbstractTestTools.getInputJackLibrary(tempJackFolder);
+ lib.getFile(FileType.JAYCE,
+ new VPath("com/android/jack/withphantom/test001/jack/A$Inner1", '/')).delete();
+ } finally {
+ if (lib != null) {
+ lib.close();
+ }
+ }
File testFolder = AbstractTestTools.getTestRootDir(TEST001);
File tempOut1 = AbstractTestTools.createTempDir();
toolchain = AbstractTestTools.getCandidateToolchain(JackBasedToolchain.class);
+ toolchain.addToClasspath(toolchain.getDefaultBootClasspath());
toolchain.addProguardFlags(new ProguardFlags(testFolder, "shrink1.flags"))
.libToLib(tempJackFolder, tempOut1, /* zipFiles = */ false);
@@ -138,6 +140,7 @@ public class WithPhantomTests {
File tempOut3 = AbstractTestTools.createTempDir();
toolchain = AbstractTestTools.getCandidateToolchain(JackBasedToolchain.class);
+ toolchain.addToClasspath(toolchain.getDefaultBootClasspath());
toolchain.addProguardFlags(new ProguardFlags(testFolder, "obf1.flags"))
.libToLib(tempJackFolder, tempOut3, /* zipFiles = */ false);
@@ -151,7 +154,6 @@ public class WithPhantomTests {
toolchain.libToExe(tempJackFolder, tempOutFolder, /* zipFile = */ false);
}
- @Category(KnownBugs.class)
@Test
public void testPhantomLocal() throws Exception {
File tempJackFolder = AbstractTestTools.createTempDir();
@@ -163,22 +165,28 @@ public class WithPhantomTests {
/* zipFiles = */ false,
AbstractTestTools.getTestRootDir(TEST002_JACK));
- File[] inners =
- new File(tempJackFolder, fixPath(FileType.JAYCE.getPrefix() + File.separatorChar
- + "com/android/jack/withphantom/test002/jack/")).listFiles(new FilenameFilter() {
- @Override
- public boolean accept(File dir, String name) {
- return name.startsWith("A$");
- }
- });
- for (File file : inners) {
- Assert.assertTrue(file.delete());
+ InputJackLibrary lib = null;
+ try {
+ lib = AbstractTestTools.getInputJackLibrary(tempJackFolder);
+ Iterator<InputVFile> libIter = lib.iterator(FileType.JAYCE);
+ while (libIter.hasNext()) {
+ InputVFile jayceFile = libIter.next();
+ String path = jayceFile.getPathFromRoot().getPathAsString('/');
+ if (path.startsWith("com/android/jack/withphantom/test002/jack/A$")) {
+ jayceFile.delete();
+ }
+ }
+ } finally {
+ if (lib != null) {
+ lib.close();
+ }
}
File testFolder = AbstractTestTools.getTestRootDir(TEST002);
File tempOut1 = AbstractTestTools.createTempDir();
toolchain = AbstractTestTools.getCandidateToolchain(JackBasedToolchain.class);
+ toolchain.addToClasspath(toolchain.getDefaultBootClasspath());
toolchain.addProguardFlags(new ProguardFlags(testFolder, "obf1.flags"))
.libToLib(tempJackFolder, tempOut1, /* zipFiles = */ false);
@@ -188,7 +196,6 @@ public class WithPhantomTests {
}
@Test
- @Ignore
public void testPhantomLocalOuter() throws Exception {
File tempJackFolder = AbstractTestTools.createTempDir();
List<Class<? extends IToolchain>> exclude = new ArrayList<Class<? extends IToolchain>>();
@@ -201,10 +208,16 @@ public class WithPhantomTests {
/* zipFiles = */ false,
AbstractTestTools.getTestRootDir(TEST002_JACK));
- boolean deleted =
- new File(tempJackFolder, fixPath(FileType.JAYCE.getPrefix() + File.separatorChar
- + "com/android/jack/withphantom/test002/jack/A.jayce")).delete();
- Assert.assertTrue(deleted);
+ InputJackLibrary lib = null;
+ try {
+ lib = AbstractTestTools.getInputJackLibrary(tempJackFolder);
+ lib.getFile(FileType.JAYCE, new VPath("com/android/jack/withphantom/test002/jack/A", '/'))
+ .delete();
+ } finally {
+ if (lib != null) {
+ lib.close();
+ }
+ }
File testFolder = AbstractTestTools.getTestRootDir(TEST002);
diff --git a/jack/rsc/jack-version.properties b/jack/rsc/jack-version.properties
new file mode 100644
index 0000000..9a505b2
--- /dev/null
+++ b/jack/rsc/jack-version.properties
@@ -0,0 +1,26 @@
+#
+# Copyright (C) 2015 The Android Open Source Project
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+version-file.version.code=1
+
+version=1.1-rc4
+version.release.name=Brest
+version.release.code=2
+version.sub-release.kind=CANDIDATE
+version.sub-release.code=17
+
+# These properties are added by the release step
+# version.buildid=<BUILDID>
+# version.sha=<SHA>
diff --git a/jack/src/com/android/jack/api/v01/impl/Api01ConfigImpl.java b/jack/src/com/android/jack/api/v01/impl/Api01ConfigImpl.java
index 3d96cc7..94a570f 100644
--- a/jack/src/com/android/jack/api/v01/impl/Api01ConfigImpl.java
+++ b/jack/src/com/android/jack/api/v01/impl/Api01ConfigImpl.java
@@ -76,23 +76,26 @@ public class Api01ConfigImpl implements Api01Config {
throw new ConfigurationException(e.getMessage(), e);
}
- return new Api01CompilationTaskImpl(options);
+ return new Api01CompilationTaskImpl(options, configHooks);
}
private static class Api01CompilationTaskImpl implements Api01CompilationTask {
@Nonnull
private final Options options;
+ @Nonnull
+ private final RunnableHooks runSessionHooks;
- public Api01CompilationTaskImpl(@Nonnull Options options) {
+ public Api01CompilationTaskImpl(@Nonnull Options options,
+ @Nonnull RunnableHooks runSessionHooks) {
this.options = options;
+ this.runSessionHooks = runSessionHooks;
}
@Override
public void run() throws CompilationException, UnrecoverableException {
ProcessException pe = null;
- RunnableHooks runSessionHooks = new RunnableHooks();
try {
try {
Jack.run(options, runSessionHooks);
diff --git a/jack/src/com/android/jack/backend/jayce/JayceFileImporter.java b/jack/src/com/android/jack/backend/jayce/JayceFileImporter.java
index 796f760..783791c 100644
--- a/jack/src/com/android/jack/backend/jayce/JayceFileImporter.java
+++ b/jack/src/com/android/jack/backend/jayce/JayceFileImporter.java
@@ -206,8 +206,7 @@ public class JayceFileImporter {
Resource newResource = new Resource(path, file);
for (Resource existingResource : session.getResources()) {
if (existingResource.getPath().equals(path)) {
- throw new ResourceImportConflictException(newResource.getLocation(),
- existingResource.getLocation());
+ throw new ResourceImportConflictException(existingResource, newResource.getLocation());
}
}
session.addResource(newResource);
diff --git a/jack/src/com/android/jack/library/InputJackLibraryCodec.java b/jack/src/com/android/jack/library/InputJackLibraryCodec.java
index 4dbc3f9..f8ba636 100644
--- a/jack/src/com/android/jack/library/InputJackLibraryCodec.java
+++ b/jack/src/com/android/jack/library/InputJackLibraryCodec.java
@@ -87,7 +87,8 @@ public class InputJackLibraryCodec implements StringCodec<InputJackLibrary> {
ChangePermission.NOCHANGE), Permission.READ | Permission.WRITE);
try {
Service service = messageDigestCodec.checkString(context, "SHA");
- vfs = new CaseInsensitiveFS(directFS, /* nbGroup = */ 1, /* szGroup = */ 2,
+ vfs = new CaseInsensitiveFS(directFS, /* numGroups = */ JackLibrary.NUM_GROUPS_FOR_DIRS,
+ /* groupSize = */ JackLibrary.GROUP_SIZE_FOR_DIRS,
new MessageDigestFactory(service), /* debug = */ false);
} catch (WrongVFSFormatException e) {
vfs = directFS;
diff --git a/jack/src/com/android/jack/library/JackLibrary.java b/jack/src/com/android/jack/library/JackLibrary.java
index 3f98f4d..d91b66b 100644
--- a/jack/src/com/android/jack/library/JackLibrary.java
+++ b/jack/src/com/android/jack/library/JackLibrary.java
@@ -44,6 +44,10 @@ public interface JackLibrary extends Library {
@Nonnull
public static final String KEY_LIB_EMITTER_VERSION = "lib.emitter.version";
+ public static final int GROUP_SIZE_FOR_DIRS = 2;
+
+ public static final int NUM_GROUPS_FOR_DIRS = 1;
+
@Nonnull
public String getProperty(@Nonnull String key) throws LibraryFormatException;
diff --git a/jack/src/com/android/jack/resource/ResourceImportConflictException.java b/jack/src/com/android/jack/resource/ResourceImportConflictException.java
index fcac334..ff8c828 100644
--- a/jack/src/com/android/jack/resource/ResourceImportConflictException.java
+++ b/jack/src/com/android/jack/resource/ResourceImportConflictException.java
@@ -17,6 +17,7 @@
package com.android.jack.resource;
import com.android.jack.backend.jayce.ImportConflictException;
+import com.android.jack.ir.ast.Resource;
import com.android.sched.util.location.Location;
import javax.annotation.Nonnull;
@@ -31,20 +32,20 @@ public class ResourceImportConflictException extends ImportConflictException {
@Nonnull
private final Location newResourceLocation;
@Nonnull
- private final Location existingResourceLocation;
+ private final Resource existingResource;
- public ResourceImportConflictException(@Nonnull Location newResourceLocation,
- @Nonnull Location existingResourceLocation) {
+ public ResourceImportConflictException(@Nonnull Resource existingResource,
+ @Nonnull Location newResourceLocation) {
this.newResourceLocation = newResourceLocation;
- this.existingResourceLocation = existingResourceLocation;
+ this.existingResource = existingResource;
}
@Override
@Nonnull
public String getMessage() {
- return "Resource in "
+ return "Resource \'" + existingResource.getPath().getPathAsString('/') + "\' from "
+ newResourceLocation.getDescription() + " has already been imported from "
- + existingResourceLocation.getDescription()
+ + existingResource.getLocation().getDescription()
+ " (see property '" + ResourceImporter.RESOURCE_COLLISION_POLICY.getName()
+ "' for resource collision policy)";
}
diff --git a/jack/src/com/android/jack/resource/ResourceImporter.java b/jack/src/com/android/jack/resource/ResourceImporter.java
index 68e6f9b..d4a6d14 100644
--- a/jack/src/com/android/jack/resource/ResourceImporter.java
+++ b/jack/src/com/android/jack/resource/ResourceImporter.java
@@ -72,8 +72,7 @@ public class ResourceImporter extends ResourceOrMetaImporter {
for (Resource existingResource : session.getResources()) {
if (existingResource.getPath().equals(path)) {
if (resourceCollisionPolicy == CollisionPolicy.FAIL) {
- throw new ResourceImportConflictException(newResource.getLocation(),
- existingResource.getLocation());
+ throw new ResourceImportConflictException(existingResource, newResource.getLocation());
} else {
session.getUserLogger().log(Level.INFO,
"Resource in {0} has already been imported from {1}: ignoring import", new Object[] {
diff --git a/sched/src/com/android/sched/util/codec/ZipFSCodec.java b/sched/src/com/android/sched/util/codec/ZipFSCodec.java
index 4cc8bce..835a9f1 100644
--- a/sched/src/com/android/sched/util/codec/ZipFSCodec.java
+++ b/sched/src/com/android/sched/util/codec/ZipFSCodec.java
@@ -19,6 +19,7 @@ package com.android.sched.util.codec;
import com.android.sched.util.RunnableHooks;
import com.android.sched.util.config.ConfigurationError;
+import com.android.sched.util.config.MessageDigestFactory;
import com.android.sched.util.file.FileOrDirectory.ChangePermission;
import com.android.sched.util.file.FileOrDirectory.Existence;
import com.android.sched.util.file.FileOrDirectory.Permission;
@@ -27,6 +28,7 @@ import com.android.sched.vfs.ReadWriteZipFS;
import com.android.sched.vfs.VFS;
import java.io.IOException;
+import java.security.Provider.Service;
import javax.annotation.Nonnull;
@@ -36,6 +38,9 @@ import javax.annotation.Nonnull;
*/
public class ZipFSCodec extends FileOrDirCodec<VFS> {
+ @Nonnull
+ private final MessageDigestCodec messageDigestCodec = new MessageDigestCodec();
+
public ZipFSCodec(@Nonnull Existence existence) {
super(existence, Permission.READ | Permission.WRITE);
}
@@ -92,8 +97,11 @@ public class ZipFSCodec extends FileOrDirCodec<VFS> {
@Nonnull final String string) throws ParsingException {
RunnableHooks hooks = context.getRunnableHooks();
try {
+ Service service = messageDigestCodec.checkString(context, "SHA");
return new ReadWriteZipFS(
- new OutputZipFile(context.getWorkingDirectory(), string, hooks, existence, change));
+ new OutputZipFile(context.getWorkingDirectory(), string, hooks, existence, change),
+ /* numGroups = */ 1, /* groupSize = */ 2,
+ new MessageDigestFactory(service), /* debug = */ false);
} catch (IOException e) {
throw new ParsingException(e.getMessage(), e);
}
diff --git a/sched/src/com/android/sched/util/codec/ZipInputOutputVFSCodec.java b/sched/src/com/android/sched/util/codec/ZipInputOutputVFSCodec.java
deleted file mode 100644
index 6c6da20..0000000
--- a/sched/src/com/android/sched/util/codec/ZipInputOutputVFSCodec.java
+++ /dev/null
@@ -1,72 +0,0 @@
-/*
- * Copyright (C) 2014 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.sched.util.codec;
-
-
-import com.android.sched.util.RunnableHooks;
-import com.android.sched.util.file.FileOrDirectory.Existence;
-import com.android.sched.util.file.OutputZipFile;
-import com.android.sched.util.log.LoggerFactory;
-import com.android.sched.vfs.GenericInputOutputVFS;
-import com.android.sched.vfs.InputOutputVFS;
-import com.android.sched.vfs.ReadWriteZipFS;
-
-import java.io.IOException;
-import java.util.logging.Logger;
-
-import javax.annotation.Nonnull;
-
-/**
- * This {@link StringCodec} is used to create an instance of {@link InputOutputVFS} backed by a
- * filesystem directory, which is then zipped when closed.
- */
-public class ZipInputOutputVFSCodec extends InputOutputVFSCodec
- implements StringCodec<InputOutputVFS> {
-
- @Nonnull
- private final Logger logger = LoggerFactory.getLogger();
-
- public ZipInputOutputVFSCodec(@Nonnull Existence existence) {
- super(existence);
- }
-
- @Override
- @Nonnull
- public String getUsage() {
- return "a path to a zip archive (" + getUsageDetails() + ")";
- }
-
- @Override
- @Nonnull
- public String getVariableName() {
- return "zip";
- }
-
- @Override
- @Nonnull
- public InputOutputVFS checkString(@Nonnull CodecContext context,
- @Nonnull final String string) throws ParsingException {
- RunnableHooks hooks = context.getRunnableHooks();
- try {
- final ReadWriteZipFS vfs = new ReadWriteZipFS(
- new OutputZipFile(context.getWorkingDirectory(), string, hooks, existence, change));
- return new GenericInputOutputVFS(vfs);
- } catch (IOException e) {
- throw new ParsingException(e.getMessage(), e);
- }
- }
-}
diff --git a/sched/src/com/android/sched/vfs/CaseInsensitiveFS.java b/sched/src/com/android/sched/vfs/CaseInsensitiveFS.java
index 00f2f03..12f7868 100644
--- a/sched/src/com/android/sched/vfs/CaseInsensitiveFS.java
+++ b/sched/src/com/android/sched/vfs/CaseInsensitiveFS.java
@@ -47,6 +47,7 @@ import java.util.EnumSet;
import java.util.Set;
import javax.annotation.CheckForNull;
+import javax.annotation.Nonnegative;
import javax.annotation.Nonnull;
/**
@@ -81,8 +82,10 @@ public class CaseInsensitiveFS extends BaseVFS<CaseInsensitiveVDir, CaseInsensit
"sched.vfs.case-insensitive.debug",
"generate an index file '" + DEBUG_NAME + "' for debugging purpose").addDefaultValue(false);
- private final int nbGroup;
- private final int szGroup;
+ @Nonnegative
+ private final int numGroups;
+ @Nonnegative
+ private final int groupSize;
@Nonnull
private final MessageDigestFactory mdf;
private final boolean debug;
@@ -198,7 +201,7 @@ public class CaseInsensitiveFS extends BaseVFS<CaseInsensitiveVDir, CaseInsensit
}
@SuppressWarnings("unchecked")
- public CaseInsensitiveFS(@Nonnull VFS vfs, int nbGroup, int szGroup,
+ public CaseInsensitiveFS(@Nonnull VFS vfs, int numGroups, int groupSize,
@Nonnull MessageDigestFactory mdf, boolean debug) throws WrongVFSFormatException {
this.vfs = (BaseVFS<BaseVDir, BaseVFile>) vfs;
@@ -207,8 +210,8 @@ public class CaseInsensitiveFS extends BaseVFS<CaseInsensitiveVDir, CaseInsensit
capabilities.add(Capabilities.UNIQUE_ELEMENT);
this.capabilities = Collections.unmodifiableSet(capabilities);
- this.nbGroup = nbGroup;
- this.szGroup = szGroup;
+ this.numGroups = numGroups;
+ this.groupSize = groupSize;
this.mdf = mdf;
this.debug = debug;
@@ -568,8 +571,8 @@ public class CaseInsensitiveFS extends BaseVFS<CaseInsensitiveVDir, CaseInsensit
StringBuffer sb = new StringBuffer();
int idx = 0;
try {
- for (int groupIdx = 0; groupIdx < nbGroup; groupIdx++) {
- for (int letterIdx = 0; letterIdx < szGroup; letterIdx++) {
+ for (int groupIdx = 0; groupIdx < numGroups; groupIdx++) {
+ for (int letterIdx = 0; letterIdx < groupSize; letterIdx++) {
sb.append(digest[idx++]);
}
sb.append('/');
diff --git a/sched/src/com/android/sched/vfs/ReadWriteZipFS.java b/sched/src/com/android/sched/vfs/ReadWriteZipFS.java
index 56159c7..7d4e88c 100644
--- a/sched/src/com/android/sched/vfs/ReadWriteZipFS.java
+++ b/sched/src/com/android/sched/vfs/ReadWriteZipFS.java
@@ -16,6 +16,7 @@
package com.android.sched.vfs;
+import com.android.sched.util.config.MessageDigestFactory;
import com.android.sched.util.file.CannotCreateFileException;
import com.android.sched.util.file.CannotDeleteFileException;
import com.android.sched.util.file.CannotSetPermissionException;
@@ -52,7 +53,8 @@ public class ReadWriteZipFS extends BaseVFS<BaseVDir, BaseVFile> implements VFS
@Nonnull
private final File dir;
- public ReadWriteZipFS(@Nonnull OutputZipFile file)
+ public ReadWriteZipFS(@Nonnull OutputZipFile file, int numGroups, int groupSize,
+ @Nonnull MessageDigestFactory mdf, boolean debug)
throws NotDirectoryException,
WrongPermissionException,
CannotSetPermissionException,
@@ -61,8 +63,15 @@ public class ReadWriteZipFS extends BaseVFS<BaseVDir, BaseVFile> implements VFS
CannotCreateFileException {
int permissions = Permission.READ | Permission.WRITE;
dir = Files.createTempDir();
- CachedDirectFS workVFS = new CachedDirectFS(new Directory(dir.getPath(), null,
- Existence.MUST_EXIST, permissions, ChangePermission.NOCHANGE), permissions);
+ VFS workVFS;
+ try {
+ workVFS = new CaseInsensitiveFS(new CachedDirectFS(new Directory(dir.getPath(),
+ null, Existence.MUST_EXIST, permissions, ChangePermission.NOCHANGE), permissions),
+ numGroups, groupSize, mdf, debug);
+ } catch (WrongVFSFormatException e) {
+ // Directory is empty, so this cannot happen
+ throw new AssertionError(e);
+ }
WriteZipFS finalVFS = new WriteZipFS(file);
this.vfs = new VFSToVFSWrapper(workVFS, finalVFS);
}
diff --git a/sched/tests/com/android/sched/vfs/VFSTest.java b/sched/tests/com/android/sched/vfs/VFSTest.java
index 45a4b04..b056e42 100644
--- a/sched/tests/com/android/sched/vfs/VFSTest.java
+++ b/sched/tests/com/android/sched/vfs/VFSTest.java
@@ -269,19 +269,11 @@ public class VFSTest {
String path = file.getAbsolutePath();
Assert.assertTrue(file.delete());
- Provider.Service sha1 = null;
- for (Provider provider : Security.getProviders()) {
- for (Provider.Service service : provider.getServices()) {
- if (service.getType().equals("MessageDigest") && service.getAlgorithm().equals("SHA")) {
- sha1 = service;
- }
- }
- }
- Assert.assertNotNull(sha1);
+ Provider.Service sha1 = getSha1Service();
ioVFS1 = new GenericInputOutputVFS(new MessageDigestFS(new DirectFS(new Directory(path,
null, Existence.NOT_EXIST, Permission.WRITE, ChangePermission.NOCHANGE),
- Permission.READ | Permission.WRITE), new MessageDigestFactory(sha1)));
+ Permission.READ | Permission.WRITE), new MessageDigestFactory(getSha1Service())));
testOutputVFS(ioVFS1);
testDelete(ioVFS1);
@@ -787,8 +779,11 @@ public class VFSTest {
try {
file = File.createTempFile("vfs", ".zip");
String path = file.getAbsolutePath();
+ Provider.Service sha1 = getSha1Service();
zipVFS = new GenericInputOutputVFS(new ReadWriteZipFS(
- new OutputZipFile(path, null, Existence.MAY_EXIST, ChangePermission.NOCHANGE)));
+ new OutputZipFile(path, null, Existence.MAY_EXIST, ChangePermission.NOCHANGE),
+ /* numGroups = */ 1, /* groupSize = */ 2,
+ new MessageDigestFactory(sha1), /* debug = */ false));
testOutputVFS(zipVFS);
testDelete(zipVFS);
// checkZipLocations(zipVFS);
@@ -997,4 +992,18 @@ public class VFSTest {
return string;
}
+ @Nonnull
+ private static Provider.Service getSha1Service() {
+ Provider.Service sha1 = null;
+ for (Provider provider : Security.getProviders()) {
+ for (Provider.Service service : provider.getServices()) {
+ if (service.getType().equals("MessageDigest") && service.getAlgorithm().equals("SHA")) {
+ sha1 = service;
+ }
+ }
+ }
+ Assert.assertNotNull(sha1);
+ return sha1;
+ }
+
}