UncaughtExceptions.sh revision 1952
45N/A# Copyright 2004 Sun Microsystems, Inc. All Rights Reserved. 45N/A# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. 45N/A# This code is free software; you can redistribute it and/or modify it 45N/A# under the terms of the GNU General Public License version 2 only, as 45N/A# published by the Free Software Foundation. 45N/A# This code is distributed in the hope that it will be useful, but WITHOUT 45N/A# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or 45N/A# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License 45N/A# version 2 for more details (a copy is included in the LICENSE file that 45N/A# accompanied this code). 45N/A# You should have received a copy of the GNU General Public License version 45N/A# 2 along with this work; if not, write to the Free Software Foundation, 45N/A# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. 45N/A# Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara, 45N/A# have any questions. 45N/A# @bug 4833089 4992454 45N/A# @summary Check for proper handling of uncaught exceptions 45N/A# @author Martin Buchholz 45N/A java=
"${TESTJAVA+${TESTJAVA}/bin/}java" 45N/A echo "-----------------------------------------------------------------" 45N/A test "$#" = 1 -a "$1" = "Line" || Die "Usage: Bottom Line" echo "PASS: all tests gave expected results" test "${saveFailed}" = "${failed}" && \ echo "PASS: command completed as expected" import static java.lang.Thread.*; import static java.lang.System.*; class OK implements UncaughtExceptionHandler { public void uncaughtException(Thread t, Throwable e) { class NeverInvoked implements UncaughtExceptionHandler { public void uncaughtException(Thread t, Throwable e) { err.println("Test failure: This handler should never be invoked!"); public class Seppuku extends Thread implements Runnable { public static void seppuku() { throw new RuntimeException("Seppuku!"); } public void run() { seppuku(); } public static void main(String[] args) throws Exception { #---------------------------------------------------------------- # A thread is never alive after you've join()ed it. #---------------------------------------------------------------- Run 0 "OK" "Exception in thread \"Thread-0\".*Seppuku" " Thread t = new Seppuku(); #---------------------------------------------------------------- # Even the main thread is mortal - here it terminates "abruptly" #---------------------------------------------------------------- Run 1 "OK" "Exception in thread \"main\".*Seppuku" " final Thread mainThread = currentThread(); new Thread() { public void run() { catch (InterruptedException e) {} #---------------------------------------------------------------- # Even the main thread is mortal - here it terminates normally. #---------------------------------------------------------------- final Thread mainThread = currentThread(); new Thread() { public void run() { catch (InterruptedException e) {} #---------------------------------------------------------------- # Check uncaught exception handler mechanism on the main thread. # Check that thread-level handler overrides global default handler. #---------------------------------------------------------------- currentThread().setUncaughtExceptionHandler(new OK()); setDefaultUncaughtExceptionHandler(new NeverInvoked()); setDefaultUncaughtExceptionHandler(new OK()); #---------------------------------------------------------------- # Check uncaught exception handler mechanism on non-main threads. #---------------------------------------------------------------- Thread t = new Seppuku(); setDefaultUncaughtExceptionHandler(new OK()); #---------------------------------------------------------------- # Test ThreadGroup based uncaught exception handler mechanism. # Since the handler for the main thread group cannot be changed, # there are no tests for the main thread here. #---------------------------------------------------------------- setDefaultUncaughtExceptionHandler(new NeverInvoked()); new ThreadGroup(\"OK\") { public void uncaughtException(Thread t, Throwable e) {