1/*
2 * Copyright (c) 2001, 2015, Oracle and/or its affiliates. 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 Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
20 * or visit www.oracle.com if you need additional information or have any
21 * questions.
22 */
23
24/**
25 * @test
26 * @bug 4331872
27 * @summary erm.deleteEventRequests(erm.breakpointRequests()) throws exception
28 * @author Robert Field
29 *
30 * @run build TestScaffold VMConnection TargetListener TargetAdapter
31 * @run compile -g DeleteEventRequestsTest.java
32 * @run driver DeleteEventRequestsTest
33 */
34import com.sun.jdi.*;
35import com.sun.jdi.event.*;
36import com.sun.jdi.request.*;
37
38import java.util.*;
39
40    /********** target program **********/
41
42class DeleteEventRequestsTarg {
43    public static void main(String[] args){
44        System.out.println("Howdy!");
45        System.out.println("Goodbye from DeleteEventRequestsTarg!");
46    }
47}
48
49    /********** test program **********/
50
51public class DeleteEventRequestsTest extends TestScaffold {
52    ReferenceType targetClass;
53    ThreadReference mainThread;
54
55    DeleteEventRequestsTest (String args[]) {
56        super(args);
57    }
58
59    public static void main(String[] args)      throws Exception {
60        new DeleteEventRequestsTest(args).startTests();
61    }
62
63    /********** event handlers **********/
64
65    public void stepCompleted(StepEvent event) {
66        failure("Got StepEvent which was deleted");
67    }
68
69    /********** test core **********/
70
71    protected void runTests() throws Exception {
72        /*
73         * Get to the top of main()
74         * to determine targetClass and mainThread
75         */
76        BreakpointEvent bpe = startToMain("DeleteEventRequestsTarg");
77        targetClass = bpe.location().declaringType();
78        mainThread = bpe.thread();
79        EventRequestManager erm = vm().eventRequestManager();
80
81        /*
82         * Set event requests
83         */
84        StepRequest request = erm.createStepRequest(mainThread,
85                                                    StepRequest.STEP_LINE,
86                                                    StepRequest.STEP_OVER);
87        request.enable();
88
89        /*
90         * This should not die with ConcurrentModificationException
91         */
92        erm.deleteEventRequests(erm.stepRequests());
93
94        /*
95         * resume the target listening for events
96         */
97        listenUntilVMDisconnect();
98
99        /*
100         * deal with results of test
101         * if anything has called failure("foo") testFailed will be true
102         */
103        if (!testFailed) {
104            println("DeleteEventRequestsTest: passed");
105        } else {
106            throw new Exception("DeleteEventRequestsTest: failed");
107        }
108    }
109}
110