1+ apply plugin : ' kotlin-multiplatform'
2+ apply plugin : ' com.moowork.node'
3+
4+ final kotlinRuntimeVersion = ' 1.3.50'
5+
6+ final nodeVersion = ' 11.2.0'
7+ final nodeWorkingDir = project. buildDir
8+ final nodeModules = " $nodeWorkingDir /node_modules"
9+ final mochaVersion = ' 5.2.0'
10+ final pathSeparator = System . properties[" path.separator" ]
11+
12+ kotlin {
13+
14+ targets {
15+ js()
16+ jvm()
17+ }
18+ sourceSets {
19+ commonMain {
20+ dependencies {
21+ api ' org.jetbrains.kotlin:kotlin-stdlib'
22+ }
23+ }
24+ commonTest {
25+ kotlin. srcDir(' src/test/kotlin' )
26+ dependencies {
27+ implementation " org.jetbrains.kotlin:kotlin-test-common"
28+ implementation " org.jetbrains.kotlin:kotlin-test-annotations-common"
29+ }
30+ }
31+ jvmMain {
32+ dependencies {
33+ implementation " org.jetbrains.kotlin:kotlin-stdlib:$kotlinVersion "
34+ }
35+ }
36+ jvmTest {
37+ dependencies {
38+ implementation ' org.jetbrains.kotlin:kotlin-test'
39+ implementation ' org.jetbrains.kotlin:kotlin-test-junit'
40+ }
41+ }
42+ jsTest {
43+ kotlin. srcDir(' src/test/kotlin' )
44+
45+ dependencies {
46+ implementation kotlin(" test-js" )
47+ implementation kotlin(" stdlib-js" )
48+ }
49+ }
50+
51+ }
52+
53+ }
54+
55+ // workaround for https://youtrack.jetbrains.com/issue/KT-27170
56+ configurations {
57+ compileClasspath
58+ }
59+
60+ // Workaround to copy kotlin libraries so they are visible during testing
61+ def jsLibDir = " $compileKotlinJs . destinationDir /lib"
62+ def jsTestLibDir = " $compileTestKotlinJs . destinationDir /lib"
63+ configurations {
64+ jsLibs
65+ jsTestLibs
66+ }
67+ dependencies {
68+ jsLibs " org.jetbrains.kotlin:kotlin-stdlib-js:$kotlinRuntimeVersion "
69+ jsTestLibs " org.jetbrains.kotlin:kotlin-test-js:$kotlinRuntimeVersion "
70+ }
71+ task copyJsDependencies (type : Copy , dependsOn : compileKotlinJs) {
72+ configurations. jsLibs. each {
73+ from zipTree(it. absolutePath). matching { include ' *.js' }
74+ }
75+ into jsLibDir
76+ }
77+ jsMainClasses. dependsOn copyJsDependencies
78+ task copyJsTestDependencies (type : Copy ) {
79+ configurations. jsTestLibs. each {
80+ from zipTree(it. absolutePath). matching { include ' *.js' }
81+ }
82+ into jsTestLibDir
83+ }
84+ jsTestClasses. dependsOn copyJsTestDependencies
85+
86+ // Use mocha to run js tests
87+ node {
88+ version = nodeVersion
89+ download = true
90+ workDir = file(" $project . buildDir /nodejs" )
91+ nodeModulesDir = file(nodeWorkingDir)
92+ }
93+ task installMocha (type : NpmTask , group : ' npm' ) {
94+ outputs. dir " $nodeModules /mocha"
95+ args = [' install' , " mocha@$mochaVersion " ]
96+ }
97+ task runMocha (type : NodeTask , dependsOn : [installMocha, jsMainClasses, jsTestClasses], group : ' npm' ) {
98+ environment = [ " NODE_PATH" : " $jsLibDir $pathSeparator $jsTestLibDir $pathSeparator $compileKotlinJs . destinationDir " ]
99+ script = file(" $nodeWorkingDir /node_modules/mocha/bin/mocha" )
100+ args = [compileTestKotlinJs. outputFile]
101+ }
102+ jsTest. dependsOn runMocha
0 commit comments