# HG changeset patch # User Jana Fabrikova # Date 1349272513 -7200 # Node ID 66e9f29eddf423b99fadb1a080ef72537b2df567 # Parent f555ba6855f933010a7247159f64ec5c7ce29ff1 Adding a new reproducer for JS->Java communication. diff -r f555ba6855f9 -r 66e9f29eddf4 JSToJGet/resources/JSToJGet.html --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/JSToJGet/resources/JSToJGet.html Wed Oct 03 15:55:13 2012 +0200 @@ -0,0 +1,105 @@ + + + + JavaScript to Java LiveConnect - Get values from applet + + + + + + + + +

The JSToJGet html page

+ + + + + +
+ + + + + diff -r f555ba6855f9 -r 66e9f29eddf4 JSToJGet/resources/JSToJ_auxiliary.js --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/JSToJGet/resources/JSToJ_auxiliary.js Wed Oct 03 15:55:13 2012 +0200 @@ -0,0 +1,69 @@ +/* +JSToJ_auxiliary.js +This file contains auxiliary JavaScript functions for LiveConnect tests output, +the following reproducers have this file as a common resource: +- JSToJGet +- JSToJSet +- JSToJFuncParam +- JSToJFuncReturn +- JSToJFuncResol +- JSToJTypeConv +- JToJSGet +- JToJSSet +- JToJSFuncParam +- JToJSFuncReturn +- JToJSEval +*/ + +function check(actual, expected, expectedtype, testid, appletName ) { + if (actual == expected) { //the same value + if (typeof(actual) == expectedtype) { //the same type + passTest( testid, appletName ); + } else { + failTypeTest( testid, appletName, actual, expectedtype ); + } + } else { + failValTest( testid, appletName, actual, expected ); + } +} + +function passTest( testid, appletName ){ + var passStr = "Test no."+testid+" - passed."; + //applet stdout + appletStdOut( appletName, passStr); + //html page + appendMessageDiv(passStr); +} + +function failValTest( testid, appletName, actual, expected ){ + var failValStr = "Test no."+testid+" - failed, value mismatch. expected:["+expected+"] found:["+actual+"]."; + //applet stdout + appletStdOut( appletName, failValStr); + //html page + appendMessageDiv(failValStr); +} + +function failTypeTest( testid, appletName, actual, expectedtype ){ + var failTypeStr = "Test no."+testid+" - failed, type mismatch. expected:["+expectedtype+"] found:["+typeof(actual)+"]."; + //applet stdout + appletStdOutLn( appletName, failTypeStr); + //html page + appendMessageDiv(failTypeStr); +} + +function appletStdOut( appletName, str ){ + document.getElementById( appletName ).stdOutWrite( str ); +} + +function appletStdOutLn( appletName, str ){ + document.getElementById( appletName ).stdOutWriteln( str ); +} + +function afterTestsMessage( appletName ){ + document.getElementById( appletName ).stdOutWriteln("afterTests"); +} + +function appendMessageDiv( message ){ + var messageDiv = document.getElementById( 'messageDiv' ); + messageDiv.appendChild( document.createTextNode(message) ); +} diff -r f555ba6855f9 -r 66e9f29eddf4 JSToJGet/resources/JSToJava_Get.js --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/JSToJGet/resources/JSToJava_Get.js Wed Oct 03 15:55:13 2012 +0200 @@ -0,0 +1,249 @@ +function test_get_int(){ + var appletName = 'jstojGetApplet'; + try{ + var i = document.getElementById(appletName).i; + check(i, 42, "number", " 1 - (int)", appletName); + }catch(e){ + appletStdOut( appletName, e ); + appendMessageDiv(e); + } +} + +function test_get_double() +{ + var appletName = 'jstojGetApplet'; + try{ + var d = document.getElementById(appletName).d; + check(d, 42.42, "number", " 2 - (double)", appletName); + }catch(e){ + appletStdOut( appletName, e ); + appendMessageDiv(e); + } +} + +function test_get_float(){ + var appletName = 'jstojGetApplet'; + try{ + var f = document.getElementById(appletName).f; + check(f, 42.099998474121094, "number", " 3 - (float)", appletName); + }catch(e){ + appletStdOut( appletName, e ); + appendMessageDiv(e); + } +} + +function test_get_long(){ + var appletName = 'jstojGetApplet'; + try{ + var l = document.getElementById(appletName).l; + check(l, 4294967296, "number", " 4 - (long)", appletName); + }catch(e){ + appletStdOut( appletName, e ); + appendMessageDiv(e); + } +} + +function test_get_boolean(){ + var appletName = 'jstojGetApplet'; + try{ + var b = document.getElementById(appletName).b; + check(b, true, "boolean", " 5 - (boolean)", appletName); + }catch(e){ + appletStdOut( appletName, e ); + appendMessageDiv(e); + } +} + +function test_get_char(){ + var appletName = 'jstojGetApplet'; + try{ + var c = document.getElementById(appletName).c; + check(c, 8995, "number", " 6 - (char)", appletName); + }catch(e){ + appletStdOut( appletName, e ); + appendMessageDiv(e); + } +} + +function test_get_byte(){ + var appletName = 'jstojGetApplet'; + try{ + var by = document.getElementById(appletName).by; + check(by, 43, "number", " 7 - (byte)", appletName); + }catch(e){ + appletStdOut( appletName, e ); + appendMessageDiv(e); + } +} + +function test_get_intArrayElement(){ + var appletName = 'jstojGetApplet'; + try{ + var ia = document.getElementById(appletName).ia[4]; + check(ia, 1024, "number", " 8 - (int[] - element access)", appletName); + }catch(e){ + appletStdOut( appletName, e ); + appendMessageDiv(e); + } +} + +function test_get_intArrayBeyond(){ + var appletName = 'jstojGetApplet'; + try{ + var ia2 = document.getElementById(appletName).ia[30]; + check(ia2, null, "undefined", " 9 - (int[] - beyond length)", appletName); + }catch(e){ + appletStdOut( appletName, e ); + appendMessageDiv(e); + } +} + +function test_get_regularString(){ + var appletName = 'jstojGetApplet'; + try{ + var rs = document.getElementById(appletName).rs; + check(rs, "I'm a string!", "string", "10 - (regular string)", appletName); + }catch(e){ + appletStdOut( appletName, e ); + appendMessageDiv(e); + } +} + +function test_get_specialCharsString(){ + var appletName = 'jstojGetApplet'; + try{ + var ss = document.getElementById(appletName).ss; + check(ss, "𠁎〒£$ǣ€𝍖", "string", "11 - (string with special characters)",appletName); + }catch(e){ + appletStdOut( appletName, e ); + appendMessageDiv(e); + } +} + +function test_get_null(){ + var appletName = 'jstojGetApplet'; + try{ + var n = document.getElementById(appletName).n; + check(n, null, "object","12 - (null)", appletName); + }catch(e){ + appletStdOut( appletName, e ); + appendMessageDiv(e); + } +} + +function test_get_Integer(){ + var appletName = 'jstojGetApplet'; + try{ + var I = document.getElementById(appletName).I; + check(I, 24, "object","13 - (Integer)", appletName); + }catch(e){ + appletStdOut( appletName, e ); + appendMessageDiv(e); + } +} + +function test_get_Double(){ + var appletName = 'jstojGetApplet'; + try{ + var D = document.getElementById(appletName).D; + check(D, 24.24, "object", "14 - (Double)", appletName); + }catch(e){ + appletStdOut( appletName, e ); + appendMessageDiv(e); + } +} + +function test_get_Float(){ + var appletName = 'jstojGetApplet'; + try{ + var F = document.getElementById(appletName).F; + check(F, 24.124, "object", "15 - (Float)", appletName); + }catch(e){ + appletStdOut( appletName, e ); + appendMessageDiv(e); + } +} + +function test_get_Long(){ + var appletName = 'jstojGetApplet'; + try{ + var L = document.getElementById(appletName).L; + check(L, 6927694924, "object", "16 - (Long)", appletName); + }catch(e){ + appletStdOut( appletName, e ); + appendMessageDiv(e); + } +} + +function test_get_Boolean(){ + var appletName = 'jstojGetApplet'; + try{ + var B = document.getElementById(appletName).B; + check(B, false, "object", "17 - (Boolean)", appletName); + }catch(e){ + appletStdOut( appletName, e ); + appendMessageDiv(e); + } +} + +function test_get_Character(){ + var appletName = 'jstojGetApplet'; + try{ + var C = document.getElementById(appletName).C; + check(C, 'ᔦ', "object", "18 - (Character)", appletName); + }catch(e){ + appletStdOut( appletName, e ); + appendMessageDiv(e); + } +} + +function test_get_Byte(){ + var appletName = 'jstojGetApplet'; + try{ + var By = document.getElementById(appletName).By; + check(By, 34, "object", "19 - (Byte)", appletName); + }catch(e){ + appletStdOut( appletName, e ); + appendMessageDiv(e); + } +} + +function test_get_DoubleArrayElement(){ + var appletName = 'jstojGetApplet'; + try{ + var DaE = document.getElementById(appletName).Da1[9]; + check(DaE, 24.24, "object", "20 - (Double[] - element access)", appletName); + }catch(e){ + appletStdOut( appletName, e ); + appendMessageDiv(e); + } +} + +function test_get_DoubleFullArray(){ + var appletName = 'jstojGetApplet'; + try{ + var DaStr = document.getElementById(appletName).Da1.toString().substr(0,20); + var Da = document.getElementById(appletName).Da1; + + var appletid = appletName; + var testid = "21 - (Double[] - full array)"; + + var expected = "[Ljava.lang.Double;@"; + var expectedtype = "object"; + + if ( DaStr == expected ) { //the same value + if ( typeof(Da) == expectedtype ) { //the same type + passTest( testid, appletid ); + } else { + failTypeTest( testid, appletid, typeof(Da), expectedtype ); + } + } else { + failValTest( testid, appletid, DaStr, expected ); + } + }catch(e){ + appletStdOut( appletName, e ); + appendMessageDiv(e); + } +} + + diff -r f555ba6855f9 -r 66e9f29eddf4 JSToJGet/resources/jstoj-get.jnlp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/JSToJGet/resources/jstoj-get.jnlp Wed Oct 03 15:55:13 2012 +0200 @@ -0,0 +1,20 @@ + + + + JavaScript to Java LiveConnect - Get + RedHat + + LiveConnect - tests for getting members from Java side. + + + + + + + + + diff -r f555ba6855f9 -r 66e9f29eddf4 JSToJGet/srcs/JSToJGet.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/JSToJGet/srcs/JSToJGet.java Wed Oct 03 15:55:13 2012 +0200 @@ -0,0 +1,71 @@ +import java.applet.*; +import java.awt.*; + +public class JSToJGet extends Applet { + + public static final int i = 42; + public static final double d = 42.42; + public static final float f = 42.1F; + public static final long l = 4294967296L; + public static final boolean b = true; + public static final char c = '\u2323'; + public static final byte by = 43; + public static final String rs = "I'm a string!"; + public static final String ss = "𠁎〒£$ǣ€𝍖"; + public static final Object n = null; + public int[] ia = new int[5]; + + public static final Integer I = 24; + public static final Double D = 24.24; + public static final Float F = 24.124F; + public static final Long L = 6927694924L; + public static final Boolean B = false; + public static final Character C = '\u1526'; + public static final Byte By = 34; + public Double[] Da1 = new Double[10]; + public Double[] Da2 = null; + + public char[] ca = new char[3]; + public Character[] Ca = new Character[3]; + + private Label statusLabel; + + public void init() { + setLayout(new BorderLayout()); + statusLabel = new Label(); + add(statusLabel); + String initStr = "JSToJGet applet initialized."; + System.out.println(initStr); + statusLabel.setText(initStr); + + ia[4] = 1024; + Da1[9] = D; + + String setupStr = "JSToJGet applet set up for GET tests."; + System.out.println(setupStr); + statusLabel.setText(setupStr); + + } + + // auxiliary method for setting the statusLabel text: + public void setStatusLabel(String s) { + statusLabel.setText(s); + } + + // auxiliary methods for writing to stdout and stderr: + public void stdOutWrite(String s) { + System.out.print(s); + } + + public void stdErrWrite(String s) { + System.err.print(s); + } + + public void stdOutWriteln(String s) { + System.out.println(s); + } + + public void stdErrWriteln(String s) { + System.err.println(s); + } +} diff -r f555ba6855f9 -r 66e9f29eddf4 JSToJGet/testcases/JSToJGetTest.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/JSToJGet/testcases/JSToJGetTest.java Wed Oct 03 15:55:13 2012 +0200 @@ -0,0 +1,309 @@ +/* JSToJGetTest.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 org.junit.Assert; + +import org.junit.Test; + +public class JSToJGetTest extends BrowserTest { + + public String[] testNames = { "int", "double", "float", "long", "boolean", + "char", "byte", "intArrayElement", "intArrayBeyond", + "regularString", "specialCharsString", "null", "Integer", "Double", + "Float", "Long", "Boolean", "Character", "Byte", + "DoubleArrayElement", "DoubleFullArray" }; + + public String[] outputStrings = { "Test no. 1 - (int)", + "Test no. 2 - (double)", "Test no. 3 - (float)", + "Test no. 4 - (long)", "Test no. 5 - (boolean)", + "Test no. 6 - (char)", "Test no. 7 - (byte)", + "Test no. 8 - (int[] - element access)", + "Test no. 9 - (int[] - beyond length)", + "Test no.10 - (regular string)", + "Test no.11 - (string with special characters)", + "Test no.12 - (null)", "Test no.13 - (Integer)", + "Test no.14 - (Double)", "Test no.15 - (Float)", + "Test no.16 - (Long)", "Test no.17 - (Boolean)", + "Test no.18 - (Character)", "Test no.19 - (Byte)", + "Test no.20 - (Double[] - element access)", + "Test no.21 - (Double[] - full array)" }; + + public String passStr = " - passed."; + public String failValStr = " - failed, value mismatch."; + public String failTypeStr = " - failed, type mismatch."; + public String expStr = "expected:["; + public String foundStr = "] found:["; + public String endStr = "]."; + + private final String exceptionStr = "xception"; + private final String initStr = "JSToJGet applet initialized."; + private final String setupStr = "JSToJGet applet set up for GET tests."; + private final String afterStr = "afterTests"; + + private class CountingClosingListenerImpl extends CountingClosingListener { + + @Override + protected boolean isAlowedToFinish(String s) { + if (s.contains(exceptionStr)) { + return true; + } + return (s.contains(initStr) && s.contains(setupStr) && s + .contains(afterStr)); + } + } + + private void evaluateStdoutContents(int index, ProcessResult pr) { + // Assert that the applet was initialized. + Assert.assertTrue("JSToJGetTest stdout should contain \"" + initStr + + "\" but it didn't.", pr.stdout.contains(initStr)); + + // Assert that the applet was set up for the GM tests. + Assert.assertTrue("JSToJGetTest stdout should contain \"" + setupStr + + "\" but it didn't.", pr.stdout.contains(setupStr)); + + // Assert that the tests have passed. + String s0 = outputStrings[index] + passStr; + String s1 = outputStrings[index] + failValStr; + String s2 = outputStrings[index] + failTypeStr; + String s3 = "Error on Java side"; + + int ind0 = pr.stdout.indexOf(s0); + int ind1 = pr.stdout.indexOf(s1); + int ind2 = pr.stdout.indexOf(s2); + int ind3 = pr.stdout.indexOf(s3); + int indBegin = pr.stdout.indexOf(setupStr); + if (indBegin != -1) { + indBegin += setupStr.length(); + } else { + indBegin = 0; + } + + String failStr = "JSToJGet " + outputStrings[index] + + ": \"passed\" not found in the applet stdout, which is: " + + pr.stdout.substring(indBegin, pr.stdout.length()); + + if (ind1 != -1) { + // int inde = pr.stdout.indexOf(expStr); + // int indf = pr.stdout.indexOf(foundStr); + int indend = pr.stdout.indexOf(endStr); + failStr = pr.stdout.substring(ind1, indend + endStr.length()); + } + + if (ind2 != -1) { + // int inde = pr.stdout.indexOf(expStr); + // int indf = pr.stdout.indexOf(foundStr); + int indend = pr.stdout.indexOf(endStr); + failStr = pr.stdout.substring(ind2, indend + endStr.length()); + } + + if (ind3 != -1) { + failStr = "JSToJGet: " + outputStrings[index] + + pr.stdout.substring(ind3, pr.stdout.length()); + } + + Assert.assertTrue(failStr, (ind3 == -1));// no error on Java side + Assert.assertTrue(failStr, (ind1 == -1));// no value mismatch + Assert.assertTrue(failStr, (ind2 == -1));// no type mismatch + Assert.assertTrue(failStr, (ind0 != -1));// test passed + + } + + private void genericJSToJavaGetTestMethod(int index) throws Exception { + + String strURL = "/JSToJGet.html?" + testNames[index]; + ProcessResult pr = server.executeBrowser(strURL, + new CountingClosingListenerImpl(), + new CountingClosingListenerImpl()); + evaluateStdoutContents(index, pr); + + } + + @Test + @TestInBrowsers(testIn = { Browsers.all }) + @NeedsDisplay + public void AppletJSToJGet_int_Test() throws Exception { + genericJSToJavaGetTestMethod(0); + } + + @Test + @TestInBrowsers(testIn = { Browsers.all }) + @NeedsDisplay + public void AppletJSToJGet_double_Test() throws Exception { + genericJSToJavaGetTestMethod(1); + } + + @Test + @TestInBrowsers(testIn = { Browsers.all }) + @NeedsDisplay + public void AppletJSToJGet_float_Test() throws Exception { + genericJSToJavaGetTestMethod(2); + } + + @Test + @TestInBrowsers(testIn = { Browsers.all }) + @NeedsDisplay + public void AppletJSToJGet_long_Test() throws Exception { + genericJSToJavaGetTestMethod(3); + } + + @Test + @TestInBrowsers(testIn = { Browsers.all }) + @NeedsDisplay + public void AppletJSToJGet_boolean_Test() throws Exception { + genericJSToJavaGetTestMethod(4); + } + + @Test + @TestInBrowsers(testIn = { Browsers.all }) + @NeedsDisplay + public void AppletJSToJGet_char_Test() throws Exception { + genericJSToJavaGetTestMethod(5); + } + + @Test + @TestInBrowsers(testIn = { Browsers.all }) + @NeedsDisplay + public void AppletJSToJGet_byte_Test() throws Exception { + genericJSToJavaGetTestMethod(6); + } + + @Test + @TestInBrowsers(testIn = { Browsers.all }) + @NeedsDisplay + public void AppletJSToJGet_intArrayElement_Test() throws Exception { + genericJSToJavaGetTestMethod(7); + } + + @Test + @TestInBrowsers(testIn = { Browsers.all }) + @NeedsDisplay + public void AppletJSToJGet_intArrayBeyond_Test() throws Exception { + genericJSToJavaGetTestMethod(8); + } + + @Test + @TestInBrowsers(testIn = { Browsers.all }) + @NeedsDisplay + public void AppletJSToJGet_regularString_Test() throws Exception { + genericJSToJavaGetTestMethod(9); + } + + @Test + @TestInBrowsers(testIn = { Browsers.all }) + @NeedsDisplay + public void AppletJSToJGet_specialCharsString_Test() throws Exception { + genericJSToJavaGetTestMethod(10); + } + + @Test + @TestInBrowsers(testIn = { Browsers.all }) + @NeedsDisplay + public void AppletJSToJGet_null_Test() throws Exception { + genericJSToJavaGetTestMethod(11); + } + + @Test + @TestInBrowsers(testIn = { Browsers.all }) + @NeedsDisplay + public void AppletJSToJGet_Integer_Test() throws Exception { + genericJSToJavaGetTestMethod(12); + } + + @Test + @TestInBrowsers(testIn = { Browsers.all }) + @NeedsDisplay + public void AppletJSToJGet_Double_Test() throws Exception { + genericJSToJavaGetTestMethod(13); + } + + @Test + @TestInBrowsers(testIn = { Browsers.all }) + @NeedsDisplay + public void AppletJSToJGet_Float_Test() throws Exception { + genericJSToJavaGetTestMethod(14); + } + + @Test + @TestInBrowsers(testIn = { Browsers.all }) + @NeedsDisplay + public void AppletJSToJGet_Long_Test() throws Exception { + genericJSToJavaGetTestMethod(15); + } + + @Test + @TestInBrowsers(testIn = { Browsers.all }) + @NeedsDisplay + public void AppletJSToJGet_Boolean_Test() throws Exception { + genericJSToJavaGetTestMethod(16); + } + + @Test + @TestInBrowsers(testIn = { Browsers.all }) + @NeedsDisplay + public void AppletJSToJGet_Character_Test() throws Exception { + genericJSToJavaGetTestMethod(17); + } + + @Test + @TestInBrowsers(testIn = { Browsers.all }) + @NeedsDisplay + public void AppletJSToJGet_Byte_Test() throws Exception { + genericJSToJavaGetTestMethod(18); + } + + @Test + @TestInBrowsers(testIn = { Browsers.all }) + @NeedsDisplay + public void AppletJSToJGet_DoubleArrayElement_Test() throws Exception { + genericJSToJavaGetTestMethod(19); + } + + @Test + @TestInBrowsers(testIn = { Browsers.all }) + @NeedsDisplay + public void AppletJSToJGet_DoubleFullArray_Test() throws Exception { + genericJSToJavaGetTestMethod(20); + } + +}