From 7c1520a424d80304c55d7c92fb969580da02ed1c Mon Sep 17 00:00:00 2001 From: "sebastian.sellmair" Date: Thu, 22 Apr 2021 15:11:30 +0200 Subject: [PATCH] [Commonizer] Implement SingleTargetPropagationTest to cover KT-46248 ^KT-46248 --- .../AbstractInlineSourcesCommonizationTest.kt | 4 +-- .../SingleTargetPropagationTest.kt | 32 +++++++++++++++++++ 2 files changed, 34 insertions(+), 2 deletions(-) create mode 100644 native/commonizer/tests/org/jetbrains/kotlin/commonizer/hierarchical/SingleTargetPropagationTest.kt diff --git a/native/commonizer/tests/org/jetbrains/kotlin/commonizer/AbstractInlineSourcesCommonizationTest.kt b/native/commonizer/tests/org/jetbrains/kotlin/commonizer/AbstractInlineSourcesCommonizationTest.kt index dd169d0d4a4..20e051a9fd5 100644 --- a/native/commonizer/tests/org/jetbrains/kotlin/commonizer/AbstractInlineSourcesCommonizationTest.kt +++ b/native/commonizer/tests/org/jetbrains/kotlin/commonizer/AbstractInlineSourcesCommonizationTest.kt @@ -160,8 +160,8 @@ abstract class AbstractInlineSourcesCommonizationTest : KtInlineSourceCommonizer if (dependencies.isEmpty()) null else MockModulesProvider.create(dependencies) }, - targetProviders = TargetDependent(targets.map { it.target }) { commonizerTarget -> - val target = targets.single { it.target == commonizerTarget } + targetProviders = TargetDependent(outputTarget.allLeaves()) { commonizerTarget -> + val target = targets.singleOrNull { it.target == commonizerTarget } ?: return@TargetDependent null TargetProvider( target = commonizerTarget, modulesProvider = MockModulesProvider.create(target.modules.map { createModuleDescriptor(it) }) diff --git a/native/commonizer/tests/org/jetbrains/kotlin/commonizer/hierarchical/SingleTargetPropagationTest.kt b/native/commonizer/tests/org/jetbrains/kotlin/commonizer/hierarchical/SingleTargetPropagationTest.kt new file mode 100644 index 00000000000..8cce739f1a7 --- /dev/null +++ b/native/commonizer/tests/org/jetbrains/kotlin/commonizer/hierarchical/SingleTargetPropagationTest.kt @@ -0,0 +1,32 @@ +/* + * Copyright 2010-2021 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. + */ + +package org.jetbrains.kotlin.commonizer.hierarchical + +import org.jetbrains.kotlin.commonizer.AbstractInlineSourcesCommonizationTest +import org.jetbrains.kotlin.commonizer.assertCommonized +import org.junit.Test + +/** + * Related https://youtrack.jetbrains.com/issue/KT-46248 + */ +class SingleTargetPropagationTest : AbstractInlineSourcesCommonizationTest() { + + /** + * Following the simple design principle: + * Absent/Unsupported targets shall result in the same output as a request only mentioning supported targets + */ + @Test + fun `test single native target in hierarchy`() { + val result = commonize { + outputTarget("((a, b), (c, d))") + simpleSingleSourceTarget("a", """class A""") + } + + result.assertCommonized("a", "class A") + result.assertCommonized("(a,b)", "expect class A expect constructor()") + result.assertCommonized("((a, b), (c, d))", "expect class A expect constructor()") + } +} \ No newline at end of file