Skip to content

Commit fdc7bb4

Browse files
author
Simon Wirtz
committed
introduced new API functions
1 parent c80a96f commit fdc7bb4

File tree

4 files changed

+29
-21
lines changed

4 files changed

+29
-21
lines changed

build.gradle.kts

+2-2
Original file line numberDiff line numberDiff line change
@@ -8,11 +8,11 @@ import org.gradle.api.publish.maven.MavenPom
88
val kotlinVersion = plugins.getPlugin(KotlinPluginWrapper::class.java).kotlinPluginVersion
99

1010
project.group = "de.swirtz"
11-
project.version = "0.0.2"
11+
project.version = "0.0.3"
1212
val artifactID = "ktsRunner"
1313

1414
plugins {
15-
kotlin("jvm") version "1.2.41"
15+
kotlin("jvm") version "1.2.61"
1616
`maven-publish`
1717
id("com.jfrog.bintray") version "1.8.0"
1818
id("com.github.johnrengelman.shadow") version "2.0.2"
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
package de.swirtz.ktsobjectloader
22

3+
import java.io.InputStream
34
import java.io.Reader
45
import javax.script.ScriptEngineManager
56

@@ -9,23 +10,15 @@ class KtsObjectLoader {
910
val engine = ScriptEngineManager().getEngineByExtension("kts")
1011
}
1112

12-
inline fun <reified T> load(script: String): T {
13-
val loaded: Any = engine.eval(script)
14-
return if (loaded is T) {
15-
loaded
16-
} else {
17-
throw IllegalStateException("Could not load script from .kts")
18-
}
19-
}
13+
inline fun <reified T> load(script: String): T = engine.eval(script).takeIf { it is T } as T
14+
?: throw IllegalStateException("Could not load script from .kts")
2015

21-
inline fun <reified T> load(reader: Reader): T {
22-
val loaded: Any = engine.eval(reader)
23-
return if (loaded is T) {
24-
loaded
25-
} else {
26-
throw IllegalStateException("Could not load script from .kts")
27-
}
28-
}
16+
inline fun <reified T> load(reader: Reader): T = engine.eval(reader).takeIf { it is T } as T
17+
?: throw IllegalStateException("Could not load script from .kts")
18+
19+
inline fun <reified T> load(inputStream: InputStream): T = engine.eval(inputStream.reader()).takeIf { it is T } as T
20+
?: throw IllegalStateException("Could not load script from .kts")
2921

22+
inline fun <reified T> loadAll(vararg inputStream: InputStream): List<T> = inputStream.map(::load)
3023
}
3124

src/test/kotlin/de/swirtz/ktsobjectloader/KtsObjectLoaderTest.kt

+15-3
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,6 @@ import kotlin.test.assertEquals
1010
import kotlin.test.assertNull
1111
import kotlin.test.fail
1212

13-
1413
class KtsObjectLoaderTest {
1514

1615
@Test
@@ -34,7 +33,7 @@ class KtsObjectLoaderTest {
3433

3534
@Test
3635
fun `simple evaluations should work`() {
37-
with(KtsObjectLoader.engine as KotlinJsr223JvmLocalScriptEngine) {
36+
with(KtsObjectLoader.engine as KotlinJsr223JvmLocalScriptEngine) {
3837
val res1 = eval("val x = 3")
3938
assertNull(res1, "No returned value expected")
4039
val res2 = eval("x + 2")
@@ -52,7 +51,6 @@ class KtsObjectLoaderTest {
5251
assertEquals(15, KtsObjectLoader().load(scriptContent))
5352
}
5453

55-
5654
@Test
5755
fun `class loaded from script`() {
5856
val scriptContent = Files.readAllBytes(Paths.get("src/test/resources/testscript.kts"))?.let {
@@ -69,4 +67,18 @@ class KtsObjectLoaderTest {
6967
assertEquals(ClassFromScript::class, KtsObjectLoader().load<ClassFromScript>(scriptContent)::class)
7068
}
7169

70+
@Test
71+
fun `class loaded from script via InputStream`() {
72+
val scriptContent = Files.newInputStream(Paths.get("src/test/resources/testscript.kts"))
73+
assertEquals(ClassFromScript::class, KtsObjectLoader().load<ClassFromScript>(scriptContent)::class)
74+
}
75+
76+
@Test
77+
fun `multiple classes loaded from script via InputStream`() {
78+
val scriptContent = Files.newInputStream(Paths.get("src/test/resources/testscript.kts"))
79+
val scriptContent2 = Files.newInputStream(Paths.get("src/test/resources/testscript2.kts"))
80+
KtsObjectLoader().loadAll<ClassFromScript>(scriptContent, scriptContent2).forEach {
81+
assertEquals(ClassFromScript::class, it::class)
82+
}
83+
}
7284
}

src/test/resources/testscript2.kts

+3
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
import de.swirtz.ktsobjectloader.ClassFromScript
2+
3+
ClassFromScript("2) I was created in kts; äö")

0 commit comments

Comments
 (0)