ReferenceQueueTest.java revision 561ee011997c6c2f1befbfaa9d5f0a99771c1d63
10617145a89917ae7735fe1c9538688ab9a577df5Kristian Monsen/*
20617145a89917ae7735fe1c9538688ab9a577df5Kristian Monsen *  Licensed to the Apache Software Foundation (ASF) under one or more
30617145a89917ae7735fe1c9538688ab9a577df5Kristian Monsen *  contributor license agreements.  See the NOTICE file distributed with
40617145a89917ae7735fe1c9538688ab9a577df5Kristian Monsen *  this work for additional information regarding copyright ownership.
50617145a89917ae7735fe1c9538688ab9a577df5Kristian Monsen *  The ASF licenses this file to You under the Apache License, Version 2.0
60617145a89917ae7735fe1c9538688ab9a577df5Kristian Monsen *  (the "License"); you may not use this file except in compliance with
70617145a89917ae7735fe1c9538688ab9a577df5Kristian Monsen *  the License.  You may obtain a copy of the License at
80617145a89917ae7735fe1c9538688ab9a577df5Kristian Monsen *
90617145a89917ae7735fe1c9538688ab9a577df5Kristian Monsen *     http://www.apache.org/licenses/LICENSE-2.0
100617145a89917ae7735fe1c9538688ab9a577df5Kristian Monsen *
110617145a89917ae7735fe1c9538688ab9a577df5Kristian Monsen *  Unless required by applicable law or agreed to in writing, software
120617145a89917ae7735fe1c9538688ab9a577df5Kristian Monsen *  distributed under the License is distributed on an "AS IS" BASIS,
130617145a89917ae7735fe1c9538688ab9a577df5Kristian Monsen *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
140617145a89917ae7735fe1c9538688ab9a577df5Kristian Monsen *  See the License for the specific language governing permissions and
150617145a89917ae7735fe1c9538688ab9a577df5Kristian Monsen *  limitations under the License.
160617145a89917ae7735fe1c9538688ab9a577df5Kristian Monsen */
170617145a89917ae7735fe1c9538688ab9a577df5Kristian Monsen
180617145a89917ae7735fe1c9538688ab9a577df5Kristian Monsenpackage org.apache.harmony.luni.tests.java.lang.ref;
190617145a89917ae7735fe1c9538688ab9a577df5Kristian Monsen
200617145a89917ae7735fe1c9538688ab9a577df5Kristian Monsenimport java.lang.ref.Reference;
210617145a89917ae7735fe1c9538688ab9a577df5Kristian Monsenimport java.lang.ref.ReferenceQueue;
220617145a89917ae7735fe1c9538688ab9a577df5Kristian Monsenimport java.lang.ref.SoftReference;
230617145a89917ae7735fe1c9538688ab9a577df5Kristian Monsen
240617145a89917ae7735fe1c9538688ab9a577df5Kristian Monsenpublic class ReferenceQueueTest extends junit.framework.TestCase {
250617145a89917ae7735fe1c9538688ab9a577df5Kristian Monsen	static Boolean b;
260617145a89917ae7735fe1c9538688ab9a577df5Kristian Monsen
270617145a89917ae7735fe1c9538688ab9a577df5Kristian Monsen	static Integer integer;
280617145a89917ae7735fe1c9538688ab9a577df5Kristian Monsen
290617145a89917ae7735fe1c9538688ab9a577df5Kristian Monsen	protected void doneSuite() {
300617145a89917ae7735fe1c9538688ab9a577df5Kristian Monsen		b = null;
310617145a89917ae7735fe1c9538688ab9a577df5Kristian Monsen		integer = null;
320617145a89917ae7735fe1c9538688ab9a577df5Kristian Monsen	}
330617145a89917ae7735fe1c9538688ab9a577df5Kristian Monsen
340617145a89917ae7735fe1c9538688ab9a577df5Kristian Monsen	public class ChildThread implements Runnable {
350617145a89917ae7735fe1c9538688ab9a577df5Kristian Monsen		public ChildThread() {
360617145a89917ae7735fe1c9538688ab9a577df5Kristian Monsen		}
370617145a89917ae7735fe1c9538688ab9a577df5Kristian Monsen
380617145a89917ae7735fe1c9538688ab9a577df5Kristian Monsen		public void run() {
390617145a89917ae7735fe1c9538688ab9a577df5Kristian Monsen			try {
400617145a89917ae7735fe1c9538688ab9a577df5Kristian Monsen				rq.wait(1000);
410617145a89917ae7735fe1c9538688ab9a577df5Kristian Monsen			} catch (Exception e) {
420617145a89917ae7735fe1c9538688ab9a577df5Kristian Monsen			}
430617145a89917ae7735fe1c9538688ab9a577df5Kristian Monsen			synchronized (rq) {
440617145a89917ae7735fe1c9538688ab9a577df5Kristian Monsen				// store in a static so it won't be gc'ed because the jit
450617145a89917ae7735fe1c9538688ab9a577df5Kristian Monsen				// optimized it out
460617145a89917ae7735fe1c9538688ab9a577df5Kristian Monsen				integer = new Integer(667);
470617145a89917ae7735fe1c9538688ab9a577df5Kristian Monsen				SoftReference sr = new SoftReference(integer, rq);
4865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch				sr.enqueue();
4965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch				rq.notify();
5065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch			}
5165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch		}
5265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch	}
5365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
540617145a89917ae7735fe1c9538688ab9a577df5Kristian Monsen	ReferenceQueue rq;
550617145a89917ae7735fe1c9538688ab9a577df5Kristian Monsen
560617145a89917ae7735fe1c9538688ab9a577df5Kristian Monsen	/**
570617145a89917ae7735fe1c9538688ab9a577df5Kristian Monsen	 * @tests java.lang.ref.ReferenceQueue#poll()
580617145a89917ae7735fe1c9538688ab9a577df5Kristian Monsen	 */
590617145a89917ae7735fe1c9538688ab9a577df5Kristian Monsen	public void test_poll() {
600617145a89917ae7735fe1c9538688ab9a577df5Kristian Monsen		// store in a static so it won't be gc'ed because the jit
610617145a89917ae7735fe1c9538688ab9a577df5Kristian Monsen		// optimized it out
620617145a89917ae7735fe1c9538688ab9a577df5Kristian Monsen		b = new Boolean(true);
630617145a89917ae7735fe1c9538688ab9a577df5Kristian Monsen		SoftReference sr = new SoftReference(b, rq);
640617145a89917ae7735fe1c9538688ab9a577df5Kristian Monsen		sr.enqueue();
650617145a89917ae7735fe1c9538688ab9a577df5Kristian Monsen                assertTrue("Remove failed.", ((Boolean) rq.poll().get())
660617145a89917ae7735fe1c9538688ab9a577df5Kristian Monsen                                .booleanValue());
670617145a89917ae7735fe1c9538688ab9a577df5Kristian Monsen	}
680617145a89917ae7735fe1c9538688ab9a577df5Kristian Monsen
690617145a89917ae7735fe1c9538688ab9a577df5Kristian Monsen	/**
700617145a89917ae7735fe1c9538688ab9a577df5Kristian Monsen	 * @tests java.lang.ref.ReferenceQueue#remove()
710617145a89917ae7735fe1c9538688ab9a577df5Kristian Monsen	 */
720617145a89917ae7735fe1c9538688ab9a577df5Kristian Monsen	public void test_remove() throws Exception {
730617145a89917ae7735fe1c9538688ab9a577df5Kristian Monsen		// store in a static so it won't be gc'ed because the jit
740617145a89917ae7735fe1c9538688ab9a577df5Kristian Monsen		// optimized it out
750617145a89917ae7735fe1c9538688ab9a577df5Kristian Monsen		b = new Boolean(true);
760617145a89917ae7735fe1c9538688ab9a577df5Kristian Monsen		SoftReference sr = new SoftReference(b, rq);
770617145a89917ae7735fe1c9538688ab9a577df5Kristian Monsen		sr.enqueue();
780617145a89917ae7735fe1c9538688ab9a577df5Kristian Monsen                assertTrue("Remove failed.", ((Boolean) rq.remove().get())
790617145a89917ae7735fe1c9538688ab9a577df5Kristian Monsen                                .booleanValue());
800617145a89917ae7735fe1c9538688ab9a577df5Kristian Monsen	}
810617145a89917ae7735fe1c9538688ab9a577df5Kristian Monsen
820617145a89917ae7735fe1c9538688ab9a577df5Kristian Monsen	/**
830617145a89917ae7735fe1c9538688ab9a577df5Kristian Monsen	 * @tests java.lang.ref.ReferenceQueue#remove(long)
840617145a89917ae7735fe1c9538688ab9a577df5Kristian Monsen	 */
850617145a89917ae7735fe1c9538688ab9a577df5Kristian Monsen	public void test_removeJ() throws Exception {
860617145a89917ae7735fe1c9538688ab9a577df5Kristian Monsen                assertNull("Queue is empty.", rq.poll());
870617145a89917ae7735fe1c9538688ab9a577df5Kristian Monsen                assertNull("Queue is empty.", rq.remove((long) 1));
880617145a89917ae7735fe1c9538688ab9a577df5Kristian Monsen                Thread ct = new Thread(new ChildThread());
892fc2651226baac27029e38c9d6ef883fa32084dbSteve Block                ct.start();
902fc2651226baac27029e38c9d6ef883fa32084dbSteve Block                Reference ret = rq.remove(0L);
912fc2651226baac27029e38c9d6ef883fa32084dbSteve Block                assertNotNull("Delayed remove failed.", ret);
922fc2651226baac27029e38c9d6ef883fa32084dbSteve Block	}
932fc2651226baac27029e38c9d6ef883fa32084dbSteve Block
942fc2651226baac27029e38c9d6ef883fa32084dbSteve Block	/**
952fc2651226baac27029e38c9d6ef883fa32084dbSteve Block	 * @tests java.lang.ref.ReferenceQueue#ReferenceQueue()
962fc2651226baac27029e38c9d6ef883fa32084dbSteve Block	 */
972fc2651226baac27029e38c9d6ef883fa32084dbSteve Block	public void test_Constructor() {
982fc2651226baac27029e38c9d6ef883fa32084dbSteve Block		assertTrue("Used for testing.", true);
992fc2651226baac27029e38c9d6ef883fa32084dbSteve Block	}
1002fc2651226baac27029e38c9d6ef883fa32084dbSteve Block
1012fc2651226baac27029e38c9d6ef883fa32084dbSteve Block	protected void setUp() {
1022fc2651226baac27029e38c9d6ef883fa32084dbSteve Block		rq = new ReferenceQueue();
1032fc2651226baac27029e38c9d6ef883fa32084dbSteve Block	}
1042fc2651226baac27029e38c9d6ef883fa32084dbSteve Block
1052fc2651226baac27029e38c9d6ef883fa32084dbSteve Block	protected void tearDown() {
1062fc2651226baac27029e38c9d6ef883fa32084dbSteve Block	}
1070617145a89917ae7735fe1c9538688ab9a577df5Kristian Monsen}
1080617145a89917ae7735fe1c9538688ab9a577df5Kristian Monsen