blob: e17ac14b43413524f6349400eb956fa9d5453d42 [file] [log] [blame]
// Copyright (c) 2017, the Rex project authors. Please see the AUTHORS file
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.
package com.android.tools.r8.d8;
import static org.junit.Assert.assertEquals;
import com.android.tools.r8.D8Command;
import com.android.tools.r8.ToolHelper;
import com.android.tools.r8.dex.ApplicationReader;
import com.android.tools.r8.dex.Marker;
import com.android.tools.r8.dex.Marker.Tool;
import com.android.tools.r8.graph.DexApplication;
import com.android.tools.r8.graph.DexString;
import com.android.tools.r8.utils.AndroidApiLevel;
import com.android.tools.r8.utils.AndroidApp;
import com.android.tools.r8.utils.InternalOptions;
import com.android.tools.r8.utils.Timing;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.util.Arrays;
import java.util.Collection;
import org.junit.Rule;
import org.junit.Test;
import org.junit.rules.TemporaryFolder;
import org.junit.runner.RunWith;
import org.junit.runners.Parameterized;
import org.junit.runners.Parameterized.Parameters;
/**
* Simple test that compiles framework.jar with D8 a number of times with various number of threads
* available to the compiler. This test also tests the hidden marker inserted into classes.dex.
*/
@RunWith(Parameterized.class)
public class D8FrameworkDexPassthroughMarkerTest {
private static final Path FRAMEWORK_JAR =
Paths.get("tools/linux/art-5.1.1/product/mako/system/framework/framework.jar");
@Rule
public TemporaryFolder output = ToolHelper.getTemporaryFolderForTest();
@Parameters(name = "Min api = {0}")
public static Collection<Object[]> data() {
return Arrays.asList(new Object[][]{
{AndroidApiLevel.N.getLevel()},
{AndroidApiLevel.O.getLevel()},
{AndroidApiLevel.O_MR1.getLevel()}
});
}
private final int minApi;
public D8FrameworkDexPassthroughMarkerTest(int minApi) {
this.minApi = minApi;
}
@Test
public void compile() throws Exception {
D8Command.Builder command =
D8Command.builder().setMinApiLevel(minApi).addProgramFiles(FRAMEWORK_JAR);
Marker marker = new Marker(Tool.D8)
.setVersion("1.0.0")
.setMinApi(minApi);
InternalOptions options = new InternalOptions();
DexString markerDexString = options.itemFactory.createString(marker.toString());
Marker selfie = Marker.parse(markerDexString);
assert marker.equals(selfie);
AndroidApp app = ToolHelper.runD8(command, opts -> opts.setMarker(marker));
DexApplication dexApp = new ApplicationReader(app, options, Timing.empty()).read();
Collection<Marker> markers = dexApp.dexItemFactory.extractMarkers();
assertEquals(1, markers.size());
Marker readMarker = markers.iterator().next();
assertEquals(marker, readMarker);
}
}