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 #
  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