1 /*
2  *  Licensed to the Apache Software Foundation (ASF) under one or more
3  *  contributor license agreements.  See the NOTICE file distributed with
4  *  this work for additional information regarding copyright ownership.
5  *  The ASF licenses this file to You under the Apache License, Version 2.0
6  *  (the "License"); you may not use this file except in compliance with
7  *  the License.  You may obtain a copy of the License at
8  *
9  *     http://www.apache.org/licenses/LICENSE-2.0
10  *
11  *  Unless required by applicable law or agreed to in writing, software
12  *  distributed under the License is distributed on an "AS IS" BASIS,
13  *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14  *  See the License for the specific language governing permissions and
15  *  limitations under the License.
16  */
17 
18 package org.apache.harmony.jpda.tests.jdwp.Events;
19 
20 import org.apache.harmony.jpda.tests.share.JPDADebuggeeSynchronizer;
21 import org.apache.harmony.jpda.tests.share.SyncDebuggee;
22 
23 /**
24  * Debuggee for JDWP unit tests for CombinedExceptionEventsTest.
25  */
26 public class CombinedExceptionEventsDebuggee extends SyncDebuggee {
27     public static final String TEST_CAUGHT_EXCEPTION_SIGNAL = "CAUGHT";
28     public static final String TEST_UNCAUGHT_EXCEPTION_SIGNAL = "UNCAUGHT";
29 
30     public static class SubDebuggeeException extends DebuggeeException {
SubDebuggeeException(String msg)31         public SubDebuggeeException(String msg) {
32             super(msg);
33         }
34     }
35 
main(String[] args)36     public static void main(String[] args) {
37         runDebuggee(CombinedExceptionEventsDebuggee.class);
38     }
39 
run()40     public void run() {
41         logWriter.println("-> CombinedExceptionEventsDebuggee: Starting...");
42 
43         // Preload exception classes
44         new SubDebuggeeException("dummy");
45 
46         synchronizer.sendMessage(JPDADebuggeeSynchronizer.SGNL_READY);
47 
48         String signalMessage = synchronizer.receiveMessage();
49         if (signalMessage.equals(TEST_CAUGHT_EXCEPTION_SIGNAL)) {
50             testCaughtException();
51         } else {
52             testUncaughtException();
53         }
54 
55         logWriter.println("-> CombinedExceptionEventsDebuggee: Finishing...");
56     }
57 
testCaughtException()58     private void testCaughtException() {
59         Thread t = new Thread(new Runnable() {
60             public void run() {
61                 // Catch a different exception to test catch location is
62                 // properly reported.
63                 try {
64                     throwDebuggeeException("Caught debuggee exception");
65                 } catch (DebuggeeException e) {
66                     // Expected exception
67                 }
68             }
69         });
70         t.start();
71 
72         try {
73             t.join();
74         } catch (InterruptedException e) {
75             logWriter.printError(e);
76         }
77     }
78 
testUncaughtException()79     private void testUncaughtException() {
80         Thread t = new Thread(new Runnable() {
81             public void run() {
82                 // Catch a different exception to test catch location is
83                 // properly reported.
84                 try {
85                     throwDebuggeeException("Uncaught debuggee exception");
86                 } catch (NullPointerException e) {
87                     // Unexpect exception
88                     logWriter.printError("Unexpected exception", e);
89                 }
90             }
91         });
92         t.start();
93 
94         try {
95             t.join();
96         } catch (InterruptedException e) {
97             logWriter.printError(e);
98         }
99     }
100 
throwDebuggeeException(String msg)101     private static void throwDebuggeeException(String msg) {
102         throw new SubDebuggeeException(msg);
103     }
104 }
105