Skip to content

Commit ab9dad2

Browse files
committed
ScriptService: add getScript(String,String) signature
This makes it easier to retrieve a ScriptInfo object from a script string (without going via File). Closes #389.
1 parent a63cd8f commit ab9dad2

File tree

3 files changed

+56
-22
lines changed

3 files changed

+56
-22
lines changed

src/main/java/org/scijava/script/DefaultScriptService.java

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,7 @@
3030
package org.scijava.script;
3131

3232
import java.io.File;
33+
import java.io.StringReader;
3334
import java.math.BigDecimal;
3435
import java.math.BigInteger;
3536
import java.util.ArrayList;
@@ -159,6 +160,11 @@ public ScriptInfo getScript(final File scriptFile) {
159160
return getOrCreate(scriptFile);
160161
}
161162

163+
@Override
164+
public ScriptInfo getScript(final String path, final String script) {
165+
return new ScriptInfo(getContext(), path, new StringReader(script));
166+
}
167+
162168
@Override
163169
public Future<ScriptModule> run(final File file, final boolean process,
164170
final Object... inputs)

src/main/java/org/scijava/script/ScriptService.java

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -127,6 +127,18 @@ default ScriptLanguage getLanguageByName(final String name) {
127127
*/
128128
ScriptInfo getScript(File scriptFile);
129129

130+
/**
131+
* Creates the {@link ScriptInfo} metadata for the provided script.
132+
*
133+
* @param path
134+
* Pseudo-path to the script file. This file does not actually need
135+
* to exist, but rather provides a name for the script with file
136+
* extension.
137+
* @param script
138+
* The script contents.
139+
*/
140+
ScriptInfo getScript(String path, String script);
141+
130142
/**
131143
* Executes the script in the given file.
132144
*

src/test/java/org/scijava/script/ScriptServiceTest.java

Lines changed: 38 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -40,8 +40,11 @@
4040

4141
import javax.script.ScriptException;
4242

43+
import org.junit.After;
44+
import org.junit.Before;
4345
import org.junit.Test;
4446
import org.scijava.Context;
47+
import org.scijava.script.ScriptInfoTest.BindingSizes;
4548
import org.scijava.util.AppUtils;
4649
import org.scijava.util.ColorRGB;
4750
import org.scijava.util.ColorRGBA;
@@ -53,6 +56,20 @@
5356
*/
5457
public class ScriptServiceTest {
5558

59+
private Context context;
60+
private ScriptService scriptService;
61+
62+
@Before
63+
public void setUp() {
64+
context = new Context(ScriptService.class);
65+
scriptService = context.service(ScriptService.class);
66+
}
67+
68+
@After
69+
public void tearDown() {
70+
context.dispose();
71+
}
72+
5673
/**
5774
* Tests that the "scijava.scripts.path" system property is handled correctly.
5875
*/
@@ -65,9 +82,6 @@ public void testSystemProperty() {
6582
final String dir2 = root + "to" + slash + "the" + slash + "moon";
6683
System.setProperty("scijava.scripts.path", dir1 + sep + dir2);
6784

68-
final Context context = new Context(ScriptService.class);
69-
final ScriptService scriptService = context.service(ScriptService.class);
70-
7185
final List<File> scriptDirs = scriptService.getScriptDirectories();
7286
assertEquals(3, scriptDirs.size());
7387

@@ -80,9 +94,6 @@ public void testSystemProperty() {
8094

8195
@Test
8296
public void testBuiltInAliases() throws ScriptException {
83-
final Context ctx = new Context(ScriptService.class);
84-
final ScriptService ss = ctx.service(ScriptService.class);
85-
8697
final Class<?>[] builtIns = { boolean.class, byte.class, char.class,
8798
double.class, float.class, int.class, long.class, short.class,
8899
Boolean.class, Byte.class, Character.class, Double.class, Float.class,
@@ -91,39 +102,44 @@ public void testBuiltInAliases() throws ScriptException {
91102
String.class };
92103

93104
for (final Class<?> builtIn : builtIns) {
94-
final Class<?> c = ss.lookupClass(builtIn.getSimpleName());
105+
final Class<?> c = scriptService.lookupClass(builtIn.getSimpleName());
95106
assertSame(builtIn, c);
96107
}
97-
98-
ctx.dispose();
99108
}
100109

101110
@Test
102111
public void testArrayAliases() throws ScriptException {
103-
final Context ctx = new Context(ScriptService.class);
104-
final ScriptService ss = ctx.service(ScriptService.class);
105-
106-
final Class<?> pInt2D = ss.lookupClass("int[][]");
112+
final Class<?> pInt2D = scriptService.lookupClass("int[][]");
107113
assertSame(int[][].class, pInt2D);
108-
final Class<?> pInt1D = ss.lookupClass("int[]");
114+
final Class<?> pInt1D = scriptService.lookupClass("int[]");
109115
assertSame(int[].class, pInt1D);
110-
final Class<?> pInt = ss.lookupClass("int");
116+
final Class<?> pInt = scriptService.lookupClass("int");
111117
assertSame(int.class, pInt);
112118

113-
final Class<?> oInt2D = ss.lookupClass("Integer[][]");
119+
final Class<?> oInt2D = scriptService.lookupClass("Integer[][]");
114120
assertSame(Integer[][].class, oInt2D);
115-
final Class<?> oInt1D = ss.lookupClass("Integer[]");
121+
final Class<?> oInt1D = scriptService.lookupClass("Integer[]");
116122
assertSame(Integer[].class, oInt1D);
117-
final Class<?> oInt = ss.lookupClass("Integer");
123+
final Class<?> oInt = scriptService.lookupClass("Integer");
118124
assertSame(Integer.class, oInt);
119125

120-
final Class<?> str2D = ss.lookupClass("String[][]");
126+
final Class<?> str2D = scriptService.lookupClass("String[][]");
121127
assertSame(String[][].class, str2D);
122-
final Class<?> str1D = ss.lookupClass("String[]");
128+
final Class<?> str1D = scriptService.lookupClass("String[]");
123129
assertSame(String[].class, str1D);
124-
final Class<?> str = ss.lookupClass("String");
130+
final Class<?> str = scriptService.lookupClass("String");
125131
assertSame(String.class, str);
132+
}
126133

127-
ctx.dispose();
134+
@Test
135+
public void testGetScript() {
136+
String script = "#@ String name\n" +
137+
"#@output String greeting\n" +
138+
"greeting = \"Hello, \" + name + \"!\"";
139+
// see ScriptInfoTest for the .bsizes ScriptLanguage used here
140+
ScriptInfo scriptInfo = scriptService.getScript(".bsizes", script);
141+
assertEquals(BindingSizes.class, scriptInfo.getLanguage().getClass());
142+
assertEquals("name", scriptInfo.inputs().iterator().next().getName());
143+
assertEquals("greeting", scriptInfo.outputs().iterator().next().getName());
128144
}
129145
}

0 commit comments

Comments
 (0)
pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy