From f265ce821c48ed54ad8d00060664b55a8f8e1bb7 Mon Sep 17 00:00:00 2001 From: Jean-Marie Henaff Date: Mon, 19 May 2014 17:34:13 +0200 Subject: WIP Use JUnit for jack-tests. (cherry picked from commit 452cbd7d69db557ecdbbd20875a669752cf2d9d7) Change-Id: I96a34b90c9525fa4403f6f940d6fcdf4656722ab --- .../jack/test/toolchain/JackApiToolchain.java | 230 +++++++++++++++++++++ 1 file changed, 230 insertions(+) create mode 100644 jack-tests/src/com/android/jack/test/toolchain/JackApiToolchain.java (limited to 'jack-tests/src/com/android/jack/test/toolchain/JackApiToolchain.java') diff --git a/jack-tests/src/com/android/jack/test/toolchain/JackApiToolchain.java b/jack-tests/src/com/android/jack/test/toolchain/JackApiToolchain.java new file mode 100644 index 0000000..7466b93 --- /dev/null +++ b/jack-tests/src/com/android/jack/test/toolchain/JackApiToolchain.java @@ -0,0 +1,230 @@ +/* + * 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.jack.test.toolchain; + +import com.android.jack.Jack; +import com.android.jack.Options; +import com.android.jack.experimental.incremental.JackIncremental; +import com.android.jack.shrob.spec.Flags; + +import java.io.File; +import java.util.ArrayList; +import java.util.List; +import java.util.Map; +import java.util.Map.Entry; + +import javax.annotation.Nonnull; + +/** + * This class implements a {@link JackBasedToolchain} by calling Jack via API. + */ +public class JackApiToolchain extends JackBasedToolchain { + + @Nonnull + private Options jackOptions = new Options(); + + JackApiToolchain() {} + + @Override + @Nonnull + public JackApiToolchain disableDxOptimizations() { + jackOptions.disableDxOptimizations(); + return this; + } + + @Override + @Nonnull + public JackApiToolchain enableDxOptimizations() { + jackOptions.enableDxOptimizations(); + return this; + } + + @Override + @Nonnull + public void srcToExe(@Nonnull String classpath, @Nonnull File out, @Nonnull File... sources) + throws Exception { + + try { + System.setOut(outRedirectStream); + System.setErr(errRedirectStream); + + addProperties(properties, jackOptions); + + if (jackOptions.getFlags() != null) { + jackOptions.applyShrobFlags(); + } + + jackOptions.setEcjArguments(AbstractTestTools.buildEcjArgs()); + + if (annotationProcessorClass != null) { + jackOptions.getEcjArguments().add("-processor"); + jackOptions.getEcjArguments().add(annotationProcessorClass.getName()); + } + + if (annotationProcessorOutDir != null) { + jackOptions.getEcjArguments().add("-d"); + jackOptions.getEcjArguments().add(annotationProcessorOutDir.getAbsolutePath()); + } + + for (String ecjArg : extraEcjArgs) { + jackOptions.getEcjArguments().add(ecjArg); + } + + AbstractTestTools.addFile(jackOptions.getEcjArguments(), + /* mustExist = */false, sources); + jackOptions.setClasspath(classpath); + + // !zip + jackOptions.setOutputDir(out); + + jackOptions.setJayceImports(staticLibs); + + jackOptions.setJarjarRulesFile(jarjarRules); + List proguardFlagsFiles = new ArrayList(); + + for (File flagFile : proguardFlagsFiles) { + proguardFlagsFiles.add(flagFile); + } + + if (proguardFlagsFiles.size() > 0) { + jackOptions.setProguardFlagsFile(proguardFlagsFiles); + } + + jackOptions.addProperty(Options.EMIT_LOCAL_DEBUG_INFO.getName(), + Boolean.toString(withDebugInfos)); + + if (jackOptions.getIncrementalFolder() != null) { + JackIncremental.run(jackOptions); + } else { + Jack.run(jackOptions); + } + + } finally { + System.setOut(stdOut); + System.setErr(stdErr); + } + } + + @Override + @Nonnull + public void srcToLib(@Nonnull String classpath, @Nonnull File out, boolean zipFiles, + @Nonnull File... sources) throws Exception { + + try { + Options options = jackOptions; + + addProperties(properties, options); + + options.setClasspath(classpath); + + if (zipFiles) { + options.setJayceOutputZip(out); + } else { + options.setJayceOutputDir(out); + } + + options.setEcjArguments(AbstractTestTools.buildEcjArgs()); + + if (annotationProcessorClass != null) { + options.getEcjArguments().add("-processor"); + options.getEcjArguments().add(annotationProcessorClass.getName()); + } + + if (annotationProcessorOutDir != null) { + options.getEcjArguments().add("-d"); + options.getEcjArguments().add(annotationProcessorOutDir.getAbsolutePath()); + } + + for (String ecjArg : extraEcjArgs) { + options.getEcjArguments().add(ecjArg); + } + + AbstractTestTools.addFile(options.getEcjArguments(), + /* mustExist = */false, sources); + + options.addProperty(Options.EMIT_LOCAL_DEBUG_INFO.getName(), + Boolean.toString(withDebugInfos)); + + System.setOut(outRedirectStream); + System.setErr(errRedirectStream); + + if (options.getIncrementalFolder() != null) { + JackIncremental.run(options); + } else { + Jack.run(options); + } + + } finally { + System.setOut(stdOut); + System.setErr(stdErr); + } + } + + @Override + @Nonnull + public void libToDex(@Nonnull File in, @Nonnull File out) throws Exception { + System.setOut(outRedirectStream); + System.setErr(errRedirectStream); + + try { + Options options = jackOptions; + addProperties(properties, options); + + options.getJayceImport().add(in); + options.getJayceImport().addAll(staticLibs); + + // !zip + options.setOutputDir(out); + + if (options.getIncrementalFolder() != null) { + JackIncremental.run(options); + } else { + Jack.run(options); + } + + } finally { + System.setOut(stdOut); + System.setErr(stdErr); + } + } + + @Override + @Nonnull + public void libToLib(@Nonnull File in, @Nonnull File out) throws Exception { + throw new AssertionError("Not Yet Implemented"); + } + + @Nonnull + public JackApiToolchain setShrobFlags(@Nonnull Flags shrobFlags) { + jackOptions.setFlags(shrobFlags); + return this; + } + + @Override + @Nonnull + public JackApiToolchain setIncrementalFolder(@Nonnull File incrementalFolder) { + jackOptions.setIncrementalFolder(incrementalFolder); + return this; + } + + private static final void addProperties(@Nonnull Map properties, + @Nonnull Options jackOptions) { + for (Entry entry : properties.entrySet()) { + jackOptions.addProperty(entry.getKey(), entry.getValue()); + } + } +} -- cgit v1.1