blob: a8708eb3d0d532f3c232c4ad13f1498cfdeea6c5 [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.naming;
import static org.hamcrest.CoreMatchers.containsString;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertThat;
import com.android.tools.r8.R8Command;
import com.android.tools.r8.TestBase;
import com.android.tools.r8.ToolHelper;
import com.android.tools.r8.ToolHelper.DexVm;
import com.android.tools.r8.ToolHelper.ProcessResult;
import com.android.tools.r8.origin.Origin;
import com.android.tools.r8.utils.AndroidApp;
import com.google.common.collect.ImmutableList;
import java.util.Arrays;
import java.util.Collection;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.junit.runners.Parameterized;
import org.junit.runners.Parameterized.Parameters;
@RunWith(Parameterized.class)
public class EnumMinification extends TestBase {
private Backend backend;
@Parameters(name = "Backend: {0}")
public static Collection<Backend> data() {
return Arrays.asList(Backend.values());
}
public EnumMinification(Backend backend) {
this.backend = backend;
}
@Test
public void test() throws Exception {
AndroidApp output =
ToolHelper.runR8(
R8Command.builder()
.addClassProgramData(ToolHelper.getClassAsBytes(Main.class), Origin.unknown())
.addClassProgramData(ToolHelper.getClassAsBytes(Enum.class), Origin.unknown())
.addProguardConfiguration(
ImmutableList.of(keepMainProguardConfiguration(Main.class)), Origin.unknown())
.setProgramConsumer(emptyConsumer(backend))
.build());
// TODO(117299356): valueOf on enum fails for minified enums.
ProcessResult result = runOnVMRaw(output, Main.class, backend);
assertEquals(1, result.exitCode);
assertThat(
result.stderr,
containsString(
backend == Backend.DEX
? ToolHelper.getDexVm().isNewerThan(DexVm.ART_4_4_4_HOST)
? "java.lang.NoSuchMethodException"
: "java.lang.NullPointerException"
: "java.lang.IllegalArgumentException"));
}
}
class Main {
public static void main(String[] args) {
Enum e = Enum.valueOf("VALUE1");
System.out.println(e);
}
}
enum Enum {
VALUE1,
VALUE2
}