changeset in /hg/icedtea6: 2009-04-06 Omair Majid <omajid at redh...
Omair Majid
omajid at redhat.com
Mon Apr 6 13:54:03 PDT 2009
changeset 976903c2e02e in /hg/icedtea6
details: http://icedtea.classpath.org/hg/icedtea6?cmd=changeset;node=976903c2e02e
description:
2009-04-06 Omair Majid <omajid at redhat.com>
* patches/icedtea-jtreg-jrunscript.patch: New patch. Replaces
jrunscriptTest.sh with a java version that isnt picky about int vs double
changes.
* Makefile.am (ICEDTEA_PATCHES): Apply the above.
* HACKING: Document the above.
diffstat:
4 files changed, 363 insertions(+)
ChangeLog | 8
HACKING | 1
Makefile.am | 1
patches/icedtea-jtreg-jrunscript.patch | 353 ++++++++++++++++++++++++++++++++
diffs (394 lines):
diff -r 5b9c566ab513 -r 976903c2e02e ChangeLog
--- a/ChangeLog Fri Apr 03 13:49:06 2009 -0400
+++ b/ChangeLog Mon Apr 06 16:50:53 2009 -0400
@@ -1,3 +1,11 @@ 2009-04-03 Lillian Angel <langel at redha
+2009-04-06 Omair Majid <omajid at redhat.com>
+
+ * patches/icedtea-jtreg-jrunscript.patch: New patch. Replaces
+ jrunscriptTest.sh with a java version that isnt picky about int vs double
+ changes.
+ * Makefile.am (ICEDTEA_PATCHES): Apply the above.
+ * HACKING: Document the above.
+
2009-04-03 Lillian Angel <langel at redhat.com>
* patches/icedtea-lcms.patch: Updated. Re-added _cmsModifyTag data
diff -r 5b9c566ab513 -r 976903c2e02e HACKING
--- a/HACKING Fri Apr 03 13:49:06 2009 -0400
+++ b/HACKING Mon Apr 06 16:50:53 2009 -0400
@@ -93,6 +93,7 @@ The following patches are currently appl
* icedtea-jtreg-printjob-multiple-end.patch: Fix test to not require any user interaction.
* icedtea-network-unreachable.patch: Check for ENETUNREACH and EHOSTUNREACH early on when doing a Socket.connect().
* icedtea-jtreg-printjob-edgetest-manual.patch: Mark test that requires user interaction as manual.
+* icedtea-jtreg-jrunscript.patch: Fix jrunscript test so it works with newer versions of rhino (by comparing the actual numbers).
The following patches are only applied to OpenJDK6 in IcedTea6:
diff -r 5b9c566ab513 -r 976903c2e02e Makefile.am
--- a/Makefile.am Fri Apr 03 13:49:06 2009 -0400
+++ b/Makefile.am Mon Apr 06 16:50:53 2009 -0400
@@ -691,6 +691,7 @@ ICEDTEA_PATCHES += \
patches/icedtea-jtreg-colortest.patch \
patches/icedtea-jtreg-printjob-multiple-end.patch \
patches/icedtea-jtreg-printjob-edgetest-manual.patch \
+ patches/icedtea-jtreg-jrunscript.patch \
patches/icedtea-network-unreachable.patch \
$(DISTRIBUTION_PATCHES)
diff -r 5b9c566ab513 -r 976903c2e02e patches/icedtea-jtreg-jrunscript.patch
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/patches/icedtea-jtreg-jrunscript.patch Mon Apr 06 16:50:53 2009 -0400
@@ -0,0 +1,353 @@
+diff -uNr openjdk/jdk/test/sun/tools/jrunscript.orig/CheckEngine.java openjdk/jdk/test/sun/tools/jrunscript/CheckEngine.java
+--- openjdk/jdk/test/sun/tools/jrunscript.orig/CheckEngine.java 2009-04-01 14:23:50.000000000 -0400
++++ openjdk/jdk/test/sun/tools/jrunscript/CheckEngine.java 2009-04-01 16:23:26.000000000 -0400
+@@ -39,7 +39,8 @@
+ * passed.
+ */
+ public class CheckEngine {
+- public static void main(String... args) {
++
++ public static int checkEngine() {
+ int exitCode = 0;
+ ScriptEngine engine =
+ (new ScriptEngineManager()).getEngineByName("js");
+@@ -48,7 +49,11 @@
+ !(System.getProperty("java.runtime.name").startsWith("Java(TM)"))) {
+ exitCode = 2;
+ }
+-
++ return exitCode;
++ }
++
++ public static void main(String... args) {
++ int exitCode = checkEngine();
+ System.exit(exitCode);
+ }
+ }
+diff -uNr openjdk/jdk/test/sun/tools/jrunscript.orig/jrunscriptTest.sh openjdk/jdk/test/sun/tools/jrunscript/jrunscriptTest.sh
+--- openjdk/jdk/test/sun/tools/jrunscript.orig/jrunscriptTest.sh 2009-04-01 14:23:50.000000000 -0400
++++ openjdk/jdk/test/sun/tools/jrunscript/jrunscriptTest.sh 1969-12-31 19:00:00.000000000 -0500
+@@ -1,80 +0,0 @@
+-#!/bin/sh
+-
+-#
+-# Copyright 2005-2006 Sun Microsystems, Inc. All Rights Reserved.
+-# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+-#
+-# This code is free software; you can redistribute it and/or modify it
+-# under the terms of the GNU General Public License version 2 only, as
+-# published by the Free Software Foundation.
+-#
+-# This code 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
+-# version 2 for more details (a copy is included in the LICENSE file that
+-# accompanied this code).
+-#
+-# You should have received a copy of the GNU General Public License version
+-# 2 along with this work; if not, write to the Free Software Foundation,
+-# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+-#
+-# Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
+-# CA 95054 USA or visit www.sun.com if you need additional information or
+-# have any questions.
+-#
+-
+-
+-# @test
+-# @bug 6265810 6705893
+-# @build CheckEngine
+-# @run shell jrunscriptTest.sh
+-# @summary Test that output of 'jrunscript' interactive matches the repl.out file
+-
+-. ${TESTSRC-.}/common.sh
+-
+-setup
+-${JAVA} -cp ${TESTCLASSES} CheckEngine
+-if [ $? -eq 2 ]; then
+- echo "No js engine found and engine not required; test vacuously passes."
+- exit 0
+-fi
+-
+-rm -f jrunscriptTest.out 2>/dev/null
+-${JRUNSCRIPT} > jrunscriptTest.out 2>&1 <<EOF
+-v = 2 + 5;
+-v *= 5;
+-v = v + " is the value";
+-if (v != 0) { println('yes v != 0'); }
+-java.lang.System.out.println('hello world from script');
+-new java.lang.Runnable() { run: function() { println('I am runnable'); }}.run();
+-EOF
+-
+-diff jrunscriptTest.out ${TESTSRC}/repl.out
+-if [ $? != 0 ]
+-then
+- echo "Output of jrunscript session differ from expected output. Failed."
+- rm -f jrunscriptTest.out 2>/dev/null
+- exit 1
+-fi
+-
+-rm -f jrunscriptTest.out 2>/dev/null
+-${JRUNSCRIPT} -l js > jrunscriptTest.out 2>&1 <<EOF
+-v = 2 + 5;
+-v *= 5;
+-v = v + " is the value";
+-if (v != 0) { println('yes v != 0'); }
+-java.lang.System.out.println('hello world from script');
+-new java.lang.Runnable() { run: function() { println('I am runnable'); }}.run();
+-EOF
+-
+-diff jrunscriptTest.out ${TESTSRC}/repl.out
+-if [ $? != 0 ]
+-then
+- echo "Output of jrunscript -l js differ from expected output. Failed."
+- rm -f jrunscriptTest.out 2>/dev/null
+- exit 1
+-fi
+-
+-rm -f jrunscriptTest.out
+-echo "Passed"
+-exit 0
+diff -uNr openjdk/jdk/test/sun/tools/jrunscript.orig/Testjrunscript.java openjdk/jdk/test/sun/tools/jrunscript/Testjrunscript.java
+--- openjdk/jdk/test/sun/tools/jrunscript.orig/Testjrunscript.java 1969-12-31 19:00:00.000000000 -0500
++++ openjdk/jdk/test/sun/tools/jrunscript/Testjrunscript.java 2009-04-01 16:52:36.000000000 -0400
+@@ -0,0 +1,239 @@
++/*
++ * Copyright 2009 Red Hat, Inc. All Rights Reserved.
++ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
++ *
++ * This code is free software; you can redistribute it and/or modify it
++ * under the terms of the GNU General Public License version 2 only, as
++ * published by the Free Software Foundation.
++ *
++ * This code 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
++ * version 2 for more details (a copy is included in the LICENSE file that
++ * accompanied this code).
++ *
++ * You should have received a copy of the GNU General Public License version
++ * 2 along with this work; if not, write to the Free Software Foundation,
++ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
++ */
++
++
++/*
++ at test
++ at bug 6265810 6705893
++ at build CheckEngine
++ at run main Testjrunscript
++ at summary Test that output of 'jrunscript' interactive matches the expected output
++*/
++
++import java.io.BufferedReader;
++import java.io.File;
++import java.io.FileNotFoundException;
++import java.io.IOException;
++import java.io.InputStream;
++import java.io.InputStreamReader;
++import java.util.LinkedList;
++import java.util.List;
++
++
++
++class OutputMismatchException extends RuntimeException {
++
++ private String actualLine;
++ private String expectedLine;
++
++ public OutputMismatchException(String actualLine, String expectedLine) {
++ this.expectedLine = expectedLine;
++ this.actualLine = actualLine;
++ }
++
++ public String toString() {
++ return "Output mismatch:\n" + "Expected: " + expectedLine + "\n"
++ + "Got : " + actualLine;
++ }
++
++};
++
++public class Testjrunscript {
++
++ public static final String[] jrunscriptInput = new String[] {
++ "v = 2 + 5;",
++ "v *= 5;",
++ "v = v + \" is the value\";",
++ "if (v != 0) { println('yes v != 0'); }",
++ "java.lang.System.out.println('hello world from script');",
++ "new java.lang.Runnable() { run: function() { println('I am runnable'); }}.run();" };
++
++ public static final String INTERPRETER_PROMPT = "js> ";
++
++ public static final String[] expectedOutput = new String[] {
++ INTERPRETER_PROMPT + "7.0",
++ INTERPRETER_PROMPT + "35.0",
++ INTERPRETER_PROMPT + "35 is the value",
++ INTERPRETER_PROMPT + "yes v != 0",
++ INTERPRETER_PROMPT + "hello world from script",
++ INTERPRETER_PROMPT + "I am runnable",
++ INTERPRETER_PROMPT, };
++
++ public static final double EPSILON = 0.000001;
++
++ /**
++ * Compares the expected output as stored in expectedOutput against the
++ * actual output read in from processOutput
++ *
++ * @param processOutput
++ * @throws IOException
++ */
++ private static void checkOutput(InputStream processOutput)
++ throws IOException {
++
++ BufferedReader lineReader = new BufferedReader(new InputStreamReader(
++ processOutput));
++
++ String actualLine;
++ String expectedLine;
++ for (int i = 0; i < expectedOutput.length; i++) {
++ expectedLine = expectedOutput[i];
++ actualLine = lineReader.readLine();
++ if (actualLine == null) {
++ throw new OutputMismatchException("", expectedLine);
++ }
++ checkLinesMatch(actualLine, expectedLine);
++ }
++
++ actualLine = lineReader.readLine();
++ if (actualLine != null) {
++ throw new OutputMismatchException(actualLine, "");
++ }
++ }
++
++ /**
++ * Compares two lines and throws {@link OutputMismatchException} if they
++ * dont match. Allows for different representations of numbers.
++ *
++ * @param actualLine
++ * the actual output
++ * @param expectedLine
++ * the expected output
++ */
++ private static void checkLinesMatch(String actualLine, String expectedLine) {
++ String delimiter = "[ ]+";
++ String[] actualTokens = actualLine.split(delimiter);
++ String[] expectedTokens = expectedLine.split(delimiter);
++ if (actualTokens.length != expectedTokens.length) {
++ throw new OutputMismatchException(actualLine, expectedLine);
++ }
++
++ String actualToken;
++ String expectedToken;
++ for (int i = 0; i < expectedTokens.length; i++) {
++ actualToken = actualTokens[i];
++ expectedToken = expectedTokens[i];
++ if (actualToken.equals(expectedToken)) {
++ continue;
++ }
++
++ // if tokens dont match exactly, try converting them both to doubles
++ // and then comparing. some versions of rhino return int for some
++ // operations, while others return floats/doubles
++ try {
++ Double actualDouble = Double.valueOf(actualToken);
++ Double expectedDouble = Double.valueOf(expectedToken);
++ if (Math.abs(expectedDouble - actualDouble) < EPSILON) {
++ continue;
++ } else {
++ throw new OutputMismatchException(actualLine, expectedLine);
++ }
++ } catch (NumberFormatException nfe) {
++ throw new OutputMismatchException(actualLine, expectedLine);
++ }
++ }
++
++ }
++
++ /**
++ * @return the path to the jrunscript binary
++ */
++ public static String getPathToJrunscript() throws FileNotFoundException {
++
++ File jreDir = new File(System.getProperty("java.home"));
++ if (!jreDir.isDirectory()) {
++ throw new RuntimeException("java.home doesnt point to a directory");
++ }
++
++ String jdkDir = jreDir.getParent();
++ String pathToJrunscript = jdkDir + File.separatorChar + "bin"
++ + File.separatorChar + "jrunscript";
++ File jrunscriptBinary = new File(pathToJrunscript);
++ if (!jrunscriptBinary.exists()) {
++ throw new FileNotFoundException("File "
++ + jrunscriptBinary.getAbsolutePath());
++ }
++ return pathToJrunscript;
++
++ }
++
++ /**
++ * Runs the given command to execute jrunscript and checks to make sure it
++ * works
++ */
++ public static void checkJrunscript(List<String> command) throws IOException {
++ System.out.print("Testing jrunscript:");
++ for (String cmd : command) {
++ System.out.print(" " + cmd);
++ }
++ System.out.println();
++
++
++ ProcessBuilder pb = new ProcessBuilder(command);
++ pb.redirectErrorStream(true);
++
++ Process jrunscript = pb.start();
++
++ InputStream input = jrunscript.getInputStream();
++ String inputLine;
++ for (int i = 0; i < jrunscriptInput.length; i++) {
++ inputLine = jrunscriptInput[i];
++ jrunscript.getOutputStream().write(inputLine.getBytes());
++ jrunscript.getOutputStream().write(new byte[] { '\n' });
++ }
++ jrunscript.getOutputStream().close();
++
++ checkOutput(input);
++
++ try {
++ jrunscript.waitFor();
++ } catch (InterruptedException e) {
++ throw new RuntimeException(e);
++ }
++
++ if (jrunscript.exitValue() != 0) {
++ throw new RuntimeException("jrunscript failed");
++ }
++ }
++
++ /**
++ * test if jrunscript works properly
++ */
++ public static void main(String[] args) throws IOException,
++ InterruptedException {
++
++ if (CheckEngine.checkEngine() == 2) {
++ System.out
++ .println("No js engine found and engine not required; test vacuously passes.");
++ }
++
++ // check jrunscript without any other args
++ List<String> command = new LinkedList<String>();
++ command.add(getPathToJrunscript());
++ checkJrunscript(command);
++
++ // check jrunscript -l js
++ command.add("-l");
++ command.add("js");
++ checkJrunscript(command);
++
++ System.out.println("Passed");
++
++ }
++}
More information about the distro-pkg-dev
mailing list