/* * Copyright (C) 2006-2016 DLR, Germany * * All rights reserved * * http://www.rcenvironment.de/ */ package de.rcenvironment.core.scripting.internal; import javax.script.ScriptEngine; import javax.script.ScriptException; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.junit.Assume; import org.junit.Before; import org.junit.BeforeClass; import org.junit.Test; import de.rcenvironment.core.scripting.ScriptingService; import de.rcenvironment.core.utils.scripting.ScriptLanguage; import junit.framework.Assert; /** * Test for {@link ScriptingServiceImpl}. * * @author Christian Weiss * @author Robert Mischke (made JavaScript and Jython support mandatory) */ public class ScriptingServiceImplTest { private static ScriptLanguage[] languages; private ScriptingService service; private final Log log = LogFactory.getLog(getClass()); /** BeforeClass. */ @BeforeClass public static void setupBeforeClass() { languages = ScriptLanguage.values(); } /** Before. */ @Before public void setUp() { service = new ScriptingServiceImpl(); } /** Test. */ @Test public void testSupportsScriptLanguages() { for (final ScriptLanguage language : languages) { Assert.assertTrue("No support for script language " + language.getName(), service.supportsScriptLanguage(language)); } } /** Test. */ @Test public void testCreateScriptEngines() { for (final ScriptLanguage language : languages) { if (service.supportsScriptLanguage(language)) { final ScriptEngine engine = service.createScriptEngine(language); Assert.assertNotNull(engine); } else { // this will fail the "testSupportsScriptLanguage" test already, so only log a warning here log.warn("No support for script language " + language.getName() + ", skipping engine creation test"); } } } /** * Basic JavaScript test. * * @throws ScriptException {@link ScriptException} */ @Test public void testJavaScriptEngine() throws ScriptException { final ScriptLanguage js = ScriptLanguage.JavaScript; Assume.assumeTrue(service.supportsScriptLanguage(js)); final ScriptEngine jsEngine = service.createScriptEngine(js); // TODO make more JavaScript-specific jsEngine.eval("answer = 42"); final Object answer = jsEngine.get("answer"); Assert.assertNotNull(answer); final int theAnswer = 42; // under Linux answer is object of type Double, under Windows it is of type Double // to satisfy both of them the inconvenient term is used Assert.assertEquals(new Double(theAnswer), Double.valueOf(answer.toString())); } /** * Basic Jython test. * * @throws ScriptException {@link ScriptException} */ @Test public void testJythonEngine() throws ScriptException { final ScriptLanguage jython = ScriptLanguage.Jython; Assume.assumeTrue(service.supportsScriptLanguage(jython)); final ScriptEngine jythonEngine = service.createScriptEngine(jython); // TODO make more Jython-specific jythonEngine.eval("answer = 42"); final Object answer = jythonEngine.get("answer"); Assert.assertNotNull(answer); final int theAnswer = 42; Assert.assertEquals(new Integer(theAnswer), answer); } }