changeset 651:4deea6488148

adding JavascriptFuncParam reproducer for testing LiveConnect, calling JS functions from Java with various parameters
author Jana Fabrikova <jfabriko@redhat.com>
date Mon, 25 Mar 2013 11:39:38 +0100
parents e5b423479f99
children 5cd74575f737
files ChangeLog tests/reproducers/simple/JavascriptFuncParam/resources/JavascriptFuncParam.html tests/reproducers/simple/JavascriptFuncParam/resources/javascript-funcparam.jnlp tests/reproducers/simple/JavascriptFuncParam/srcs/JavascriptFuncParam.java tests/reproducers/simple/JavascriptFuncParam/testcases/JavascriptFuncParamTest.java
diffstat 5 files changed, 455 insertions(+), 0 deletions(-) [+]
line wrap: on
line diff
--- a/ChangeLog	Fri Mar 22 10:32:05 2013 -0400
+++ b/ChangeLog	Mon Mar 25 11:39:38 2013 +0100
@@ -1,3 +1,15 @@
+2013-03-25  Jana Fabrikova <jfabriko@redhat.com>
+
+	* tests/reproducers/simple/JavascriptFuncParam/testcases/JavascriptFuncParamTest.java
+	adding 19 testcases for calling javascript functions from java with
+	parameters of various types
+	* tests/reproducers/simple/JavascriptFuncParam/resources/JavascriptFuncParam.html
+	the html page for displaying browser tests
+	* tests/reproducers/simple/JavascriptFuncParam/resources/javascript-funcparam.jnlp
+	jnlp file for embedding the applet in html page
+	* tests/reproducers/simple/JavascriptFuncParam/srcs/JavascriptFuncParam.java
+	the applet that calls functions from javascript
+
 2013-03-22  Adam Domurad <adomurad@redhat.com>
 
 	* plugin/icedteanp/java/sun/applet/PluginParameterParser.java
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tests/reproducers/simple/JavascriptFuncParam/resources/JavascriptFuncParam.html	Mon Mar 25 11:39:38 2013 +0100
@@ -0,0 +1,40 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html lang="en-US">
+  <head>
+    <title>Java JavaScript LiveConnect - Function Parameters</title>
+    <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
+  </head>
+  <body>
+
+ <h2> The JToJSFuncParam html page</h2> 
+
+    <applet code="JavascriptFuncParam" width="1000" height="100" id="jtojsFuncParamApplet" MAYSCRIPT>
+        <param name="jnlp_href" value="javascript-funcparam.jnlp">
+    </applet>
+
+    <script type="text/javascript">
+
+        function JJSParameterTypeFunc(type_parameter, js_str_param) {
+            var str = "Call with "+type_parameter.toString() + ":" + typeof(type_parameter) + " from J";
+            applet.printOut(str);
+
+            var value = eval(js_str_param);
+            JSSubFunc(value);
+        }
+
+        function JSSubFunc(type_parameter) {
+            var str = "Call with "+type_parameter.toString() + ":" + typeof(type_parameter) + " from JS";
+            applet.printOut(str);
+        }
+
+        var applet = document.getElementById('jtojsFuncParamApplet');
+        var urlArgs = document.URL.split("?");
+        var func = urlArgs[1];
+
+        applet[func]();
+        applet.printOut("afterTests");
+
+    </script>
+
+  </body>
+</html>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tests/reproducers/simple/JavascriptFuncParam/resources/javascript-funcparam.jnlp	Mon Mar 25 11:39:38 2013 +0100
@@ -0,0 +1,23 @@
+
+<?xml version="1.0" encoding="UTF-8"?>
+<jnlp spec="1.0+" codebase="" href="javascript-funcparam.jnlp">
+    <information>
+        <title>Java to JavaScript LiveConnect - FuncParam</title>
+        <vendor>IcedTea</vendor>
+        <homepage href="http://icedtea.classpath.org/wiki/IcedTea-Web#Testing_IcedTea-Web"/>
+        <description>LiveConnect - tests for parameter conversion between Java and JavaScript.</description>
+    </information>
+    <resources>
+        <!-- Application Resources -->
+        <j2se version="1.6+"
+              href="http://java.sun.com/products/autodl/j2se"/>
+        <jar href="JavascriptFuncParam.jar" main="true" />
+
+    </resources>
+    <applet-desc 
+         name="J to JS FuncParam"
+         main-class="JavascriptFuncParam"
+         width="1000"
+         height="100">
+     </applet-desc>
+</jnlp>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tests/reproducers/simple/JavascriptFuncParam/srcs/JavascriptFuncParam.java	Mon Mar 25 11:39:38 2013 +0100
@@ -0,0 +1,146 @@
+import java.applet.Applet;
+import netscape.javascript.JSObject;
+
+public class JavascriptFuncParam extends Applet {
+    
+    public DummyObject dummyObject = new DummyObject("DummyObject1");
+    private JSObject window;
+
+    private final String jsFunctionName = "JJSParameterTypeFunc";
+
+    public void init() {
+        window = JSObject.getWindow(this);
+        String initStr = "JToJSFuncParam applet initialized.";
+        System.out.println(initStr);
+    }
+
+    //methods for testing calling JavaScript function with different parameters
+    public void jjsCallintParam(){
+        int i = 1;
+        passToJavascript(i);
+    }
+
+    public void jjsCalldoubleParam(){
+        double d = 1.1;
+        passToJavascript(d);
+    }   
+
+    public void jjsCallfloatParam(){
+        float f = 1.5f;
+        passToJavascript(f);
+    }   
+
+    public void jjsCalllongParam(){
+        long l = 10000;
+        passToJavascript(l);
+    }   
+
+    public void jjsCallshortParam(){
+        short s = 1;
+        passToJavascript(s);
+    }   
+
+    public void jjsCallbyteParam(){
+        byte b = 1;
+        passToJavascript(b);
+    }   
+
+    public void jjsCallcharParam(){
+        char c = 'a';
+        passToJavascript(c, "97");
+    }   
+
+    public void jjsCallbooleanParam(){
+        boolean b = true;
+        passToJavascript(b);
+    }   
+
+    public void jjsCallIntegerParam(){
+        Integer i = new Integer(1);
+        passToJavascript(i);
+    }   
+
+    public void jjsCallDoubleParam(){
+        Double i = new Double(1.5);
+        passToJavascript(i);
+    }   
+
+    public void jjsCallFloatParam(){
+        Float i = new Float(1.5);
+        passToJavascript(i);
+    }   
+
+    public void jjsCallLongParam(){
+        Long i = new Long(10000);
+        passToJavascript(i);
+    }   
+
+    public void jjsCallShortParam(){
+        Short i = new Short((short)1);
+        passToJavascript(i);
+    }   
+
+    public void jjsCallByteParam(){
+        Byte i = new Byte((byte)1);
+        passToJavascript(i);
+    }   
+
+    public void jjsCallBooleanParam(){
+        Boolean i = new Boolean(true);
+        passToJavascript(i);
+    }   
+
+    public void jjsCallCharacterParam(){
+        Character i = new Character('a');//97
+        passToJavascript(i, "97");
+    }   
+
+    public void jjsCallStringParam(){
+        String i = "teststring";
+        passToJavascript(i, "\"teststring\"");
+    }   
+
+    public void jjsCallDummyObjectParam(){
+        DummyObject i = new DummyObject("dummy1");
+        passToJavascript(i, "applet.getNewDummyObject(\"dummy1\")");
+    }   
+
+    public void jjsCallJSObjectParam(){
+        JSObject i = window;
+        passToJavascript(i, "window");
+    }   
+
+    private void passToJavascript(Object obj, String repr){
+        window.call(jsFunctionName, new Object[]{ obj, repr });
+    }
+
+    private void passToJavascript(Object obj){
+        passToJavascript(obj, obj.toString());
+    }
+
+    // auxiliary methods and class:
+    public void printOut(String s) {
+        System.out.println(s);
+    }
+
+    public class DummyObject {
+        private String str;
+     
+        public DummyObject(String s) {
+            this.str = s;
+        }
+     
+        public void setStr(String s) {
+            this.str = s;
+        }
+     
+        public String toString() {
+            return str;
+        }
+    }
+
+    public DummyObject getNewDummyObject(String s){
+        return new DummyObject(s);
+    }
+
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tests/reproducers/simple/JavascriptFuncParam/testcases/JavascriptFuncParamTest.java	Mon Mar 25 11:39:38 2013 +0100
@@ -0,0 +1,234 @@
+/* JToJSFuncParamTest.java
+Copyright (C) 2012 Red Hat, Inc.
+
+This file is part of IcedTea.
+
+IcedTea 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.
+
+IcedTea 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 IcedTea; see the file COPYING.  If not, write to
+the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+02110-1301 USA.
+
+Linking this library statically or dynamically with other modules is
+making a combined work based on this library.  Thus, the terms and
+conditions of the GNU General Public License cover the whole
+combination.
+
+As a special exception, the copyright holders of this library give you
+permission to link this library with independent modules to produce an
+executable, regardless of the license terms of these independent
+modules, and to copy and distribute the resulting executable under
+terms of your choice, provided that you also meet, for each linked
+independent module, the terms and conditions of the license of that
+module.  An independent module is a module which is not derived from
+or based on this library.  If you modify this library, you may extend
+this exception to your version of the library, but you are not
+obligated to do so.  If you do not wish to do so, delete this
+exception statement from your version.
+ */
+
+import net.sourceforge.jnlp.ProcessResult;
+import net.sourceforge.jnlp.ServerAccess;
+import net.sourceforge.jnlp.browsertesting.BrowserTest;
+import net.sourceforge.jnlp.browsertesting.Browsers;
+import net.sourceforge.jnlp.closinglisteners.CountingClosingListener;
+import net.sourceforge.jnlp.annotations.NeedsDisplay;
+import net.sourceforge.jnlp.annotations.TestInBrowsers;
+import net.sourceforge.jnlp.annotations.KnownToFail;
+import org.junit.Assert;
+
+import org.junit.Test;
+
+public class JavascriptFuncParamTest extends BrowserTest {
+
+    public final boolean doNotRunInOpera = true;
+
+    private final String initStr = "JToJSFuncParam applet initialized.";
+    private final String afterStr = "afterTests";
+    private final String globStart = "Call with ";
+    private final String globEnd = " from JS";
+    private final String jEnd = " from J";
+
+    private class CountingClosingListenerImpl extends CountingClosingListener {
+
+        @Override
+        protected boolean isAlowedToFinish(String s) {
+            return (s.contains(initStr) && s.contains(afterStr));
+        }
+    }
+
+    private void evaluateStdoutContents(ProcessResult pr) {
+        // Assert that the applet was initialized.
+        Assert.assertTrue("JToJSFuncParamTest stdout should contain " + initStr + " but it didnt.", pr.stdout.contains(initStr));
+
+        // Assert that the results of two calls of js func are the same
+        
+        int gs = pr.stdout.indexOf(globStart);
+        int ge = pr.stdout.indexOf(globEnd);
+        int je = pr.stdout.indexOf(jEnd);
+        int jss = je + jEnd.length() + 1;
+        
+        String javaOutput = pr.stdout.substring(gs, je);
+        String jsOutput = pr.stdout.substring(jss, ge);
+        
+        Assert.assertTrue("JToJSFuncParam: the J and JS outputs are not equal!", javaOutput.equals(jsOutput));
+    }
+
+    private void javaToJSFuncParamTest(String funcStr) throws Exception {
+
+        if( doNotRunInOpera){
+            Browsers b = server.getCurrentBrowser().getID();
+            if(b == Browsers.opera){
+                return;
+            }
+        }
+
+        String strURL = "/JavascriptFuncParam.html?" + funcStr;
+        ProcessResult pr = server.executeBrowser(strURL, new CountingClosingListenerImpl(), new CountingClosingListenerImpl());
+        evaluateStdoutContents(pr);
+    }
+
+    @Test
+    @TestInBrowsers(testIn = { Browsers.all })
+    @NeedsDisplay
+    public void AppletJToJSFuncParam_int_Test() throws Exception {
+        javaToJSFuncParamTest("jjsCallintParam");
+    }
+
+    @Test
+    @TestInBrowsers(testIn = { Browsers.all })
+    @NeedsDisplay
+    public void AppletJToJSFuncParam_double_Test() throws Exception {
+        javaToJSFuncParamTest("jjsCalldoubleParam");
+    }
+
+    @Test
+    @TestInBrowsers(testIn = { Browsers.all })
+    @NeedsDisplay
+    public void AppletJToJSFuncParam_float_Test() throws Exception {
+        javaToJSFuncParamTest("jjsCallfloatParam");
+    }
+
+    @Test
+    @TestInBrowsers(testIn = { Browsers.all })
+    @NeedsDisplay
+    public void AppletJToJSFuncParam_long_Test() throws Exception {
+        javaToJSFuncParamTest("jjsCalllongParam");
+    }
+
+    @Test
+    @TestInBrowsers(testIn = { Browsers.all })
+    @NeedsDisplay
+    public void AppletJToJSFuncParam_short_Test() throws Exception {
+        javaToJSFuncParamTest("jjsCallshortParam");
+    }
+
+    @Test
+    @TestInBrowsers(testIn = { Browsers.all })
+    @NeedsDisplay
+    public void AppletJToJSFuncParam_byte_Test() throws Exception {
+        javaToJSFuncParamTest("jjsCallbyteParam");
+    }
+
+
+    @Test
+    @TestInBrowsers(testIn = { Browsers.all })
+    @NeedsDisplay
+    public void AppletJToJSFuncParam_char_Test() throws Exception {
+        javaToJSFuncParamTest("jjsCallcharParam");
+    }
+
+    @Test
+    @TestInBrowsers(testIn = { Browsers.all })
+    @NeedsDisplay
+    public void AppletJToJSFuncParam_boolean_Test() throws Exception {
+        javaToJSFuncParamTest("jjsCallbooleanParam");
+    }
+
+    @Test
+    @TestInBrowsers(testIn = { Browsers.all })
+    @NeedsDisplay
+    public void AppletJToJSFuncParam_Integer_Test() throws Exception {
+        javaToJSFuncParamTest("jjsCallIntegerParam");
+    }
+
+    @Test
+    @TestInBrowsers(testIn = { Browsers.all })
+    @NeedsDisplay
+    public void AppletJToJSFuncParam_Double_Test() throws Exception {
+        javaToJSFuncParamTest("jjsCallDoubleParam");
+    }
+
+    @Test
+    @TestInBrowsers(testIn = { Browsers.all })
+    @NeedsDisplay
+    public void AppletJToJSFuncParam_Float_Test() throws Exception {
+        javaToJSFuncParamTest("jjsCallFloatParam");
+    }
+
+    @Test
+    @TestInBrowsers(testIn = { Browsers.all })
+    @NeedsDisplay
+    public void AppletJToJSFuncParam_Long_Test() throws Exception {
+        javaToJSFuncParamTest("jjsCallLongParam");
+    }
+
+    @Test
+    @TestInBrowsers(testIn = { Browsers.all })
+    @NeedsDisplay
+    public void AppletJToJSFuncParam_Short_Test() throws Exception {
+        javaToJSFuncParamTest("jjsCallShortParam");
+    }    
+
+    @Test
+    @TestInBrowsers(testIn = { Browsers.all })
+    @NeedsDisplay
+    public void AppletJToJSFuncParam_Byte_Test() throws Exception {
+        javaToJSFuncParamTest("jjsCallByteParam");
+    }
+
+    @Test
+    @TestInBrowsers(testIn = { Browsers.all })
+    @NeedsDisplay
+    public void AppletJToJSFuncParam_Boolean_Test() throws Exception {
+        javaToJSFuncParamTest("jjsCallBooleanParam");
+    }
+
+    @Test
+    @TestInBrowsers(testIn = { Browsers.all })
+    @NeedsDisplay
+    public void AppletJToJSFuncParam_Character_Test() throws Exception {
+        javaToJSFuncParamTest("jjsCallCharacterParam");
+    }
+
+    @Test
+    @TestInBrowsers(testIn = { Browsers.all })
+    @NeedsDisplay
+    public void AppletJToJSFuncParam_String_Test() throws Exception {
+        javaToJSFuncParamTest("jjsCallStringParam");
+    }
+
+    @Test
+    @TestInBrowsers(testIn = { Browsers.all })
+    @NeedsDisplay
+    public void AppletJToJSFuncParam_DummyObject_Test() throws Exception {
+        javaToJSFuncParamTest("jjsCallDummyObjectParam");
+    }
+
+    @Test
+    @TestInBrowsers(testIn = { Browsers.all })
+    @NeedsDisplay
+    //@KnownToFail(failsIn={Browsers.google-chrome, Browsers.chromium-browser})
+    public void AppletJToJSFuncParam_JSObject_Test() throws Exception {
+        javaToJSFuncParamTest("jjsCallJSObjectParam");
+    }
+
+}