blob: fcb56434436bc136377d82573a9b204d844826c9 [file] [log] [blame]
J. Duke319a3b92007-12-01 00:00:00 +00001/*
2 * Copyright 2001 Sun Microsystems, Inc. All Rights Reserved.
3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
4 *
5 * This code is free software; you can redistribute it and/or modify it
6 * under the terms of the GNU General Public License version 2 only, as
7 * published by the Free Software Foundation.
8 *
9 * This code is distributed in the hope that it will be useful, but WITHOUT
10 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
11 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
12 * version 2 for more details (a copy is included in the LICENSE file that
13 * accompanied this code).
14 *
15 * You should have received a copy of the GNU General Public License version
16 * 2 along with this work; if not, write to the Free Software Foundation,
17 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
18 *
19 * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
20 * CA 95054 USA or visit www.sun.com if you need additional information or
21 * have any questions.
22 */
23
24/**
25 * @test
26 * @bug 4425840
27 * @author Robert Field
28 *
29 * @run build TestScaffold VMConnection TargetListener TargetAdapter
30 * @run compile -g RequestReflectionTest.java
31 * @run main RequestReflectionTest
32 *
33 * @summary RequestReflectionTest checks to see that reflective
34 * accessors on EventRequests return what they are given.
35 */
36import com.sun.jdi.*;
37import com.sun.jdi.event.*;
38import com.sun.jdi.request.*;
39
40import java.util.List;
41
42
43 /********** target program **********/
44
45class RequestReflectionTarg {
46 int foo = 9;
47
48 public static void main(String args[]) {
49 System.out.println("Why, hello there...");
50 (new RequestReflectionTarg()).bar();
51 }
52
53 void bar() {
54 ++foo;
55 }
56}
57
58 /********** test program **********/
59
60public class RequestReflectionTest extends TestScaffold {
61
62 RequestReflectionTest (String args[]) {
63 super(args);
64 }
65
66 public static void main(String[] args) throws Exception {
67 new RequestReflectionTest(args).startTests();
68 }
69
70 /********** test core **********/
71
72 protected void runTests() throws Exception {
73 /*
74 * Get to the top of main():
75 */
76 BreakpointEvent bpe = startToMain("RequestReflectionTarg");
77 ReferenceType targ = bpe.location().declaringType();
78 ThreadReference thread = bpe.thread();
79
80 Field fooField = targ.fieldByName("foo");
81 if (fooField == null) {
82 throw new Exception("test error: cannot find field foo");
83 }
84 List meths = targ.methodsByName("bar");
85 if (meths.size() != 1) {
86 throw new Exception("test error: should be one bar()");
87 }
88 Method barMethod = (Method)meths.get(0);
89
90 List exClasses = vm().classesByName("java.lang.Exception");
91 if (exClasses.size() != 1) {
92 throw new Exception(
93 "test error: should be one java.lang.Exception");
94 }
95 ReferenceType exceptionClass = (ReferenceType)exClasses.get(0);
96 EventRequestManager erm = eventRequestManager();
97
98 StepRequest sr =
99 erm.createStepRequest(thread, StepRequest.STEP_MIN,
100 StepRequest.STEP_OUT);
101 sr.setSuspendPolicy(EventRequest.SUSPEND_NONE);
102 sr.enable();
103 if (!sr.thread().equals(thread)) {
104 throw new Exception(
105 "RequestReflectionTest fail: exceptions do not match " +
106 thread + " != " + sr.thread());
107 }
108 if (sr.size() != StepRequest.STEP_MIN) {
109 throw new Exception(
110 "RequestReflectionTest fail: size does not match " +
111 sr.size() + " != " + StepRequest.STEP_MIN);
112 }
113 if (sr.depth() != StepRequest.STEP_OUT) {
114 throw new Exception(
115 "RequestReflectionTest fail: depth does not match " +
116 sr.depth() + " != " + StepRequest.STEP_OUT);
117 }
118 if (sr.suspendPolicy() != EventRequest.SUSPEND_NONE) {
119 throw new Exception(
120 "RequestReflectionTest fail: wrong suspend policy " +
121 sr.suspendPolicy());
122 }
123 if (!sr.isEnabled()) {
124 throw new Exception(
125 "RequestReflectionTest fail: should be enabled");
126 }
127 sr.disable();
128
129 sr = erm.createStepRequest(thread, StepRequest.STEP_LINE,
130 StepRequest.STEP_INTO);
131 sr.setSuspendPolicy(EventRequest.SUSPEND_ALL);
132 if (sr.size() != StepRequest.STEP_LINE) {
133 throw new Exception(
134 "RequestReflectionTest fail: size does not match " +
135 sr.size() + " != " + StepRequest.STEP_LINE);
136 }
137 if (sr.depth() != StepRequest.STEP_INTO) {
138 throw new Exception(
139 "RequestReflectionTest fail: depth does not match " +
140 sr.depth() + " != " + StepRequest.STEP_INTO);
141 }
142 if (sr.suspendPolicy() != EventRequest.SUSPEND_ALL) {
143 throw new Exception(
144 "RequestReflectionTest fail: wrong suspend policy " +
145 sr.suspendPolicy());
146 }
147 if (sr.isEnabled()) {
148 throw new Exception(
149 "RequestReflectionTest fail: should not be enabled");
150 }
151
152 AccessWatchpointRequest awr =
153 erm.createAccessWatchpointRequest(fooField);
154 if (!awr.field().equals(fooField)) {
155 throw new Exception(
156 "RequestReflectionTest fail: fields do not match " +
157 fooField + " != " + awr.field());
158 }
159 if (awr.suspendPolicy() != EventRequest.SUSPEND_ALL) {
160 throw new Exception(
161 "RequestReflectionTest fail: wrong suspend policy " +
162 awr.suspendPolicy());
163 }
164 if (awr.isEnabled()) {
165 throw new Exception(
166 "RequestReflectionTest fail: should not be enabled");
167 }
168 BreakpointRequest bpr =
169 erm.createBreakpointRequest(barMethod.location());
170 bpr.setSuspendPolicy(EventRequest.SUSPEND_NONE);
171 bpr.enable();
172 if (!bpr.location().method().equals(barMethod)) {
173 throw new Exception(
174 "RequestReflectionTest fail: methodss do not match " +
175 barMethod + " != " + bpr.location().method());
176 }
177 if (bpr.suspendPolicy() != EventRequest.SUSPEND_NONE) {
178 throw new Exception(
179 "RequestReflectionTest fail: wrong suspend policy " +
180 bpr.suspendPolicy());
181 }
182 if (!bpr.isEnabled()) {
183 throw new Exception(
184 "RequestReflectionTest fail: should be enabled");
185 }
186 ExceptionRequest exr =
187 erm.createExceptionRequest(exceptionClass, true, false);
188 exr.setSuspendPolicy(EventRequest.SUSPEND_EVENT_THREAD);
189 exr.enable();
190 exr.disable();
191 if (!exr.exception().equals(exceptionClass)) {
192 throw new Exception(
193 "RequestReflectionTest fail: not java.lang.Exception " +
194 exr.exception());
195 }
196 if (exr.suspendPolicy() != EventRequest.SUSPEND_EVENT_THREAD) {
197 throw new Exception(
198 "RequestReflectionTest fail: wrong suspend policy " +
199 exr.suspendPolicy());
200 }
201 if (exr.isEnabled()) {
202 throw new Exception(
203 "RequestReflectionTest fail: should not be enabled");
204 }
205
206 listenUntilVMDisconnect();
207
208 println("RequestReflectionTest: passed");
209 }
210}