1 #!/bin/sh 2 3 # 4 # Copyright (c) 2002, 2014 Oracle and/or its affiliates. All rights reserved. 5 # DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. 6 # 7 # This code is free software; you can redistribute it and/or modify it 8 # under the terms of the GNU General Public License version 2 only, as 9 # published by the Free Software Foundation. 10 # 11 # This code is distributed in the hope that it will be useful, but WITHOUT 12 # ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or 13 # FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License 14 # version 2 for more details (a copy is included in the LICENSE file that 15 # accompanied this code). 16 # 17 # You should have received a copy of the GNU General Public License version 18 # 2 along with this work; if not, write to the Free Software Foundation, 19 # Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. 20 # 21 # Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA 22 # or visit www.oracle.com if you need additional information or have any 23 # questions. 24 # 25 26 # 27 # @test 28 # @bug 4422141 4695338 29 # @key intermittent 30 # @summary TTY: .length field for arrays in print statements in jdb not recognized 31 # TTY: dump <ArrayReference> command not implemented. 32 # @author Tim Bell 33 # 34 # @run shell ArrayLengthDumpTest.sh 35 # 36 classname=ArrayLengthDumpTarg 37 38 createJavaFile() 39 { 40 cat <<EOF > $classname.java.1 41 class $classname { 42 static final int [] i = {0,1,2,3,4,5,6}; 43 String [] s = {"zero", "one", "two", "three", "four"}; 44 String [][] t = {s, s, s, s, s, s, s, s, s, s, s}; 45 int length = 5; 46 47 public void bar() { 48 } 49 50 public void foo() { 51 ArrayLengthDumpTarg u[] = { new ArrayLengthDumpTarg(), 52 new ArrayLengthDumpTarg(), 53 new ArrayLengthDumpTarg(), 54 new ArrayLengthDumpTarg(), 55 new ArrayLengthDumpTarg(), 56 new ArrayLengthDumpTarg() }; 57 int k = u.length; 58 System.out.println(" u.length is: " + k); 59 k = this.s.length; 60 System.out.println(" this.s.length is: " + k); 61 k = this.t.length; 62 System.out.println(" this.t.length is: " + k); 63 k = this.t[1].length; 64 System.out.println("this.t[1].length is: " + k); 65 k = i.length; 66 System.out.println(" i.length is: " + k); 67 bar(); // @1 breakpoint 68 } 69 70 public static void main(String[] args) { 71 ArrayLengthDumpTarg my = new ArrayLengthDumpTarg(); 72 my.foo(); 73 } 74 } 75 EOF 76 } 77 78 # This is called to feed cmds to jdb. 79 dojdbCmds() 80 { 81 setBkpts @1 82 runToBkpt @1 83 cmd dump this 84 cmd dump this.s.length 85 cmd dump this.s 86 cmd dump this.t.length 87 cmd dump this.t[1].length 88 cmd dump ArrayLengthDumpTarg.i.length 89 cmd dump this.length 90 cmd allowExit cont 91 } 92 93 mysetup() 94 { 95 if [ -z "$TESTSRC" ] ; then 96 TESTSRC=. 97 fi 98 99 for ii in . $TESTSRC $TESTSRC/.. ; do 100 if [ -r "$ii/ShellScaffold.sh" ] ; then 101 . $ii/ShellScaffold.sh 102 break 103 fi 104 done 105 } 106 107 108 # You could replace this next line with the contents 109 # of ShellScaffold.sh and this script will run just the same. 110 mysetup 111 112 runit 113 # 114 # Test the fix for 4690242: 115 # 116 jdbFailIfPresent "No instance field or method with the name length in" 50 117 jdbFailIfPresent "No static field or method with the name length" 50 118 # 119 # Test the fix for 4695338: 120 # 121 jdbFailIfNotPresent "\"zero\", \"one\", \"two\", \"three\", \"four\"" 50 122 pass