Wizard: fix tests

This commit is contained in:
Ilya Kirillov
2020-01-21 15:41:09 +03:00
parent 217cf3edd1
commit fa4cba341b
24 changed files with 78 additions and 40 deletions
@@ -6,7 +6,7 @@ buildscript {
} }
dependencies { dependencies {
classpath 'com.android.tools.build:gradle:3.2.1' classpath 'com.android.tools.build:gradle:3.2.1'
classpath kotlin('gradle-plugin', '1.3.61') classpath 'org.jetbrains.kotlin:kotlin-gradle-plugin:1.3.61'
} }
} }
group = 'testGroupId' group = 'testGroupId'
@@ -6,7 +6,7 @@ buildscript {
} }
dependencies { dependencies {
classpath("com.android.tools.build:gradle:3.2.1") classpath("com.android.tools.build:gradle:3.2.1")
classpath(kotlin("gradle-plugin", "1.3.61")) classpath("org.jetbrains.kotlin:kotlin-gradle-plugin:1.3.61")
} }
} }
group = "testGroupId" group = "testGroupId"
@@ -1,11 +1,10 @@
kotlin: kotlin:
version: 1.3.61
projectKind: Multiplatform projectKind: Multiplatform
modules: modules:
- type: - type:
name: android name: android
androidSdkPath: /home/user/Android/Sdk androidSdkPath: /home/user/Android/Sdk
kind: singleplatform kind: singleplatformJvm
name: android name: android
sourcesets: sourcesets:
- type: main - type: main
@@ -33,7 +33,9 @@ kotlin {
} }
} }
browserTest { browserTest {
dependencies {
implementation kotlin('test-js')
}
} }
} }
} }
@@ -30,6 +30,10 @@ kotlin {
implementation(kotlin("stdlib-js")) implementation(kotlin("stdlib-js"))
} }
} }
val browserTest by getting val browserTest by getting {
dependencies {
implementation(kotlin("test-js"))
}
}
} }
} }
@@ -1,5 +1,4 @@
kotlin: kotlin:
version: 1.3.61
projectKind: Multiplatform projectKind: Multiplatform
modules: modules:
- type: multiplatform - type: multiplatform
@@ -12,7 +11,9 @@ kotlin:
sourcesets: sourcesets:
- type: main - type: main
- type: test - type: test
- type: jsBrowser - type:
name: jsBrowser
testFramework: JS
kind: target kind: target
name: browser name: browser
sourcesets: sourcesets:
@@ -16,7 +16,9 @@ kotlin {
} }
} }
jvmTest { jvmTest {
dependencies {
implementation kotlin('test-junit')
}
} }
} }
} }
@@ -15,6 +15,10 @@ kotlin {
implementation(kotlin("stdlib-jdk8")) implementation(kotlin("stdlib-jdk8"))
} }
} }
val jvmTest by getting val jvmTest by getting {
dependencies {
implementation(kotlin("test-junit"))
}
}
} }
} }
@@ -1,12 +1,13 @@
kotlin: kotlin:
version: 1.3.61
projectKind: Multiplatform projectKind: Multiplatform
modules: modules:
- type: multiplatform - type: multiplatform
kind: multiplatform kind: multiplatform
name: a name: a
subModules: subModules:
- type: jvmTarget - type:
name: jvmTarget
testFramework: JUNIT4
kind: target kind: target
name: jvm name: jvm
sourcesets: sourcesets:
@@ -8,5 +8,6 @@ repositories {
mavenCentral() mavenCentral()
} }
dependencies { dependencies {
testImplementation 'org.jetbrains.kotlin:kotlin-test-junit'
implementation 'org.jetbrains.kotlin:kotlin-stdlib-jdk8' implementation 'org.jetbrains.kotlin:kotlin-stdlib-jdk8'
} }
@@ -8,5 +8,6 @@ repositories {
mavenCentral() mavenCentral()
} }
dependencies { dependencies {
testImplementation(kotlin("test-junit"))
implementation(kotlin("stdlib-jdk8")) implementation(kotlin("stdlib-jdk8"))
} }
@@ -51,6 +51,12 @@
</plugins> </plugins>
</build> </build>
<dependencies> <dependencies>
<dependency>
<groupId>org.jetbrains.kotlin</groupId>
<artifactId>kotlin-test-junit</artifactId>
<version>1.3.61</version>
<scope>test</scope>
</dependency>
<dependency> <dependency>
<groupId>org.jetbrains.kotlin</groupId> <groupId>org.jetbrains.kotlin</groupId>
<artifactId>kotlin-stdlib-jdk8</artifactId> <artifactId>kotlin-stdlib-jdk8</artifactId>
@@ -1,10 +1,11 @@
kotlin: kotlin:
version: 1.3.61
projectKind: Singleplatform projectKind: Singleplatform
modules: modules:
- type: JVM Module - type:
name: JVM Module
testFramework: JUNIT4
name: nya name: nya
kind: singleplatform kind: singleplatformJvm
sourcesets: sourcesets:
- type: main - type: main
@@ -12,10 +12,10 @@ repositories {
kotlin { kotlin {
def hostOs = System.getProperty("os.name") def hostOs = System.getProperty("os.name")
def isMingwX64 = hostOs.startsWith("Windows") def isMingwX64 = hostOs.startsWith("Windows")
KotlinNativeTargetWithTests nativeTarget KotlinNativeTargetWithTests myNativeTarget
if (hostOs == "Mac OS X") nativeTarget = macosX64('myNative') if (hostOs == "Mac OS X") myNativeTarget = macosX64('myNative')
else if (hostOs == "Linux") nativeTarget = linuxX64("myNative") else if (hostOs == "Linux") myNativeTarget = linuxX64("myNative")
else if (isMingwX64) nativeTarget = mingwX64("myNative") else if (isMingwX64) myNativeTarget = mingwX64("myNative")
else throw new GradleException("Host OS is not supported in Kotlin/Native.") else throw new GradleException("Host OS is not supported in Kotlin/Native.")
@@ -10,7 +10,7 @@ repositories {
kotlin { kotlin {
val hostOs = System.getProperty("os.name") val hostOs = System.getProperty("os.name")
val isMingwX64 = hostOs.startsWith("Windows") val isMingwX64 = hostOs.startsWith("Windows")
val nativeTarget = when { val myNativeTarget = when {
hostOs == "Mac OS X" -> macosX64("myNative") hostOs == "Mac OS X" -> macosX64("myNative")
hostOs == "Linux" -> linuxX64("myNative") hostOs == "Linux" -> linuxX64("myNative")
isMingwX64 -> mingwX64("myNative") isMingwX64 -> mingwX64("myNative")
@@ -1,5 +1,4 @@
kotlin: kotlin:
version: 1.3.61
projectKind: Multiplatform projectKind: Multiplatform
modules: modules:
- type: multiplatform - type: multiplatform
@@ -21,7 +21,9 @@ kotlin {
} }
} }
jvmTest { jvmTest {
dependencies {
implementation kotlin('test-junit')
}
} }
aMain { aMain {
dependencies { dependencies {
@@ -29,7 +31,9 @@ kotlin {
} }
} }
aTest { aTest {
dependencies {
implementation kotlin('test-js')
}
} }
} }
} }
@@ -20,12 +20,20 @@ kotlin {
implementation(kotlin("stdlib-jdk8")) implementation(kotlin("stdlib-jdk8"))
} }
} }
val jvmTest by getting val jvmTest by getting {
dependencies {
implementation(kotlin("test-junit"))
}
}
val aMain by getting { val aMain by getting {
dependencies { dependencies {
implementation(kotlin("stdlib-js")) implementation(kotlin("stdlib-js"))
} }
} }
val aTest by getting val aTest by getting {
dependencies {
implementation(kotlin("test-js"))
}
}
} }
} }
@@ -1,18 +1,21 @@
kotlin: kotlin:
version: 1.3.61
projectKind: Multiplatform projectKind: Multiplatform
modules: modules:
- type: multiplatform - type: multiplatform
kind: multiplatform kind: multiplatform
name: a name: a
subModules: subModules:
- type: jvmTarget - type:
name: jvmTarget
testFramework: JUNIT4
kind: target kind: target
name: jvm name: jvm
sourcesets: sourcesets:
- type: main - type: main
- type: test - type: test
- type: jsBrowser - type:
name: jsBrowser
testFramework: JS
kind: target kind: target
name: a name: a
sourcesets: sourcesets:
@@ -1,5 +1,4 @@
kotlin: kotlin:
version: 1.3.61
projectKind: Multiplatform projectKind: Multiplatform
modules: modules:
- type: multiplatform - type: multiplatform
@@ -14,18 +14,18 @@ import org.jetbrains.kotlin.tools.projectWizard.plugins.kotlin.ModuleType
import org.jetbrains.kotlin.tools.projectWizard.settings.buildsystem.Module import org.jetbrains.kotlin.tools.projectWizard.settings.buildsystem.Module
import org.jetbrains.kotlin.tools.projectWizard.settings.buildsystem.ModuleKind import org.jetbrains.kotlin.tools.projectWizard.settings.buildsystem.ModuleKind
abstract class JSConfigurator : ModuleConfiguratorWithTests() { interface JSConfigurator : ModuleConfigurator {
override val moduleType: ModuleType get() = ModuleType.js override val moduleType: ModuleType get() = ModuleType.js
override fun defaultTestFramework(): KotlinTestFramework = KotlinTestFramework.JS
} }
object JsSingleplatformModuleConfigurator : JSConfigurator() { object JsSingleplatformModuleConfigurator : JSConfigurator, ModuleConfiguratorWithTests() {
override val moduleKind = ModuleKind.singleplatformJs override val moduleKind = ModuleKind.singleplatformJs
override val suggestedModuleName = "js" override val suggestedModuleName = "js"
override val id = "jsSinglepaltform" override val id = "jsSinglepaltform"
override val text = "JS for Browser" override val text = "JS for Browser"
override fun defaultTestFramework(): KotlinTestFramework = KotlinTestFramework.JS
override val canContainSubModules = false override val canContainSubModules = false
override fun createKotlinPluginIR(configurationData: ModuleConfigurationData, module: Module): KotlinBuildSystemPluginIR? = override fun createKotlinPluginIR(configurationData: ModuleConfigurationData, module: Module): KotlinBuildSystemPluginIR? =
@@ -8,7 +8,6 @@ package org.jetbrains.kotlin.tools.projectWizard.moduleConfigurators
import org.jetbrains.kotlin.tools.projectWizard.core.ValuesReadingContext import org.jetbrains.kotlin.tools.projectWizard.core.ValuesReadingContext
import org.jetbrains.kotlin.tools.projectWizard.core.entity.ModuleConfiguratorSetting import org.jetbrains.kotlin.tools.projectWizard.core.entity.ModuleConfiguratorSetting
import org.jetbrains.kotlin.tools.projectWizard.core.entity.ModuleConfiguratorSettingReference import org.jetbrains.kotlin.tools.projectWizard.core.entity.ModuleConfiguratorSettingReference
import org.jetbrains.kotlin.tools.projectWizard.core.entity.TemplateSettingReference
import org.jetbrains.kotlin.tools.projectWizard.ir.buildsystem.BuildSystemIR import org.jetbrains.kotlin.tools.projectWizard.ir.buildsystem.BuildSystemIR
import org.jetbrains.kotlin.tools.projectWizard.ir.buildsystem.DependencyType import org.jetbrains.kotlin.tools.projectWizard.ir.buildsystem.DependencyType
import org.jetbrains.kotlin.tools.projectWizard.ir.buildsystem.KotlinArbitraryDependencyIR import org.jetbrains.kotlin.tools.projectWizard.ir.buildsystem.KotlinArbitraryDependencyIR
@@ -21,7 +20,7 @@ import org.jetbrains.kotlin.tools.projectWizard.settings.buildsystem.Module
import org.jetbrains.kotlin.tools.projectWizard.settings.buildsystem.ModuleKind import org.jetbrains.kotlin.tools.projectWizard.settings.buildsystem.ModuleKind
abstract class ModuleConfiguratorWithTests : ModuleConfiguratorWithSettings() { abstract class ModuleConfiguratorWithTests : ModuleConfiguratorWithSettings() {
val framework by enumSetting<KotlinTestFramework>( val testFramework by enumSetting<KotlinTestFramework>(
"Test Framework", "Test Framework",
neededAtPhase = GenerationPhase.PROJECT_GENERATION neededAtPhase = GenerationPhase.PROJECT_GENERATION
) { ) {
@@ -39,7 +38,7 @@ abstract class ModuleConfiguratorWithTests : ModuleConfiguratorWithSettings() {
override fun ValuesReadingContext.createModuleIRs(configurationData: ModuleConfigurationData, module: Module): List<BuildSystemIR> = override fun ValuesReadingContext.createModuleIRs(configurationData: ModuleConfigurationData, module: Module): List<BuildSystemIR> =
withSettingsOf(module) { withSettingsOf(module) {
framework.reference.settingValue.dependencyNames.map { dependencyName -> testFramework.reference.settingValue.dependencyNames.map { dependencyName ->
KotlinArbitraryDependencyIR( KotlinArbitraryDependencyIR(
dependencyName, dependencyName,
isInMppModule = module.kind isInMppModule = module.kind
@@ -50,7 +49,7 @@ abstract class ModuleConfiguratorWithTests : ModuleConfiguratorWithSettings() {
} }
} }
override val settings: List<ModuleConfiguratorSetting<*, *>> = listOf(framework) override val settings: List<ModuleConfiguratorSetting<*, *>> = listOf(testFramework)
} }
@@ -51,13 +51,15 @@ private fun Module.createTargetAccessIr(moduleSubType: ModuleSubType) =
) )
abstract class JsTargetConfigurator : JSConfigurator(), TargetConfigurator, SingleCoexistenceTargetConfigurator interface JsTargetConfigurator : JSConfigurator, TargetConfigurator, SingleCoexistenceTargetConfigurator
object JsBrowserTargetConfigurator : JsTargetConfigurator() { object JsBrowserTargetConfigurator : JsTargetConfigurator, ModuleConfiguratorWithTests() {
override val id = "jsBrowser" override val id = "jsBrowser"
override val text = "Browser" override val text = "Browser"
override val suggestedModuleName = "browser" override val suggestedModuleName = "browser"
override fun defaultTestFramework(): KotlinTestFramework = KotlinTestFramework.JS
override fun createTargetIrs(module: Module): List<BuildSystemIR> = buildList { override fun createTargetIrs(module: Module): List<BuildSystemIR> = buildList {
+DefaultTargetConfigurationIR( +DefaultTargetConfigurationIR(
module.createTargetAccessIr(ModuleSubType.js), module.createTargetAccessIr(ModuleSubType.js),
@@ -70,7 +72,7 @@ object JsBrowserTargetConfigurator : JsTargetConfigurator() {
} }
} }
object JsNodeTargetConfigurator : JsTargetConfigurator() { object JsNodeTargetConfigurator : JsTargetConfigurator {
override val id = "jsNode" override val id = "jsNode"
override val text = "Node.js" override val text = "Node.js"
override val suggestedModuleName = "nodeJs" override val suggestedModuleName = "nodeJs"
@@ -37,6 +37,7 @@ class Module(
withSettingsOf(module) { withSettingsOf(module) {
configurator.settings.map { setting -> configurator.settings.map { setting ->
val value = setting.reference.notRequiredSettingValue val value = setting.reference.notRequiredSettingValue
?: setting.defaultValue
?: return@map ValidationResult.ValidationError("${setting.title.capitalize()} should not be blank") ?: return@map ValidationResult.ValidationError("${setting.title.capitalize()} should not be blank")
setting.validator.validate(this@settingValidator, value) setting.validator.validate(this@settingValidator, value)
}.fold() }.fold()
@@ -46,6 +47,7 @@ class Module(
org.jetbrains.kotlin.tools.projectWizard.templates.withSettingsOf(module) { org.jetbrains.kotlin.tools.projectWizard.templates.withSettingsOf(module) {
template.settings.map { setting -> template.settings.map { setting ->
val value = setting.reference.notRequiredSettingValue val value = setting.reference.notRequiredSettingValue
?: setting.defaultValue
?: return@map ValidationResult.ValidationError("${setting.title.capitalize()} should not be blank") ?: return@map ValidationResult.ValidationError("${setting.title.capitalize()} should not be blank")
setting.validator.validate(this@settingValidator, value) setting.validator.validate(this@settingValidator, value)
}.fold() }.fold()