diff --git a/jjava-distro/src/test/java/org/dflib/jjava/distro/KernelExecutionIT.java b/jjava-distro/src/test/java/org/dflib/jjava/distro/KernelExecutionIT.java new file mode 100644 index 0000000..2768ba5 --- /dev/null +++ b/jjava-distro/src/test/java/org/dflib/jjava/distro/KernelExecutionIT.java @@ -0,0 +1,25 @@ +package org.dflib.jjava.distro; + +import org.junit.jupiter.api.Test; +import org.testcontainers.containers.Container; + +import static org.hamcrest.MatcherAssert.assertThat; +import static org.hamcrest.Matchers.containsString; +import static org.hamcrest.Matchers.not; +import static org.junit.jupiter.api.Assertions.assertEquals; + +public class KernelExecutionIT extends ContainerizedKernelCase { + + /** + * @see #119 + */ + @Test + public void variableSurvivesLaterImports() throws Exception { + String snippet = "%load " + CONTAINER_RESOURCES + "/nullifying_import.jshell"; + + Container.ExecResult snippetResult = executeInKernel(snippet); + + assertEquals(0, snippetResult.getExitCode(), snippetResult.getStdout()); + assertThat(snippetResult.getStdout(), not(containsString("|"))); + } +} diff --git a/jjava-distro/src/test/resources/nullifying_import.jshell b/jjava-distro/src/test/resources/nullifying_import.jshell new file mode 100644 index 0000000..56a2ac9 --- /dev/null +++ b/jjava-distro/src/test/resources/nullifying_import.jshell @@ -0,0 +1,5 @@ +%maven com.fasterxml.jackson.core:jackson-databind:2.21.2 +import com.fasterxml.jackson.databind.*; +var om = new ObjectMapper().findAndRegisterModules(); +import com.fasterxml.jackson.databind.node.*; import com.fasterxml.jackson.databind.type.*; +om.getClass().getName() diff --git a/jjava-kernel/src/main/java/org/dflib/jjava/kernel/execution/JJavaExecutionControl.java b/jjava-kernel/src/main/java/org/dflib/jjava/kernel/execution/JJavaExecutionControl.java index e17e79a..e2e8859 100644 --- a/jjava-kernel/src/main/java/org/dflib/jjava/kernel/execution/JJavaExecutionControl.java +++ b/jjava-kernel/src/main/java/org/dflib/jjava/kernel/execution/JJavaExecutionControl.java @@ -76,6 +76,11 @@ public void stop() { executor.shutdownNow(); } + @Override + public void redefine(ClassBytecodes[] cbcs) { + loaderDelegate.classesRedefined(cbcs); + } + public Object takeResult(String id) { Object result = this.results.remove(id); if (result == null) {