From 66eb46b1a40c088b1096ba2f294796404b1a530c Mon Sep 17 00:00:00 2001 From: Florian Dold Date: Wed, 14 Aug 2019 16:38:14 +0200 Subject: messaging and module loading --- .../java/akono/InstrumentedAkonoTests.kt | 79 ++++++++++++++++++---- 1 file changed, 67 insertions(+), 12 deletions(-) (limited to 'library/src/androidTest') diff --git a/library/src/androidTest/java/akono/InstrumentedAkonoTests.kt b/library/src/androidTest/java/akono/InstrumentedAkonoTests.kt index b2e8e92a..beda5119 100644 --- a/library/src/androidTest/java/akono/InstrumentedAkonoTests.kt +++ b/library/src/androidTest/java/akono/InstrumentedAkonoTests.kt @@ -3,11 +3,42 @@ package akono.test; import androidx.test.ext.junit.runners.AndroidJUnit4 import org.junit.runner.RunWith import org.junit.Test -import androidx.test.filters.SmallTest import androidx.test.filters.LargeTest -import org.junit.Assert.assertTrue import org.junit.Assert.assertEquals import akono.AkonoJni +import akono.ModuleResult +import android.util.Log +import java.util.concurrent.LinkedBlockingDeque + + +class SyncMessageHandler : AkonoJni.MessageHandler { + private val messageQueue = LinkedBlockingDeque() + override fun handleMessage(message: String) { + messageQueue.put(message) + } + + fun waitForMessage(): String { + return messageQueue.take() + } +} + + +class StaticModuleLoadHandler : AkonoJni.LoadModuleHandler { + private val modules: MutableMap = HashMap() + + override fun loadModule(name: String, paths: Array): ModuleResult? { + val code = modules.get(name) ?: return null + if (modules.containsKey(name)) { + return ModuleResult("/vmodroot/$name.js", code) + } + return null + } + + fun registerModule(name: String, source: String) { + modules[name] = source + } +} + // @RunWith is required only if you use a mix of JUnit3 and JUnit4. @RunWith(AndroidJUnit4::class) @@ -16,15 +47,39 @@ public class InstrumentedAkonoTestOne { @Test fun myJsTest() { val ajni: AkonoJni = AkonoJni() - assertEquals("2", ajni.evalJs("1+1")) - assertEquals("36", ajni.evalJs("6*6")) - assertEquals("42", ajni.evalJs("(()=>{let x = 42; return x;})()")) - //assertEquals(null, ajni.evalJs("throw Error('hello exc')")) - //assertEquals(null, ajni.evalJs("undefinedX + undefinedY")) - //assertEquals("123", ajni.evalJs("console.log('hello world'); 123;")) - //assertEquals("123", ajni.evalJs("require")) - - assertEquals("undefined", ajni.evalJs("const myVal = 42")) - assertEquals("43", ajni.evalJs("myVal + 1")) + assertEquals("2", ajni.evalSimpleJs("1+1")) + assertEquals("36", ajni.evalSimpleJs("6*6")) + assertEquals("42", ajni.evalSimpleJs("(()=>{let x = 42; return x;})()")) + assertEquals("undefined", ajni.evalSimpleJs("const myVal = 42")) + assertEquals("43", ajni.evalSimpleJs("myVal + 1")) + + val myHandler = SyncMessageHandler() + ajni.setMessageHandler(myHandler) + ajni.evalNodeCode("console.log('hi from the test case')") + // Tell the message handler to just ping back messages to us + ajni.evalNodeCode("global.__akono_onMessage = (x) => { global.__akono_sendMessage(x); }") + val sentMessage = "Hello AKONO!!" + ajni.sendMessage(sentMessage) + val receivedMessage = myHandler.waitForMessage() + assertEquals(sentMessage, receivedMessage) + Log.i("myapp", "test case received message: $receivedMessage") + + val myModHandler = StaticModuleLoadHandler() + + ajni.setLoadModuleHandler(myModHandler) + + myModHandler.registerModule("a", """ + |console.log('I am module a'); + |exports.foo = () => { global.__akono_sendMessage('hello42'); }; + """.trimMargin()) + + ajni.evalNodeCode("a = require('a');") + ajni.evalNodeCode("a.foo()") + + val msg2 = myHandler.waitForMessage() + + assertEquals("hello42", msg2) + + ajni.waitStopped() } } -- cgit v1.2.3