/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ package org.apache.tuscany.container.javascript.rhino; import java.io.IOException; import junit.framework.TestCase; import org.apache.axiom.om.OMElement; import org.apache.xmlbeans.XmlException; import org.apache.xmlbeans.XmlObject; /** * Tests for the RhinoFunctionInvoker */ public class RhinoFunctionInvokerTestCase extends TestCase { public RhinoFunctionInvokerTestCase() { } protected void setUp() throws Exception { super.setUp(); } public void testNoArgsInvoke() { RhinoScript rhinoScript = new RhinoScript("foo", "function getPetra() {return 'petra';}"); RhinoScriptInstance instance = rhinoScript.createRhinoScriptInstance(); RhinoFunctionInvoker invoker = instance.createRhinoFunctionInvoker("getPetra"); assertNotNull(invoker); assertEquals("petra", invoker.invoke(null)); } public void testOneArgInvoke() { RhinoScript rhinoScript = new RhinoScript("foo", "function getS(s) {return s;}"); RhinoScriptInstance instance = rhinoScript.createRhinoScriptInstance(); RhinoFunctionInvoker invoker = instance.createRhinoFunctionInvoker("getS"); assertNotNull(invoker); assertEquals("petra", invoker.invoke(new Object[] { "petra" })); } public void testMultiArgsInvoke() { RhinoScript rhinoScript = new RhinoScript("foo", "function concat(x, y) {return x + y}"); RhinoScriptInstance instance = rhinoScript.createRhinoScriptInstance(); RhinoFunctionInvoker invoker = instance.createRhinoFunctionInvoker("concat"); assertNotNull(invoker); assertEquals("petrasue", invoker.invoke(new Object[] { "petra", "sue" })); } public void testNoResponseInvoke() { RhinoScript rhinoScript = new RhinoScript("foo", "function getNull() {}"); RhinoScriptInstance instance = rhinoScript.createRhinoScriptInstance(); RhinoFunctionInvoker invoker = instance.createRhinoFunctionInvoker("getNull"); assertNotNull(invoker); assertEquals(null, invoker.invoke(new Object[0])); } public void testNullResponseInvoke() { RhinoScript rhinoScript = new RhinoScript("foo", "function getNull() {return null;}"); RhinoScriptInstance instance = rhinoScript.createRhinoScriptInstance(); RhinoFunctionInvoker invoker = instance.createRhinoFunctionInvoker("getNull"); assertNotNull(invoker); assertEquals(null, invoker.invoke(new Object[0])); } public void testResponseTypeDefaultString() { RhinoScript rhinoScript = new RhinoScript("foo", "function getTrue() {return true;}"); RhinoScriptInstance instance = rhinoScript.createRhinoScriptInstance(); RhinoFunctionInvoker invoker = instance.createRhinoFunctionInvoker("getTrue"); assertNotNull(invoker); Object o = invoker.invoke(new Object[0]); assertTrue(o instanceof String); assertEquals("true", o); } public void testResponseTypeBoolean() { RhinoScript rhinoScript = new RhinoScript("foo", "function getTrue() {return true;}"); //rhinoScript.setResponseClass("getTrue", Boolean.class); RhinoScriptInstance instance = rhinoScript.createRhinoScriptInstance(); RhinoFunctionInvoker invoker = instance.createRhinoFunctionInvoker("getTrue", Boolean.class); assertNotNull(invoker); assertTrue((Boolean) invoker.invoke(new Object[0])); } public void testResponseTypeStringArray() { RhinoScript rhinoScript = new RhinoScript("foo", "function getAs() {var as = new Array(1);as[0]='petra';return as;}"); //rhinoScript.setResponseClass("getAs", new String[0].getClass()); RhinoScriptInstance instance = rhinoScript.createRhinoScriptInstance(); RhinoFunctionInvoker invoker = instance.createRhinoFunctionInvoker("getAs", new String[0].getClass()); assertNotNull(invoker); Object o = invoker.invoke(new Object[0]); assertNotNull(o); assertTrue(o.getClass().isArray()); assertEquals("petra", ((Object[]) o)[0]); } public void testResponseTypeBooleanArray() { RhinoScript rhinoScript = new RhinoScript("foo", "function getBs() {var bs = new Array(1);bs[0]=true;return bs;}"); rhinoScript.setResponseClass("getBs", new Boolean[0].getClass()); RhinoScriptInstance instance = rhinoScript.createRhinoScriptInstance(); RhinoFunctionInvoker invoker = instance.createRhinoFunctionInvoker("getBs", new Boolean[0].getClass()); assertNotNull(invoker); Object o = invoker.invoke(new Object[0]); assertNotNull(o); assertTrue(o.getClass().isArray()); assertTrue(((Boolean[]) o)[0]); } public void testRequestCustomType() { RhinoScript rhinoScript = new RhinoScript("foo", "function getFooS(foo) {return foo.getS();}"); RhinoScriptInstance instance = rhinoScript.createRhinoScriptInstance(); RhinoFunctionInvoker invoker = instance.createRhinoFunctionInvoker("getFooS"); assertNotNull(invoker); Foo foo = new Foo(); foo.setS("petra"); Object o = invoker.invoke(new Object[] { foo }); assertEquals(foo.getS(), o); } public void testResponseCustomType() { RhinoScript rhinoScript = new RhinoScript("foo", "importClass(Packages.org.apache.tuscany.container.javascript.rhino.Foo);function getFoo(s) {var foo = new Foo(); foo.setS(s);return foo;}"); RhinoScriptInstance instance = rhinoScript.createRhinoScriptInstance(); RhinoFunctionInvoker invoker = instance.createRhinoFunctionInvoker("getFoo"); assertNotNull(invoker); Object o = invoker.invoke(new Object[] { "petra" }); assertNotNull(o); assertEquals("petra", ((Foo) o).getS()); } public void testXMLRequest() throws XmlException, IOException { RhinoScript rhinoScript = new RhinoScript("foo", "function isXML(x) {return 'xml' == (typeof x);}"); //rhinoScript.setResponseClass("isXML", Boolean.class); RhinoScriptInstance instance = rhinoScript.createRhinoScriptInstance(); RhinoFunctionInvoker invoker = instance.createRhinoFunctionInvoker("isXML", Boolean.class); assertNotNull(invoker); Object xml = XmlObject.Factory.parse(""); assertTrue((Boolean) invoker.invoke(new Object[] { xml })); Object notXML = "notXML"; assertFalse((Boolean) invoker.invoke(new Object[] { notXML })); } public void testXMLResponse() { RhinoScript rhinoScript = new RhinoScript("foo", "function getXML(s) {return { s } ;}"); RhinoScriptInstance instance = rhinoScript.createRhinoScriptInstance(); RhinoFunctionInvoker invoker = instance.createRhinoFunctionInvoker("getXML"); assertNotNull(invoker); Object xml = invoker.invoke(new Object[] { "petra" }); assertNotNull(xml); assertTrue(xml instanceof OMElement); assertEquals("petra", ((OMElement) xml).toString()); } }