Reproduce b/143165163: invalidation message from lambda merger.

Bug: 143165163
Change-Id: I9410181608b3644f302bd248c3414c559ecab26b
diff --git a/src/test/java/com/android/tools/r8/kotlin/lambda/KotlinLambdaMergerValidationTest.java b/src/test/java/com/android/tools/r8/kotlin/lambda/KotlinLambdaMergerValidationTest.java
new file mode 100644
index 0000000..1c46c19
--- /dev/null
+++ b/src/test/java/com/android/tools/r8/kotlin/lambda/KotlinLambdaMergerValidationTest.java
@@ -0,0 +1,91 @@
+// 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.kotlin.lambda;
+
+import static com.android.tools.r8.KotlinCompilerTool.KOTLINC;
+import static org.hamcrest.CoreMatchers.containsString;
+import static org.junit.Assume.assumeTrue;
+
+import com.android.tools.r8.TestParameters;
+import com.android.tools.r8.TestRuntime;
+import com.android.tools.r8.TestRuntime.CfRuntime;
+import com.android.tools.r8.ToolHelper;
+import com.android.tools.r8.ToolHelper.KotlinTargetVersion;
+import com.android.tools.r8.kotlin.AbstractR8KotlinTestBase;
+import com.android.tools.r8.utils.DescriptorUtils;
+import java.nio.file.Path;
+import java.util.Collection;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.junit.runners.Parameterized;
+
+@RunWith(Parameterized.class)
+public class KotlinLambdaMergerValidationTest extends AbstractR8KotlinTestBase {
+
+  private final TestParameters parameters;
+
+  @Parameterized.Parameters(name = "{0} target: {1}")
+  public static Collection<Object[]> data() {
+    return buildParameters(
+        getTestParameters().withAllRuntimesAndApiLevels().build(), KotlinTargetVersion.values());
+  }
+
+  public KotlinLambdaMergerValidationTest(
+      TestParameters parameters, KotlinTargetVersion targetVersion) {
+    super(targetVersion, false);
+    this.parameters = parameters;
+  }
+
+  @Test
+  public void testR8_excludeKotlinStdlib() throws Exception {
+    assumeTrue(parameters.isCfRuntime());
+
+    String pkg = getClass().getPackage().getName();
+    String folder = DescriptorUtils.getBinaryNameFromJavaType(pkg);
+    CfRuntime cfRuntime =
+        parameters.isCfRuntime() ? parameters.getRuntime().asCf() : TestRuntime.getCheckedInJdk9();
+    Path ktClasses =
+        kotlinc(cfRuntime, KOTLINC, targetVersion)
+            .addSourceFiles(getKotlinFileInTest(folder, "b143165163"))
+            .compile();
+    testForR8(parameters.getBackend())
+        .addLibraryFiles(ToolHelper.getJava8RuntimeJar())
+        .addLibraryFiles(ToolHelper.getKotlinStdlibJar())
+        .addProgramFiles(ktClasses)
+        .addKeepMainRule("**.B143165163Kt")
+        .setMinApi(parameters.getApiLevel())
+        .compile()
+        // TODO(b/143165163): better not output info like this.
+        .assertInfoMessageThatMatches(containsString("Unrecognized Kotlin lambda"))
+        .assertInfoMessageThatMatches(containsString("unexpected static method"))
+        .addRunClasspathFiles(ToolHelper.getKotlinStdlibJar())
+        .run(parameters.getRuntime(), pkg + ".B143165163Kt")
+        .assertSuccessWithOutputLines("outer foo bar", "outer foo default");
+  }
+
+  @Test
+  public void testR8_includeKotlinStdlib() throws Exception {
+    assumeTrue(parameters.isDexRuntime());
+
+    String pkg = getClass().getPackage().getName();
+    String folder = DescriptorUtils.getBinaryNameFromJavaType(pkg);
+    CfRuntime cfRuntime =
+        parameters.isCfRuntime() ? parameters.getRuntime().asCf() : TestRuntime.getCheckedInJdk9();
+    Path ktClasses =
+        kotlinc(cfRuntime, KOTLINC, targetVersion)
+            .addSourceFiles(getKotlinFileInTest(folder, "b143165163"))
+            .compile();
+    testForR8(parameters.getBackend())
+        .addProgramFiles(ToolHelper.getKotlinStdlibJar())
+        .addProgramFiles(ktClasses)
+        .addKeepMainRule("**.B143165163Kt")
+        .setMinApi(parameters.getApiLevel())
+        .compile()
+        // TODO(b/143165163): better not output info like this.
+        .assertInfoMessageThatMatches(containsString("Unrecognized Kotlin lambda"))
+        .assertInfoMessageThatMatches(containsString("does not implement any interfaces"))
+        .run(parameters.getRuntime(), pkg + ".B143165163Kt")
+        .assertSuccessWithOutputLines("outer foo bar", "outer foo default");
+  }
+}
diff --git a/src/test/java/com/android/tools/r8/kotlin/KotlinLambdaMergingTest.java b/src/test/java/com/android/tools/r8/kotlin/lambda/KotlinLambdaMergingTest.java
similarity index 99%
rename from src/test/java/com/android/tools/r8/kotlin/KotlinLambdaMergingTest.java
rename to src/test/java/com/android/tools/r8/kotlin/lambda/KotlinLambdaMergingTest.java
index d8c059d..e37fb6b 100644
--- a/src/test/java/com/android/tools/r8/kotlin/KotlinLambdaMergingTest.java
+++ b/src/test/java/com/android/tools/r8/kotlin/lambda/KotlinLambdaMergingTest.java
@@ -2,7 +2,7 @@
 // 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.kotlin;
