1// Copyright (c) 2016, the R8 project authors. Please see the AUTHORS file 2// for details. All rights reserved. Use of this source code is governed by a 3// BSD-style license that can be found in the LICENSE file. 4package com.android.tools.r8.dex; 5 6import com.android.tools.r8.CompilationException; 7import com.android.tools.r8.R8Command; 8import com.android.tools.r8.ToolHelper; 9import com.android.tools.r8.shaking.ProguardRuleParserException; 10import com.google.common.collect.ImmutableList; 11import java.io.IOException; 12import java.nio.file.Files; 13import java.nio.file.Path; 14import java.nio.file.Paths; 15import java.util.ArrayList; 16import java.util.List; 17import java.util.concurrent.ExecutionException; 18import org.junit.Assert; 19import org.junit.Rule; 20import org.junit.Test; 21import org.junit.rules.TemporaryFolder; 22 23public class ExtraFileTest { 24 25 private static final String EXAMPLE_DIR = ToolHelper.EXAMPLES_BUILD_DIR; 26 private static final String EXAMPLE_DEX = "memberrebinding/classes.dex"; 27 private static final String EXAMPLE_LIB = "memberrebindinglib/classes.dex"; 28 private static final String EXAMPLE_CLASS = "memberrebinding.Memberrebinding"; 29 private static final String EXAMPLE_PACKAGE_MAP = "memberrebinding/package.map"; 30 private static final String EXAMPLE_PROGUARD_MAP = "memberrebinding/proguard.map"; 31 32 @Rule 33 public TemporaryFolder temp = ToolHelper.getTemporaryFolderForTest(); 34 35 @Test 36 public void splitMemberRebindingTwoFiles() 37 throws IOException, ProguardRuleParserException, ExecutionException, CompilationException { 38 if (!ToolHelper.artSupported()) { 39 return; 40 } 41 42 Path out = temp.getRoot().toPath(); 43 Path original = Paths.get(EXAMPLE_DIR, EXAMPLE_DEX); 44 Path packageMap = Paths.get(ToolHelper.EXAMPLES_DIR, EXAMPLE_PACKAGE_MAP); 45 Path proguardMap = Paths.get(ToolHelper.EXAMPLES_DIR, EXAMPLE_PROGUARD_MAP); 46 R8Command command = 47 R8Command.builder() 48 .addProgramFiles(original) 49 .setOutputPath(out) 50 .setMinApiLevel(Constants.ANDROID_L_API) // Allow native multidex. 51 .setProguardMapFile(proguardMap) 52 .setPackageDistributionFile(packageMap) 53 .build(); 54 ToolHelper.runR8(command); 55 List<String> outs = 56 new ArrayList<>( 57 ImmutableList.of( 58 out.resolve("classes.dex").toString(), 59 out.resolve("classes2.dex").toString(), 60 EXAMPLE_DIR + EXAMPLE_LIB)); 61 outs.forEach(f -> Assert.assertTrue("Failed to find file " + f, Files.exists(Paths.get(f)))); 62 ToolHelper.checkArtOutputIdentical( 63 ImmutableList.of(original.toString(), EXAMPLE_DIR + EXAMPLE_LIB), 64 outs, 65 EXAMPLE_CLASS, 66 null, 67 null); 68 } 69} 70