Home | History | Annotate | Download | only in jsr166
      1 /*
      2  * Written by Doug Lea with assistance from members of JCP JSR-166
      3  * Expert Group and released to the public domain, as explained at
      4  * http://creativecommons.org/publicdomain/zero/1.0/
      5  * Other contributors include Andrew Wright, Jeffrey Hayes,
      6  * Pat Fisher, Mike Judd.
      7  */
      8 
      9 package jsr166;
     10 
     11 import junit.framework.Test;
     12 import junit.framework.TestSuite;
     13 
     14 public class ThreadTest extends JSR166TestCase {
     15     // android-note: Removed because the CTS runner does a bad job of
     16     // retrying tests that have suite() declarations.
     17     //
     18     // public static void main(String[] args) {
     19     //     main(suite(), args);
     20     // }
     21     // public static Test suite() {
     22     //     return new TestSuite(ThreadTest.class);
     23     // }
     24 
     25     static class MyHandler implements Thread.UncaughtExceptionHandler {
     26         public void uncaughtException(Thread t, Throwable e) {
     27             e.printStackTrace();
     28         }
     29     }
     30 
     31     /**
     32      * getUncaughtExceptionHandler returns ThreadGroup unless set,
     33      * otherwise returning value of last setUncaughtExceptionHandler.
     34      */
     35     public void testGetAndSetUncaughtExceptionHandler() {
     36         // these must be done all at once to avoid state
     37         // dependencies across tests
     38         Thread current = Thread.currentThread();
     39         ThreadGroup tg = current.getThreadGroup();
     40         MyHandler eh = new MyHandler();
     41         assertSame(tg, current.getUncaughtExceptionHandler());
     42         current.setUncaughtExceptionHandler(eh);
     43         try {
     44             assertSame(eh, current.getUncaughtExceptionHandler());
     45         } finally {
     46             current.setUncaughtExceptionHandler(null);
     47         }
     48         assertSame(tg, current.getUncaughtExceptionHandler());
     49     }
     50 
     51     /**
     52      * getDefaultUncaughtExceptionHandler returns value of last
     53      * setDefaultUncaughtExceptionHandler.
     54      */
     55     public void testGetAndSetDefaultUncaughtExceptionHandler() {
     56         // android-note: Removed assertion; all "normal" android apps (including CTS tests) have a
     57         // default uncaught exception handler installed by the framework.
     58         //
     59         // assertEquals(null, Thread.getDefaultUncaughtExceptionHandler());
     60         // failure due to SecurityException is OK.
     61         // Would be nice to explicitly test both ways, but cannot yet.
     62         Thread.UncaughtExceptionHandler defaultHandler
     63             = Thread.getDefaultUncaughtExceptionHandler();
     64         MyHandler eh = new MyHandler();
     65         try {
     66             Thread.setDefaultUncaughtExceptionHandler(eh);
     67             try {
     68                 assertSame(eh, Thread.getDefaultUncaughtExceptionHandler());
     69             } finally {
     70                 Thread.setDefaultUncaughtExceptionHandler(defaultHandler);
     71             }
     72         } catch (SecurityException ok) {
     73             assertNotNull(System.getSecurityManager());
     74         }
     75         assertSame(defaultHandler, Thread.getDefaultUncaughtExceptionHandler());
     76     }
     77 
     78     // How to test actually using UEH within junit?
     79 
     80 }
     81