/*
* Copyright 2006 Sun Microsystems, Inc. All rights reserved.
* Use is subject to license terms.
*
* Redistribution and use in source and binary forms, with or without modification, are
* permitted provided that the following conditions are met: Redistributions of source code
* must retain the above copyright notice, this list of conditions and the following disclaimer.
* Redistributions in binary form must reproduce the above copyright notice, this list of
* conditions and the following disclaimer in the documentation and/or other materials
* provided with the distribution. Neither the name of the Sun Microsystems nor the names of
* is contributors may be used to endorse or promote products derived from this software
* without specific prior written permission.
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS
* OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
* AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER
* OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
* ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
* OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
* POSSIBILITY OF SUCH DAMAGE.
*/
package com.sun.script.jruby.test;
import java.io.FileNotFoundException;
import java.io.FileReader;
import javax.script.Invocable;
import javax.script.ScriptEngine;
import javax.script.ScriptEngineFactory;
import javax.script.ScriptEngineManager;
import javax.script.ScriptException;
/**
* InvoleFunctionTest.java
* @author Yoko Harada
*/
public class InvokeFunctionTest {
public static void main(String[] args) throws ScriptException, NoSuchMethodException, FileNotFoundException {
String basedir = System.getProperty("base.dir");
ScriptEngineManager manager = new ScriptEngineManager();
ScriptEngine engine = null;
for (ScriptEngineFactory factory : manager.getEngineFactories()) {
if ("ruby".equals(factory.getLanguageName())) {
engine = factory.getScriptEngine();
break;
}
}
engine.eval("def hello(to) print 'Hello, ', to, '\n' end");
Invocable invocable = (Invocable) engine;
//Methods compiled("parsed" in ruby) previously can be invoked more than once.
invocable.invokeFunction("hello", new Object[]{"Santa Claus"});
invocable.invokeFunction("hello", new Object[]{"St. Valentine"});
invocable.invokeFunction("hello", new Object[]{"St. Patrick"});
//If a method to be invoked doesn't have any argument,
//give an empty array of Object.
engine.eval("def say() puts \"Don\'t drink too much!\" end");
invocable.invokeFunction("say", new Object[]{});
//give global variables to a method by context
Object[] list = {"Scarecrow", "Pumpkin", "Witch"};
engine.put("list", list);
engine.eval(new FileReader(basedir+"/src/main/ruby/say2all.rb"));
invocable.invokeFunction("say_to_all", new Object[]{});
//give a global variable and an arugment to be used in the method
engine.put("message", new String("trick or treat"));
engine.eval(new FileReader(basedir+"/src/main/ruby/manytimes.rb"));
invocable.invokeFunction("many_times", new Object[]{4});
}
}