package io.legato.kazusa import com.script.ScriptBindings import com.script.rhino.RhinoScriptEngine import io.legato.kazusa.data.entities.BookChapter import org.intellij.lang.annotations.Language import org.junit.Assert import org.junit.Test class JsTest { @Language("js") private val printJs = """ function print(str, newline) { if (typeof(str) == 'undefined') { str = 'undefined'; } else if (str == null) { str = 'null'; } java.lang.System.out.print(String(str)); if (newline) java.lang.System.out.print("\n"); } function println(str) { print(str, true); } """.trimIndent() @Test fun testMap() { val map = hashMapOf("id" to "3242532321") val bindings = ScriptBindings() bindings["result"] = map @Language("js") val jsMap = "$=result;id=$.id;id" val result = RhinoScriptEngine.eval(jsMap, bindings) Assert.assertEquals("3242532321", result) @Language("js") val jsMap1 = """result.get("id")""" val result1 = RhinoScriptEngine.eval(jsMap1, bindings) Assert.assertEquals("3242532321", result1) } @Test fun testFor() { val scope = RhinoScriptEngine.run { val scope = getRuntimeScope(ScriptBindings()) eval(printJs, scope) scope } @Language("js") val jsFor = """ let result = 0 let a=[1,2,3] let l=a.length for (let i = 0;i {result = result + item}) result """.trimIndent() val result = RhinoScriptEngine.eval(js, bindings) Assert.assertEquals(result, 6.0) } @Test fun typeofString() { val bindings = ScriptBindings() @Language("js") val js = """ s = "" + String() typeof s """.trimIndent() val result = RhinoScriptEngine.eval(js, bindings) Assert.assertEquals(result, "string") } }