blob: 405994cd1e12bff75b61fcd1fc21a9c0af6e1b7b [file] [log] [blame]
// Copyright (c) 2016, the R8 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;
import com.android.tools.r8.dex.Constants;
import com.android.tools.r8.dex.DexParser;
import com.android.tools.r8.dex.DexSection;
import java.io.IOException;
import java.nio.file.Path;
import java.nio.file.Paths;
import org.junit.Assert;
import org.junit.Rule;
import org.junit.Test;
import org.junit.rules.TemporaryFolder;
public class R8CodeCanonicalizationTest {
private static final Path SOURCE_DEX = Paths.get(
ToolHelper.EXAMPLES_BUILD_DIR, "invokeempty", "classes.dex");
private int readNumberOfCodes(Path file) throws IOException {
DexSection[] dexSections = DexParser.parseMapFrom(file);
for (DexSection dexSection : dexSections) {
if (dexSection.type == Constants.TYPE_CODE_ITEM) {
return dexSection.length;
}
}
return 0;
}
@Rule
public TemporaryFolder temp = ToolHelper.getTemporaryFolderForTest();
@Test
public void testNumberOfCodeItemsUnchanged() throws Exception {
int numberOfCodes = readNumberOfCodes(SOURCE_DEX);
R8Command.Builder builder = R8Command.builder()
.addLibraryFiles(ToolHelper.getDefaultAndroidJar())
.setOutput(temp.getRoot().toPath(), OutputMode.DexIndexed);
ToolHelper.getAppBuilder(builder).addProgramFiles(SOURCE_DEX);
R8.run(builder.build());
int newNumberOfCodes = readNumberOfCodes(
Paths.get(temp.getRoot().getCanonicalPath(), "classes.dex"));
Assert.assertEquals("Number of codeitems does not change.", numberOfCodes, newNumberOfCodes);
}
}