From 4830bdc4e9b48de58df9eabfbbf065ff30e49dfc Mon Sep 17 00:00:00 2001 From: Angela Cortecchia Date: Fri, 10 Apr 2026 11:05:28 +0200 Subject: [PATCH 1/3] test: add regression test for jsr variable failing when using external variables --- .../it/unibo/alchemist/test/TestKtVariable.kt | 13 +++++++++++++ .../test/resources/regression/testJSRVariable.yml | 10 ++++++++++ 2 files changed, 23 insertions(+) create mode 100644 alchemist-loading/src/test/resources/regression/testJSRVariable.yml diff --git a/alchemist-loading/src/test/kotlin/it/unibo/alchemist/test/TestKtVariable.kt b/alchemist-loading/src/test/kotlin/it/unibo/alchemist/test/TestKtVariable.kt index d44752a1bf..a6ae1d74a1 100644 --- a/alchemist-loading/src/test/kotlin/it/unibo/alchemist/test/TestKtVariable.kt +++ b/alchemist-loading/src/test/kotlin/it/unibo/alchemist/test/TestKtVariable.kt @@ -77,4 +77,17 @@ class TestKtVariable> : assertNotNull(loader.getWith(emptyMap())) loader.variables["seed"] shouldNot beNull() } + + // This is a regression test, when using Alchemist variables inside a JSR223Variable scope, + // the simulation does not inherit the external variables into the JSR scope. + // Caused by: javax.script.ScriptException: ERROR Unresolved reference: *externalVariableName* + "simulation should load external variables inside function scope" { + val file = ResourceLoader.getResource("regression/testJSRVariable.yml") + assertNotNull(file) + val loader = LoadAlchemist.from(file) + assertNotNull(loader.getWith(emptyMap())) + loader.variables["simple"] shouldNot beNull() + } }) + +data class SimpleDataClass(val number: Int, val name: String) diff --git a/alchemist-loading/src/test/resources/regression/testJSRVariable.yml b/alchemist-loading/src/test/resources/regression/testJSRVariable.yml new file mode 100644 index 0000000000..798cd3fdc4 --- /dev/null +++ b/alchemist-loading/src/test/resources/regression/testJSRVariable.yml @@ -0,0 +1,10 @@ +incarnation: sapere + +variables: + number: 1 + name: "peppe" + simple: &simple + language: kotlin + formula: | + import it.unibo.alchemist.test.SimpleDataClass + val simpleDataClass = SimpleDataClass(number, name) From 1774aeb0215346aa67d65c51e21571f0e5d2566d Mon Sep 17 00:00:00 2001 From: Angela Cortecchia Date: Fri, 10 Apr 2026 11:13:26 +0200 Subject: [PATCH 2/3] refactor: replace SimpleDataClass with Pair for jsr variable test --- .../src/test/kotlin/it/unibo/alchemist/test/TestKtVariable.kt | 2 -- .../src/test/resources/regression/testJSRVariable.yml | 3 +-- 2 files changed, 1 insertion(+), 4 deletions(-) diff --git a/alchemist-loading/src/test/kotlin/it/unibo/alchemist/test/TestKtVariable.kt b/alchemist-loading/src/test/kotlin/it/unibo/alchemist/test/TestKtVariable.kt index a6ae1d74a1..6684ea07a5 100644 --- a/alchemist-loading/src/test/kotlin/it/unibo/alchemist/test/TestKtVariable.kt +++ b/alchemist-loading/src/test/kotlin/it/unibo/alchemist/test/TestKtVariable.kt @@ -89,5 +89,3 @@ class TestKtVariable> : loader.variables["simple"] shouldNot beNull() } }) - -data class SimpleDataClass(val number: Int, val name: String) diff --git a/alchemist-loading/src/test/resources/regression/testJSRVariable.yml b/alchemist-loading/src/test/resources/regression/testJSRVariable.yml index 798cd3fdc4..d7746dc46f 100644 --- a/alchemist-loading/src/test/resources/regression/testJSRVariable.yml +++ b/alchemist-loading/src/test/resources/regression/testJSRVariable.yml @@ -6,5 +6,4 @@ variables: simple: &simple language: kotlin formula: | - import it.unibo.alchemist.test.SimpleDataClass - val simpleDataClass = SimpleDataClass(number, name) + val couple: Pair = number to name From 1adad596ef6348549b4e7205a00c5e8ec39779a4 Mon Sep 17 00:00:00 2001 From: Angela Cortecchia Date: Fri, 10 Apr 2026 15:40:59 +0200 Subject: [PATCH 3/3] refactor: update JSR variable test by adding arbitrary variable and constants --- .../src/test/resources/regression/testJSRVariable.yml | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/alchemist-loading/src/test/resources/regression/testJSRVariable.yml b/alchemist-loading/src/test/resources/regression/testJSRVariable.yml index d7746dc46f..dbb03c84b6 100644 --- a/alchemist-loading/src/test/resources/regression/testJSRVariable.yml +++ b/alchemist-loading/src/test/resources/regression/testJSRVariable.yml @@ -1,9 +1,14 @@ incarnation: sapere +_constants: + name: "test" + variables: number: 1 - name: "peppe" + other: + type: ArbitraryVariable + parameters: [ 1, [1, 2]] simple: &simple language: kotlin formula: | - val couple: Pair = number to name + val couple: Pair = (number + other) to name