summaryrefslogtreecommitdiffstats
path: root/tools/runner/java
diff options
context:
space:
mode:
Diffstat (limited to 'tools/runner/java')
-rw-r--r--tools/runner/java/dalvik/runner/CaliperFinder.java11
-rw-r--r--tools/runner/java/dalvik/runner/DeviceDalvikVm.java36
-rw-r--r--tools/runner/java/dalvik/runner/Dx.java2
-rw-r--r--tools/runner/java/dalvik/runner/EnvironmentDevice.java1
-rw-r--r--tools/runner/java/dalvik/runner/Mode.java19
5 files changed, 41 insertions, 28 deletions
diff --git a/tools/runner/java/dalvik/runner/CaliperFinder.java b/tools/runner/java/dalvik/runner/CaliperFinder.java
index 094609a..3609471 100644
--- a/tools/runner/java/dalvik/runner/CaliperFinder.java
+++ b/tools/runner/java/dalvik/runner/CaliperFinder.java
@@ -41,15 +41,6 @@ class CaliperFinder extends NamingPatternCodeFinder {
}
public Classpath getRunnerClasspath() {
- return Classpath.of(
- // TODO: we should be able to work with a shipping SDK, not depend on out/...
- // TODO: have a pre-packaged caliper-all.jar in our lib directory, with the jtreg stuff.
- // external/caliper
- new File("out/target/common/obj/JAVA_LIBRARIES/caliper_intermediates/classes.jar").getAbsoluteFile(),
- // external/guava for external/caliper
- new File("out/target/common/obj/JAVA_LIBRARIES/guava_intermediates/classes.jar").getAbsoluteFile(),
- // external/jsr305 for external/guava
- new File("out/target/common/obj/JAVA_LIBRARIES/jsr305_intermediates/classes.jar").getAbsoluteFile());
-
+ return new Classpath();
}
}
diff --git a/tools/runner/java/dalvik/runner/DeviceDalvikVm.java b/tools/runner/java/dalvik/runner/DeviceDalvikVm.java
index fec3463..7bdf482 100644
--- a/tools/runner/java/dalvik/runner/DeviceDalvikVm.java
+++ b/tools/runner/java/dalvik/runner/DeviceDalvikVm.java
@@ -24,15 +24,6 @@ import java.util.logging.Logger;
* Execute tests on a Dalvik VM using an Android device or emulator.
*/
final class DeviceDalvikVm extends Vm {
-
- // TODO: Don't assume we can put files in /system/framework,
- // so we can run on production devices.
- private static final Classpath RUNTIME_SUPPORT_CLASSPATH = Classpath.of(
- new File("/system/framework/core-tests.jar"),
- new File("/system/framework/caliper.jar"),
- new File("/system/framework/guava.jar"),
- new File("/system/framework/jsr305.jar"));
-
private static final Logger logger = Logger.getLogger(DeviceDalvikVm.class.getName());
DeviceDalvikVm(Integer debugPort, long timeoutSeconds, File sdkJar,
@@ -47,7 +38,24 @@ final class DeviceDalvikVm extends Vm {
}
@Override protected void postCompileTestRunner() {
+ // TODO: does this really need to be a special case?
postCompile("testrunner", environment.testRunnerClassesDir());
+
+ // dex everything on the classpath and push it to the device.
+ for (File classpathElement : testClasspath.getElements()) {
+ String name = basenameOfJar(classpathElement);
+ logger.fine("dex and push " + name);
+ // make the local dex (inside a jar)
+ // TODO: this is *really* expensive. we need a cache!
+ File outputFile = getEnvironmentDevice().testDir(name + ".jar");
+ new Dx().dex(outputFile, Classpath.of(classpathElement));
+ // push the local dex to the device
+ getEnvironmentDevice().adb.push(outputFile, deviceDexFile(name));
+ }
+ }
+
+ private String basenameOfJar(File jarFile) {
+ return jarFile.getName().replaceAll("\\.jar$", "");
}
@Override protected void postCompileTest(TestRun testRun) {
@@ -74,8 +82,12 @@ final class DeviceDalvikVm extends Vm {
File workingDirectory) {
// ignore the working directory; it's device-local and we can't easily
// set the working directory for commands run via adb shell.
+ // TODO: we only *need* to set ANDROID_DATA on production devices.
+ // We set "user.home" to /sdcard because code might reasonably assume it can write to
+ // that directory.
return new VmCommandBuilder()
- .vmCommand("adb", "shell", "dalvikvm")
+ .vmCommand("adb", "shell", "ANDROID_DATA=/sdcard", "dalvikvm")
+ .vmArgs("-Duser.home=/sdcard")
.vmArgs("-Duser.name=root")
.vmArgs("-Duser.language=en")
.vmArgs("-Duser.region=US")
@@ -87,7 +99,9 @@ final class DeviceDalvikVm extends Vm {
Classpath classpath = new Classpath();
classpath.addAll(deviceDexFile(testRun.getQualifiedName()));
classpath.addAll(deviceDexFile("testrunner"));
- classpath.addAll(RUNTIME_SUPPORT_CLASSPATH);
+ for (File testClasspathElement : testClasspath.getElements()) {
+ classpath.addAll(deviceDexFile(basenameOfJar(testClasspathElement)));
+ }
return classpath;
}
}
diff --git a/tools/runner/java/dalvik/runner/Dx.java b/tools/runner/java/dalvik/runner/Dx.java
index 09772bd..1190bce 100644
--- a/tools/runner/java/dalvik/runner/Dx.java
+++ b/tools/runner/java/dalvik/runner/Dx.java
@@ -33,7 +33,7 @@ final class Dx {
* yourself.
*
* Memory options pulled from build/core/definitions.mk to
- * handle larged dx input when building dex for APK.
+ * handle large dx input when building dex for APK.
*/
new Command.Builder()
.args("dx")
diff --git a/tools/runner/java/dalvik/runner/EnvironmentDevice.java b/tools/runner/java/dalvik/runner/EnvironmentDevice.java
index c44152d..9ac1c64 100644
--- a/tools/runner/java/dalvik/runner/EnvironmentDevice.java
+++ b/tools/runner/java/dalvik/runner/EnvironmentDevice.java
@@ -41,6 +41,7 @@ class EnvironmentDevice extends Environment {
}
adb.mkdir(runnerDir);
adb.mkdir(testTemp);
+ adb.mkdir(new File("/sdcard/dalvik-cache")); // TODO: only necessary on production devices.
if (debugPort != null) {
adb.forwardTcp(debugPort, debugPort);
}
diff --git a/tools/runner/java/dalvik/runner/Mode.java b/tools/runner/java/dalvik/runner/Mode.java
index c30e023..b4f851f 100644
--- a/tools/runner/java/dalvik/runner/Mode.java
+++ b/tools/runner/java/dalvik/runner/Mode.java
@@ -62,12 +62,15 @@ abstract class Mode {
protected final Classpath testRunnerClasspath = new Classpath();
protected final Classpath testClasspath = Classpath.of(
+ new File("dalvik/libcore/tools/runner/lib/jsr305.jar"),
+ new File("dalvik/libcore/tools/runner/lib/guava.jar"),
+ new File("dalvik/libcore/tools/runner/lib/caliper.jar"),
// TODO: we should be able to work with a shipping SDK, not depend on out/...
- // dalvik/libcore for tests
- new File("out/target/common/obj/JAVA_LIBRARIES/core-tests_intermediates/classes.jar").getAbsoluteFile(),
- // framework/base for tests
- new File("out/target/common/obj/JAVA_LIBRARIES/core_intermediates/classes.jar").getAbsoluteFile());
-
+ // dalvik/libcore/**/test/ for junit
+ // TODO: jar up just the junit classes and drop the jar in our lib/ directory.
+ new File("out/target/common/obj/JAVA_LIBRARIES/core-tests_intermediates/classes.jar").getAbsoluteFile());
+ // framework/base for tests (TODO: for what exactly?)
+ //new File("out/target/common/obj/JAVA_LIBRARIES/core_intermediates/classes.jar").getAbsoluteFile());
Mode(Environment environment, long timeoutSeconds, File sdkJar) {
this.environment = environment;
@@ -90,11 +93,15 @@ abstract class Mode {
private void compileTestRunner() {
logger.fine("build testrunner");
+ Classpath classpath = new Classpath();
+ classpath.addAll(testClasspath);
+ classpath.addAll(testRunnerClasspath);
+
File base = environment.testRunnerClassesDir();
new Mkdir().mkdirs(base);
new Javac()
.bootClasspath(sdkJar)
- .classpath(testRunnerClasspath)
+ .classpath(classpath)
.sourcepath(DalvikRunner.HOME_JAVA)
.destination(base)
.compile(testRunnerJava);