File tree 4 files changed +100
-4
lines changed
core-kotlin-modules/core-kotlin-advanced-4
src/test/kotlin/com/baeldung/runKotlinScripts
4 files changed +100
-4
lines changed Original file line number Diff line number Diff line change 13
13
<version >1.0.0-SNAPSHOT</version >
14
14
</parent >
15
15
16
+ <properties >
17
+ <kotlinx-html-jvm .version>0.7.5</kotlinx-html-jvm .version>
18
+ <kotlinx-coroutines .version>1.7.3</kotlinx-coroutines .version>
19
+ <kotlin-scripting .version>1.8.0</kotlin-scripting .version>
20
+ </properties >
21
+
16
22
<dependencies >
17
23
18
24
<dependency >
29
35
<scope >test</scope >
30
36
</dependency >
31
37
38
+ <dependency >
39
+ <groupId >org.jetbrains.kotlin</groupId >
40
+ <artifactId >kotlin-scripting-jsr223</artifactId >
41
+ <version >${kotlin-scripting.version} </version >
42
+ </dependency >
43
+
32
44
</dependencies >
33
45
34
- <properties >
35
- <kotlinx-html-jvm .version>0.7.5</kotlinx-html-jvm .version>
36
- <kotlinx-coroutines .version>1.7.3</kotlinx-coroutines .version>
37
- </properties >
46
+ <profiles >
47
+ <profile >
48
+ <id >integration-test</id >
49
+ <build >
50
+ <plugins >
51
+ <plugin >
52
+ <groupId >org.apache.maven.plugins</groupId >
53
+ <artifactId >maven-surefire-plugin</artifactId >
54
+ <version >2.22.2</version >
55
+ <configuration >
56
+ <includes >
57
+ <include >**/*IntegrationTest.kt</include >
58
+ </includes >
59
+ </configuration >
60
+ </plugin >
61
+ </plugins >
62
+ </build >
63
+ </profile >
64
+ </profiles >
38
65
39
66
</project >
Original file line number Diff line number Diff line change
1
+ package com.baeldung.runKotlinScripts
2
+
3
+ import org.junit.jupiter.api.Assertions.assertEquals
4
+ import org.junit.jupiter.api.Test
5
+ import java.io.File
6
+
7
+ // requires `kotlinc` to be installed on the machine.
8
+ class RunKotlinScriptsIntegrationTest {
9
+ @Test
10
+ fun `run Kotlin script with ProcessBuilder` () {
11
+ val scriptFile = File .createTempFile(" test" , " .kts" )
12
+ scriptFile.writeText("""
13
+ println("Hello, ProcessBuilder!")
14
+ """ .trimIndent())
15
+
16
+ val output = runScriptUsingProcess(scriptFile.absolutePath).trim()
17
+ assertEquals(" Hello, ProcessBuilder!" , output)
18
+ }
19
+ }
20
+
21
+ fun runScriptUsingProcess (scriptPath : String ): String {
22
+ val processBuilder = ProcessBuilder (" kotlinc" , " -script" , scriptPath)
23
+ val process = processBuilder.start()
24
+ return process.inputStream.bufferedReader().use { it.readText() }
25
+ }
Original file line number Diff line number Diff line change
1
+ package com.baeldung.runKotlinScripts
2
+
3
+ import org.junit.jupiter.api.Assertions.assertEquals
4
+ import org.junit.jupiter.api.Test
5
+ import java.io.ByteArrayOutputStream
6
+ import java.io.File
7
+ import java.io.PrintStream
8
+ import javax.script.ScriptEngineManager
9
+
10
+ class RunKotlinScriptsUnitTest {
11
+
12
+ @Test
13
+ fun `run Kotlin script using ScriptEngine` () {
14
+ val scriptFile = File .createTempFile(" test" , " .kts" )
15
+ scriptFile.writeText("""
16
+ println("Hello from ScriptEngine!")
17
+ """ .trimIndent())
18
+
19
+ val output = runKotlinScriptWithEngine(scriptFile.absolutePath).trim()
20
+
21
+ assertEquals(" Hello from ScriptEngine!" , output)
22
+ }
23
+
24
+
25
+ }
26
+
27
+ fun runKotlinScriptWithEngine (scriptPath : String ): String {
28
+ val engine = ScriptEngineManager ().getEngineByExtension(" kts" )
29
+ val script = File (scriptPath).readText()
30
+
31
+ val outputStream = ByteArrayOutputStream ()
32
+ val originalOut = System .out
33
+ System .setOut(PrintStream (outputStream))
34
+
35
+ try {
36
+ engine.eval(script)
37
+ } finally {
38
+ System .setOut(originalOut)
39
+ }
40
+
41
+ return outputStream.toString()
42
+ }
43
+
Original file line number Diff line number Diff line change
1
+ println (" Hello, KScript!" )
You can’t perform that action at this time.
0 commit comments