+package com.android.tools.r8.kotlin.lambda;
 
 import static junit.framework.TestCase.assertEquals;
 import static junit.framework.TestCase.assertTrue;
@@ -13,6 +13,7 @@
 import com.android.tools.r8.graph.DexClass;
 import com.android.tools.r8.graph.DexType;
 import com.android.tools.r8.ir.optimize.lambda.CaptureSignature;
+import com.android.tools.r8.kotlin.AbstractR8KotlinTestBase;
 import com.android.tools.r8.utils.AndroidApp;
 import com.android.tools.r8.utils.BooleanUtils;
 import com.android.tools.r8.utils.InternalOptions;
diff --git a/src/test/java/com/android/tools/r8/kotlin/KotlinLambdaMergingWithReprocessingTest.java b/src/test/java/com/android/tools/r8/kotlin/lambda/KotlinLambdaMergingWithReprocessingTest.java
similarity index 90%
rename from src/test/java/com/android/tools/r8/kotlin/KotlinLambdaMergingWithReprocessingTest.java
rename to src/test/java/com/android/tools/r8/kotlin/lambda/KotlinLambdaMergingWithReprocessingTest.java
index da30438..21d5bc9 100644
--- a/src/test/java/com/android/tools/r8/kotlin/KotlinLambdaMergingWithReprocessingTest.java
+++ b/src/test/java/com/android/tools/r8/kotlin/lambda/KotlinLambdaMergingWithReprocessingTest.java
@@ -1,9 +1,10 @@
 // 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.kotlin;
+package com.android.tools.r8.kotlin.lambda;
 
 import com.android.tools.r8.ToolHelper.KotlinTargetVersion;
+import com.android.tools.r8.kotlin.AbstractR8KotlinTestBase;
 import com.android.tools.r8.utils.InternalOptions;
 import java.util.function.Consumer;
 import org.junit.Test;
