18bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson/*
28bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson *  Licensed to the Apache Software Foundation (ASF) under one or more
38bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson *  contributor license agreements.  See the NOTICE file distributed with
48bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson *  this work for additional information regarding copyright ownership.
58bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson *  The ASF licenses this file to You under the Apache License, Version 2.0
68bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson *  (the "License"); you may not use this file except in compliance with
78bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson *  the License.  You may obtain a copy of the License at
88bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson *
98bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson *     http://www.apache.org/licenses/LICENSE-2.0
108bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson *
118bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson *  Unless required by applicable law or agreed to in writing, software
128bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson *  distributed under the License is distributed on an "AS IS" BASIS,
138bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
148bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson *  See the License for the specific language governing permissions and
158bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson *  limitations under the License.
168bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson */
178bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilsonpackage libcore.java.lang;
188bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson
198bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilsonimport junit.framework.TestCase;
208bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson
218bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilsonpublic class OldObjectTest extends TestCase {
228bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson
238bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson    public boolean isCalled = false;
248bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson
258bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson    /**
268bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson     * Test objects.
278bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson     */
288bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson    Object obj1 = new Object();
298bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson
308bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson    /**
318bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson     * Generic state indicator.
328bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson     */
338bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson    int status = 0;
348bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson
358bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson    int ready = 0;
368bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson    TestThread1 thr1;
378bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson    TestThread2 thr2;
388bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson
39131c6635785a20abe5fd609ba4f10c8dc4f0295fElliott Hughes    public void test_hashCode() {
40131c6635785a20abe5fd609ba4f10c8dc4f0295fElliott Hughes        Object o1 = new Object();
41131c6635785a20abe5fd609ba4f10c8dc4f0295fElliott Hughes        Object o2 = new Object();
42131c6635785a20abe5fd609ba4f10c8dc4f0295fElliott Hughes        int h1 = System.identityHashCode(o1);
43131c6635785a20abe5fd609ba4f10c8dc4f0295fElliott Hughes        int h2 = System.identityHashCode(o2);
44131c6635785a20abe5fd609ba4f10c8dc4f0295fElliott Hughes        assertEquals(h1, o1.hashCode());
45131c6635785a20abe5fd609ba4f10c8dc4f0295fElliott Hughes        assertEquals(h2, o2.hashCode());
46131c6635785a20abe5fd609ba4f10c8dc4f0295fElliott Hughes        assertTrue(h1 != h2);
47131c6635785a20abe5fd609ba4f10c8dc4f0295fElliott Hughes    }
48131c6635785a20abe5fd609ba4f10c8dc4f0295fElliott Hughes
498bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson    public void test_clone() {
508bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson        MockCloneableObject mco = new MockCloneableObject();
518bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson        try {
528bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson            assertFalse(mco.equals(mco.clone()));
538bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson            assertEquals(mco.getClass(), mco.clone().getClass());
548bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson        } catch(CloneNotSupportedException cnse) {
558bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson            fail("CloneNotSupportedException was thrown.");
568bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson        }
578bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson
588bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson        MockObject mo = new MockObject();
598bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson        try {
608bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson            mo.clone();
618bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson            fail("CloneNotSupportedException was not thrown.");
628bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson        } catch(CloneNotSupportedException cnse) {
638bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson            //expected
648bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson        }
658bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson    }
668bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson
678bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson    class MockCloneableObject extends Object implements Cloneable {
688bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson        public Object clone() throws CloneNotSupportedException {
698bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson            return super.clone();
708bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson        }
718bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson    }
728bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson
738bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson    class MockObject extends Object {
748bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson
758bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson        boolean isCalled = false;
768bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson
778bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson        public void finalize() throws Throwable {
788bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson            super.finalize();
798bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson            isCalled = true;
808bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson        }
818bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson
828bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson        public Object clone() throws CloneNotSupportedException {
838bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson            return super.clone();
848bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson        }
858bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson    }
868bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson
878bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson    public void test_notify() {
888bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson        try {
898bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson            Object obj = new Object();
908bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson            obj.notify();
918bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson            fail("IllegalMonitorStateException was not thrown.");
928bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson        } catch(IllegalMonitorStateException imse) {
938bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson            //expected
948bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson        }
958bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson    }
968bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson
978bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson    public void test_notifyAll() {
988bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson        try {
998bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson            Object obj = new Object();
1008bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson            obj.notifyAll();
1018bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson            fail("IllegalMonitorStateException was not thrown.");
1028bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson        } catch(IllegalMonitorStateException imse) {
1038bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson            //expected
1048bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson        }
1058bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson    }
1068bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson
1078bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson    public void test_wait() {
1088bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson
1098bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson        try {
1108bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson            Object obj = new Object();
1118bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson            obj.wait();
1128bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson            fail("IllegalMonitorStateException was not thrown.");
1138bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson        } catch(IllegalMonitorStateException imse) {
1148bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson            //expected
1158bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson        } catch(InterruptedException ex) {
1168bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson            fail("InterruptedException was thrown.");
1178bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson        }
1188bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson
1198bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson       try {
1208bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson           thr1 = new TestThread1(TestThread1.CASE_WAIT);
1218bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson           thr2 = new TestThread2();
1228bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson           thr1.start();
1238bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson           thr2.start();
1248bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson           thr2.join();
1258bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson           thr1.join();
1268bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson           thr1 = null;
1278bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson           thr2 = null;
1288bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson        } catch(InterruptedException e) {
1298bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson            fail("InterruptedException was thrown.");
1308bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson        }
1318bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson        assertEquals(3, status);
1328bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson    }
1338bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson
1348bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson    class TestThread1 extends Thread {
1358bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson
1368bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson        static final int CASE_WAIT = 0;
1378bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson        static final int CASE_WAIT_LONG = 1;
1388bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson        static final int CASE_WAIT_LONG_INT = 2;
1398bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson
1408bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson        int testCase = CASE_WAIT;
1418bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson
1428bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson        public TestThread1(int option) {
1438bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson            testCase = option;
1448bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson        }
1458bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson
1468bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson        public void run() {
1478bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson            synchronized (obj1) {
1488bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson                try {
1498bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson                    switch(testCase) {
1508bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson                        case CASE_WAIT:
1518bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson                            obj1.wait();// Wait for ever.
1528bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson                            break;
1538bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson                        case CASE_WAIT_LONG:
1548bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson                            obj1.wait(5000L);
1558bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson                            break;
1568bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson                        case CASE_WAIT_LONG_INT:
1578bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson                            obj1.wait(10000L, 999999);
1588bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson                            break;
1598bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson                    }
1608bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson
1618bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson                } catch (InterruptedException ex) {
1628bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson                    status = 3;
1638bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson                }
1648bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson            }
1658bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson        }
1668bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson    }
1678bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson
1688bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson    class TestThread2 extends Thread {
1698bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson        public void run() {
1708bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson            thr1.interrupt();
1718bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson        }
1728bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson    }
1738bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson
1748bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson    public void test_waitJI() {
1758bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson        try {
1768bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson            Object obj = new Object();
1778bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson            obj.wait(5000L, 1);
1788bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson            fail("IllegalMonitorStateException was not thrown.");
1798bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson        } catch(IllegalMonitorStateException imse) {
1808bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson            //expected
1818bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson        } catch(InterruptedException ex) {
1828bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson            fail("InterruptedException was thrown.");
1838bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson        }
1848bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson
1858bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson       try {
1868bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson           thr1 = new TestThread1(TestThread1.CASE_WAIT_LONG_INT);
1878bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson           thr2 = new TestThread2();
1888bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson           thr1.start();
1898bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson           thr2.start();
1908bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson           thr2.join();
1918bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson           thr1.join();
1928bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson           thr1 = null;
1938bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson           thr2 = null;
1948bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson        } catch(InterruptedException e) {
1958bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson            fail("InterruptedException was thrown.");
1968bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson        }
1978bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson        assertEquals(3, status);
198811320db23eb8fa68b0ee8659b4448157a0680a5Elliott Hughes    }
199811320db23eb8fa68b0ee8659b4448157a0680a5Elliott Hughes
200811320db23eb8fa68b0ee8659b4448157a0680a5Elliott Hughes    public void test_waitJI_invalid() throws Exception {
201811320db23eb8fa68b0ee8659b4448157a0680a5Elliott Hughes        Object o = new Object();
202811320db23eb8fa68b0ee8659b4448157a0680a5Elliott Hughes        synchronized (o) {
203811320db23eb8fa68b0ee8659b4448157a0680a5Elliott Hughes            try {
204811320db23eb8fa68b0ee8659b4448157a0680a5Elliott Hughes                o.wait(-1, 0);
205811320db23eb8fa68b0ee8659b4448157a0680a5Elliott Hughes                fail();
206811320db23eb8fa68b0ee8659b4448157a0680a5Elliott Hughes            } catch (IllegalArgumentException expected) {
207811320db23eb8fa68b0ee8659b4448157a0680a5Elliott Hughes            }
208811320db23eb8fa68b0ee8659b4448157a0680a5Elliott Hughes
209811320db23eb8fa68b0ee8659b4448157a0680a5Elliott Hughes            try {
210811320db23eb8fa68b0ee8659b4448157a0680a5Elliott Hughes                o.wait(0, -1);
211811320db23eb8fa68b0ee8659b4448157a0680a5Elliott Hughes                fail();
212811320db23eb8fa68b0ee8659b4448157a0680a5Elliott Hughes            } catch (IllegalArgumentException expected) {
213811320db23eb8fa68b0ee8659b4448157a0680a5Elliott Hughes            }
2148bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson
215811320db23eb8fa68b0ee8659b4448157a0680a5Elliott Hughes            try {
216811320db23eb8fa68b0ee8659b4448157a0680a5Elliott Hughes                o.wait(-1, -1);
217811320db23eb8fa68b0ee8659b4448157a0680a5Elliott Hughes                fail();
218811320db23eb8fa68b0ee8659b4448157a0680a5Elliott Hughes            } catch (IllegalArgumentException expected) {
219811320db23eb8fa68b0ee8659b4448157a0680a5Elliott Hughes            }
220811320db23eb8fa68b0ee8659b4448157a0680a5Elliott Hughes
221811320db23eb8fa68b0ee8659b4448157a0680a5Elliott Hughes            // The ms timeout must fit in 32 bits.
222811320db23eb8fa68b0ee8659b4448157a0680a5Elliott Hughes            try {
223811320db23eb8fa68b0ee8659b4448157a0680a5Elliott Hughes                o.wait(Integer.MAX_VALUE + 1, 0);
224811320db23eb8fa68b0ee8659b4448157a0680a5Elliott Hughes                fail();
225811320db23eb8fa68b0ee8659b4448157a0680a5Elliott Hughes            } catch (IllegalArgumentException expected) {
226811320db23eb8fa68b0ee8659b4448157a0680a5Elliott Hughes            }
227811320db23eb8fa68b0ee8659b4448157a0680a5Elliott Hughes        }
2288bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson    }
2298bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson
2308bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson    public void test_waitJ() {
2318bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson        try {
2328bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson            Object obj = new Object();
2338bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson            obj.wait(5000L);
2348bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson            fail("IllegalMonitorStateException was not thrown.");
2358bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson        } catch(IllegalMonitorStateException imse) {
2368bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson            //expected
2378bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson        } catch(InterruptedException ex) {
2388bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson            fail("InterruptedException was thrown.");
2398bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson        }
2408bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson
2418bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson       try {
2428bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson           thr1 = new TestThread1(TestThread1.CASE_WAIT_LONG);
2438bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson           thr2 = new TestThread2();
2448bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson           thr1.start();
2458bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson           thr2.start();
2468bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson           thr2.join();
2478bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson           thr1.join();
2488bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson           thr1 = null;
2498bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson           thr2 = null;
2508bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson        } catch(InterruptedException e) {
2518bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson            fail("InterruptedException was thrown.");
2528bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson        }
2538bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson        assertEquals(3, status);
2548bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson    }
2558bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson}
256