| // Copyright (c) 2017, 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.regress.b63935662; | 
 |  | 
 | import com.android.tools.r8.R8FullTestBuilder; | 
 | import com.android.tools.r8.TestBase; | 
 | import com.android.tools.r8.TestParameters; | 
 | import com.android.tools.r8.TestParametersCollection; | 
 | import com.android.tools.r8.utils.AndroidApiLevel; | 
 | import com.google.common.collect.ImmutableList; | 
 | import java.util.List; | 
 | import org.junit.Test; | 
 | import org.junit.runner.RunWith; | 
 | import org.junit.runners.Parameterized; | 
 |  | 
 | @RunWith(Parameterized.class) | 
 | public class Regress63935662 extends TestBase { | 
 |  | 
 |   private TestParameters parameters; | 
 |  | 
 |   @Parameterized.Parameters(name = "{0}") | 
 |   public static TestParametersCollection data() { | 
 |     return getTestParameters() | 
 |         .withAllRuntimes() | 
 |         .withApiLevelsStartingAtIncluding(AndroidApiLevel.N) | 
 |         .build(); | 
 |   } | 
 |  | 
 |   public Regress63935662(TestParameters parameters) { | 
 |     this.parameters = parameters; | 
 |   } | 
 |  | 
 |   void run(R8FullTestBuilder testBuilder, Class<?> mainClass) throws Exception { | 
 |     testBuilder | 
 |         .addKeepRuleFiles() | 
 |         .allowAccessModification() | 
 |         .addDontObfuscate() | 
 |         .setMinApi(parameters) | 
 |         .compile() | 
 |         .run(parameters.getRuntime(), mainClass) | 
 |         .assertSuccessWithOutput(runOnJava(mainClass)); | 
 |   } | 
 |  | 
 |   @Test | 
 |   public void test() throws Exception { | 
 |     Class<?> mainClass = TestClass.class; | 
 |     List<Class<?>> app = | 
 |         ImmutableList.of( | 
 |             TestClass.Top.class, | 
 |             TestClass.Left.class, | 
 |             TestClass.Right.class, | 
 |             TestClass.Bottom.class, | 
 |             TestClass.X1.class, | 
 |             TestClass.X2.class, | 
 |             TestClass.X3.class, | 
 |             TestClass.X4.class, | 
 |             TestClass.X5.class, | 
 |             mainClass); | 
 |     run( | 
 |         testForR8(parameters.getBackend()) | 
 |             .addProgramClasses(app) | 
 |             .addKeepMainRule(mainClass) | 
 |             .enableNoHorizontalClassMergingAnnotations(), | 
 |         mainClass); | 
 |   } | 
 |  | 
 |   @Test | 
 |   public void test2() throws Exception { | 
 |     Class<?> mainClass = TestFromBug.class; | 
 |     List<Class<?>> app = | 
 |         ImmutableList.of( | 
 |             TestFromBug.Map.class, | 
 |             TestFromBug.AbstractMap.class, | 
 |             TestFromBug.ConcurrentMap.class, | 
 |             TestFromBug.ConcurrentHashMap.class, | 
 |             mainClass); | 
 |     run( | 
 |         testForR8(parameters.getBackend()).addProgramClasses(app).addKeepMainRule(mainClass), | 
 |         mainClass); | 
 |   } | 
 | } |