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