[Gradle] Add unit test, checking which metadata compilations are created

This will quickly notify any developer if some code
has unexpected effects on the creation of metadata compilations

^KT-58319 Verification Pending
diff --git a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/metadata/KotlinMetadataTargetConfigurator.kt b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/metadata/KotlinMetadataTargetConfigurator.kt
index 092acd5..15916e5 100644
--- a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/metadata/KotlinMetadataTargetConfigurator.kt
+++ b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/metadata/KotlinMetadataTargetConfigurator.kt
@@ -5,6 +5,7 @@
 
 package org.jetbrains.kotlin.gradle.targets.metadata
 
+import org.gradle.api.NamedDomainObjectContainer
 import org.gradle.api.Project
 import org.gradle.api.artifacts.result.ResolvedArtifactResult
 import org.gradle.api.attributes.Category
@@ -505,8 +506,9 @@
     CompletableFuture()
 }
 
-internal suspend fun KotlinMetadataTarget.awaitMetadataCompilationsCreated() {
+internal suspend fun KotlinMetadataTarget.awaitMetadataCompilationsCreated(): NamedDomainObjectContainer<KotlinCompilation<*>> {
     metadataCompilationsCreated.await()
+    return compilations
 }
 
 internal suspend fun Project.findMetadataCompilation(sourceSet: KotlinSourceSet): KotlinMetadataCompilation<*>? {
diff --git a/libraries/tools/kotlin-gradle-plugin/src/functionalTest/kotlin/org/jetbrains/kotlin/gradle/unitTests/KotlinMetadataTargetCompilationsTest.kt b/libraries/tools/kotlin-gradle-plugin/src/functionalTest/kotlin/org/jetbrains/kotlin/gradle/unitTests/KotlinMetadataTargetCompilationsTest.kt
new file mode 100644
index 0000000..18d0260
--- /dev/null
+++ b/libraries/tools/kotlin-gradle-plugin/src/functionalTest/kotlin/org/jetbrains/kotlin/gradle/unitTests/KotlinMetadataTargetCompilationsTest.kt
@@ -0,0 +1,65 @@
+/*
+ * Copyright 2010-2023 JetBrains s.r.o. and Kotlin Programming Language contributors.
+ * Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.
+ */
+
+@file:Suppress("FunctionName")
+
+package org.jetbrains.kotlin.gradle.unitTests
+
+import org.gradle.api.NamedDomainObjectContainer
+import org.jetbrains.kotlin.gradle.dsl.multiplatformExtension
+import org.jetbrains.kotlin.gradle.plugin.KotlinCompilation
+import org.jetbrains.kotlin.gradle.plugin.mpp.KotlinMetadataTarget
+import org.jetbrains.kotlin.gradle.targets.metadata.awaitMetadataCompilationsCreated
+import org.jetbrains.kotlin.gradle.util.buildProjectWithMPP
+import org.jetbrains.kotlin.gradle.util.runLifecycleAwareTest
+import kotlin.test.Test
+import kotlin.test.fail
+
+class KotlinMetadataTargetCompilationsTest {
+    @Test
+    fun `test - metadata compilations created for shared source sets`() {
+        val project = buildProjectWithMPP()
+        val kotlin = project.multiplatformExtension
+
+        kotlin.jvm()
+        kotlin.linuxX64()
+        kotlin.linuxArm64()
+        kotlin.targetHierarchy.default()
+
+        project.runLifecycleAwareTest {
+            val target = kotlin.metadata() as KotlinMetadataTarget
+            val metadataCompilations = target.awaitMetadataCompilationsCreated()
+            metadataCompilations.assertExists("commonMain")
+            metadataCompilations.assertExists("nativeMain")
+            metadataCompilations.assertExists("linuxMain")
+
+            metadataCompilations.assertExistsNot("commonTest")
+            metadataCompilations.assertExistsNot("nativeTest")
+            metadataCompilations.assertExistsNot("linuxTest")
+        }
+    }
+
+    @Test
+    fun `test - metadata compilations - single target project`() {
+        val project = buildProjectWithMPP()
+        val kotlin = project.multiplatformExtension
+        kotlin.jvm()
+        kotlin.targetHierarchy.default()
+
+        project.runLifecycleAwareTest {
+            val target = kotlin.metadata() as KotlinMetadataTarget
+            val compilations = target.awaitMetadataCompilationsCreated()
+            compilations.assertExistsNot("commonMain")
+        }
+    }
+
+    private fun NamedDomainObjectContainer<KotlinCompilation<*>>.assertExists(name: String) {
+        if (name !in names) fail("Missing '$name' compilation")
+    }
+
+    private fun NamedDomainObjectContainer<KotlinCompilation<*>>.assertExistsNot(name: String) {
+        if (name in names) fail("Unexpected '$name' compilation")
+    }
+}
\ No newline at end of file