blob: 653059ce8cdb925c926f768b4775ec146c02e7fb [file] [log] [blame]
// Copyright (c) 2018, 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.resource;
import com.android.tools.r8.ClassFileConsumer;
import com.android.tools.r8.CompilationFailedException;
import com.android.tools.r8.DexIndexedConsumer;
import com.android.tools.r8.R8Command;
import com.android.tools.r8.TestBase;
import com.android.tools.r8.TestBase.Backend;
import com.android.tools.r8.ToolHelper;
import com.android.tools.r8.ToolHelper.ProcessResult;
import com.android.tools.r8.origin.Origin;
import com.android.tools.r8.utils.FileUtils;
import com.android.tools.r8.utils.TestDescriptionWatcher;
import com.google.common.collect.ImmutableList;
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;
import org.junit.runner.RunWith;
import org.junit.runners.Parameterized;
@RunWith(Parameterized.class)
public class DataResourceTest {
private TestBase.Backend backend;
@Parameterized.Parameters(name = "Backend: {0}")
public static Backend[] data() {
return ToolHelper.getBackends();
}
public DataResourceTest(TestBase.Backend backend) {
this.backend = backend;
}
@Rule
public TemporaryFolder temp = ToolHelper.getTemporaryFolderForTest();
@Rule
public TestDescriptionWatcher watcher = new TestDescriptionWatcher();
@Test
public void dataResourceTest() throws IOException, CompilationFailedException {
String packageName = "dataresource";
String mainClassName = packageName + ".ResourceTest";
Path inputJar = Paths.get(ToolHelper.EXAMPLES_BUILD_DIR,
packageName + FileUtils.JAR_EXTENSION);
ProcessResult referenceResult = ToolHelper.runJava(inputJar, mainClassName);
assert backend == Backend.DEX || backend == Backend.CF;
Path r8Out = temp.getRoot().toPath().resolve("r8out.jar");
R8Command.Builder builder =
R8Command.builder()
.setDisableTreeShaking(true)
.setDisableMinification(true)
.addProgramFiles(inputJar)
.addProguardConfiguration(ImmutableList.of("-keepdirectories"), Origin.unknown())
.setProgramConsumer(
backend == Backend.DEX
? new DexIndexedConsumer.ArchiveConsumer(r8Out, true)
: new ClassFileConsumer.ArchiveConsumer(r8Out, true));
ToolHelper.runR8(builder.build());
ProcessResult r8Result;
if (backend == Backend.DEX) {
r8Result = ToolHelper.runArtRaw(r8Out.toString(), mainClassName);
} else {
r8Result = ToolHelper.runJava(r8Out, mainClassName);
}
Assert.assertEquals(referenceResult.stdout, r8Result.stdout);
}
}