1cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath/* 2cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath * Licensed to the Apache Software Foundation (ASF) under one or more 3cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath * contributor license agreements. See the NOTICE file distributed with 4cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath * this work for additional information regarding copyright ownership. 5cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath * The ASF licenses this file to You under the Apache License, Version 2.0 6cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath * (the "License"); you may not use this file except in compliance with 7cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath * the License. You may obtain a copy of the License at 8cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath * 9cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath * http://www.apache.org/licenses/LICENSE-2.0 10cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath * 11cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath * Unless required by applicable law or agreed to in writing, software 12cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath * distributed under the License is distributed on an "AS IS" BASIS, 13cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath * See the License for the specific language governing permissions and 15cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath * limitations under the License. 16cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath */ 17cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath 18ab762bb740405d0fefcccf4a0899a234f995be13Narayan Kamathpackage org.apache.harmony.tests.java.lang; 19cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath 20cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamathimport java.lang.Thread.UncaughtExceptionHandler; 21cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamathimport java.util.Map; 22cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath 23cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamathpublic class ThreadTest extends junit.framework.TestCase { 24cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath 25cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath static class SimpleThread implements Runnable { 26cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath int delay; 27cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath 28cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath public void run() { 29cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath try { 30cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath synchronized (this) { 31cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath this.notify(); 32cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath this.wait(delay); 33cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath } 34cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath } catch (InterruptedException e) { 35cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath return; 36cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath } 37cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath 38cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath } 39cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath 40cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath public SimpleThread(int d) { 41cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath if (d >= 0) 42cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath delay = d; 43cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath } 44cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath } 45cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath 46cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath static class YieldThread implements Runnable { 47cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath volatile int delay; 48cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath 49cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath public void run() { 50cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath int x = 0; 51cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath while (true) { 52cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath ++x; 53cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath } 54cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath } 55cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath 56cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath public YieldThread(int d) { 57cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath if (d >= 0) 58cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath delay = d; 59cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath } 60cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath } 61cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath 62cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath static class ResSupThread implements Runnable { 63cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath Thread parent; 64cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath 65cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath volatile int checkVal = -1; 66cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath 67cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath public void run() { 68cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath try { 69cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath synchronized (this) { 70cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath this.notify(); 71cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath } 72cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath while (true) { 73cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath checkVal++; 74cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath zz(); 75cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath Thread.sleep(100); 76cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath } 77cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath } catch (InterruptedException e) { 78cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath return; 79cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath } catch (BogusException e) { 80cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath try { 81cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath // Give parent a chance to sleep 82cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath Thread.sleep(500); 83cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath } catch (InterruptedException x) { 84cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath } 85cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath parent.interrupt(); 86cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath while (!Thread.currentThread().isInterrupted()) { 87cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath // Don't hog the CPU 88cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath try { 89cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath Thread.sleep(50); 90cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath } catch (InterruptedException x) { 91cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath // This is what we've been waiting for...don't throw it 92cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath // away! 93cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath break; 94cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath } 95cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath } 96cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath } 97cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath } 98cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath 99cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath public void zz() throws BogusException { 100cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath } 101cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath 102cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath public ResSupThread(Thread t) { 103cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath parent = t; 104cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath } 105cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath 106cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath public synchronized int getCheckVal() { 107cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath return checkVal; 108cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath } 109cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath } 110cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath 111cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath static class BogusException extends Throwable { 112cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath 113cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath private static final long serialVersionUID = 1L; 114cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath 115cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath public BogusException(String s) { 116cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath super(s); 117cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath } 118cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath } 119cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath 120cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath Thread st, ct, spinner; 121cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath 122cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath /** 123cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath * java.lang.Thread#Thread(java.lang.Runnable) 124cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath */ 125cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath public void test_ConstructorLjava_lang_Runnable() { 126cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath // Test for method java.lang.Thread(java.lang.Runnable) 127cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath ct = new Thread(new SimpleThread(10)); 128cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath ct.start(); 129cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath } 130cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath 131cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath /** 132cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath * java.lang.Thread#Thread(java.lang.Runnable, java.lang.String) 133cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath */ 134cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath public void test_ConstructorLjava_lang_RunnableLjava_lang_String() { 135cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath // Test for method java.lang.Thread(java.lang.Runnable, 136cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath // java.lang.String) 137cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath Thread st1 = new Thread(new SimpleThread(1), "SimpleThread1"); 138cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath assertEquals("Constructed thread with incorrect thread name", "SimpleThread1", st1 139cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath .getName()); 140cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath st1.start(); 141cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath } 142cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath 143cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath /** 144cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath * java.lang.Thread#Thread(java.lang.String) 145cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath */ 146cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath public void test_ConstructorLjava_lang_String() { 147cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath // Test for method java.lang.Thread(java.lang.String) 148cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath Thread t = new Thread("Testing"); 149cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath assertEquals("Created tread with incorrect name", 150cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath "Testing", t.getName()); 151cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath t.start(); 152cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath } 153cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath 154cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath /** 155cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath * java.lang.Thread#Thread(java.lang.ThreadGroup, java.lang.Runnable) 156cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath */ 157cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath public void test_ConstructorLjava_lang_ThreadGroupLjava_lang_Runnable() { 158cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath // Test for method java.lang.Thread(java.lang.ThreadGroup, 159cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath // java.lang.Runnable) 160cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath ThreadGroup tg = new ThreadGroup("Test Group1"); 161cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath st = new Thread(tg, new SimpleThread(1), "SimpleThread2"); 162cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath assertTrue("Returned incorrect thread group", st.getThreadGroup() == tg); 163cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath st.start(); 164cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath try { 165cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath st.join(); 166cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath } catch (InterruptedException e) { 167cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath } 168cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath tg.destroy(); 169cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath } 170cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath 171cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath /** 172cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath * java.lang.Thread#Thread(java.lang.ThreadGroup, java.lang.Runnable, 173cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath *java.lang.String) 174cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath */ 175cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath public void test_ConstructorLjava_lang_ThreadGroupLjava_lang_RunnableLjava_lang_String() { 176cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath // Test for method java.lang.Thread(java.lang.ThreadGroup, 177cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath // java.lang.Runnable, java.lang.String) 178cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath ThreadGroup tg = new ThreadGroup("Test Group2"); 179cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath st = new Thread(tg, new SimpleThread(1), "SimpleThread3"); 180cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath assertTrue("Constructed incorrect thread", (st.getThreadGroup() == tg) 181cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath && st.getName().equals("SimpleThread3")); 182cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath st.start(); 183cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath try { 184cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath st.join(); 185cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath } catch (InterruptedException e) { 186cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath } 187cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath tg.destroy(); 188cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath 189cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath Runnable r = new Runnable() { 190cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath public void run() { 191cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath } 192cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath }; 193cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath 194cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath ThreadGroup foo = null; 195cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath try { 196cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath new Thread(foo = new ThreadGroup("foo"), r, null); 197cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath // Should not get here 198cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath fail("Null cannot be accepted as Thread name"); 199cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath } catch (NullPointerException npe) { 200cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath assertTrue("Null cannot be accepted as Thread name", true); 201cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath foo.destroy(); 202cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath } 203cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath 204cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath } 205cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath 206cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath /** 207cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath * java.lang.Thread#Thread(java.lang.ThreadGroup, java.lang.String) 208cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath */ 209cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath public void test_ConstructorLjava_lang_ThreadGroupLjava_lang_String() { 210cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath // Test for method java.lang.Thread(java.lang.ThreadGroup, 211cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath // java.lang.String) 212cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath st = new Thread(new SimpleThread(1), "SimpleThread4"); 213cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath assertEquals("Returned incorrect thread name", 214cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath "SimpleThread4", st.getName()); 215cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath st.start(); 216cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath } 217cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath 218cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath /** 219cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath * java.lang.Thread#activeCount() 220cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath */ 221cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath public void test_activeCount() { 222cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath // Test for method int java.lang.Thread.activeCount() 223cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath Thread t = new Thread(new SimpleThread(10)); 224cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath int active = 0; 225cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath synchronized (t) { 226cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath t.start(); 227cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath active = Thread.activeCount(); 228cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath } 229cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath assertTrue("Incorrect activeCount for current group: " + active, active > 1); 230cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath try { 231cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath t.join(); 232cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath } catch (InterruptedException e) { 233cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath } 234cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath } 235cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath 236cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath /** 237cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath * java.lang.Thread#checkAccess() 238cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath */ 239cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath public void test_checkAccess() { 240cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath // Test for method void java.lang.Thread.checkAccess() 241cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath ThreadGroup tg = new ThreadGroup("Test Group3"); 242cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath try { 243cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath st = new Thread(tg, new SimpleThread(1), "SimpleThread5"); 244cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath st.checkAccess(); 245cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath assertTrue("CheckAccess passed", true); 246cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath } catch (SecurityException e) { 247cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath fail("CheckAccess failed : " + e.getMessage()); 248cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath } 249cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath st.start(); 250cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath try { 251cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath st.join(); 252cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath } catch (InterruptedException e) { 253cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath } 254cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath tg.destroy(); 255cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath } 256cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath 257cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath /** 258cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath * java.lang.Thread#countStackFrames() 259cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath */ 260cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath @SuppressWarnings("deprecation") 261cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath public void test_countStackFrames() { 262cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath /* 263cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath * Thread.countStackFrames() is unpredictable, so we just test that it 264cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath * doesn't throw an exception. 265cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath */ 266cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath Thread.currentThread().countStackFrames(); 267cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath } 268cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath 269cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath /** 270cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath * java.lang.Thread#currentThread() 271cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath */ 272cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath public void test_currentThread() { 273cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath assertNotNull(Thread.currentThread()); 274cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath } 275cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath 276665c45e473c041dc2b1e8d85fbaf7008daa69c06Narayan Kamath public void test_destroy_throwsUnsupportedOperationException() { 277cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath try { 278cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath new Thread().destroy(); 279665c45e473c041dc2b1e8d85fbaf7008daa69c06Narayan Kamath fail(); 280665c45e473c041dc2b1e8d85fbaf7008daa69c06Narayan Kamath } catch (UnsupportedOperationException expected) { 281cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath } 282cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath } 283cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath 284cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath /** 285cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath * java.lang.Thread#enumerate(java.lang.Thread[]) 286cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath */ 287cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath public void test_enumerate$Ljava_lang_Thread() { 288cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath // Test for method int java.lang.Thread.enumerate(java.lang.Thread []) 289cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath // The test has been updated according to HARMONY-1974 JIRA issue. 290cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath 291cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath class MyThread extends Thread { 292cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath MyThread(ThreadGroup tg, String name) { 293cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath super(tg, name); 294cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath } 295cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath 296cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath boolean failed = false; 297cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath String failMessage = null; 298cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath 299cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath public void run() { 300cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath SimpleThread st1 = null; 301cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath SimpleThread st2 = null; 302cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath ThreadGroup mytg = null; 303cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath Thread firstOne = null; 304cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath Thread secondOne = null; 305cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath try { 306cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath int arrayLength = 10; 307cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath Thread[] tarray = new Thread[arrayLength]; 308cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath st1 = new SimpleThread(-1); 309cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath st2 = new SimpleThread(-1); 310cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath mytg = new ThreadGroup("jp"); 311cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath firstOne = new Thread(mytg, st1, "firstOne2"); 312cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath secondOne = new Thread(mytg, st2, "secondOne1"); 313cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath int count = Thread.enumerate(tarray); 314cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath assertEquals("Incorrect value returned1", 315cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath 1, count); 316cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath synchronized (st1) { 317cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath firstOne.start(); 318cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath try { 319cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath st1.wait(); 320cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath } catch (InterruptedException e) { 321cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath } 322cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath } 323cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath count = Thread.enumerate(tarray); 324cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath assertEquals("Incorrect value returned2", 325cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath 2, count); 326cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath synchronized (st2) { 327cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath secondOne.start(); 328cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath try { 329cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath st2.wait(); 330cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath } catch (InterruptedException e) { 331cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath } 332cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath } 333cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath count = Thread.enumerate(tarray); 334cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath assertEquals("Incorrect value returned3", 335cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath 3, count); 336cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath } catch (junit.framework.AssertionFailedError e) { 337cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath failed = true; 338cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath failMessage = e.getMessage(); 339cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath } finally { 340cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath synchronized (st1) { 341cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath firstOne.interrupt(); 342cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath } 343cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath synchronized (st2) { 344cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath secondOne.interrupt(); 345cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath } 346cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath try { 347cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath firstOne.join(); 348cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath secondOne.join(); 349cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath } catch (InterruptedException e) { 350cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath } 351cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath mytg.destroy(); 352cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath } 353cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath } 354cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath } 355cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath ; 356cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath 357cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath ThreadGroup tg = new ThreadGroup("tg"); 358cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath MyThread t = new MyThread(tg, "top"); 359cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath t.start(); 360cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath try { 361cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath t.join(); 362cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath } catch (InterruptedException e) { 363cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath fail("Unexpected interrupt"); 364cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath } finally { 365cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath tg.destroy(); 366cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath } 367cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath assertFalse(t.failMessage, t.failed); 368cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath } 369cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath 370cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath /** 371cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath * java.lang.Thread#getContextClassLoader() 372cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath */ 373cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath public void test_getContextClassLoader() { 374cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath // Test for method java.lang.ClassLoader 375cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath // java.lang.Thread.getContextClassLoader() 376cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath Thread t = new Thread(); 377cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath assertTrue("Incorrect class loader returned", 378cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath t.getContextClassLoader() == Thread.currentThread() 379cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath .getContextClassLoader()); 380cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath t.start(); 381cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath 382cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath } 383cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath 384cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath /** 385cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath * java.lang.Thread#getName() 386cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath */ 387cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath public void test_getName() { 388cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath // Test for method java.lang.String java.lang.Thread.getName() 389cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath st = new Thread(new SimpleThread(1), "SimpleThread6"); 390cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath assertEquals("Returned incorrect thread name", 391cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath "SimpleThread6", st.getName()); 392cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath st.start(); 393cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath } 394cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath 395cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath /** 396cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath * java.lang.Thread#getPriority() 397cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath */ 398cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath public void test_getPriority() { 399cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath // Test for method int java.lang.Thread.getPriority() 400cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath st = new Thread(new SimpleThread(1)); 401cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath st.setPriority(Thread.MAX_PRIORITY); 402cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath assertTrue("Returned incorrect thread priority", 403cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath st.getPriority() == Thread.MAX_PRIORITY); 404cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath st.start(); 405cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath } 406cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath 407cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath /** 408cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath * java.lang.Thread#getThreadGroup() 409cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath */ 410cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath public void test_getThreadGroup() { 411cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath // Test for method java.lang.ThreadGroup 412cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath // java.lang.Thread.getThreadGroup() 413cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath ThreadGroup tg = new ThreadGroup("Test Group4"); 414cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath st = new Thread(tg, new SimpleThread(1), "SimpleThread8"); 415cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath assertTrue("Returned incorrect thread group", st.getThreadGroup() == tg); 416cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath st.start(); 417cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath try { 418cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath st.join(); 419cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath } catch (InterruptedException e) { 420cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath } 421cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath assertNull("group should be null", st.getThreadGroup()); 422cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath assertNotNull("toString() should not be null", st.toString()); 423cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath tg.destroy(); 424cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath 425cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath final Object lock = new Object(); 426cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath Thread t = new Thread() { 427cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath @Override 428cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath public void run() { 429cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath synchronized (lock) { 430cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath lock.notifyAll(); 431cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath } 432cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath } 433cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath }; 434cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath synchronized (lock) { 435cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath t.start(); 436cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath try { 437cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath lock.wait(); 438cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath } catch (InterruptedException e) { 439cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath } 440cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath } 441cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath int running = 0; 442cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath while (t.isAlive()) 443cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath running++; 444cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath ThreadGroup group = t.getThreadGroup(); 445cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath assertNull("ThreadGroup is not null", group); 446cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath } 447cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath 448cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath /** 449cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath * java.lang.Thread#interrupt() 450cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath */ 451cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath public void test_interrupt() { 452cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath // Test for method void java.lang.Thread.interrupt() 453cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath final Object lock = new Object(); 454cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath class ChildThread1 extends Thread { 455cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath Thread parent; 456cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath 457cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath boolean sync; 458cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath 459cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath @Override 460cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath public void run() { 461cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath if (sync) { 462cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath synchronized (lock) { 463cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath lock.notify(); 464cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath try { 465cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath lock.wait(); 466cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath } catch (InterruptedException e) { 467cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath } 468cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath } 469cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath } 470cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath parent.interrupt(); 471cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath } 472cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath 473cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath public ChildThread1(Thread p, String name, boolean sync) { 474cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath super(name); 475cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath parent = p; 476cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath this.sync = sync; 477cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath } 478cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath } 479cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath boolean interrupted = false; 480cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath try { 481cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath ct = new ChildThread1(Thread.currentThread(), "Interrupt Test1", 482cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath false); 483cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath synchronized (lock) { 484cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath ct.start(); 485cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath lock.wait(); 486cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath } 487cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath } catch (InterruptedException e) { 488cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath interrupted = true; 489cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath } 490cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath assertTrue("Failed to Interrupt thread1", interrupted); 491cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath 492cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath interrupted = false; 493cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath try { 494cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath ct = new ChildThread1(Thread.currentThread(), "Interrupt Test2", 495cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath true); 496cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath synchronized (lock) { 497cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath ct.start(); 498cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath lock.wait(); 499cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath lock.notify(); 500cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath } 501cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath Thread.sleep(20000); 502cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath } catch (InterruptedException e) { 503cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath interrupted = true; 504cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath } 505cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath assertTrue("Failed to Interrupt thread2", interrupted); 506cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath 507cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath } 508cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath 509cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath /** 510cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath * java.lang.Thread#interrupted() 511cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath */ 512cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath public void test_interrupted() { 513cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath assertFalse("Interrupted returned true for non-interrupted thread", Thread 514cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath .interrupted()); 515cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath Thread.currentThread().interrupt(); 516cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath assertTrue("Interrupted returned true for non-interrupted thread", Thread.interrupted()); 517cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath assertFalse("Failed to clear interrupted flag", Thread.interrupted()); 518cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath } 519cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath 520cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath /** 521cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath * java.lang.Thread#isAlive() 522cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath */ 523cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath public void test_isAlive() { 524cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath // Test for method boolean java.lang.Thread.isAlive() 525cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath SimpleThread simple; 526cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath st = new Thread(simple = new SimpleThread(500)); 527cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath assertFalse("A thread that wasn't started is alive.", st.isAlive()); 528cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath synchronized (simple) { 529cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath st.start(); 530cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath try { 531cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath simple.wait(); 532cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath } catch (InterruptedException e) { 533cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath } 534cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath } 535cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath assertTrue("Started thread returned false", st.isAlive()); 536cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath try { 537cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath st.join(); 538cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath } catch (InterruptedException e) { 539cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath fail("Thread did not die"); 540cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath } 541cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath assertTrue("Stopped thread returned true", !st.isAlive()); 542cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath } 543cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath 544cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath /** 545cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath * java.lang.Thread#isDaemon() 546cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath */ 547cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath public void test_isDaemon() { 548cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath // Test for method boolean java.lang.Thread.isDaemon() 549cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath st = new Thread(new SimpleThread(1), "SimpleThread10"); 550cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath assertTrue("Non-Daemon thread returned true", !st.isDaemon()); 551cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath st.setDaemon(true); 552cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath assertTrue("Daemon thread returned false", st.isDaemon()); 553cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath st.start(); 554cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath } 555cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath 556cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath /** 557cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath * java.lang.Thread#isInterrupted() 558cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath */ 559cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath public void test_isInterrupted() { 560cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath // Test for method boolean java.lang.Thread.isInterrupted() 561cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath class SpinThread implements Runnable { 562cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath public volatile boolean done = false; 563cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath 564cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath public void run() { 565cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath while (!Thread.currentThread().isInterrupted()) 566cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath ; 567cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath while (!done) 568cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath ; 569cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath } 570cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath } 571cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath 572cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath SpinThread spin = new SpinThread(); 573cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath spinner = new Thread(spin); 574cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath spinner.start(); 575cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath Thread.yield(); 576cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath try { 577cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath assertTrue("Non-Interrupted thread returned true", !spinner 578cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath .isInterrupted()); 579cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath spinner.interrupt(); 580cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath assertTrue("Interrupted thread returned false", spinner 581cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath .isInterrupted()); 582cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath spin.done = true; 583cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath } finally { 584cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath spinner.interrupt(); 585cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath spin.done = true; 586cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath } 587cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath } 588cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath 589cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath /** 590cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath * java.lang.Thread#join() 591cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath */ 592cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath public void test_join() { 593cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath // Test for method void java.lang.Thread.join() 594cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath SimpleThread simple; 595cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath try { 596cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath st = new Thread(simple = new SimpleThread(100)); 597cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath // cause isAlive() to be compiled by the JIT, as it must be called 598cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath // within 100ms below. 599cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath assertTrue("Thread is alive", !st.isAlive()); 600cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath synchronized (simple) { 601cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath st.start(); 602cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath simple.wait(); 603cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath } 604cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath st.join(); 605cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath } catch (InterruptedException e) { 606cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath fail("Join failed "); 607cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath } 608cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath assertTrue("Joined thread is still alive", !st.isAlive()); 609cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath boolean result = true; 610cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath Thread th = new Thread("test"); 611cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath try { 612cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath th.join(); 613cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath } catch (InterruptedException e) { 614cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath result = false; 615cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath } 616cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath assertTrue("Hung joining a non-started thread", result); 617cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath th.start(); 618cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath } 619cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath 620cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath /** 621cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath * java.lang.Thread#join(long) 622cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath */ 623cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath public void test_joinJ() { 624cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath // Test for method void java.lang.Thread.join(long) 625cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath SimpleThread simple; 626cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath try { 627cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath st = new Thread(simple = new SimpleThread(1000), "SimpleThread12"); 628cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath // cause isAlive() to be compiled by the JIT, as it must be called 629cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath // within 100ms below. 630cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath assertTrue("Thread is alive", !st.isAlive()); 631cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath synchronized (simple) { 632cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath st.start(); 633cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath simple.wait(); 634cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath } 635cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath st.join(10); 636cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath } catch (InterruptedException e) { 637cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath fail("Join failed "); 638cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath } 639cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath assertTrue("Join failed to timeout", st.isAlive()); 640cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath 641cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath st.interrupt(); 642cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath try { 643cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath st = new Thread(simple = new SimpleThread(100), "SimpleThread13"); 644cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath synchronized (simple) { 645cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath st.start(); 646cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath simple.wait(); 647cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath } 648cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath st.join(1000); 649cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath } catch (InterruptedException e) { 650cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath fail("Join failed : " + e.getMessage()); 651cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath return; 652cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath } 653cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath assertTrue("Joined thread is still alive", !st.isAlive()); 654cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath 655cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath final Object lock = new Object(); 656cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath final Thread main = Thread.currentThread(); 657cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath Thread killer = new Thread(new Runnable() { 658cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath public void run() { 659cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath try { 660cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath synchronized (lock) { 661cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath lock.notify(); 662cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath } 663cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath Thread.sleep(100); 664cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath } catch (InterruptedException e) { 665cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath return; 666cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath } 667cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath main.interrupt(); 668cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath } 669cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath }); 670cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath boolean result = true; 671cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath Thread th = new Thread("test"); 672cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath try { 673cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath synchronized (lock) { 674cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath killer.start(); 675cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath lock.wait(); 676cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath } 677cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath th.join(200); 678cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath } catch (InterruptedException e) { 679cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath result = false; 680cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath } 681cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath killer.interrupt(); 682cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath assertTrue("Hung joining a non-started thread", result); 683cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath th.start(); 684cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath } 685cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath 686cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath /** 687cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath * java.lang.Thread#join(long, int) 688cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath */ 689cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath public void test_joinJI() throws Exception { 690cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath // Test for method void java.lang.Thread.join(long, int) 691cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath SimpleThread simple; 692cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath st = new Thread(simple = new SimpleThread(1000), "Squawk1"); 693cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath assertTrue("Thread is alive", !st.isAlive()); 694cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath synchronized (simple) { 695cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath st.start(); 696cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath simple.wait(); 697cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath } 698cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath 699cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath long firstRead = System.currentTimeMillis(); 700cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath st.join(100, 999999); 701cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath long secondRead = System.currentTimeMillis(); 702cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath assertTrue("Did not join by appropriate time: " + secondRead + "-" 703cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath + firstRead + "=" + (secondRead - firstRead), secondRead 704cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath - firstRead <= 300); 705cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath assertTrue("Joined thread is not alive", st.isAlive()); 706cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath st.interrupt(); 707cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath 708cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath final Object lock = new Object(); 709cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath final Thread main = Thread.currentThread(); 710cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath Thread killer = new Thread(new Runnable() { 711cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath public void run() { 712cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath try { 713cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath synchronized (lock) { 714cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath lock.notify(); 715cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath } 716cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath Thread.sleep(100); 717cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath } catch (InterruptedException e) { 718cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath return; 719cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath } 720cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath main.interrupt(); 721cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath } 722cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath }); 723cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath boolean result = true; 724cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath Thread th = new Thread("test"); 725cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath try { 726cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath synchronized (lock) { 727cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath killer.start(); 728cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath lock.wait(); 729cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath } 730cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath th.join(200, 20); 731cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath } catch (InterruptedException e) { 732cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath result = false; 733cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath } 734cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath killer.interrupt(); 735cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath assertTrue("Hung joining a non-started thread", result); 736cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath th.start(); 737cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath } 738cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath 739cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath /** 740cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath * java.lang.Thread#run() 741cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath */ 742cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath public void test_run() { 743cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath // Test for method void java.lang.Thread.run() 744cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath class RunThread implements Runnable { 745cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath boolean didThreadRun = false; 746cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath 747cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath public void run() { 748cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath didThreadRun = true; 749cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath } 750cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath } 751cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath RunThread rt = new RunThread(); 752cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath Thread t = new Thread(rt); 753cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath try { 754cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath t.start(); 755cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath int count = 0; 756cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath while (!rt.didThreadRun && count < 20) { 757cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath Thread.sleep(100); 758cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath count++; 759cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath } 760cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath assertTrue("Thread did not run", rt.didThreadRun); 761cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath t.join(); 762cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath } catch (InterruptedException e) { 763cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath assertTrue("Joined thread was interrupted", true); 764cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath } 765cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath assertTrue("Joined thread is still alive", !t.isAlive()); 766cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath } 767cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath 768cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath /** 769cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath * java.lang.Thread#setDaemon(boolean) 770cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath */ 771cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath public void test_setDaemonZ() { 772cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath // Test for method void java.lang.Thread.setDaemon(boolean) 773cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath st = new Thread(new SimpleThread(1), "SimpleThread14"); 774cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath st.setDaemon(true); 775cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath assertTrue("Failed to set thread as daemon thread", st.isDaemon()); 776cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath st.start(); 777cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath } 778cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath 779cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath /** 780cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath * java.lang.Thread#setName(java.lang.String) 781cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath */ 782cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath public void test_setNameLjava_lang_String() { 783cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath // Test for method void java.lang.Thread.setName(java.lang.String) 784cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath st = new Thread(new SimpleThread(1), "SimpleThread15"); 785cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath st.setName("Bogus Name"); 786cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath assertEquals("Failed to set thread name", 787cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath "Bogus Name", st.getName()); 788cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath try { 789cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath st.setName(null); 790cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath fail("Null should not be accepted as a valid name"); 791cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath } catch (NullPointerException e) { 792cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath // success 793cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath assertTrue("Null should not be accepted as a valid name", true); 794cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath } 795cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath st.start(); 796cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath } 797cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath 798cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath /** 799cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath * java.lang.Thread#setPriority(int) 800cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath */ 801cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath public void test_setPriorityI() { 802cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath // Test for method void java.lang.Thread.setPriority(int) 803cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath st = new Thread(new SimpleThread(1)); 804cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath st.setPriority(Thread.MAX_PRIORITY); 805cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath assertTrue("Failed to set priority", 806cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath st.getPriority() == Thread.MAX_PRIORITY); 807cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath st.start(); 808cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath } 809cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath 810cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath /** 811cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath * java.lang.Thread#sleep(long) 812cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath */ 813cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath public void test_sleepJ() { 814cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath // Test for method void java.lang.Thread.sleep(long) 815cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath 816cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath // TODO : Test needs enhancing. 817cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath long stime = 0, ftime = 0; 818cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath try { 819cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath stime = System.currentTimeMillis(); 820cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath Thread.sleep(1000); 821cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath ftime = System.currentTimeMillis(); 822cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath } catch (InterruptedException e) { 823cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath fail("Unexpected interrupt received"); 824cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath } 825cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath assertTrue("Failed to sleep long enough", (ftime - stime) >= 800); 826cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath } 827cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath 828cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath /** 829cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath * java.lang.Thread#sleep(long, int) 830cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath */ 831cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath public void test_sleepJI() { 832cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath // Test for method void java.lang.Thread.sleep(long, int) 833cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath 834cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath // TODO : Test needs revisiting. 835cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath long stime = 0, ftime = 0; 836cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath try { 837cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath stime = System.currentTimeMillis(); 838cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath Thread.sleep(1000, 999999); 839cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath ftime = System.currentTimeMillis(); 840cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath } catch (InterruptedException e) { 841cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath fail("Unexpected interrupt received"); 842cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath } 843cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath long result = ftime - stime; 844cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath assertTrue("Failed to sleep long enough: " + result, result >= 900 845cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath && result <= 1100); 846cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath } 847cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath 848cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath /** 849cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath * java.lang.Thread#start() 850cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath */ 851cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath public void test_start() { 852cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath // Test for method void java.lang.Thread.start() 853cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath try { 854cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath ResSupThread t = new ResSupThread(Thread.currentThread()); 855cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath synchronized (t) { 856cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath ct = new Thread(t, "Interrupt Test4"); 857cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath ct.start(); 858cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath t.wait(); 859cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath } 860cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath assertTrue("Thread is not running1", ct.isAlive()); 861cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath // Let the child thread get going. 862cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath int orgval = t.getCheckVal(); 863cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath Thread.sleep(150); 864cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath assertTrue("Thread is not running2", orgval != t.getCheckVal()); 865cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath ct.interrupt(); 866cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath } catch (InterruptedException e) { 867cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath fail("Unexpected interrupt occurred"); 868cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath } 869cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath } 870cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath 871cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath /** 872cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath * java.lang.Thread#toString() 873cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath */ 874cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath public void test_toString() { 875cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath // Test for method java.lang.String java.lang.Thread.toString() 876cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath ThreadGroup tg = new ThreadGroup("Test Group5"); 877cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath st = new Thread(tg, new SimpleThread(1), "SimpleThread17"); 878cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath final String stString = st.toString(); 879cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath final String expected = "Thread[SimpleThread17,5,Test Group5]"; 880cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath assertTrue("Returned incorrect string: " + stString + "\t(expecting :" 881cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath + expected + ")", stString.equals(expected)); 882cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath st.start(); 883cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath try { 884cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath st.join(); 885cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath } catch (InterruptedException e) { 886cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath } 887cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath tg.destroy(); 888cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath } 889cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath 890cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath /** 891cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath * java.lang.Thread#getAllStackTraces() 892cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath */ 893cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath public void test_getAllStackTraces() { 894cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath Map<Thread, StackTraceElement[]> stMap = Thread.getAllStackTraces(); 895cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath assertNotNull(stMap); 896cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath //TODO add security-based tests 897cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath } 898cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath 899cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath /** 900cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath * java.lang.Thread#getDefaultUncaughtExceptionHandler 901cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath * java.lang.Thread#setDefaultUncaughtExceptionHandler 902cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath */ 903cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath public void test_get_setDefaultUncaughtExceptionHandler() { 904cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath class Handler implements UncaughtExceptionHandler { 905cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath public void uncaughtException(Thread thread, Throwable ex) { 906cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath } 907cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath } 908cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath 909cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath final Handler handler = new Handler(); 910cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath Thread.setDefaultUncaughtExceptionHandler(handler); 911cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath assertSame(handler, Thread.getDefaultUncaughtExceptionHandler()); 912cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath 913cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath Thread.setDefaultUncaughtExceptionHandler(null); 914cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath assertNull(Thread.getDefaultUncaughtExceptionHandler()); 915cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath //TODO add security-based tests 916cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath } 917cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath 918cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath /** 919cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath * java.lang.Thread#getStackTrace() 920cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath */ 921cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath public void test_getStackTrace() { 922cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath StackTraceElement[] stackTrace = Thread.currentThread().getStackTrace(); 923cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath 924cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath assertNotNull(stackTrace); 925cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath 926cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath stack_trace_loop: 927cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath { 928cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath for (int i = 0; i < stackTrace.length; i++) { 929cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath StackTraceElement e = stackTrace[i]; 930cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath if (getClass().getName().equals(e.getClassName())) { 931cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath if ("test_getStackTrace".equals(e.getMethodName())) { 932cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath break stack_trace_loop; 933cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath } 934cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath } 935cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath } 936cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath fail("class and method not found in stack trace"); 937cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath } 938cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath 939cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath //TODO add security-based tests 940cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath } 941cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath 942cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath /** 943cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath * java.lang.Thread#getState() 944cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath */ 945cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath public void test_getState() { 946cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath Thread.State state = Thread.currentThread().getState(); 947cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath assertNotNull(state); 948cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath assertEquals(Thread.State.RUNNABLE, state); 949cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath //TODO add additional state tests 950cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath } 951cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath 952cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath /** 953cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath * java.lang.Thread#getUncaughtExceptionHandler 954cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath * java.lang.Thread#setUncaughtExceptionHandler 955cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath */ 956cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath public void test_get_setUncaughtExceptionHandler() { 957cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath class Handler implements UncaughtExceptionHandler { 958cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath public void uncaughtException(Thread thread, Throwable ex) { 959cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath } 960cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath } 961cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath 962cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath final Handler handler = new Handler(); 963cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath Thread.currentThread().setUncaughtExceptionHandler(handler); 964cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath assertSame(handler, Thread.currentThread().getUncaughtExceptionHandler()); 965cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath 966cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath Thread.currentThread().setUncaughtExceptionHandler(null); 967cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath 968cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath //TODO add security-based tests 969cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath } 970cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath 971cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath /** 972cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath * java.lang.Thread#getId() 973cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath */ 974cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath public void test_getId() { 975cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath assertTrue("current thread's ID is not positive", Thread.currentThread().getId() > 0); 976cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath 977cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath //check all the current threads for positive IDs 978cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath Map<Thread, StackTraceElement[]> stMap = Thread.getAllStackTraces(); 979cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath for (Thread thread : stMap.keySet()) { 980cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath assertTrue("thread's ID is not positive: " + thread.getName(), thread.getId() > 0); 981cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath } 982cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath } 983cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath 984cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath 985cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath @Override 986cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath protected void tearDown() { 987cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath try { 988cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath if (st != null) 989cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath st.interrupt(); 990cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath } catch (Exception e) { 991cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath } 992cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath try { 993cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath if (spinner != null) 994cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath spinner.interrupt(); 995cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath } catch (Exception e) { 996cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath } 997cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath try { 998cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath if (ct != null) 999cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath ct.interrupt(); 1000cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath } catch (Exception e) { 1001cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath } 1002cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath 1003cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath try { 1004cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath spinner = null; 1005cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath st = null; 1006cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath ct = null; 1007cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath System.runFinalization(); 1008cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath } catch (Exception e) { 1009cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath } 1010cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath } 1011cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath} 1012