1adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project/*
2adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project *  Licensed to the Apache Software Foundation (ASF) under one or more
3adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project *  contributor license agreements.  See the NOTICE file distributed with
4adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project *  this work for additional information regarding copyright ownership.
5adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project *  The ASF licenses this file to You under the Apache License, Version 2.0
6adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project *  (the "License"); you may not use this file except in compliance with
7adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project *  the License.  You may obtain a copy of the License at
8adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project *
9adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project *     http://www.apache.org/licenses/LICENSE-2.0
10adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project *
11adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project *  Unless required by applicable law or agreed to in writing, software
12adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project *  distributed under the License is distributed on an "AS IS" BASIS,
13adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project *  See the License for the specific language governing permissions and
15adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project *  limitations under the License.
16adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */
17adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
18adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectpackage tests.api.java.lang.ref;
19adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
20adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport java.lang.ref.PhantomReference;
21adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport java.lang.ref.Reference;
22adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport java.lang.ref.ReferenceQueue;
23adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport java.lang.ref.SoftReference;
24adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport java.lang.ref.WeakReference;
25fce022be38a2c79f9cdc8d9fea33c72cf2f16528Elliott Hughesimport libcore.java.lang.ref.FinalizationTester;
26adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
27adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectpublic class ReferenceQueueTest extends junit.framework.TestCase {
28adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    static Boolean b;
29adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
30adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    static Integer integer;
31adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    boolean isThrown = false;
32adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
33adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    protected void doneSuite() {
34adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        b = null;
35adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        integer = null;
36adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
37adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
38adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public class ChildThread implements Runnable {
39adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        public ChildThread() {
40adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
41adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
42adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        public void run() {
43adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            try {
44adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                rq.wait(1000);
45adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            } catch (Exception e) {
46adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            }
47adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            synchronized (rq) {
48adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                // store in a static so it won't be gc'ed because the jit
49adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                // optimized it out
50adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                integer = new Integer(667);
51adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                SoftReference sr = new SoftReference(integer, rq);
52adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                sr.enqueue();
53adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                rq.notify();
54adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            }
55adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
56adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
57adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
58adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    ReferenceQueue rq;
59adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
60adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
61229e34b182b98e1dba15d3dc6341954986ae2b7aBrian Carlstrom     * java.lang.ref.ReferenceQueue#poll()
62adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
63adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public void test_poll() {
64adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        // store in a static so it won't be gc'ed because the jit
65adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        // optimized it out
66adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        b = new Boolean(true);
67adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        Object obj = new Object();
68adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        String str = "Test";
69f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes
70adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        SoftReference sr = new SoftReference(b, rq);
71adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        WeakReference wr = new WeakReference(obj, rq);
72adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        PhantomReference pr = new PhantomReference(str, rq);
73adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertNull(rq.poll());
74adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        sr.enqueue();
75adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        wr.enqueue();
76adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        pr.enqueue();
77adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
78adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        try {
79adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            assertNull("Remove failed.", rq.poll().get());
80adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        } catch (Exception e) {
81adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            fail("Exception during the test : " + e.getMessage());
82adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
83f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes
84adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        try {
85adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            assertEquals("Remove failed.", obj, (rq.poll().get()));
86adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        } catch (Exception e) {
87adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            fail("Exception during the test : " + e.getMessage());
88adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
89f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes
90adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        try {
91adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            assertTrue("Remove failed.", ((Boolean) rq.poll().get())
92adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                    .booleanValue());
93adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        } catch (Exception e) {
94adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            fail("Exception during the test : " + e.getMessage());
95adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
96adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertNull(rq.poll());
97f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes
98adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        sr.enqueue();
99adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        wr.enqueue();
100adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
101fce022be38a2c79f9cdc8d9fea33c72cf2f16528Elliott Hughes        FinalizationTester.induceFinalization();
102f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes
103adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertNull(rq.poll());
104adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
105adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
106adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
107229e34b182b98e1dba15d3dc6341954986ae2b7aBrian Carlstrom     * java.lang.ref.ReferenceQueue#remove()
108adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
109adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public void test_remove() {
110adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        // store in a static so it won't be gc'ed because the jit
111adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        // optimized it out
112adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        b = new Boolean(true);
113f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes
114adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        SoftReference sr = new SoftReference(b, rq);
115adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        sr.enqueue();
116adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        try {
117adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            assertTrue("Remove failed.", ((Boolean) rq.remove().get())
118adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                    .booleanValue());
119adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        } catch (Exception e) {
120adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            fail("Exception during the test : " + e.getMessage());
121adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
122f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes
123adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertNull(rq.poll());
124f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes
125adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        sr.enqueue();
126f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes
127adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        class RemoveThread extends Thread {
128adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            public void run() {
129adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                try {
130adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                    rq.remove();
131adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                } catch(InterruptedException ie) {
132adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                    isThrown = true;
133adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                }
134adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            }
135adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
136adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        RemoveThread rt = new RemoveThread();
137adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        rt.start();
138adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        try {
139adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            Thread.sleep(100);
140adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        } catch(InterruptedException ie) {
141f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes
142adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
143adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        rt.interrupt();
144adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        try {
145adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            Thread.sleep(100);
146adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        } catch(InterruptedException ie) {
147f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes
148f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes        }
149adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertTrue(isThrown);
150adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertNull(rq.poll());
151adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
152adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
153adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
154229e34b182b98e1dba15d3dc6341954986ae2b7aBrian Carlstrom     * java.lang.ref.ReferenceQueue#remove(long)
155adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
156adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public void test_removeJ() {
157adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        try {
158adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            assertNull("Queue should be empty. (poll)", rq.poll());
159adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            assertNull("Queue should be empty. (remove(1))",
160adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                    rq.remove((long) 1));
161adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            Thread ct = new Thread(new ChildThread());
162adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            ct.start();
163adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            Reference ret = rq.remove(0L);
164adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            assertNotNull("Delayed remove failed.", ret);
165adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        } catch (InterruptedException e) {
166adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            fail("InterruptedExeException during test : " + e.getMessage());
167adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
168adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        catch (Exception e) {
169adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            fail("Exception during test : " + e.getMessage());
170adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
171adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
172adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        Object obj = new Object();
173f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes        WeakReference wr = new WeakReference(obj, rq);
174adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        Boolean b = new Boolean(true);
175adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        SoftReference sr = new SoftReference(b, rq);
176adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        String str = "Test";
177adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        PhantomReference pr = new PhantomReference(str, rq);
178f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes
179adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        pr.enqueue();
180adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        wr.enqueue();
181adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        sr.enqueue();
182f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes
183adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        try {
184adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            Reference result = rq.remove(1L);
185adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            assertTrue((Boolean)result.get());
186adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            result = rq.remove(1L);
187adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            assertEquals(obj, result.get());
188adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            result = rq.remove(1L);
189adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            assertNull(result.get());
190adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        } catch (IllegalArgumentException e1) {
191adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            fail("IllegalArgumentException was thrown.");
192adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        } catch (InterruptedException e1) {
193adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            fail("InterruptedException was thrown.");
194adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
195adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        rq = new ReferenceQueue();
196adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        isThrown = false;
197adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertNull(rq.poll());
198f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes
199adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        class RemoveThread extends Thread {
200adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            public void run() {
201adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                try {
202adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                    rq.remove(1000L);
203adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                } catch(InterruptedException ie) {
204adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                    isThrown = true;
205adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                }
206adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            }
207adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
208adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        RemoveThread rt = new RemoveThread();
209adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        rt.start();
210adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        try {
211adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            Thread.sleep(10);
212adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        } catch(InterruptedException ie) {
213f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes
214adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
215adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        rt.interrupt();
216adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        try {
217adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            Thread.sleep(10);
218adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        } catch(InterruptedException ie) {
219f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes
220f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes        }
221adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertTrue(isThrown);
222adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertNull(rq.poll());
223f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes
224adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        try {
225adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            rq.remove(-1);
226adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            fail("IllegalArgumentException expected.");
227adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        } catch(IllegalArgumentException iae) {
228adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            //expected
229adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        } catch (InterruptedException e) {
230adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            fail("Unexpected InterruptedException.");
231adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
232adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
233adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
234adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
235229e34b182b98e1dba15d3dc6341954986ae2b7aBrian Carlstrom     * java.lang.ref.ReferenceQueue#ReferenceQueue()
236adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
237adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public void test_Constructor() {
238adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        ReferenceQueue rq = new ReferenceQueue();
239adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertNull(rq.poll());
240adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        try {
241adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            rq.remove(100L);
242adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        } catch (InterruptedException e) {
243adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            fail("InterruptedException was thrown.");
244adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
245adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
246adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
247adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    protected void setUp() {
248adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        rq = new ReferenceQueue();
249adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
250adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
251adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    protected void tearDown() {
252adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
253adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project}
254