/**
* Copyright (c) 2012-2016 André Bargull
* Alle Rechte vorbehalten / All Rights Reserved. Use is subject to license terms.
*
* <https://github.com/anba/es6draft>
*/
package com.github.anba.es6draft.scripting;
import static com.github.anba.es6draft.util.matchers.IsInstanceOfWith.instanceOfWith;
import static org.hamcrest.Matchers.*;
import static org.junit.Assert.assertThat;
import static org.junit.Assert.fail;
import java.util.List;
import java.util.Locale;
import javax.script.ScriptEngine;
import javax.script.ScriptEngineFactory;
import javax.script.ScriptEngineManager;
import org.junit.Before;
import org.junit.Test;
/**
* JSR-223 Scripting API tests
*/
public final class ScriptEngineFactoryTest {
private static final String ENGINE_NAME = "es6draft";
private static final String LANGUAGE_VERSION = "ECMAScript 2015";
private static final String LANGUAGE_NAME = "ECMAScript";
private static final String COMMON_NAME = "JavaScript";
private ScriptEngineFactory factory;
@Before
public void setUp() {
ScriptEngineManager manager = new ScriptEngineManager();
for (ScriptEngineFactory factory : manager.getEngineFactories()) {
if (ENGINE_NAME.equals(factory.getEngineName())) {
this.factory = factory;
return;
}
}
fail("script engine factory not found");
}
@Test
public void testGetEngineName() {
assertThat(factory.getEngineName(), is(ENGINE_NAME));
}
@Test
public void testGetEngineVersion() {
assertThat(factory.getEngineVersion(), notNullValue());
}
@Test
public void testGetExtensions() {
List<String> extensions = factory.getExtensions();
assertThat(extensions, containsInAnyOrder("js", "es"));
}
@Test
public void testGetMimeTypes() {
List<String> mimeTypes = factory.getMimeTypes();
assertThat(
mimeTypes,
containsInAnyOrder("application/javascript", "application/ecmascript",
"text/javascript", "text/ecmascript"));
}
@Test
public void testGetNames() {
List<String> names = factory.getNames();
assertThat(names, hasItem(ENGINE_NAME));
assertThat(names, hasItems(LANGUAGE_NAME, LANGUAGE_NAME.toLowerCase(Locale.ROOT)));
assertThat(names, hasItems(COMMON_NAME, COMMON_NAME.toLowerCase(Locale.ROOT)));
}
@Test
public void testGetLanguageName() {
assertThat(factory.getLanguageName(), is(LANGUAGE_NAME));
}
@Test
public void testGetLanguageVersion() {
assertThat(factory.getLanguageVersion(), containsString(LANGUAGE_VERSION));
}
@Test
public void testGetParameter() {
// getNames()
assertThat(factory.getParameter(ScriptEngine.NAME),
instanceOfWith(String.class, is(ENGINE_NAME)));
// getEngineName()
assertThat(factory.getParameter(ScriptEngine.ENGINE),
instanceOfWith(String.class, is(ENGINE_NAME)));
// getEngineVersion()
assertThat(factory.getParameter(ScriptEngine.ENGINE_VERSION),
instanceOfWith(String.class, notNullValue()));
// getLanguageName
assertThat(factory.getParameter(ScriptEngine.LANGUAGE),
instanceOfWith(String.class, is(LANGUAGE_NAME)));
// getLanguageVersion
assertThat(factory.getParameter(ScriptEngine.LANGUAGE_VERSION),
instanceOfWith(String.class, hasToString(containsString(LANGUAGE_VERSION))));
// Other parameters
assertThat(factory.getParameter("THREADING"), nullValue());
}
@Test
public void testGetMethodCallSyntax() {
assertThat(factory.getMethodCallSyntax("obj", "m"), is("obj.m()"));
assertThat(factory.getMethodCallSyntax("obj", "m", "arg1"), is("obj.m(arg1)"));
assertThat(factory.getMethodCallSyntax("obj", "m", "arg1", "arg2"), is("obj.m(arg1, arg2)"));
}
@Test
public void testGetOutputStatement() {
assertThat(factory.getOutputStatement(""), is("print(\"\")"));
assertThat(factory.getOutputStatement("test"), is("print(\"test\")"));
assertThat(factory.getOutputStatement("\""), is("print(\"\\\"\")"));
assertThat(factory.getOutputStatement("\"\""), is("print(\"\\\"\\\"\")"));
assertThat(factory.getOutputStatement("\\"), is("print(\"\\\\\")"));
assertThat(factory.getOutputStatement("\\\\"), is("print(\"\\\\\\\\\")"));
}
@Test
public void testGetProgram() {
assertThat(factory.getProgram(), is(""));
assertThat(factory.getProgram("fn()", "while(1){}"), is("fn();\n" + "while(1){};\n"));
}
@Test
public void testGetScriptEngine() {
ScriptEngine scriptEngine = factory.getScriptEngine();
ScriptEngine scriptEngine2 = factory.getScriptEngine();
assertThat(scriptEngine, notNullValue());
assertThat(scriptEngine2, notNullValue());
assertThat(scriptEngine, not(sameInstance(scriptEngine2)));
assertThat(scriptEngine.getFactory(), is(factory));
assertThat(scriptEngine2.getFactory(), is(factory));
}
}