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# @summary TTY: .length field for arrays in print statements in jdb not recognized 30# TTY: dump <ArrayReference> command not implemented. 31# @author Tim Bell 32# 33# @key intermittent 34# @run shell ArrayLengthDumpTest.sh 35# 36classname=ArrayLengthDumpTarg 37 38createJavaFile() 39{ 40 cat <<EOF > $classname.java.1 41class $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} 75EOF 76} 77 78# This is called to feed cmds to jdb. 79dojdbCmds() 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 93mysetup() 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. 110mysetup 111 112runit 113# 114# Test the fix for 4690242: 115# 116jdbFailIfPresent "No instance field or method with the name length in" 50 117jdbFailIfPresent "No static field or method with the name length" 50 118# 119# Test the fix for 4695338: 120# 121jdbFailIfNotPresent "\"zero\", \"one\", \"two\", \"three\", \"four\"" 50 122pass 123