diff -r 070fc5844295 -r 590958fcb7d7 htmlpage/src/test/java/org/apidesign/bck2brwsr/htmlpage/ProcessPageTest.java --- a/htmlpage/src/test/java/org/apidesign/bck2brwsr/htmlpage/ProcessPageTest.java Fri Nov 09 09:00:46 2012 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,148 +0,0 @@ -/** - * Back 2 Browser Bytecode Translator - * Copyright (C) 2012 Jaroslav Tulach - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, version 2 of the License. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. Look for COPYING file in the top folder. - * If not, see http://opensource.org/licenses/GPL-2.0. - */ -package org.apidesign.bck2brwsr.htmlpage; - -import java.io.IOException; -import java.io.InputStream; -import java.lang.reflect.Method; -import java.util.Set; -import javax.script.Invocable; -import javax.script.ScriptEngine; -import javax.script.ScriptEngineManager; -import javax.script.ScriptException; -import org.testng.annotations.Test; -import static org.testng.Assert.*; - -public class ProcessPageTest { - - - @Test public void findsThreeIds() throws IOException { - InputStream is = ProcessPageTest.class.getResourceAsStream("TestPage.html"); - assertNotNull(is, "Sample HTML page found"); - ProcessPage res = ProcessPage.readPage(is); - final Set ids = res.ids(); - assertEquals(ids.size(), 3, "Three ids found: " + ids); - - assertEquals(res.tagNameForId("pg.title"), "title"); - assertEquals(res.tagNameForId("pg.button"), "button"); - assertEquals(res.tagNameForId("pg.text"), "input"); - } - - @Test public void testCompileAndRunPageController() throws Exception { - StringBuilder sb = new StringBuilder(); - sb.append( - "var window = new Object();\n" - + "var doc = new Object();\n" - + "doc.button = new Object();\n" - + "doc.title = new Object();\n" - + "doc.title.innerHTML = 'nothing';\n" - + "doc.text = new Object();\n" - + "doc.text.value = 'something';\n" - + "doc.getElementById = function(id) {\n" - + " switch(id) {\n" - + " case 'pg.button': return doc.button;\n" - + " case 'pg.title': return doc.title;\n" - + " case 'pg.text': return doc.text;\n" - + " }\n" - + " throw id;\n" - + " }\n" - + "\n" - + "function clickAndCheck() {\n" - + " doc.button.onclick();\n" - + " return doc.title.innerHTML.toString();\n" - + "};\n" - + "\n" - + "window.document = doc;\n" - ); - Invocable i = compileClass(sb, "org/apidesign/bck2brwsr/htmlpage/PageController"); - - Object ret = null; - try { - ret = i.invokeFunction("clickAndCheck"); - } catch (ScriptException ex) { - fail("Execution failed in " + sb, ex); - } catch (NoSuchMethodException ex) { - fail("Cannot find method in " + sb, ex); - } - assertEquals(ret, "You want this window to be named something", "We expect that the JavaCode performs all the wiring"); - } - - @Test public void clickWithArgumentCalled() throws Exception { - StringBuilder sb = new StringBuilder(); - sb.append( - "var window = new Object();\n" - + "var doc = new Object();\n" - + "doc.button = new Object();\n" - + "doc.title = new Object();\n" - + "doc.title.innerHTML = 'nothing';\n" - + "doc.text = new Object();\n" - + "doc.text.value = 'something';\n" - + "doc.getElementById = function(id) {\n" - + " switch(id) {\n" - + " case 'pg.button': return doc.button;\n" - + " case 'pg.title': return doc.title;\n" - + " case 'pg.text': return doc.text;\n" - + " }\n" - + " throw id;\n" - + " }\n" - + "\n" - + "function clickAndCheck() {\n" - + " doc.title.onclick();\n" - + " return doc.title.innerHTML.toString();\n" - + "};\n" - + "\n" - + "window.document = doc;\n" - ); - Invocable i = compileClass(sb, "org/apidesign/bck2brwsr/htmlpage/PageController"); - - Object ret = null; - try { - ret = i.invokeFunction("clickAndCheck"); - } catch (ScriptException ex) { - fail("Execution failed in " + sb, ex); - } catch (NoSuchMethodException ex) { - fail("Cannot find method in " + sb, ex); - } - assertEquals(ret, "pg.title", "Title has been passed to the method argument"); - } - - static Invocable compileClass(StringBuilder sb, String... names) throws ScriptException, IOException { - if (sb == null) { - sb = new StringBuilder(); - } - try { - Method m; - Class genJS = Class.forName("org.apidesign.vm4brwsr.GenJS"); - m = genJS.getDeclaredMethod("compile", Appendable.class, String[].class); - m.setAccessible(true); - m.invoke(null, sb, names); - } catch (Exception exception) { - throw new IOException(exception); - } - ScriptEngineManager sem = new ScriptEngineManager(); - ScriptEngine js = sem.getEngineByExtension("js"); - try { - Object res = js.eval(sb.toString()); - assertTrue(js instanceof Invocable, "It is invocable object: " + res); - return (Invocable) js; - } catch (ScriptException ex) { - fail("Could not compile:\n" + sb, ex); - return null; - } - } -}