1561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes/* 2561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * Licensed to the Apache Software Foundation (ASF) under one or more 3561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * contributor license agreements. See the NOTICE file distributed with 4561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * this work for additional information regarding copyright ownership. 5561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * The ASF licenses this file to You under the Apache License, Version 2.0 6561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * (the "License"); you may not use this file except in compliance with 7561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * the License. You may obtain a copy of the License at 8561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * 9561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * http://www.apache.org/licenses/LICENSE-2.0 10561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * 11561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * Unless required by applicable law or agreed to in writing, software 12561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * distributed under the License is distributed on an "AS IS" BASIS, 13561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * See the License for the specific language governing permissions and 15561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * limitations under the License. 16561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes */ 17561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 18561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughespackage org.apache.harmony.luni.tests.java.lang; 19561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 20561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport java.lang.Thread.UncaughtExceptionHandler; 21561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport java.security.Permission; 22561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport java.util.Map; 23561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 24561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughespublic class ThreadTest extends junit.framework.TestCase { 25561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 26561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes static class SimpleThread implements Runnable { 27561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes int delay; 28561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 29561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes public void run() { 30561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes try { 31561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes synchronized (this) { 32561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes this.notify(); 33561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes this.wait(delay); 34561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 35561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } catch (InterruptedException e) { 36561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes return; 37561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 38561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 39561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 40561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 41561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes public SimpleThread(int d) { 42561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes if (d >= 0) 43561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes delay = d; 44561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 45561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 46561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 47561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes static class YieldThread implements Runnable { 48561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes volatile int delay; 49561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 50561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes public void run() { 51561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes int x = 0; 52561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes while (true) { 53561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes ++x; 54561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 55561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 56561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 57561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes public YieldThread(int d) { 58561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes if (d >= 0) 59561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes delay = d; 60561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 61561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 62561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 63561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes static class ResSupThread implements Runnable { 64561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes Thread parent; 65561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 66561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes volatile int checkVal = -1; 67561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 68561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes public void run() { 69561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes try { 70561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes synchronized (this) { 71561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes this.notify(); 72561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 73561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes while (true) { 74561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes checkVal++; 75561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes zz(); 76561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes Thread.sleep(100); 77561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 78561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } catch (InterruptedException e) { 79561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes return; 80561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } catch (BogusException e) { 81561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes try { 82561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // Give parent a chance to sleep 83561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes Thread.sleep(500); 84561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } catch (InterruptedException x) { 85561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 86561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes parent.interrupt(); 87561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes while (!Thread.currentThread().isInterrupted()) { 88561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // Don't hog the CPU 89561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes try { 90561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes Thread.sleep(50); 91561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } catch (InterruptedException x) { 92561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // This is what we've been waiting for...don't throw it 93561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // away! 94561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes break; 95561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 96561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 97561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 98561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 99561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 100561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes public void zz() throws BogusException { 101561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 102561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 103561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes public ResSupThread(Thread t) { 104561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes parent = t; 105561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 106561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 107561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes public synchronized int getCheckVal() { 108561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes return checkVal; 109561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 110561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 111561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 112561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes static class BogusException extends Throwable { 113561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 114561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes private static final long serialVersionUID = 1L; 115561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 116561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes public BogusException(String s) { 117561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes super(s); 118561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 119561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 120561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 121561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes Thread st, ct, spinner; 122561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 123561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes /** 124561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * @tests java.lang.Thread#Thread(java.lang.Runnable) 125561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes */ 126561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes public void test_ConstructorLjava_lang_Runnable() { 127561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // Test for method java.lang.Thread(java.lang.Runnable) 128561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes ct = new Thread(new SimpleThread(10)); 129561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes ct.start(); 130561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 131561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 132561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes /** 133561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * @tests java.lang.Thread#Thread(java.lang.Runnable, java.lang.String) 134561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes */ 135561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes public void test_ConstructorLjava_lang_RunnableLjava_lang_String() { 136561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // Test for method java.lang.Thread(java.lang.Runnable, 137561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // java.lang.String) 138561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes Thread st1 = new Thread(new SimpleThread(1), "SimpleThread1"); 139561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertEquals("Constructed thread with incorrect thread name", "SimpleThread1", st1 140561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes .getName()); 141561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes st1.start(); 142561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 143561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 144561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes /** 145561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * @tests java.lang.Thread#Thread(java.lang.String) 146561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes */ 147561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes public void test_ConstructorLjava_lang_String() { 148561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // Test for method java.lang.Thread(java.lang.String) 149561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes Thread t = new Thread("Testing"); 150fc95c99cfa4921fef424f3f411d013b821589e69Elliott Hughes assertEquals("Created tread with incorrect name", 151561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes "Testing", t.getName()); 152561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes t.start(); 153561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 154561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 155561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes /** 156561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * @tests java.lang.Thread#Thread(java.lang.ThreadGroup, java.lang.Runnable) 157561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes */ 158561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes public void test_ConstructorLjava_lang_ThreadGroupLjava_lang_Runnable() { 159561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // Test for method java.lang.Thread(java.lang.ThreadGroup, 160561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // java.lang.Runnable) 161561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes ThreadGroup tg = new ThreadGroup("Test Group1"); 162561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes st = new Thread(tg, new SimpleThread(1), "SimpleThread2"); 163561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertTrue("Returned incorrect thread group", st.getThreadGroup() == tg); 164561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes st.start(); 165561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes try { 166561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes st.join(); 167561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } catch (InterruptedException e) { 168561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 169561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes tg.destroy(); 170561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 171561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 172561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes /** 173561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * @tests java.lang.Thread#Thread(java.lang.ThreadGroup, java.lang.Runnable, 174561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * java.lang.String) 175561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes */ 176561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes public void test_ConstructorLjava_lang_ThreadGroupLjava_lang_RunnableLjava_lang_String() { 177561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // Test for method java.lang.Thread(java.lang.ThreadGroup, 178561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // java.lang.Runnable, java.lang.String) 179561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes ThreadGroup tg = new ThreadGroup("Test Group2"); 180561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes st = new Thread(tg, new SimpleThread(1), "SimpleThread3"); 181561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertTrue("Constructed incorrect thread", (st.getThreadGroup() == tg) 182561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes && st.getName().equals("SimpleThread3")); 183561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes st.start(); 184561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes try { 185561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes st.join(); 186561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } catch (InterruptedException e) { 187561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 188561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes tg.destroy(); 189561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 190561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes Runnable r = new Runnable() { 191561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes public void run() { 192561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 193561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes }; 194561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 195561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes ThreadGroup foo = null; 196561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes try { 197561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes new Thread(foo = new ThreadGroup("foo"), r, null); 198561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // Should not get here 199561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes fail("Null cannot be accepted as Thread name"); 200561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } catch (NullPointerException npe) { 201561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertTrue("Null cannot be accepted as Thread name", true); 202561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes foo.destroy(); 203561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 204561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 205561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 206561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 207561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes /** 208561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * @tests java.lang.Thread#Thread(java.lang.ThreadGroup, java.lang.String) 209561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes */ 210561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes public void test_ConstructorLjava_lang_ThreadGroupLjava_lang_String() { 211561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // Test for method java.lang.Thread(java.lang.ThreadGroup, 212561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // java.lang.String) 213561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes st = new Thread(new SimpleThread(1), "SimpleThread4"); 214fc95c99cfa4921fef424f3f411d013b821589e69Elliott Hughes assertEquals("Returned incorrect thread name", 215561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes "SimpleThread4", st.getName()); 216561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes st.start(); 217561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 218561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 219561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes /** 220561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * @tests java.lang.Thread#activeCount() 221561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes */ 222561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes public void test_activeCount() { 223561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // Test for method int java.lang.Thread.activeCount() 224561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes Thread t = new Thread(new SimpleThread(10)); 225561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes int active = 0; 226561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes synchronized (t) { 227561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes t.start(); 228561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes active = Thread.activeCount(); 229561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 230561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertTrue("Incorrect activeCount for current group: " + active, active > 1); 231561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes try { 232561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes t.join(); 233561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } catch (InterruptedException e) { 234561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 235561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 236561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 237561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes /** 238561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * @tests java.lang.Thread#checkAccess() 239561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes */ 240561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes public void test_checkAccess() { 241561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // Test for method void java.lang.Thread.checkAccess() 242561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes ThreadGroup tg = new ThreadGroup("Test Group3"); 243561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes try { 244561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes st = new Thread(tg, new SimpleThread(1), "SimpleThread5"); 245561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes st.checkAccess(); 246561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertTrue("CheckAccess passed", true); 247561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } catch (SecurityException e) { 248561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes fail("CheckAccess failed : " + e.getMessage()); 249561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 250561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes st.start(); 251561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes try { 252561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes st.join(); 253561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } catch (InterruptedException e) { 254561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 255561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes tg.destroy(); 256561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 257561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 258561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes /** 259561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * @tests java.lang.Thread#countStackFrames() 260561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes */ 261561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes @SuppressWarnings("deprecation") 262561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes public void test_countStackFrames() { 263561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes /* 264561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * Thread.countStackFrames() is unpredictable, so we just test that it 265561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * doesn't throw an exception. 266561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes */ 267561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes Thread.currentThread().countStackFrames(); 268561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 269561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 270561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes /** 271561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * @tests java.lang.Thread#currentThread() 272561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes */ 273561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes public void test_currentThread() { 274561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertNotNull(Thread.currentThread()); 275561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 276561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 277561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes /** 278561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * @tests java.lang.Thread#destroy() 279561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes */ 280561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes @SuppressWarnings("deprecation") 281561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes public void test_destroy() { 282561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes try { 283561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes new Thread().destroy(); 284561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // FIXME uncomment when IBM VME is updated 285561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes //fail("NoSuchMethodError was not thrown"); 286561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } catch (NoSuchMethodError e) { 287561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 288561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 289561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 290561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes /** 291561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * @tests java.lang.Thread#enumerate(java.lang.Thread[]) 292561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes */ 293561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes public void test_enumerate$Ljava_lang_Thread() { 294561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // Test for method int java.lang.Thread.enumerate(java.lang.Thread []) 295561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // The test has been updated according to HARMONY-1974 JIRA issue. 296561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 297561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes class MyThread extends Thread { 298561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes MyThread(ThreadGroup tg, String name) { 299561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes super(tg, name); 300561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 301fc95c99cfa4921fef424f3f411d013b821589e69Elliott Hughes 302561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes boolean failed = false; 303561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes String failMessage = null; 304561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 305561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes public void run() { 306561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes SimpleThread st1 = null; 307561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes SimpleThread st2 = null; 308561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes ThreadGroup mytg = null; 309561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes Thread firstOne = null; 310561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes Thread secondOne = null; 311561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes try { 312561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes int arrayLength = 10; 313561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes Thread[] tarray = new Thread[arrayLength]; 314561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes st1 = new SimpleThread(-1); 315561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes st2 = new SimpleThread(-1); 316561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes mytg = new ThreadGroup("jp"); 317561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes firstOne = new Thread(mytg, st1, "firstOne2"); 318561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes secondOne = new Thread(mytg, st2, "secondOne1"); 319561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes int count = Thread.enumerate(tarray); 320561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertEquals("Incorrect value returned1", 321561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 1, count); 322561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes synchronized (st1) { 323561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes firstOne.start(); 324561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes try { 325561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes st1.wait(); 326561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } catch (InterruptedException e) { 327561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 328561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 329561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes count = Thread.enumerate(tarray); 330561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertEquals("Incorrect value returned2", 331561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 2, count); 332561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes synchronized (st2) { 333561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes secondOne.start(); 334561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes try { 335561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes st2.wait(); 336561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } catch (InterruptedException e) { 337561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 338561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 339561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes count = Thread.enumerate(tarray); 340561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertEquals("Incorrect value returned3", 341561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 3, count); 342561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } catch (junit.framework.AssertionFailedError e) { 343561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes failed = true; 344561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes failMessage = e.getMessage(); 345561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } finally { 346561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes synchronized (st1) { 347561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes firstOne.interrupt(); 348561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 349561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes synchronized (st2) { 350561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes secondOne.interrupt(); 351561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 352561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes try { 353561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes firstOne.join(); 354561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes secondOne.join(); 355561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } catch (InterruptedException e) { 356561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 357561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes mytg.destroy(); 358561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 359561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 360561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes }; 361fc95c99cfa4921fef424f3f411d013b821589e69Elliott Hughes 362561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes ThreadGroup tg = new ThreadGroup("tg"); 363561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes MyThread t = new MyThread(tg, "top"); 364561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes t.start(); 365561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes try { 366561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes t.join(); 367561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } catch (InterruptedException e) { 368561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes fail("Unexpected interrupt"); 369561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } finally { 370561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes tg.destroy(); 371561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 372561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertFalse(t.failMessage, t.failed); 373561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 374561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 375561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes /** 376561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * @tests java.lang.Thread#getContextClassLoader() 377561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes */ 378561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes public void test_getContextClassLoader() { 379561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // Test for method java.lang.ClassLoader 380561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // java.lang.Thread.getContextClassLoader() 381561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes Thread t = new Thread(); 382561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertTrue("Incorrect class loader returned", 383561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes t.getContextClassLoader() == Thread.currentThread() 384561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes .getContextClassLoader()); 385561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes t.start(); 386561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 387561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 388561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 389561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes /** 390561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * @tests java.lang.Thread#getName() 391561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes */ 392561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes public void test_getName() { 393561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // Test for method java.lang.String java.lang.Thread.getName() 394561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes st = new Thread(new SimpleThread(1), "SimpleThread6"); 395fc95c99cfa4921fef424f3f411d013b821589e69Elliott Hughes assertEquals("Returned incorrect thread name", 396561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes "SimpleThread6", st.getName()); 397561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes st.start(); 398561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 399561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 400561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes /** 401561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * @tests java.lang.Thread#getPriority() 402561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes */ 403561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes public void test_getPriority() { 404561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // Test for method int java.lang.Thread.getPriority() 405561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes st = new Thread(new SimpleThread(1)); 406561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes st.setPriority(Thread.MAX_PRIORITY); 407561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertTrue("Returned incorrect thread priority", 408561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes st.getPriority() == Thread.MAX_PRIORITY); 409561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes st.start(); 410561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 411561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 412561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes /** 413561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * @tests java.lang.Thread#getThreadGroup() 414561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes */ 415561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes public void test_getThreadGroup() { 416561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // Test for method java.lang.ThreadGroup 417561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // java.lang.Thread.getThreadGroup() 418561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes ThreadGroup tg = new ThreadGroup("Test Group4"); 419561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes st = new Thread(tg, new SimpleThread(1), "SimpleThread8"); 420561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertTrue("Returned incorrect thread group", st.getThreadGroup() == tg); 421561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes st.start(); 422561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes try { 423561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes st.join(); 424561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } catch (InterruptedException e) { 425561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 426561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertNull("group should be null", st.getThreadGroup()); 427561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertNotNull("toString() should not be null", st.toString()); 428561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes tg.destroy(); 429561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 430561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes final Object lock = new Object(); 431561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes Thread t = new Thread() { 432561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes @Override 433561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes public void run() { 434561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes synchronized (lock) { 435561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes lock.notifyAll(); 436561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 437561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 438561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes }; 439561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes synchronized (lock) { 440561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes t.start(); 441561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes try { 442561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes lock.wait(); 443561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } catch (InterruptedException e) { 444561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 445561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 446561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes int running = 0; 447561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes while (t.isAlive()) 448561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes running++; 449561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes ThreadGroup group = t.getThreadGroup(); 450561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertNull("ThreadGroup is not null", group); 451561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 452561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 453561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes /** 454561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * @tests java.lang.Thread#interrupt() 455561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes */ 456561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes public void test_interrupt() { 457561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // Test for method void java.lang.Thread.interrupt() 458561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes final Object lock = new Object(); 459561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes class ChildThread1 extends Thread { 460561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes Thread parent; 461561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 462561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes boolean sync; 463561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 464561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes @Override 465561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes public void run() { 466561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes if (sync) { 467561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes synchronized (lock) { 468561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes lock.notify(); 469561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes try { 470561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes lock.wait(); 471561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } catch (InterruptedException e) { 472561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 473561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 474561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 475561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes parent.interrupt(); 476561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 477561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 478561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes public ChildThread1(Thread p, String name, boolean sync) { 479561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes super(name); 480561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes parent = p; 481561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes this.sync = sync; 482561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 483561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 484561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes boolean interrupted = false; 485561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes try { 486561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes ct = new ChildThread1(Thread.currentThread(), "Interrupt Test1", 487561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes false); 488561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes synchronized (lock) { 489561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes ct.start(); 490561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes lock.wait(); 491561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 492561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } catch (InterruptedException e) { 493561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes interrupted = true; 494561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 495561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertTrue("Failed to Interrupt thread1", interrupted); 496561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 497561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes interrupted = false; 498561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes try { 499561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes ct = new ChildThread1(Thread.currentThread(), "Interrupt Test2", 500561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes true); 501561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes synchronized (lock) { 502561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes ct.start(); 503561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes lock.wait(); 504561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes lock.notify(); 505561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 506561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes Thread.sleep(20000); 507561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } catch (InterruptedException e) { 508561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes interrupted = true; 509561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 510561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertTrue("Failed to Interrupt thread2", interrupted); 511561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 512561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 513561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 514561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes /** 515561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * @tests java.lang.Thread#interrupted() 516561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes */ 517561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes public void test_interrupted() { 518561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertFalse("Interrupted returned true for non-interrupted thread", Thread 519561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes .interrupted()); 520561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes Thread.currentThread().interrupt(); 521561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertTrue("Interrupted returned true for non-interrupted thread", Thread.interrupted()); 522561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertFalse("Failed to clear interrupted flag", Thread.interrupted()); 523561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 524561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 525561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes /** 526561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * @tests java.lang.Thread#isAlive() 527561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes */ 528561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes public void test_isAlive() { 529561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // Test for method boolean java.lang.Thread.isAlive() 530561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes SimpleThread simple; 531561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes st = new Thread(simple = new SimpleThread(500)); 532561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertFalse("A thread that wasn't started is alive.", st.isAlive()); 533561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes synchronized (simple) { 534561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes st.start(); 535561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes try { 536561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes simple.wait(); 537561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } catch (InterruptedException e) { 538561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 539561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 540561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertTrue("Started thread returned false", st.isAlive()); 541561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes try { 542561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes st.join(); 543561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } catch (InterruptedException e) { 544561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes fail("Thread did not die"); 545561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 546561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertTrue("Stopped thread returned true", !st.isAlive()); 547561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 548561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 549561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes /** 550561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * @tests java.lang.Thread#isDaemon() 551561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes */ 552561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes public void test_isDaemon() { 553561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // Test for method boolean java.lang.Thread.isDaemon() 554561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes st = new Thread(new SimpleThread(1), "SimpleThread10"); 555561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertTrue("Non-Daemon thread returned true", !st.isDaemon()); 556561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes st.setDaemon(true); 557561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertTrue("Daemon thread returned false", st.isDaemon()); 558561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes st.start(); 559561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 560561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 561561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes /** 562561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * @tests java.lang.Thread#isInterrupted() 563561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes */ 564561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes public void test_isInterrupted() { 565561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // Test for method boolean java.lang.Thread.isInterrupted() 566561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes class SpinThread implements Runnable { 567561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes public volatile boolean done = false; 568561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 569561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes public void run() { 570561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes while (!Thread.currentThread().isInterrupted()) 571561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes ; 572561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes while (!done) 573561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes ; 574561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 575561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 576561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 577561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes SpinThread spin = new SpinThread(); 578561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes spinner = new Thread(spin); 579561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes spinner.start(); 580561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes Thread.yield(); 581561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes try { 582561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertTrue("Non-Interrupted thread returned true", !spinner 583561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes .isInterrupted()); 584561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes spinner.interrupt(); 585561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertTrue("Interrupted thread returned false", spinner 586561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes .isInterrupted()); 587561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes spin.done = true; 588561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } finally { 589561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes spinner.interrupt(); 590561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes spin.done = true; 591561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 592561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 593561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 594561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes /** 595561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * @tests java.lang.Thread#join() 596561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes */ 597561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes public void test_join() { 598561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // Test for method void java.lang.Thread.join() 599561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes SimpleThread simple; 600561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes try { 601561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes st = new Thread(simple = new SimpleThread(100)); 602561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // cause isAlive() to be compiled by the JIT, as it must be called 603561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // within 100ms below. 604561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertTrue("Thread is alive", !st.isAlive()); 605561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes synchronized (simple) { 606561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes st.start(); 607561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes simple.wait(); 608561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 609561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes st.join(); 610561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } catch (InterruptedException e) { 611561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes fail("Join failed "); 612561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 613561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertTrue("Joined thread is still alive", !st.isAlive()); 614561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes boolean result = true; 615561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes Thread th = new Thread("test"); 616561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes try { 617561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes th.join(); 618561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } catch (InterruptedException e) { 619561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes result = false; 620561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 621561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertTrue("Hung joining a non-started thread", result); 622561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes th.start(); 623561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 624561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 625561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes /** 626561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * @tests java.lang.Thread#join(long) 627561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes */ 628561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes public void test_joinJ() { 629561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // Test for method void java.lang.Thread.join(long) 630561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes SimpleThread simple; 631561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes try { 632561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes st = new Thread(simple = new SimpleThread(1000), "SimpleThread12"); 633561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // cause isAlive() to be compiled by the JIT, as it must be called 634561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // within 100ms below. 635561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertTrue("Thread is alive", !st.isAlive()); 636561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes synchronized (simple) { 637561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes st.start(); 638561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes simple.wait(); 639561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 640561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes st.join(10); 641561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } catch (InterruptedException e) { 642561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes fail("Join failed "); 643561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 644561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertTrue("Join failed to timeout", st.isAlive()); 645561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 646561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes st.interrupt(); 647561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes try { 648561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes st = new Thread(simple = new SimpleThread(100), "SimpleThread13"); 649561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes synchronized (simple) { 650561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes st.start(); 651561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes simple.wait(); 652561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 653561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes st.join(1000); 654561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } catch (InterruptedException e) { 655561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes fail("Join failed : " + e.getMessage()); 656561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes return; 657561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 658561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertTrue("Joined thread is still alive", !st.isAlive()); 659561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 660561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes final Object lock = new Object(); 661561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes final Thread main = Thread.currentThread(); 662561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes Thread killer = new Thread(new Runnable() { 663561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes public void run() { 664561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes try { 665561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes synchronized (lock) { 666561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes lock.notify(); 667561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 668561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes Thread.sleep(100); 669561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } catch (InterruptedException e) { 670561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes return; 671561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 672561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes main.interrupt(); 673561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 674561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes }); 675561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes boolean result = true; 676561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes Thread th = new Thread("test"); 677561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes try { 678561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes synchronized (lock) { 679561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes killer.start(); 680561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes lock.wait(); 681561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 682561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes th.join(200); 683561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } catch (InterruptedException e) { 684561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes result = false; 685561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 686561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes killer.interrupt(); 687561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertTrue("Hung joining a non-started thread", result); 688561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes th.start(); 689561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 690561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 691561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes /** 692561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * @tests java.lang.Thread#join(long, int) 693561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes */ 694561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes public void test_joinJI() throws Exception { 695561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // Test for method void java.lang.Thread.join(long, int) 696561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes SimpleThread simple; 697561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes st = new Thread(simple = new SimpleThread(1000), "Squawk1"); 698561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertTrue("Thread is alive", !st.isAlive()); 699561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes synchronized (simple) { 700561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes st.start(); 701561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes simple.wait(); 702561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 703fc95c99cfa4921fef424f3f411d013b821589e69Elliott Hughes 704561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes long firstRead = System.currentTimeMillis(); 705561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes st.join(100, 999999); 706561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes long secondRead = System.currentTimeMillis(); 707561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertTrue("Did not join by appropriate time: " + secondRead + "-" 708561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes + firstRead + "=" + (secondRead - firstRead), secondRead 709561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes - firstRead <= 300); 710561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertTrue("Joined thread is not alive", st.isAlive()); 711fc95c99cfa4921fef424f3f411d013b821589e69Elliott Hughes st.interrupt(); 712561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 713561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes final Object lock = new Object(); 714561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes final Thread main = Thread.currentThread(); 715561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes Thread killer = new Thread(new Runnable() { 716561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes public void run() { 717561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes try { 718561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes synchronized (lock) { 719561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes lock.notify(); 720561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 721561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes Thread.sleep(100); 722561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } catch (InterruptedException e) { 723561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes return; 724561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 725561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes main.interrupt(); 726561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 727561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes }); 728561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes boolean result = true; 729561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes Thread th = new Thread("test"); 730561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes try { 731561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes synchronized (lock) { 732561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes killer.start(); 733561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes lock.wait(); 734561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 735561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes th.join(200, 20); 736561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } catch (InterruptedException e) { 737561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes result = false; 738561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 739561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes killer.interrupt(); 740561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertTrue("Hung joining a non-started thread", result); 741561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes th.start(); 742561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 743561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 744561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes /** 745561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * @tests java.lang.Thread#run() 746561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes */ 747561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes public void test_run() { 748561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // Test for method void java.lang.Thread.run() 749561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes class RunThread implements Runnable { 750561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes boolean didThreadRun = false; 751561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 752561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes public void run() { 753561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes didThreadRun = true; 754561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 755561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 756561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes RunThread rt = new RunThread(); 757561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes Thread t = new Thread(rt); 758561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes try { 759561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes t.start(); 760561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes int count = 0; 761561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes while (!rt.didThreadRun && count < 20) { 762561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes Thread.sleep(100); 763561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes count++; 764561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 765561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertTrue("Thread did not run", rt.didThreadRun); 766561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes t.join(); 767561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } catch (InterruptedException e) { 768561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertTrue("Joined thread was interrupted", true); 769561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 770561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertTrue("Joined thread is still alive", !t.isAlive()); 771561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 772561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 773561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes /** 774561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * @tests java.lang.Thread#setDaemon(boolean) 775561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes */ 776561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes public void test_setDaemonZ() { 777561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // Test for method void java.lang.Thread.setDaemon(boolean) 778561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes st = new Thread(new SimpleThread(1), "SimpleThread14"); 779561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes st.setDaemon(true); 780561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertTrue("Failed to set thread as daemon thread", st.isDaemon()); 781561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes st.start(); 782561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 783561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 784561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes /** 785561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * @tests java.lang.Thread#setName(java.lang.String) 786561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes */ 787561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes public void test_setNameLjava_lang_String() { 788561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // Test for method void java.lang.Thread.setName(java.lang.String) 789561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes st = new Thread(new SimpleThread(1), "SimpleThread15"); 790561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes st.setName("Bogus Name"); 791fc95c99cfa4921fef424f3f411d013b821589e69Elliott Hughes assertEquals("Failed to set thread name", 792561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes "Bogus Name", st.getName()); 793561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes try { 794561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes st.setName(null); 795561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes fail("Null should not be accepted as a valid name"); 796561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } catch (NullPointerException e) { 797561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // success 798561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertTrue("Null should not be accepted as a valid name", true); 799561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 800561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes st.start(); 801561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 802561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 803561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes /** 804561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * @tests java.lang.Thread#setPriority(int) 805561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes */ 806561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes public void test_setPriorityI() { 807561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // Test for method void java.lang.Thread.setPriority(int) 808561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes st = new Thread(new SimpleThread(1)); 809561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes st.setPriority(Thread.MAX_PRIORITY); 810561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertTrue("Failed to set priority", 811561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes st.getPriority() == Thread.MAX_PRIORITY); 812561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes st.start(); 813561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 814561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 815561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes /** 816561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * @tests java.lang.Thread#sleep(long) 817561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes */ 818561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes public void test_sleepJ() { 819561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // Test for method void java.lang.Thread.sleep(long) 820561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 821561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // TODO : Test needs enhancing. 822561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes long stime = 0, ftime = 0; 823561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes try { 824561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes stime = System.currentTimeMillis(); 825561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes Thread.sleep(1000); 826561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes ftime = System.currentTimeMillis(); 827561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } catch (InterruptedException e) { 828561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes fail("Unexpected interrupt received"); 829561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 830561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertTrue("Failed to sleep long enough", (ftime - stime) >= 800); 831561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 832561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 833561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes /** 834561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * @tests java.lang.Thread#sleep(long, int) 835561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes */ 836561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes public void test_sleepJI() { 837561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // Test for method void java.lang.Thread.sleep(long, int) 838561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 839561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // TODO : Test needs revisiting. 840561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes long stime = 0, ftime = 0; 841561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes try { 842561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes stime = System.currentTimeMillis(); 843561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes Thread.sleep(1000, 999999); 844561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes ftime = System.currentTimeMillis(); 845561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } catch (InterruptedException e) { 846561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes fail("Unexpected interrupt received"); 847561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 848561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes long result = ftime - stime; 849561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertTrue("Failed to sleep long enough: " + result, result >= 900 850561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes && result <= 1100); 851561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 852561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 853561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes /** 854561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * @tests java.lang.Thread#start() 855561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes */ 856561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes public void test_start() { 857561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // Test for method void java.lang.Thread.start() 858561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes try { 859561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes ResSupThread t = new ResSupThread(Thread.currentThread()); 860561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes synchronized (t) { 861561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes ct = new Thread(t, "Interrupt Test4"); 862561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes ct.start(); 863561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes t.wait(); 864561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 865561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertTrue("Thread is not running1", ct.isAlive()); 866561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // Let the child thread get going. 867561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes int orgval = t.getCheckVal(); 868561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes Thread.sleep(150); 869561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertTrue("Thread is not running2", orgval != t.getCheckVal()); 870561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes ct.interrupt(); 871561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } catch (InterruptedException e) { 872561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes fail("Unexpected interrupt occurred"); 873561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 874561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 875561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 876561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes /** 877561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * @tests java.lang.Thread#toString() 878561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes */ 879561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes public void test_toString() { 880561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // Test for method java.lang.String java.lang.Thread.toString() 881561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes ThreadGroup tg = new ThreadGroup("Test Group5"); 882561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes st = new Thread(tg, new SimpleThread(1), "SimpleThread17"); 883561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes final String stString = st.toString(); 884561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes final String expected = "Thread[SimpleThread17,5,Test Group5]"; 885561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertTrue("Returned incorrect string: " + stString + "\t(expecting :" 886561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes + expected + ")", stString.equals(expected)); 887561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes st.start(); 888561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes try { 889561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes st.join(); 890561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } catch (InterruptedException e) { 891561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 892561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes tg.destroy(); 893561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 894fc95c99cfa4921fef424f3f411d013b821589e69Elliott Hughes 895561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes /** 896561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * @tests java.lang.Thread#getAllStackTraces() 897561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes */ 898561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes public void test_getAllStackTraces() { 899561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes Map<Thread, StackTraceElement[]> stMap = Thread.getAllStackTraces(); 900561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertNotNull(stMap); 901561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes //TODO add security-based tests 902561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 903fc95c99cfa4921fef424f3f411d013b821589e69Elliott Hughes 904561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes /** 905561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * @tests java.lang.Thread#getDefaultUncaughtExceptionHandler 906561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * @tests java.lang.Thread#setDefaultUncaughtExceptionHandler 907561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes */ 908561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes public void test_get_setDefaultUncaughtExceptionHandler() { 909561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes class Handler implements UncaughtExceptionHandler { 910561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes public void uncaughtException(Thread thread, Throwable ex) { 911561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 912561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 913fc95c99cfa4921fef424f3f411d013b821589e69Elliott Hughes 914561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes final Handler handler = new Handler(); 915561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes Thread.setDefaultUncaughtExceptionHandler(handler); 916561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertSame(handler, Thread.getDefaultUncaughtExceptionHandler()); 917fc95c99cfa4921fef424f3f411d013b821589e69Elliott Hughes 918561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes Thread.setDefaultUncaughtExceptionHandler(null); 919561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertNull(Thread.getDefaultUncaughtExceptionHandler()); 920561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes //TODO add security-based tests 921561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 922fc95c99cfa4921fef424f3f411d013b821589e69Elliott Hughes 923561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes /** 924561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * @tests java.lang.Thread#getStackTrace() 925561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes */ 926561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes public void test_getStackTrace() { 927561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes StackTraceElement[] stackTrace = Thread.currentThread().getStackTrace(); 928fc95c99cfa4921fef424f3f411d013b821589e69Elliott Hughes 929561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertNotNull(stackTrace); 930561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 931561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes stack_trace_loop: { 932561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes for (int i = 0; i < stackTrace.length; i++) { 933561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes StackTraceElement e = stackTrace[i]; 934561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes if (getClass().getName().equals(e.getClassName())) { 935561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes if ("test_getStackTrace".equals(e.getMethodName())) { 936561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes break stack_trace_loop; 937561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 938561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 939561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 940561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes fail("class and method not found in stack trace"); 941561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 942fc95c99cfa4921fef424f3f411d013b821589e69Elliott Hughes 943561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes //TODO add security-based tests 944561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 945fc95c99cfa4921fef424f3f411d013b821589e69Elliott Hughes 946561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes /** 947561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * @tests java.lang.Thread#getState() 948561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes */ 949561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes public void test_getState() { 950561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes Thread.State state = Thread.currentThread().getState(); 951561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertNotNull(state); 952561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertEquals(Thread.State.RUNNABLE, state); 953561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes //TODO add additional state tests 954561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 955fc95c99cfa4921fef424f3f411d013b821589e69Elliott Hughes 956561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes /** 957561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * @tests java.lang.Thread#getUncaughtExceptionHandler 958561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * @tests java.lang.Thread#setUncaughtExceptionHandler 959561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes */ 960561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes public void test_get_setUncaughtExceptionHandler() { 961561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes class Handler implements UncaughtExceptionHandler { 962561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes public void uncaughtException(Thread thread, Throwable ex) { 963561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 964561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 965fc95c99cfa4921fef424f3f411d013b821589e69Elliott Hughes 966561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes final Handler handler = new Handler(); 967561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes Thread.currentThread().setUncaughtExceptionHandler(handler); 968561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertSame(handler, Thread.currentThread().getUncaughtExceptionHandler()); 969fc95c99cfa4921fef424f3f411d013b821589e69Elliott Hughes 970561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes Thread.currentThread().setUncaughtExceptionHandler(null); 971561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 972561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes //TODO add security-based tests 973561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 974fc95c99cfa4921fef424f3f411d013b821589e69Elliott Hughes 975561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes /** 976561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * @tests java.lang.Thread#getId() 977561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes */ 978561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes public void test_getId() { 979561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertTrue("current thread's ID is not positive", Thread.currentThread().getId() > 0); 980fc95c99cfa4921fef424f3f411d013b821589e69Elliott Hughes 981561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes //check all the current threads for positive IDs 982561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes Map<Thread, StackTraceElement[]> stMap = Thread.getAllStackTraces(); 983561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes for (Thread thread : stMap.keySet()) { 984561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertTrue("thread's ID is not positive: " + thread.getName(), thread.getId() > 0); 985561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 986561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 987561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 988561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 989561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes @Override 990561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes protected void tearDown() { 991561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes try { 992561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes if (st != null) 993561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes st.interrupt(); 994561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } catch (Exception e) { 995561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 996561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes try { 997561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes if (spinner != null) 998561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes spinner.interrupt(); 999561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } catch (Exception e) { 1000561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 1001561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes try { 1002561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes if (ct != null) 1003561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes ct.interrupt(); 1004561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } catch (Exception e) { 1005561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 1006561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 1007561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes try { 1008561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes spinner = null; 1009561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes st = null; 1010561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes ct = null; 1011561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes System.runFinalization(); 1012561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } catch (Exception e) { 1013561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 1014561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 1015561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes} 1016