8210760: [TEST] rewrite com/sun/jdi shell tests to java version - step4
Reviewed-by: jcbeyler, sspitsyn, cjplummer
--- a/test/jdk/ProblemList.txt Fri Sep 21 10:18:12 2018 -0700
+++ b/test/jdk/ProblemList.txt Fri Sep 21 11:28:14 2018 -0700
@@ -836,8 +836,6 @@
com/sun/jdi/BasicJDWPConnectionTest.java 8195703 generic-all
-com/sun/jdi/RedefineImplementor.sh 8004127 generic-all
-
com/sun/jdi/RepStep.java 8043571 generic-all
com/sun/jdi/sde/SourceDebugExtensionTest.java 8158066 windows-all
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/test/jdk/com/sun/jdi/RedefineException.java Fri Sep 21 11:28:14 2018 -0700
@@ -0,0 +1,104 @@
+/*
+ * Copyright (c) 2002, 2018, Oracle and/or its affiliates. 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 Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+/*
+ * @test
+ * @bug 4559100
+ * @summary The VM crashes when a method in a redefined class throws an exception.
+ * @comment converted from test/jdk/com/sun/jdi/RedefineException.sh
+ *
+ * @library /test/lib
+ * @run main/othervm RedefineException
+ */
+
+/* This is another symptomm of 4559100
+ * This causes a bus error on solsparc:
+ * ---- called from signal handler with signal 10 (SIGBUS) ------
+ * [11] constantPoolOopDesc::klass_at_if_loaded(0xffbed4d8, 0x16, 0xffbed5cc, 0x0, 0x1, 0xfa40b330), at 0xfe11568c
+ * [12] methodOopDesc::fast_exception_handler_bci_for(0x6, 0x1, 0xfe400a0c, 0x0, 0x2d1f0, 0x0), at 0xfe12e620
+ * [13] jvmdi::post_exception_throw_event(0x2d1f0, 0xf61036f8, 0xf6103752, 0xf20414a8, 0x2e2928, 0xfe12e190), at 0xfe2a4fa4
+ */
+
+import lib.jdb.JdbCommand;
+import lib.jdb.JdbTest;
+
+class RedefineExceptionTarg {
+ String str;
+ int ii;
+ static public void main(String[] args) {
+ System.out.println("In Main");
+ RedefineExceptionTarg mine = new RedefineExceptionTarg();
+ mine.a1();
+ }
+
+ public void a1() {
+ int a1local = 1;
+ String a1string = "a1";
+
+ ii = 89; // @1 delete this line
+ str = "foo";
+ System.out.println("a1: Calling the original a2/a3. 'The @@@ deleted lines should appear");
+ System.out.println("ii = " + ii); // @1 delete this line
+ a2();
+ }
+
+ public void a2() {
+ int a2local = 2;
+ String a2string = "a2";
+ //System.out.println("a2: @ @@delete this line");
+ try {
+ a3();
+ } catch (Exception ee) {
+ System.out.println("a2: Exception caught");
+ }
+ System.out.println("a2: done");
+ }
+
+ public void a3() throws Exception {
+ int a3local = 3;
+ String a3string = "a3";
+ System.out.println("a3: @@ delete this line"); // If this line is deleted, the test passes!
+ System.out.println("a3: @1 breakpoint here a3");
+ throw new Exception("This is the exception");
+ }
+}
+
+public class RedefineException extends JdbTest {
+
+ public static void main(String argv[]) {
+ new RedefineException().run();
+ }
+
+ private RedefineException() {
+ super(RedefineExceptionTarg.class.getName(), "RedefineException.java");
+ }
+
+ @Override
+ protected void runCases() {
+ setBreakpoints(1);
+ jdb.command(JdbCommand.run());
+ redefineClass(1);
+ jdb.command(JdbCommand.pop());
+ jdb.contToExit(1);
+ }
+}
--- a/test/jdk/com/sun/jdi/RedefineException.sh Fri Sep 21 10:18:12 2018 -0700
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,119 +0,0 @@
-#!/bin/sh
-
-#
-# Copyright (c) 2002, 2014, Oracle and/or its affiliates. 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 Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
-# or visit www.oracle.com if you need additional information or have any
-# questions.
-#
-
-# @test
-# @bug 4559100
-# @summary The VM crashes when a method in a redefined class throws an exception.
-# @author Jim Holmlund
-#
-# @key intermittent
-# @run shell RedefineException.sh
-
-# This is another symptomm of 4559100
-# This causes a bus error on solsparc:
-# ---- called from signal handler with signal 10 (SIGBUS) ------
-# [11] constantPoolOopDesc::klass_at_if_loaded(0xffbed4d8, 0x16, 0xffbed5cc, 0x0, 0x1, 0xfa40b330), at 0xfe11568c
-# [12] methodOopDesc::fast_exception_handler_bci_for(0x6, 0x1, 0xfe400a0c, 0x0, 0x2d1f0, 0x0), at 0xfe12e620
-# [13] jvmdi::post_exception_throw_event(0x2d1f0, 0xf61036f8, 0xf6103752, 0xf20414a8, 0x2e2928, 0xfe12e190), at 0xfe2a4fa4
-
-# These are variables that can be set to control execution
-
-createJavaFile()
-{
- cat <<EOF > $1.java.1
-
-public class $1 {
- String str;
- int ii;
- static public void main(String[] args) {
- System.out.println("In Main");
- $1 mine = new $1();
- mine.a1();
- }
-
- public void a1() {
- int a1local = 1;
- String a1string = "a1";
-
- ii = 89; // @1 delete this line
- str = "foo";
- System.out.println("a1: Calling the original a2/a3. 'The @@@ deleted lines should appear");
- System.out.println("ii = " + ii); // @1 delete this line
- a2();
- }
-
- public void a2() {
- int a2local = 2;
- String a2string = "a2";
- //System.out.println("a2: @ @@delete this line");
- try {
- a3();
- } catch (Exception ee) {
- System.out.println("a2: Exception caught");
- }
- System.out.println("a2: done");
- }
-
- public void a3() throws Exception {
- int a3local = 3;
- String a3string = "a3";
- System.out.println("a3: @@ delete this line"); // If this line is deleted, the test passes!
- System.out.println("a3: @1 breakpoint here a3");
- throw new Exception("This is the exception");
- }
-}
-EOF
-}
-
-dojdbCmds()
-{
- setBkpts @1
- runToBkpt
- redefineClass @1
- cmd pop
- cmd allowExit cont
-}
-
-
-mysetup()
-{
- if [ -z "$TESTSRC" ] ; then
- TESTSRC=.
- fi
-
- for ii in . $TESTSRC $TESTSRC/.. ; do
- if [ -r "$ii/ShellScaffold.sh" ] ; then
- . $ii/ShellScaffold.sh
- break
- fi
- done
-}
-
-# You could replace this next line with the contents
-# of ShellScaffold.sh and this script will run just the same.
-mysetup
-
-runit
-pass
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/test/jdk/com/sun/jdi/RedefineFinal.java Fri Sep 21 11:28:14 2018 -0700
@@ -0,0 +1,86 @@
+/*
+ * Copyright (c) 2002, 2018, Oracle and/or its affiliates. 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 Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+/*
+ * @test
+ * @bug 4788344
+ * @summary RedefineClasses is an apparent no-op if instance method is final
+ * @comment converted from test/jdk/com/sun/jdi/RedefineFinal.sh
+ *
+ * @library /test/lib
+ * @compile -g RedefineFinal.java
+ * @run main/othervm RedefineFinal
+ */
+
+import jdk.test.lib.process.OutputAnalyzer;
+import lib.jdb.JdbCommand;
+import lib.jdb.JdbTest;
+
+final class RedefineFinalTarg {
+
+ public int m1(int i) {
+ // @1 uncomment System.out.println("I'm here");
+ return m2(i, 1000);
+ }
+
+ public int m2(int i, int j) {
+ if (i < 0 || j < 0) { // @1 breakpoint
+ throw new IllegalArgumentException();
+ }
+ return i+j;
+ }
+
+ RedefineFinalTarg() {
+ m1(0);
+ m1(0);
+ }
+
+ public static void main(String args[]) {
+ new RedefineFinalTarg();
+ }
+}
+
+public class RedefineFinal extends JdbTest {
+
+ public static void main(String argv[]) {
+ new RedefineFinal().run();
+ }
+
+ private RedefineFinal() {
+ super(RedefineFinalTarg.class.getName(), "RedefineFinal.java");
+ }
+
+ @Override
+ protected void runCases() {
+ setBreakpoints(1);
+ jdb.command(JdbCommand.run());
+ redefineClass(1, "-g");
+ setBreakpoints(1);
+ jdb.command(JdbCommand.cont());
+ jdb.command(JdbCommand.where(""));
+ jdb.contToExit(1);
+
+ new OutputAnalyzer(getJdbOutput())
+ .shouldNotContain("obsolete");
+ }
+}
--- a/test/jdk/com/sun/jdi/RedefineFinal.sh Fri Sep 21 10:18:12 2018 -0700
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,103 +0,0 @@
-#!/bin/sh
-
-#
-# Copyright (c) 2002, 2014, Oracle and/or its affiliates. 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 Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
-# or visit www.oracle.com if you need additional information or have any
-# questions.
-#
-
-# @test
-# @bug 4788344
-# @summary RedefineClasses is an apparent no-op if instance method is final
-#
-# @key intermittent
-# @run shell RedefineFinal.sh
-
-compileOptions=-g
-compileOptions2=-g
-
-# Uncomment this to see the JDI trace
-#jdbOptions=-dbgtrace
-
-createJavaFile()
-{
- cat <<EOF > $1.java.1
-
-public final class $1 {
-
- public int m1(int i) {
- // @1 uncomment System.out.println("I'm here");
- return m2(i, 1000);
- }
-
- public int m2(int i, int j) {
- if (i < 0 || j < 0) { // @1 breakpoint
- throw new IllegalArgumentException();
- }
- return i+j;
- }
-
- $1() {
- m1(0);
- m1(0);
- }
-
- public static void main(String args[]) {
- new $1();
- }
-}
-EOF
-}
-
-# This is called to feed cmds to jdb.
-dojdbCmds()
-{
- setBkpts @1
- runToBkpt @1
- redefineClass @1
- setBkpts @1
- contToBkpt
- cmd where
- cmd allowExit cont
-}
-
-
-mysetup()
-{
- if [ -z "$TESTSRC" ] ; then
- TESTSRC=.
- fi
-
- for ii in . $TESTSRC $TESTSRC/.. ; do
- if [ -r "$ii/ShellScaffold.sh" ] ; then
- . $ii/ShellScaffold.sh
- break
- fi
- done
-}
-
-# You could replace this next line with the contents
-# of ShellScaffold.sh and this script will run just the same.
-mysetup
-
-runit
-
-jdbFailIfPresent 'obsolete'
-pass
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/test/jdk/com/sun/jdi/RedefineIntConstantToLong.java Fri Sep 21 11:28:14 2018 -0700
@@ -0,0 +1,101 @@
+/*
+ * Copyright (c) 2006, 2018, Oracle and/or its affiliates. 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 Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+/*
+ * @test
+ * @bug 6394084
+ * @summary Redefine class can't handle addition of 64 bit constants in JDK1.5.0_05
+ * @comment converted from test/jdk/com/sun/jdi/RedefineIntConstantToLong.sh
+ *
+ * @library /test/lib
+ * @compile -g RedefineIntConstantToLong.java
+ * @run main/othervm RedefineIntConstantToLong
+ */
+
+import jdk.test.lib.process.OutputAnalyzer;
+import lib.jdb.JdbCommand;
+import lib.jdb.JdbTest;
+
+final class RedefineIntConstantToLongTarg {
+
+ public long m1(int i) {
+ long r=0;
+ r = m2(i * 2); // @1 commentout
+ // @1 uncomment r =m2(i * 2L);
+ return r;
+ }
+
+ public long m2(int j) {
+ System.out.println(System.getProperty("line.separator") +
+ "**** public long m2(int j) with value: " + j);
+ return j;
+ }
+
+ public long m2(long j) {
+ System.out.println(System.getProperty("line.separator") +
+ "**** public long m2(long j) with value: " + j);
+ return j;
+ }
+
+ public void doit() throws Exception {
+ long r1 = 0;
+ long r2;
+ r1 = m1(1000);
+ r2 = 0; // @1 breakpoint
+ r2 = m1(1000);
+ if (r1 != r2) { // @1 breakpoint
+ throw new Exception("FAILURE: Expected value: " + r1 + " Actual value: " + r2);
+ } else {
+ System.out.println("SUCCESS: Expected value: " + r1 + " Actual value: " + r2);
+ }
+ }
+
+ public static void main(String args[]) throws Exception {
+ new RedefineIntConstantToLongTarg().doit();
+ }
+}
+
+public class RedefineIntConstantToLong extends JdbTest {
+
+ public static void main(String argv[]) {
+ new RedefineIntConstantToLong().run();
+ }
+
+ private RedefineIntConstantToLong() {
+ super(RedefineIntConstantToLongTarg.class.getName(), "RedefineIntConstantToLong.java");
+ }
+
+ @Override
+ protected void runCases() {
+ setBreakpoints(1);
+ jdb.command(JdbCommand.run());
+ redefineClass(1, "-g");
+ setBreakpoints(1);
+ jdb.command(JdbCommand.cont());
+ jdb.command(JdbCommand.where(""));
+ jdb.contToExit(1);
+
+ new OutputAnalyzer(getJdbOutput())
+ .shouldNotContain("FAILURE:");
+ }
+}
--- a/test/jdk/com/sun/jdi/RedefineIntConstantToLong.sh Fri Sep 21 10:18:12 2018 -0700
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,118 +0,0 @@
-#!/bin/sh
-
-#
-# Copyright (c) 2006, 2014, Oracle and/or its affiliates. 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 Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
-# or visit www.oracle.com if you need additional information or have any
-# questions.
-#
-
-# @test
-# @bug 6394084
-# @summary Redefine class can't handle addition of 64 bit constants in JDK1.5.0_05
-#
-# @key intermittent
-# @run shell RedefineIntConstantToLong.sh
-
-compileOptions=-g
-compileOptions2=-g
-
-# Uncomment this to see the JDI trace
-#jdbOptions=-dbgtrace
-
-createJavaFile()
-{
- cat <<EOF > $1.java.1
-
-public final class $1 {
-
- public long m1(int i) {
- long r=0;
- r = m2(i * 2); // @1 commentout
- // @1 uncomment r =m2(i * 2L);
- return r;
- }
-
- public long m2(int j) {
- System.out.println(System.getProperty("line.separator") +
- "**** public long m2(int j) with value: " + j);
- return j;
- }
-
- public long m2(long j) {
- System.out.println(System.getProperty("line.separator") +
- "**** public long m2(long j) with value: " + j);
- return j;
- }
-
- public void doit() throws Exception {
- long r1 = 0;
- long r2;
- r1 = m1(1000);
- r2 = 0; // @1 breakpoint
- r2 = m1(1000);
- if (r1 != r2) { // @1 breakpoint
- throw new Exception("FAILURE: Expected value: " + r1 + " Actual value: " + r2);
- } else {
- System.out.println("SUCCESS: Expected value: " + r1 + " Actual value: " + r2);
- }
- }
-
- public static void main(String args[]) throws Exception {
- new $1().doit();
- }
-}
-EOF
-}
-
-# This is called to feed cmds to jdb.
-dojdbCmds()
-{
- setBkpts @1
- runToBkpt @1
- redefineClass @1
- setBkpts @1
- contToBkpt
- cmd where
- cmd allowExit cont
-}
-
-
-mysetup()
-{
- if [ -z "$TESTSRC" ] ; then
- TESTSRC=.
- fi
-
- for ii in . $TESTSRC $TESTSRC/.. ; do
- if [ -r "$ii/ShellScaffold.sh" ] ; then
- . $ii/ShellScaffold.sh
- break
- fi
- done
-}
-
-# You could replace this next line with the contents
-# of ShellScaffold.sh and this script will run just the same.
-mysetup
-
-runit
-
-jdbFailIfPresent 'FAILURE:'
-pass
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/test/jdk/com/sun/jdi/RedefineMulti.java Fri Sep 21 11:28:14 2018 -0700
@@ -0,0 +1,140 @@
+/*
+ * Copyright (c) 2002, 2018, Oracle and/or its affiliates. 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 Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+/*
+ * @test
+ * @bug 4724076
+ * @summary Redefine does not work in for/while loop
+ * @comment converted from test/jdk/com/sun/jdi/RedefineMulti.sh
+ *
+ * @library /test/lib
+ * @compile -g RedefineMulti.java
+ * @run main/othervm RedefineMulti
+ */
+
+/*
+ * The failure occurs when a method is active and
+ * a method that it calls multiple times is redefined
+ * more than once.
+ */
+
+import jdk.test.lib.process.OutputAnalyzer;
+import lib.jdb.JdbCommand;
+import lib.jdb.JdbTest;
+
+class RedefineMultiTarg {
+
+ String field1;
+ String field2;
+
+ // The first time thru the loop in start,
+ // "Before update..." should be printed.
+ // After the first redefine, "After update..." should be printed
+ // After the 2nd redefine, "abcde..." should be printed.
+ // The bug is that "After update..." is printed instead because
+ // stat() calls version 2 of doSomething() instead of
+ // version 3.
+ private void doSomething() {
+ System.out.println("Before update..."); // @1 commentout
+ // @1 uncomment System.out.println("After update..."); // @2 commentout
+ // @2 uncomment System.out.println("abcde...");
+ }
+
+ public void start() {
+ for (int i=0; i < 3; i++) {
+ doSomething(); // @1 breakpoint here line 16
+ System.out.println("field1 = " + field1);
+ System.out.println("field2 = " + field2);
+ }
+ // Redefinex myx = new Redefinex();
+ // for (int i = 0; i < 5; i++) {
+ // myx.methodx1(); // line 22
+ // System.out.println("fieldx1 = " + myx.fieldx1);
+ // System.out.println("fieldx2 = " + myx.fieldx2);
+ // }
+ }
+
+ public static void main(String[] args) {
+ RedefineMultiTarg xxx = new RedefineMultiTarg();
+ xxx.field1 = "field1";
+ xxx.field2 = "field2";
+ xxx.start();
+ }
+}
+
+class Redefinex {
+ public String fieldx1;
+ public String fieldx2;
+
+ Redefinex() {
+ fieldx1 = "fieldx1";
+ fieldx2 = "fieldx2";
+ }
+
+ public void methodx1() {
+ System.out.println("redefinex 1");
+ //System.out.println("redefinex 2");
+ //System.out.println("redefinex 3");
+ }
+}
+
+/*********
+Steps to reproduce this problem:
+ a. add line breakpoint in start()
+ b. debug
+ c. when breakpoint is hit, type continue. You should see output "Before update..."
+ d. change "Before update" to "After update"
+ e. redefine, and set line breakpoint (see step a)
+ f. type continue. You should see output "After update"
+ g. change "After update" to "abcde"
+ h. redefine, and set line breakpoint (see step a)
+ i. type continue. The output is shown as "After update"
+ j. to see "abcde" output, users will have to pop the stack, and re-execute method start().
+************/
+
+public class RedefineMulti extends JdbTest {
+
+ public static void main(String argv[]) {
+ new RedefineMulti().run();
+ }
+
+ private RedefineMulti() {
+ super(RedefineMultiTarg.class.getName(), "RedefineMulti.java");
+ }
+
+ @Override
+ protected void runCases() {
+ setBreakpoints(1);
+ jdb.command(JdbCommand.run());
+ jdb.command(JdbCommand.cont());
+ redefineClass(1, "-g");
+ setBreakpoints(1);
+ jdb.command(JdbCommand.cont());
+ redefineClass(2, "-g");
+ jdb.contToExit(1);
+
+ new OutputAnalyzer(getDebuggeeOutput())
+ .shouldNotContain("Internal exception:")
+ .shouldContain("abcde");
+ }
+}
--- a/test/jdk/com/sun/jdi/RedefineMulti.sh Fri Sep 21 10:18:12 2018 -0700
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,154 +0,0 @@
-#!/bin/sh
-
-#
-# Copyright (c) 2002, 2014, Oracle and/or its affiliates. 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 Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
-# or visit www.oracle.com if you need additional information or have any
-# questions.
-#
-
-# @test
-# @bug 4724076
-# @summary Redefine does not work in for/while loop
-# @author Jim Holmlund/Swamy Venkataramanappa
-#
-# The failure occurs when a method is active and
-# a method that it calls multiple times is redefined
-# more than once.
-# @run shell/timeout=240 RedefineMulti.sh
-
-compileOptions=-g
-#java=java_g
-
-createJavaFile()
-{
- cat <<EOF > $1.java.1
-
-public class $1 {
-
- String field1;
- String field2;
-
- // The first time thru the loop in start,
- // "Before update..." should be printed.
- // After the first redefine, "After update..." should be printed
- // After the 2nd redefine, "abcde..." should be printed.
- // The bug is that "After update..." is printed instead because
- // stat() calls version 2 of doSomething() instead of
- // version 3.
- private void doSomething() {
- System.out.println("Before update..."); // @1 commentout
- // @1 uncomment System.out.println("After update..."); // @2 commentout
- // @2 uncomment System.out.println("abcde...");
- }
-
- public void start() {
- for (int i=0; i < 3; i++) {
- doSomething(); // @1 breakpoint here line 16
- System.out.println("field1 = " + field1);
- System.out.println("field2 = " + field2);
- }
- // Redefinex myx = new Redefinex();
- // for (int i = 0; i < 5; i++) {
- // myx.methodx1(); // line 22
- // System.out.println("fieldx1 = " + myx.fieldx1);
- // System.out.println("fieldx2 = " + myx.fieldx2);
- // }
- }
-
- public static void main(String[] args) {
- $1 xxx = new $1();
- xxx.field1 = "field1";
- xxx.field2 = "field2";
- xxx.start();
- }
-}
-
-class Redefinex {
- public String fieldx1;
- public String fieldx2;
-
- Redefinex() {
- fieldx1 = "fieldx1";
- fieldx2 = "fieldx2";
- }
-
- public void methodx1() {
- System.out.println("redefinex 1");
- //System.out.println("redefinex 2");
- //System.out.println("redefinex 3");
- }
-
-}
-
- /*********
-Steps to reproduce this problem:
- a. add line breakpoint in start()
- b. debug
- c. when breakpoint is hit, type continue. You should see output
-"Before update..."
- d. change "Before update" to "After update"
- e. redefine, and set line breakpoint (see step a)
- f. type continue. You should see output "After update"
- g. change "After update" to "abcde"
- h. redefine, and set line breakpoint (see step a)
- i. type continue. The output is shown as "After update"
-
- j. to see "abcde" output, users will have to pop the stack, and
-re-execute method start().
- ************/
-EOF
-}
-
-# This is called to feed cmds to jdb.
-dojdbCmds()
-{
- setBkpts @1
- runToBkpt @1
- contToBkpt
- redefineClass @1
- setBkpts @1
- contToBkpt
- redefineClass @2
- cmd allowExit cont
-}
-
-
-mysetup()
-{
- if [ -z "$TESTSRC" ] ; then
- TESTSRC=.
- fi
-
- for ii in . $TESTSRC $TESTSRC/.. ; do
- if [ -r "$ii/ShellScaffold.sh" ] ; then
- . $ii/ShellScaffold.sh
- break
- fi
- done
-}
-
-# You could replace this next line with the contents
-# of ShellScaffold.sh and this script will run just the same.
-mysetup
-
-runit
-debuggeeFailIfPresent "Internal exception:"
-debuggeeFailIfNotPresent "abcde"
-pass
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/test/jdk/com/sun/jdi/RedefinePop.java Fri Sep 21 11:28:14 2018 -0700
@@ -0,0 +1,91 @@
+/*
+ * Copyright (c) 2002, 2018, Oracle and/or its affiliates. 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 Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+/*
+ * @test
+ * @bug 4622663
+ * @summary redefine and pop top frame from jdb gets assertion failure
+ * @comment converted from test/jdk/com/sun/jdi/RedefinePop.sh
+ *
+ * @library /test/lib
+ * @compile -g RedefinePop.java
+ * @run main/othervm RedefinePop
+ */
+
+/*
+ * The failure occurs with debug java when the pop deletes the
+ * line that called the method which is being popped.
+ */
+
+/*
+ * assert(index<len, "should have found method")
+ * [8] report_assertion_failure(0xfe2a54d9, 0xfe2a54e3, 0x2cc, 0xfe2a5527, 0xfffffff8, 0x3f2b8), at 0xfda1e5e8
+ * [9] methodOopDesc::jni_id(0xf590a2f0, 0x3e868, 0x8, 0xffbed760, 0xf590a3ac, 0xffbed664), at 0xfdcd7a2c
+ * [10] JvmdiThreadState::compare_and_set_current_location(0x3f450, 0xf590a2f0, 0xf590a33f, 0x1, 0x1, 0x3e868), at 0xfdc0f670
+ * [11] jvmdi::at_single_stepping_point(0x3e868, 0xf590a2f0, 0xf590a33f, 0x5, 0x0, 0x0), at 0xfdc29184
+ * [12] InterpreterRuntime::at_safepoint(0x3e868, 0xb6, 0x2, 0xf9c28744, 0xf590a038, 0xffbed880), at 0xfdb0d590
+ */
+
+import jdk.test.lib.process.OutputAnalyzer;
+import lib.jdb.JdbCommand;
+import lib.jdb.JdbTest;
+
+class RedefinePopTarg {
+ static public void main(String[] args) {
+ RedefinePopTarg mine = new RedefinePopTarg();
+ mine.a1(44); // @1 delete the call that we are in when the pop occurs
+ mine.a4();
+ }
+
+ public void a1(int p1) {
+ System.out.println("a1: @1 breakpoint here");
+ }
+
+ public void a4() {
+ System.out.println("a4: The next line should not say Ni!");
+ System.out.println("a4: Ni!"); // @1 delete
+ }
+}
+
+public class RedefinePop extends JdbTest {
+
+ public static void main(String argv[]) {
+ new RedefinePop().run();
+ }
+
+ private RedefinePop() {
+ super(RedefinePopTarg.class.getName(), "RedefinePop.java");
+ }
+
+ @Override
+ protected void runCases() {
+ setBreakpoints(1);
+ jdb.command(JdbCommand.run());
+ redefineClass(1, "-g");
+ jdb.command(JdbCommand.pop());
+ jdb.contToExit(1);
+
+ new OutputAnalyzer(getDebuggeeOutput())
+ .shouldNotContain("Internal exception:");
+ }
+}
--- a/test/jdk/com/sun/jdi/RedefinePop.sh Fri Sep 21 10:18:12 2018 -0700
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,102 +0,0 @@
-#!/bin/sh
-
-#
-# Copyright (c) 2002, 2014, Oracle and/or its affiliates. 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 Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
-# or visit www.oracle.com if you need additional information or have any
-# questions.
-#
-
-# @test
-# @bug 4622663
-# @summary redefine and pop top frame from jdb gets assertion failure
-# @author Jim Holmlund/Swamy Venkataramanappa
-#
-# The failure occurs with debug java when the pop deletes the
-# line that called the method which is being popped.
-# @key intermittent
-# @run shell RedefinePop.sh
-
-
-# assert(index<len, "should have found method")
-# [8] report_assertion_failure(0xfe2a54d9, 0xfe2a54e3, 0x2cc, 0xfe2a5527, 0xfffffff8, 0x3f2b8), at 0xfda1e5e8
-# [9] methodOopDesc::jni_id(0xf590a2f0, 0x3e868, 0x8, 0xffbed760, 0xf590a3ac, 0xffbed664), at 0xfdcd7a2c
- # [10] JvmdiThreadState::compare_and_set_current_location(0x3f450, 0xf590a2f0, 0xf590a33f, 0x1, 0x1, 0x3e868), at 0xfdc0f670
-# [11] jvmdi::at_single_stepping_point(0x3e868, 0xf590a2f0, 0xf590a33f, 0x5, 0x0, 0x0), at 0xfdc29184
-# [12] InterpreterRuntime::at_safepoint(0x3e868, 0xb6, 0x2, 0xf9c28744, 0xf590a038, 0xffbed880), at 0xfdb0d590
-
-# These are variables that can be set to control execution
-
-compileOptions=-g
-
-createJavaFile()
-{
- cat <<EOF > $1.java.1
-
-public class $1 {
- static public void main(String[] args) {
- $1 mine = new $1();
- mine.a1(44); // @1 delete the call that we are in when the pop occurs
- mine.a4();
- }
-
- public void a1(int p1) {
- System.out.println("a1: @1 breakpoint here");
- }
-
- public void a4() {
- System.out.println("a4: The next line should not say Ni!");
- System.out.println("a4: Ni!"); // @1 delete
- }
-}
-EOF
-}
-
-# This is called to feed cmds to jdb.
-dojdbCmds()
-{
- setBkpts @1
- runToBkpt @1
- redefineClass @1
- cmd pop
- cmd allowExit cont
-}
-
-
-mysetup()
-{
- if [ -z "$TESTSRC" ] ; then
- TESTSRC=.
- fi
-
- for ii in . $TESTSRC $TESTSRC/.. ; do
- if [ -r "$ii/ShellScaffold.sh" ] ; then
- . $ii/ShellScaffold.sh
- break
- fi
- done
-}
-
-# You could replace this next line with the contents
-# of ShellScaffold.sh and this script will run just the same.
-mysetup
-
-runit
-debuggeeFailIfPresent "Internal exception:"
-pass
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/test/jdk/com/sun/jdi/RedefineStep.java Fri Sep 21 11:28:14 2018 -0700
@@ -0,0 +1,82 @@
+/*
+ * Copyright (c) 2002, 2018, Oracle and/or its affiliates. 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 Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+/*
+ * @test
+ * @bug 4689395
+ * @summary "step over" after a class is redefined acts like "step out"
+ * @comment converted from test/jdk/com/sun/jdi/RedefineStep.sh
+ *
+ * @library /test/lib
+ * @compile -g RedefineStep.java
+ * @run main/othervm RedefineStep
+ */
+
+import jdk.test.lib.process.OutputAnalyzer;
+import lib.jdb.JdbCommand;
+import lib.jdb.JdbTest;
+
+class RedefineStepTarg {
+ static int counter;
+ static public void main(String[] args) {
+ RedefineStepTarg mine = new RedefineStepTarg();
+ mine.a1(10);
+ System.out.println("done"); // should not see this
+ }
+
+ public void a1(int p1) {
+ System.out.println("jj0"); // @1 breakpoint line 10
+ a2();
+ System.out.println("jj3"); // @1 delete
+ }
+ public void a2() {
+ System.out.println("a2");
+ }
+}
+
+public class RedefineStep extends JdbTest {
+
+ public static void main(String argv[]) {
+ new RedefineStep().run();
+ }
+
+ private RedefineStep() {
+ super(RedefineStepTarg.class.getName(), "RedefineStep.java");
+ }
+
+ @Override
+ protected void runCases() {
+ setBreakpoints(1);
+ jdb.command(JdbCommand.run());
+ redefineClass(1, "-g");
+
+ jdb.command(JdbCommand.next());
+ jdb.command(JdbCommand.next());
+ jdb.command(JdbCommand.next());
+ jdb.command(JdbCommand.next());
+ jdb.command(JdbCommand.next());
+
+ new OutputAnalyzer(getJdbOutput())
+ .shouldNotContain("should not see this");
+ }
+}
--- a/test/jdk/com/sun/jdi/RedefineStep.sh Fri Sep 21 10:18:12 2018 -0700
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,102 +0,0 @@
-#!/bin/sh
-
-#
-# Copyright (c) 2002, Oracle and/or its affiliates. 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 Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
-# or visit www.oracle.com if you need additional information or have any
-# questions.
-#
-
-# @test
-# @bug 4689395
-# @summary "step over" after a class is redefined acts like "step out"
-# @author Jim Holmlund
-# @key intermittent
-# @run shell RedefineStep.sh
-#
-
-#pkg=untitled7
-classname=gus1
-compileOptions=-g
-#java=java_g
-
-# Uncomment this to see the JDI trace
-#jdbOptions=-dbgtrace
-
-createJavaFile()
-{
- cat <<EOF > $1.java.1
-
-public class $1 {
- static int counter;
- static public void main(String[] args) {
- $1 mine = new $1();
- mine.a1(10);
- System.out.println("done"); // should not see this
- }
-
- public void a1(int p1) {
- System.out.println("jj0"); // @1 breakpoint line 10
- a2();
- System.out.println("jj3"); // @1 delete
- }
- public void a2() {
- System.out.println("a2");
- }
-}
-EOF
-}
-
-# This is called to feed cmds to jdb.
-dojdbCmds()
-{
- setBkpts @1
- runToBkpt @1
- redefineClass @1
-
- cmd next
- cmd next
- cmd next
- cmd next
- cmd next
-}
-
-
-mysetup()
-{
- if [ -z "$TESTSRC" ] ; then
- TESTSRC=.
- fi
-
- for ii in . $TESTSRC $TESTSRC/.. ; do
- if [ -r "$ii/ShellScaffold.sh" ] ; then
- . $ii/ShellScaffold.sh
- break
- fi
- done
-}
-
-# You could replace this next line with the contents
-# of ShellScaffold.sh and this script will run just the same.
-mysetup
-
-runit
-
-jdbFailIfPresent 'should not see this'
-pass
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/test/jdk/com/sun/jdi/RedefineTTYLineNumber.java Fri Sep 21 11:28:14 2018 -0700
@@ -0,0 +1,110 @@
+/*
+ * Copyright (c) 2002, 2018, Oracle and/or its affiliates. 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 Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+/*
+ * @test
+ * @bug 4660756
+ * @summary TTY: Need to clear source cache after doing a redefine class
+ * @comment converted from test/jdk/com/sun/jdi/RedefineTTYLineNumber.sh
+ *
+ * @library /test/lib
+ * @compile -g RedefineTTYLineNumber.java
+ * @run main/othervm RedefineTTYLineNumber
+ */
+
+import jdk.test.lib.Asserts;
+import jdk.test.lib.process.OutputAnalyzer;
+import lib.jdb.JdbCommand;
+import lib.jdb.JdbTest;
+
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+
+class RedefineTTYLineNumberTarg {
+
+ public void B() {
+ System.out.println("in B: @1 delete"); // delete 1 line before A method
+ }
+
+ public void A() {
+ System.out.println("expected statement printed by jdb");
+ }
+
+ public static void main(String[] args) {
+ RedefineTTYLineNumberTarg untitled41 = new RedefineTTYLineNumberTarg();
+ untitled41.A();
+ System.out.println("done");
+ }
+}
+
+public class RedefineTTYLineNumber extends JdbTest {
+
+ public static void main(String argv[]) {
+ new RedefineTTYLineNumber().run();
+ }
+
+ private RedefineTTYLineNumber() {
+ super(DEBUGGEE_CLASS, SOURCE_FILE);
+ }
+
+ private final static String DEBUGGEE_CLASS = RedefineTTYLineNumberTarg.class.getName();
+ private final static String SOURCE_FILE = "RedefineTTYLineNumber.java";
+
+ // parses line number from the jdb "Breakpoint hit" message
+ private static int parseLineNum(String s) {
+ // Breakpoint hit: "thread=main", RedefineTTYLineNumberTarg.A(), line=49 bci=0
+ // 49 System.out.println("expected statement printed by jdb");
+ Matcher m = Pattern.compile("\\bline=(\\d+)\\b").matcher(s);
+ if (!m.find()) {
+ throw new RuntimeException("could not parse line number");
+ }
+ return Integer.parseInt(m.group(1));
+ }
+
+ private void verifyBPSource(int n, String reply) {
+ if (!reply.contains("expected statement printed by jdb")) {
+ throw new RuntimeException("Breakpoint source (" + n + ") is not correct");
+ }
+ }
+
+ @Override
+ protected void runCases() {
+ jdb.command(JdbCommand.stopIn(DEBUGGEE_CLASS, "A"));
+ String bp1Reply = execCommand(JdbCommand.run()).getStdout();
+ int bp1Line = parseLineNum(bp1Reply);
+ redefineClass(1, "-g");
+ jdb.command(JdbCommand.pop());
+ jdb.command(JdbCommand.stopIn(DEBUGGEE_CLASS, "A"));
+ String bp2Reply = execCommand(JdbCommand.cont()).getStdout();
+ int bp2Line = parseLineNum(bp2Reply);
+
+ new OutputAnalyzer(getDebuggeeOutput())
+ .shouldNotContain("Internal exception:");
+ // 1 line is deleted before RedefineTTYLineNumberTarg.A(),
+ // so bp2Line should be equals bp1Line-1
+ Asserts.assertEquals(bp2Line, bp1Line - 1, "BP line numbers");
+ verifyBPSource(1, bp1Reply);
+ // uncomment the following line to reproduce JDK-8210927
+ //verifyBPSource(2, bp2Reply);
+ }
+}
--- a/test/jdk/com/sun/jdi/RedefineTTYLineNumber.sh Fri Sep 21 10:18:12 2018 -0700
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,100 +0,0 @@
-#!/bin/sh
-
-#
-# Copyright (c) 2002, 2014, Oracle and/or its affiliates. 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 Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
-# or visit www.oracle.com if you need additional information or have any
-# questions.
-#
-
-# @test
-# @bug 4660756
-# @summary TTY: Need to clear source cache after doing a redefine class
-# @author Jim Holmlund
-# @key intermittent
-# @run shell/timeout=240 RedefineTTYLineNumber.sh
-
-#set -x
-# These are variables that can be set to control execution
-
-#pkg=untitled7
-#classname=Untitled3
-compileOptions=-g
-#java=java_g
-
-createJavaFile()
-{
- cat <<EOF > $1.java.1
-
-public class $1 {
-
- public void B() {
- System.out.println("in B");
- System.out.println("in B: @1 delete");
- }
-
- // line number sensitive!!! Next line must be line 10.
- public void A() {
- System.out.println("in A, about to call B"); // 11 before, 10 afterward
- System.out.println("out from B");
- }
-
- public static void main(String[] args) {
- $1 untitled41 = new $1();
- untitled41.A();
- System.out.println("done");
- }
-}
-EOF
-}
-
-# This is called to feed cmds to jdb.
-dojdbCmds()
-{
- cmd stop in shtest.A
- runToBkpt
- #jdbFailIfNotPresent "System\.out\.println" 3
- redefineClass @1
- cmd pop
- cmd stop in shtest.A
- contToBkpt
- #jdbFailIfNotPresent "System\.out\.println" 3
-}
-
-
-mysetup()
-{
- if [ -z "$TESTSRC" ] ; then
- TESTSRC=.
- fi
-
- if [ -r $TESTSRC/ShellScaffold.sh ] ; then
- . $TESTSRC/ShellScaffold.sh
- elif [ -r $TESTSRC/../ShellScaffold.sh ] ; then
- . $TESTSRC/../ShellScaffold.sh
- fi
-}
-
-# You could replace this next line with the contents
-# of ShellScaffold.sh and this script will run just the same.
-mysetup
-
-runit
-debuggeeFailIfPresent "Internal exception:"
-pass
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/test/jdk/com/sun/jdi/StringConvertTest.java Fri Sep 21 11:28:14 2018 -0700
@@ -0,0 +1,198 @@
+/*
+ * Copyright (c) 2002, 2018, Oracle and/or its affiliates. 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 Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+/*
+ * @test
+ * @bug 4511950 4843082
+ * @summary 1. jdb's expression evaluation doesn't perform string conversion properly
+ * 2. TTY: run on expression evaluation
+ * @comment converted from test/jdk/com/sun/jdi/StringConvertTest.sh
+ *
+ * @library /test/lib
+ * @compile -g StringConvertTest.java
+ * @run main/othervm StringConvertTest
+ */
+
+import jdk.test.lib.process.OutputAnalyzer;
+import lib.jdb.JdbCommand;
+import lib.jdb.JdbTest;
+
+class StringConvertTarg {
+ String me;
+ static JJ1 x1;
+ static JJ2 x2;
+ static JJ2[] x3 = new JJ2[2];
+ static String x4 = "abc";
+ static int ii = 89;
+ static String grower = "grower";
+ static StringBuffer sbGrower = new StringBuffer("sbGrower");
+ int ivar = 89;
+ StringConvertTarg(String xx) {
+ me = xx;
+ }
+
+ static String fred() {
+ return "a static method";
+ }
+
+ void gus() {
+ int gusLoc = 1;
+ StringBuffer sbTim = new StringBuffer("tim");
+ int kk = 1; //@1 breakpoint
+ }
+
+ static String growit(String extra) {
+ grower += extra;
+ return grower;
+ }
+
+ static String sbGrowit(String extra) {
+ sbGrower.append(extra);
+ return sbGrower.toString();
+ }
+
+ public static void main(String[] args) {
+ x1 = new JJ1("first JJ1");
+ x2 = new JJ2("first JJ2");
+ x3[0] = new JJ2("array0");
+ x3[1] = new JJ2("array1");
+ StringConvertTarg loc1 = new StringConvertTarg("first me");
+
+ // These just show what output should look like
+ System.out.println("x1 = " + x1);
+ System.out.println("x2 = " + x2);
+ System.out.println("x3.toString = " + x3.toString());
+ System.out.println("x4.toString = " + x4.toString());
+
+ // Dont want to call growit since it would change
+ // the value.
+
+ System.out.println("loc1 = " + loc1);
+ System.out.println("-" + loc1);
+ loc1.gus();
+ }
+
+ // This does not have a toString method
+ static class JJ1 {
+ String me;
+
+ JJ1(String whoAmI) {
+ me = whoAmI;
+ }
+ }
+
+ // This has a toString method
+ static class JJ2 {
+ String me;
+
+ JJ2(String whoAmI) {
+ me = whoAmI;
+ }
+ public String toString() {
+ return me;
+ }
+
+ public int meth1() {
+ return 89;
+ }
+ }
+}
+
+public class StringConvertTest extends JdbTest {
+ public static void main(String argv[]) {
+ new StringConvertTest().run();
+ }
+
+ private StringConvertTest() {
+ super(DEBUGGEE_CLASS, SOURCE_FILE);
+ }
+
+ private static final String DEBUGGEE_CLASS = StringConvertTarg.class.getName();
+ private static final String SOURCE_FILE = "StringConvertTest.java";
+
+ @Override
+ protected void runCases() {
+ setBreakpoints(1);
+ // Run to breakpoint #1
+ jdb.command(JdbCommand.run());
+
+ // Each print without the 'toString()' should print the
+ // same thing as the following print with the toString().
+ // The "print 1"s are just spacers
+ jdb.command(JdbCommand.print("StringConvertTarg.x1"));
+ jdb.command(JdbCommand.print("StringConvertTarg.x1.toString()"));
+ jdb.command(JdbCommand.print("1"));
+
+ jdb.command(JdbCommand.print("StringConvertTarg.x2"));
+ jdb.command(JdbCommand.print("StringConvertTarg.x2.toString()"));
+ jdb.command(JdbCommand.print("1"));
+
+ // arrays is a special case.
+ // StringConvertTarg prints:
+ // x3.toString = [LStringConvertTarg$JJ2;@61443d8f
+ // jdb "print ((Object)StringConvertTarg.x3).toString()" prints:
+ // com.sun.tools.example.debug.expr.ParseException:
+ // No instance field or method with the name toString in StringConvertTarg$JJ2[]
+ // ((Object)StringConvertTarg.x3).toString() = null
+ // jdb "print (Object)(StringConvertTarg.x3)" prints:
+ // (Object)(StringConvertTarg.x3) = instance of StringConvertTarg$JJ2[2] (id=624)
+ /*
+ jdb.command(JdbCommand.print("(Object)(StringConvertTarg.x3)"));
+ jdb.command(JdbCommand.print("((Object)StringConvertTarg.x3).toString()"));
+ jdb.command(JdbCommand.print("1"));
+ */
+
+ jdb.command(JdbCommand.print("StringConvertTarg.x4"));
+ jdb.command(JdbCommand.print("StringConvertTarg.x4.toString()"));
+ jdb.command(JdbCommand.print("1"));
+
+ // Make sure jdb doesn't call a method multiple times.
+ jdb.command(JdbCommand.print("StringConvertTarg.growit(\"xyz\")"));
+ jdb.command(JdbCommand.eval("StringConvertTarg.sbGrower.append(\"xyz\")"));
+ jdb.command(JdbCommand.print("1"));
+
+ jdb.command(JdbCommand.eval("sbTim.toString()"));
+ jdb.command(JdbCommand.print("1"));
+
+ jdb.command(JdbCommand.print("this"));
+ jdb.command(JdbCommand.print("this.toString()"));
+ jdb.command(JdbCommand.print("1"));
+
+ // A possible bug is that this ends up with multiple "s
+ jdb.command(JdbCommand.print("\"--\"StringConvertTarg.x1"));
+ jdb.command(JdbCommand.print("1"));
+
+ // This too
+ jdb.command(JdbCommand.print("StringConvertTarg.x4 + 2"));
+ jdb.command(JdbCommand.print("1"));
+
+ jdb.command(JdbCommand.print("this.ivar"));
+ jdb.command(JdbCommand.print("gusLoc"));
+ jdb.command(JdbCommand.print("1"));
+
+ new OutputAnalyzer(jdb.getJdbOutput())
+ .shouldNotContain("\"\"")
+ .shouldNotContain("instance of")
+ .shouldNotContain("xyzxyz");
+ }
+}
--- a/test/jdk/com/sun/jdi/StringConvertTest.sh Fri Sep 21 10:18:12 2018 -0700
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,211 +0,0 @@
-#!/bin/sh
-
-#
-# Copyright (c) 2002, 2014, Oracle and/or its affiliates. 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 Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
-# or visit www.oracle.com if you need additional information or have any
-# questions.
-#
-
-# @test
-# @bug 4511950 4843082
-# @summary 1. jdb's expression evaluation doesn't perform string conversion properly
-# 2. TTY: run on expression evaluation
-# @author jim/suvasis mukherjee
-#
-# @key intermittent
-# @run shell StringConvertTest.sh
-
-# Run this script to see the bug. See comments at the end
-# of the .java file for info on what the bug looks like.
-
-# These are variables that can be set to control execution
-
-#pkg=untitled7
-classname=StringConvertTest
-compileOptions=-g
-#java=java_g
-#mode=-Xcomp
-
-#jdbOptions=-dbgtrace
-createJavaFile()
-{
- cat <<EOF > $1.java.1
-
-class $classname {
- String me;
- static JJ1 x1;
- static JJ2 x2;
- static JJ2[] x3 = new JJ2[2];
- static String x4 = "abc";
- static int ii = 89;
- static String grower = "grower";
- static StringBuffer sbGrower = new StringBuffer("sbGrower");
- int ivar = 89;
- $classname(String xx) {
- me = xx;
- }
-
- static String fred() {
- return "a static method";
- }
-
- void gus() {
- int gusLoc = 1;
- StringBuffer sbTim = new StringBuffer("tim");
- int kk = 1; //@1 breakpoint
- }
-
- static String growit(String extra) {
- grower += extra;
- return grower;
- }
-
- static String sbGrowit(String extra) {
- sbGrower.append(extra);
- return sbGrower.toString();
- }
-
- public static void main(String[] args) {
- x1 = new JJ1("first JJ1");
- x2 = new JJ2("first JJ2");
- x3[0] = new JJ2("array0");
- x3[1] = new JJ2("array1");
- $classname loc1 = new $classname("first me");
-
- // These just show what output should look like
- System.out.println("x1 = " + x1);
- System.out.println("x2 = " + x2);
- System.out.println("x3.toString = " + x3.toString());
- System.out.println("x4.toString = " + x4.toString());
-
- // Dont want to call growit since it would change
- // the value.
-
- System.out.println("loc1 = " + loc1);
- System.out.println("-" + loc1);
- loc1.gus();
- }
-
- // This does not have a toString method
- static class JJ1 {
- String me;
-
- JJ1(String whoAmI) {
- me = whoAmI;
- }
- }
-
- // This has a toString method
- static class JJ2 {
- String me;
-
- JJ2(String whoAmI) {
- me = whoAmI;
- }
- public String toString() {
- return me;
- }
-
- public int meth1() {
- return 89;
- }
- }
-}
-
-EOF
-}
-
-# This is called to feed cmds to jdb.
-dojdbCmds()
-{
- setBkpts @1
- runToBkpt @1
-
- # Each print without the 'toString()' should print the
- # same thing as the following print with the toString().
- # The print 1s are just spacers
-
- cmd print $classname.x1
- cmd print "$classname.x1.toString()"
- cmd print 1
-
- cmd print $classname.x2
- cmd print "$classname.x2.toString()"
- cmd print 1
-
- # An unreported bug: this isn't handled correctly.
- # If we uncomment this line, we will get an 'instance of...' line
- # which will cause the test to fail.
- #cmd print "(Object)($classname.x3)"
- cmd print "((Object)$classname.x3).toString()"
- cmd print 1
-
- cmd print $classname.x4
- cmd print "$classname.x4.toString()"
- cmd print 1
-
- # Make sure jdb doesn't call a method multiple times.
- cmd print "$classname.growit(\"xyz\")"
- cmd eval "$classname.sbGrower.append(\"xyz\")"
- cmd print 1
-
- cmd eval "sbTim.toString()"
- cmd print 1
-
- cmd print this
- cmd print "this.toString()"
- cmd print 1
-
- # A possible bug is that this ends up with multiple "s
- cmd print '"--" + '$classname.x1
- cmd print 1
-
- # This too
- cmd print "$classname.x4 + 2"
- cmd print 1
-
- cmd print "this.ivar"
- cmd print gusLoc
- cmd print 1
-}
-
-mysetup()
-{
- if [ -z "$TESTSRC" ] ; then
- TESTSRC=.
- fi
-
- for ii in . $TESTSRC $TESTSRC/.. ; do
- if [ -r "$ii/ShellScaffold.sh" ] ; then
- . $ii/ShellScaffold.sh
- break
- fi
- done
-}
-
-# You could replace this next line with the contents
-# of ShellScaffold.sh and this script will run just the same.
-mysetup
-
-runit
-jdbFailIfPresent '""'
-jdbFailIfPresent 'instance of'
-jdbFailIfPresent 'xyzxyz'
-pass
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/test/jdk/com/sun/jdi/WatchFramePop.java Fri Sep 21 11:28:14 2018 -0700
@@ -0,0 +1,93 @@
+/*
+ * Copyright (c) 2002, 2018, Oracle and/or its affiliates. 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 Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+/*
+ * @test
+ * @bug 4546478
+ * @summary Enabling a watchpoint can kill following NotifyFramePops
+ * @comment converted from test/jdk/com/sun/jdi/WatchFramePop.sh
+ *
+ * @library /test/lib
+ * @run main/othervm WatchFramePop
+ */
+
+import jdk.test.lib.process.OutputAnalyzer;
+import lib.jdb.JdbCommand;
+import lib.jdb.JdbTest;
+
+class WatchFramePopTarg {
+ int watchMe;
+ static public void main(String[] args) {
+ System.out.println("In Main");
+ WatchFramePopTarg mine = new WatchFramePopTarg();
+ mine.a1();
+ System.out.println("Test completed");
+ }
+
+ public void a1() {
+ a2(); // @1 breakpoint. We'll do a watch of watchMe here
+ }
+
+ public void a2() {
+ System.out.println("in a2");
+ a3();
+ } // line 18
+
+ public void a3() {
+ System.out.println("in a3"); // After the watch, we'll run to here, line 21
+ a4(); // We'll do a 'next' to here. The failure is that this
+ } // runs to completion, or asserts with java_g
+
+ public void a4() {
+ System.out.println("in a4");
+ }
+
+}
+
+public class WatchFramePop extends JdbTest {
+ public static void main(String argv[]) {
+ new WatchFramePop().run();
+ }
+
+ private WatchFramePop() {
+ super(DEBUGGEE_CLASS, SOURCE_FILE);
+ }
+
+ private static final String DEBUGGEE_CLASS = WatchFramePopTarg.class.getName();
+ private static final String SOURCE_FILE = "WatchFramePop.java";
+
+ @Override
+ protected void runCases() {
+ setBreakpoints(1);
+ jdb.command(JdbCommand.run());
+ jdb.command(JdbCommand.watch(DEBUGGEE_CLASS, "watchMe"));
+ jdb.command(JdbCommand.stopIn(DEBUGGEE_CLASS, "a3"));
+ jdb.command(JdbCommand.cont()); // stops at the bkpt
+ jdb.command(JdbCommand.next()); // The bug is that this next runs to completion
+ // In which case, so does jdb
+ // so we never get here.
+
+ new OutputAnalyzer(jdb.getJdbOutput())
+ .shouldNotContain("The application exited");
+ }
+}
--- a/test/jdk/com/sun/jdi/WatchFramePop.sh Fri Sep 21 10:18:12 2018 -0700
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,110 +0,0 @@
-#!/bin/sh
-
-#
-# Copyright (c) 2002, 2014, Oracle and/or its affiliates. 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 Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
-# or visit www.oracle.com if you need additional information or have any
-# questions.
-#
-
-# @test
-# @bug 4546478
-# @summary Enabling a watchpoint can kill following NotifyFramePops
-# @author Jim Holmlund
-#
-# @run shell WatchFramePop.sh
-
-# These are variables that can be set to control execution
-
-#pkg=untitled7
-#classname=Untitled3
-#compileOptions=-g
-#java="java_g"
-
-createJavaFile()
-{
- cat <<EOF > $1.java.1
-
-public class $1 {
- int watchMe;
- static public void main(String[] args) {
- System.out.println("In Main");
- $1 mine = new $1();
- mine.a1();
- System.out.println("Test completed");
- }
-
- public void a1() {
- a2(); // @1 breakpoint. We'll do a watch of watchMe here
- }
-
- public void a2() {
- System.out.println("in a2");
- a3();
- } // line 18
-
- public void a3() {
- System.out.println("in a3"); // After the watch, we'll run to here, line 21
- a4(); // We'll do a 'next' to here. The failure is that this
- } // runs to completion, or asserts with java_g
-
-
- public void a4() {
- System.out.println("in a4");
- }
-
-}
-EOF
-}
-
-# drive jdb by sending cmds to it and examining its output
-dojdbCmds()
-{
- setBkpts @1
- runToBkpt @1
- cmd watch shtest.watchMe
- cmd stop in shtest.a3 # bkpt at line 17
- contToBkpt # stops at the bkpt at
- cmd next # The bug is that this next runs to completion
- # In which case, so does jdb
- # so we never get here.
-}
-
-
-mysetup()
-{
- if [ -z "$TESTSRC" ] ; then
- TESTSRC=.
- fi
-
- for ii in . $TESTSRC $TESTSRC/.. ; do
- if [ -r "$ii/ShellScaffold.sh" ] ; then
- . $ii/ShellScaffold.sh
- break
- fi
- done
-}
-
-# You could replace this next line with the contents
-# of ShellScaffold.sh and this script will run just the same.
-mysetup
-
-runit
-jdbFailIfPresent 'The application exited'
-pass