package cucumber.runtime.gosu; import cucumber.runtime.io.Resource; import gw.lang.launch.IArgInfo; import gw.lang.launch.IBooleanArgKey; import gw.lang.launch.IProgramSource; import gw.lang.launch.IStringArgKey; import java.io.ByteArrayInputStream; import java.io.File; import java.io.IOException; import java.io.InputStream; import java.util.List; class GlueSource implements IProgramSource { private final StringBuilder sourceBuilder = new StringBuilder(); @Override public String getRawPath() { // This file doesn't really exist, but we have to say something I guess! return "cucumber.gsp"; } @Override public File getFile() { return null; } @Override public InputStream openInputStream() throws IOException { return new ByteArrayInputStream(sourceBuilder.toString().getBytes("UTF-8")); } public void addGlueScript(Resource glueScript) { // https://groups.google.com/d/msg/gosu-lang/yMJnzQwuFpo/msg81GNGlAYJ String className = glueScript.getClassName(".gsp"); sourceBuilder.append("(" + className + ".Type as java.lang.Class).getDeclaredMethod( \"evaluate\", {gw.lang.reflect.gs.IExternalSymbolMap} ).invoke( new " + className + "(), {null})\n"); } public IArgInfo toArgInfo() { return new IArgInfo() { @Override public boolean consumeArg(IBooleanArgKey iBooleanArgKey) { return false; } @Override public String consumeArg(IStringArgKey iStringArgKey) { return null; } @Override public void processUnknownArgs() { } @Override public String getErrorMessage() { return null; } @Override public IProgramSource getProgramSource() { return GlueSource.this; } @Override public List<String> getArgsList() { return null; } }; } }