diff --git a/src/test/java/com/android/tools/r8/kotlin/KotlinLambdaMergingWithSmallInliningBudgetTest.java b/src/test/java/com/android/tools/r8/kotlin/lambda/KotlinLambdaMergingWithSmallInliningBudgetTest.java
similarity index 91%
rename from src/test/java/com/android/tools/r8/kotlin/KotlinLambdaMergingWithSmallInliningBudgetTest.java
rename to src/test/java/com/android/tools/r8/kotlin/lambda/KotlinLambdaMergingWithSmallInliningBudgetTest.java
index 24b0524..b129417 100644
--- a/src/test/java/com/android/tools/r8/kotlin/KotlinLambdaMergingWithSmallInliningBudgetTest.java
+++ b/src/test/java/com/android/tools/r8/kotlin/lambda/KotlinLambdaMergingWithSmallInliningBudgetTest.java
@@ -1,9 +1,10 @@
 // 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.kotlin;
+package com.android.tools.r8.kotlin.lambda;
 
 import com.android.tools.r8.ToolHelper.KotlinTargetVersion;
+import com.android.tools.r8.kotlin.AbstractR8KotlinTestBase;
 import com.android.tools.r8.utils.InternalOptions;
 import java.util.function.Consumer;
 import org.junit.Test;
diff --git a/src/test/java/com/android/tools/r8/kotlin/KotlinxMetadataExtensionsServiceTest.java b/src/test/java/com/android/tools/r8/kotlin/lambda/KotlinxMetadataExtensionsServiceTest.java
similarity index 91%
rename from src/test/java/com/android/tools/r8/kotlin/KotlinxMetadataExtensionsServiceTest.java
rename to src/test/java/com/android/tools/r8/kotlin/lambda/KotlinxMetadataExtensionsServiceTest.java
index ed135b0..26cc829 100644
--- a/src/test/java/com/android/tools/r8/kotlin/KotlinxMetadataExtensionsServiceTest.java
+++ b/src/test/java/com/android/tools/r8/kotlin/lambda/KotlinxMetadataExtensionsServiceTest.java
@@ -1,10 +1,10 @@
 // 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.kotlin;
+package com.android.tools.r8.kotlin.lambda;
 
 import static com.android.tools.r8.ToolHelper.EXAMPLES_KOTLIN_RESOURCE_DIR;
-import static com.android.tools.r8.kotlin.KotlinLambdaMergingTest.kstyle;
+import static com.android.tools.r8.kotlin.lambda.KotlinLambdaMergingTest.kstyle;
 import static org.hamcrest.CoreMatchers.containsString;
 import static org.hamcrest.CoreMatchers.not;
 import static org.hamcrest.MatcherAssert.assertThat;
@@ -15,9 +15,9 @@
 import com.android.tools.r8.TestBase;
 import com.android.tools.r8.ToolHelper;
 import com.android.tools.r8.ToolHelper.ProcessResult;
-import com.android.tools.r8.kotlin.KotlinLambdaMergingTest.Group;
-import com.android.tools.r8.kotlin.KotlinLambdaMergingTest.Lambda;
-import com.android.tools.r8.kotlin.KotlinLambdaMergingTest.Verifier;
+import com.android.tools.r8.kotlin.lambda.KotlinLambdaMergingTest.Group;
+import com.android.tools.r8.kotlin.lambda.KotlinLambdaMergingTest.Lambda;
+import com.android.tools.r8.kotlin.lambda.KotlinLambdaMergingTest.Verifier;
 import com.android.tools.r8.utils.AndroidApiLevel;
 import com.android.tools.r8.utils.FileUtils;
 import com.android.tools.r8.utils.codeinspector.CodeInspector;
diff --git a/src/test/java/com/android/tools/r8/kotlin/lambda/b143165163.kt b/src/test/java/com/android/tools/r8/kotlin/lambda/b143165163.kt
new file mode 100644
index 0000000..d8d7a49
--- /dev/null
+++ b/src/test/java/com/android/tools/r8/kotlin/lambda/b143165163.kt
@@ -0,0 +1,13 @@
+// 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.kotlin.lambda
+
+fun main() {
+  fun String.inner(foo: String, bar: String = "default") {
+    println("$this $foo $bar")
+  }
+  "outer".inner("foo", "bar")
+  "outer".inner("foo")
+}