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