blob: 4c1caf7e72f51873d265d32dc156a814a256334a [file] [log] [blame]
// Copyright (c) 2019, 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.desugar.desugaredlibrary.conversiontests;
import static org.junit.Assert.assertEquals;
import com.android.tools.r8.TestRuntime.DexRuntime;
import com.android.tools.r8.ToolHelper.DexVm;
import com.android.tools.r8.desugar.desugaredlibrary.DesugaredLibraryTestBase;
import com.android.tools.r8.ir.desugar.DesugaredLibraryWrapperSynthesizer;
import com.android.tools.r8.utils.AndroidApiLevel;
import com.android.tools.r8.utils.StringUtils;
import com.android.tools.r8.utils.codeinspector.CodeInspector;
import java.nio.file.Path;
import java.util.Arrays;
import org.junit.Test;
public class WrapperMergeTest extends DesugaredLibraryTestBase {
@Test
public void testWrapperMerge() throws Exception {
// Multiple wrapper classes have to be merged here.
Path path1 = testForD8()
.addProgramClasses(Executor1.class)
.setMinApi(AndroidApiLevel.B)
.enableCoreLibraryDesugaring(AndroidApiLevel.B)
.compile()
.inspect(this::assertWrappers)
.writeToZip();
Path path2 = testForD8()
.addProgramClasses(Executor2.class)
.setMinApi(AndroidApiLevel.B)
.enableCoreLibraryDesugaring(AndroidApiLevel.B)
.compile()
.inspect(this::assertWrappers)
.writeToZip();
testForD8()
.addProgramFiles(path1, path2)
.compile()
.addDesugaredCoreLibraryRunClassPath(this::buildDesugaredLibrary, AndroidApiLevel.B)
.run(new DexRuntime(DexVm.ART_9_0_0_HOST), Executor1.class)
.assertSuccessWithOutput(StringUtils.lines("[1, 2, 3]"));
}
private void assertWrappers(CodeInspector inspector) {
assertEquals(2,inspector.allClasses().stream().filter(c -> c.getOriginalName().contains(
DesugaredLibraryWrapperSynthesizer.WRAPPER_PREFIX)).count());
}
static class Executor1 {
public static void main(String[] args) {
int[] ints = new int[3];
Arrays.setAll(ints,x->x+1);
System.out.println(Arrays.toString(ints));
}
}
static class Executor2 {
public static void main(String[] args) {
int[] ints = new int[3];
Arrays.setAll(ints,x->x+2);
System.out.println(Arrays.toString(ints));
}
}
}