From 1583ec50ce7202087cb145292b9809df2e99ee13 Mon Sep 17 00:00:00 2001 From: Brian Lalor Date: Wed, 21 Nov 2012 08:46:58 -0500 Subject: [PATCH] Add ability to load JS files from classpath This will allow better packaging of the resources needed to run the tests. --- src/main/java/be/klak/rhino/RhinoContext.java | 20 +++++++++++++++++++ .../java/be/klak/rhino/RhinoContextTest.java | 10 ++++++++++ 2 files changed, 30 insertions(+) diff --git a/src/main/java/be/klak/rhino/RhinoContext.java b/src/main/java/be/klak/rhino/RhinoContext.java index 0454319..cfbe2ba 100755 --- a/src/main/java/be/klak/rhino/RhinoContext.java +++ b/src/main/java/be/klak/rhino/RhinoContext.java @@ -1,5 +1,7 @@ package be.klak.rhino; +import java.net.URL; + import org.mozilla.javascript.Context; import org.mozilla.javascript.ContextFactory; import org.mozilla.javascript.Function; @@ -86,6 +88,24 @@ public class RhinoContext { // Main.processFile(this.jsContext, this.jsScope, fileName); } + // {{{ loadFromClasspath + /** + * Loads a resource from the classpath. + * + * @param resource the resource to resolve from the classpath + */ + public void loadFromClasspath(final String resource) { + URL rsrcUrl = + Thread.currentThread().getContextClassLoader().getResource(resource); + + if (rsrcUrl == null) { + throw new IllegalArgumentException("resource " + resource + " not found on classpath"); + } + + evalJS(String.format("load('%s')", rsrcUrl.toExternalForm())); + } + // }}} + public Object executeFunction(ScriptableObject object, String fnName, Object[] arguments) { Object fnPointer = object.get(fnName, object); if (fnPointer == null || !(fnPointer instanceof Function)) { diff --git a/src/test/java/be/klak/rhino/RhinoContextTest.java b/src/test/java/be/klak/rhino/RhinoContextTest.java index ffd7bc2..02261c6 100755 --- a/src/test/java/be/klak/rhino/RhinoContextTest.java +++ b/src/test/java/be/klak/rhino/RhinoContextTest.java @@ -80,4 +80,14 @@ public class RhinoContextTest { assertThat(context.evalJS("loaded")).isEqualTo(true); assertThat(context.evalJS("loadedTwo")).isEqualTo(true); } + + // {{{ loadsJSFilesFromClasspath + @Test + public void loadsJSFilesFromClasspath() { + RhinoContext context = new RhinoContext(); + context.loadFromClasspath("js/lib/loadsJSFilesFromClasspathTarget.js"); + + assertThat(context.evalJS("target.theAnswer")).isEqualTo("forty two"); + } + // }}} }