Skip to content

Commit 203eee5

Browse files
committed
Merge branch 'load'
This topic branch offers the load(path) function to import reusable Javascript libraries. Its absence from the SciJava scripting framework's Javascript support was bemoaned by Christophe Leterrier. Signed-off-by: Johannes Schindelin <[email protected]>
2 parents 2825866 + 38e3c26 commit 203eee5

File tree

3 files changed

+36
-1
lines changed

3 files changed

+36
-1
lines changed

pom.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
<parent>
66
<groupId>org.scijava</groupId>
77
<artifactId>pom-scijava</artifactId>
8-
<version>1.167</version>
8+
<version>2.20</version>
99
<relativePath />
1010
</parent>
1111

src/main/java/org/scijava/plugins/scripting/javascript/JavaScriptScriptLanguage.java

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,7 @@
3434
import java.lang.reflect.InvocationTargetException;
3535

3636
import javax.script.ScriptEngine;
37+
import javax.script.ScriptException;
3738

3839
import org.scijava.log.LogService;
3940
import org.scijava.plugin.Parameter;
@@ -58,6 +59,23 @@ public JavaScriptScriptLanguage() {
5859
super("javascript");
5960
}
6061

62+
@Override
63+
public ScriptEngine getScriptEngine() {
64+
final ScriptEngine engine = super.getScriptEngine();
65+
try {
66+
engine.eval("function load(path) {\n"
67+
+ " importClass(Packages.sun.org.mozilla.javascript.internal.Context);\n"
68+
+ " importClass(Packages.java.io.FileReader);\n"
69+
+ " var cx = Context.getCurrentContext();\n"
70+
+ " cx.evaluateReader(this, new FileReader(path), path, 1, null);\n"
71+
+ "}");
72+
}
73+
catch (ScriptException e) {
74+
e.printStackTrace();
75+
}
76+
return engine;
77+
}
78+
6179
@Override
6280
public Object decode(final Object object) {
6381
// NB: JavaScript objects come out of the engine wrapped as

src/test/java/org/scijava/plugins/scripting/javascript/JavaScriptTest.java

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,10 @@
3535
import static org.junit.Assert.assertNull;
3636
import static org.junit.Assert.assertTrue;
3737

38+
import java.io.File;
39+
import java.io.FileWriter;
3840
import java.io.IOException;
41+
import java.io.Writer;
3942
import java.util.concurrent.ExecutionException;
4043

4144
import javax.script.Bindings;
@@ -109,4 +112,18 @@ public void testParameters() throws InterruptedException, ExecutionException,
109112
assertEquals(expected, result);
110113
}
111114

115+
@Test
116+
public void testLoad() throws IOException, InterruptedException, ExecutionException, ScriptException {
117+
final File tmp = File.createTempFile("js-lib-", ".js");
118+
final Writer writer = new FileWriter(tmp);
119+
writer.write("function three() { return 4; }");
120+
writer.close();
121+
122+
final Context context = new Context(ScriptService.class);
123+
final ScriptService scriptService = context.getService(ScriptService.class);
124+
final String script = "load('" + tmp.getPath() + "'); three();";
125+
final Object result = scriptService.run("three.js", script, false).get().getReturnValue();
126+
assertEquals(4.0, (Number) result);
127+
assertTrue(tmp.delete());
128+
}
112129
}

0 commit comments

Comments
 (0)