Add Kotlin string switch test

Bug: b/390168887
Change-Id: Ibc91165e3334299468c1867264e04418cb63f9e7
diff --git a/src/test/java/com/android/tools/r8/ir/optimize/inliner/conditionalsimpleinlining/SwitchWithSimpleCasesInliningKotlin.kt b/src/test/java/com/android/tools/r8/ir/optimize/inliner/conditionalsimpleinlining/SwitchWithSimpleCasesInliningKotlin.kt
new file mode 100644
index 0000000..f0365e7
--- /dev/null
+++ b/src/test/java/com/android/tools/r8/ir/optimize/inliner/conditionalsimpleinlining/SwitchWithSimpleCasesInliningKotlin.kt
@@ -0,0 +1,48 @@
+// Copyright (c) 2025, 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.ir.optimize.inliner.conditionalsimpleinlining
+
+fun main(args: Array<String>) {
+  // Known.
+  println(isEnabled("A"))
+  println(isEnabled("B"))
+  println(isEnabled("C"))
+  println(isEnabled("D"))
+  println(isEnabled("E"))
+  println(isEnabled("F"))
+  println(isEnabled("G"))
+  println(isEnabled("H"))
+  println(isEnabled("I"))
+  println(isEnabled("J"))
+  println(isEnabled("K"))
+  println(isEnabled("L"))
+  println(isEnabled("M"))
+  println(isEnabled("N"))
+  // Unknown.
+  println(isEnabled("O"))
+}
+
+fun isEnabled(feature: String?): Boolean {
+  return when (feature) {
+    "A" -> true
+    "B" -> false
+    "C" -> true
+    "D" -> true
+    "E" -> false
+    "F" -> true
+    "G" -> false
+    "H" -> false
+    "I" -> false
+    "J" -> false
+    "K" -> true
+    "L" -> true
+    "M" -> false
+    "N" -> true
+    else -> hasProperty(feature)
+  }
+}
+
+fun hasProperty(property: String?): Boolean {
+  return System.getProperty(property) != null
+}
diff --git a/src/test/java/com/android/tools/r8/ir/optimize/inliner/conditionalsimpleinlining/SwitchWithSimpleCasesInliningKotlinTest.java b/src/test/java/com/android/tools/r8/ir/optimize/inliner/conditionalsimpleinlining/SwitchWithSimpleCasesInliningKotlinTest.java
new file mode 100644
index 0000000..e668727
--- /dev/null
+++ b/src/test/java/com/android/tools/r8/ir/optimize/inliner/conditionalsimpleinlining/SwitchWithSimpleCasesInliningKotlinTest.java
@@ -0,0 +1,90 @@
+// Copyright (c) 2025, 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.ir.optimize.inliner.conditionalsimpleinlining;
+
+import static com.android.tools.r8.utils.codeinspector.Matchers.isPresent;
+import static org.hamcrest.MatcherAssert.assertThat;
+import static org.junit.Assert.assertFalse;
+
+import com.android.tools.r8.KotlinTestBase;
+import com.android.tools.r8.KotlinTestParameters;
+import com.android.tools.r8.TestParameters;
+import com.android.tools.r8.ToolHelper;
+import com.android.tools.r8.utils.DescriptorUtils;
+import com.android.tools.r8.utils.FileUtils;
+import com.android.tools.r8.utils.StringUtils;
+import com.android.tools.r8.utils.codeinspector.ClassSubject;
+import com.android.tools.r8.utils.codeinspector.InstructionSubject;
+import com.android.tools.r8.utils.codeinspector.MethodSubject;
+import java.nio.file.Paths;
+import java.util.List;
+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 SwitchWithSimpleCasesInliningKotlinTest extends KotlinTestBase {
+
+  private final TestParameters parameters;
+  private static final String EXPECTED_OUTPUT =
+      StringUtils.lines(
+          "true", "false", "true", "true", "false", "true", "false", "false", "false", "false",
+          "true", "true", "false", "true", "false");
+  private static final String PKG =
+      SwitchWithSimpleCasesInliningKotlinTest.class.getPackage().getName();
+  private static final KotlinCompileMemoizer compiledJars =
+      getCompileMemoizer(
+          Paths.get(
+              ToolHelper.TESTS_DIR,
+              "java",
+              DescriptorUtils.getBinaryNameFromJavaType(PKG),
+              "SwitchWithSimpleCasesInliningKotlin" + FileUtils.KT_EXTENSION));
+
+  @Parameters(name = "{0}, {1}")
+  public static List<Object[]> data() {
+    return buildParameters(
+        getTestParameters().withAllRuntimesAndApiLevels().build(),
+        getKotlinTestParameters().withAllCompilersLambdaGenerationsAndTargetVersions().build());
+  }
+
+  public SwitchWithSimpleCasesInliningKotlinTest(
+      TestParameters parameters, KotlinTestParameters kotlinParameters) {
+    super(kotlinParameters);
+    this.parameters = parameters;
+  }
+
+  @Test
+  public void test() throws Exception {
+    String mainClass = PKG + ".SwitchWithSimpleCasesInliningKotlinKt";
+    testForR8(parameters.getBackend())
+        .addProgramFiles(compiledJars.getForConfiguration(kotlinParameters))
+        .addProgramFiles(kotlinc.getKotlinStdlibJar())
+        .addProgramFiles(kotlinc.getKotlinAnnotationJar())
+        .addKeepMainRule(mainClass)
+        .enableProguardTestOptions()
+        .addKeepRules(
+            "-neverinline class "
+                + PKG
+                + ".SwitchWithSimpleCasesInliningKotlinKt"
+                + "{ hasProperty(...); }")
+        .setMinApi(parameters)
+        .compile()
+        .inspect(
+            inspector -> {
+              ClassSubject mainClassSubject = inspector.clazz(mainClass);
+              assertThat(mainClassSubject, isPresent());
+              MethodSubject mainMethodSubject = mainClassSubject.mainMethod();
+              assertThat(mainMethodSubject, isPresent());
+              // TODO(b/390168887): Add support.
+              assertFalse(
+                  mainMethodSubject
+                      .streamInstructions()
+                      .filter(InstructionSubject::isConstString)
+                      .allMatch(i -> i.isConstString("O")));
+            })
+        .run(parameters.getRuntime(), mainClass)
+        .assertSuccessWithOutput(EXPECTED_OUTPUT);
+  }
+}