WeakIdentityHashMapTest.java revision e1e0b483be87d23383832aa6b558364a730c690f
1e1e0b483be87d23383832aa6b558364a730c690fAdrian Roos/* 2e1e0b483be87d23383832aa6b558364a730c690fAdrian Roos * Copyright (C) 2017 The Android Open Source Project 3e1e0b483be87d23383832aa6b558364a730c690fAdrian Roos * 4e1e0b483be87d23383832aa6b558364a730c690fAdrian Roos * Licensed under the Apache License, Version 2.0 (the "License"); 5e1e0b483be87d23383832aa6b558364a730c690fAdrian Roos * you may not use this file except in compliance with the License. 6e1e0b483be87d23383832aa6b558364a730c690fAdrian Roos * You may obtain a copy of the License at 7e1e0b483be87d23383832aa6b558364a730c690fAdrian Roos * 8e1e0b483be87d23383832aa6b558364a730c690fAdrian Roos * http://www.apache.org/licenses/LICENSE-2.0 9e1e0b483be87d23383832aa6b558364a730c690fAdrian Roos * 10e1e0b483be87d23383832aa6b558364a730c690fAdrian Roos * Unless required by applicable law or agreed to in writing, software 11e1e0b483be87d23383832aa6b558364a730c690fAdrian Roos * distributed under the License is distributed on an "AS IS" BASIS, 12e1e0b483be87d23383832aa6b558364a730c690fAdrian Roos * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13e1e0b483be87d23383832aa6b558364a730c690fAdrian Roos * See the License for the specific language governing permissions and 14e1e0b483be87d23383832aa6b558364a730c690fAdrian Roos * limitations under the License 15e1e0b483be87d23383832aa6b558364a730c690fAdrian Roos */ 16e1e0b483be87d23383832aa6b558364a730c690fAdrian Roos 17e1e0b483be87d23383832aa6b558364a730c690fAdrian Roospackage com.android.systemui.util.leak; 18e1e0b483be87d23383832aa6b558364a730c690fAdrian Roos 19e1e0b483be87d23383832aa6b558364a730c690fAdrian Roosimport static org.junit.Assert.assertEquals; 20e1e0b483be87d23383832aa6b558364a730c690fAdrian Roosimport static org.junit.Assert.assertNotSame; 21e1e0b483be87d23383832aa6b558364a730c690fAdrian Roosimport static org.junit.Assert.assertTrue; 22e1e0b483be87d23383832aa6b558364a730c690fAdrian Roos 23e1e0b483be87d23383832aa6b558364a730c690fAdrian Roosimport android.support.test.filters.SmallTest; 24e1e0b483be87d23383832aa6b558364a730c690fAdrian Roosimport android.support.test.runner.AndroidJUnit4; 25e1e0b483be87d23383832aa6b558364a730c690fAdrian Roos 26e1e0b483be87d23383832aa6b558364a730c690fAdrian Roosimport com.android.systemui.util.leak.ReferenceTestUtils.CollectionWaiter; 27e1e0b483be87d23383832aa6b558364a730c690fAdrian Roos 28e1e0b483be87d23383832aa6b558364a730c690fAdrian Roosimport org.junit.Before; 29e1e0b483be87d23383832aa6b558364a730c690fAdrian Roosimport org.junit.Test; 30e1e0b483be87d23383832aa6b558364a730c690fAdrian Roosimport org.junit.runner.RunWith; 31e1e0b483be87d23383832aa6b558364a730c690fAdrian Roos 32e1e0b483be87d23383832aa6b558364a730c690fAdrian Roos@SmallTest 33e1e0b483be87d23383832aa6b558364a730c690fAdrian Roos@RunWith(AndroidJUnit4.class) 34e1e0b483be87d23383832aa6b558364a730c690fAdrian Roospublic class WeakIdentityHashMapTest { 35e1e0b483be87d23383832aa6b558364a730c690fAdrian Roos 36e1e0b483be87d23383832aa6b558364a730c690fAdrian Roos WeakIdentityHashMap<Object, Object> mMap; 37e1e0b483be87d23383832aa6b558364a730c690fAdrian Roos 38e1e0b483be87d23383832aa6b558364a730c690fAdrian Roos @Before 39e1e0b483be87d23383832aa6b558364a730c690fAdrian Roos public void setup() { 40e1e0b483be87d23383832aa6b558364a730c690fAdrian Roos mMap = new WeakIdentityHashMap<>(); 41e1e0b483be87d23383832aa6b558364a730c690fAdrian Roos } 42e1e0b483be87d23383832aa6b558364a730c690fAdrian Roos 43e1e0b483be87d23383832aa6b558364a730c690fAdrian Roos @Test 44e1e0b483be87d23383832aa6b558364a730c690fAdrian Roos public void testUsesIdentity() { 45e1e0b483be87d23383832aa6b558364a730c690fAdrian Roos String a1 = new String("a"); 46e1e0b483be87d23383832aa6b558364a730c690fAdrian Roos String a2 = new String("a"); 47e1e0b483be87d23383832aa6b558364a730c690fAdrian Roos assertNotSame(a1, a2); 48e1e0b483be87d23383832aa6b558364a730c690fAdrian Roos 49e1e0b483be87d23383832aa6b558364a730c690fAdrian Roos mMap.put(a1, "value1"); 50e1e0b483be87d23383832aa6b558364a730c690fAdrian Roos mMap.put(a2, "value2"); 51e1e0b483be87d23383832aa6b558364a730c690fAdrian Roos 52e1e0b483be87d23383832aa6b558364a730c690fAdrian Roos assertEquals("value1", mMap.get(a1)); 53e1e0b483be87d23383832aa6b558364a730c690fAdrian Roos assertEquals("value2", mMap.get(a2)); 54e1e0b483be87d23383832aa6b558364a730c690fAdrian Roos } 55e1e0b483be87d23383832aa6b558364a730c690fAdrian Roos 56e1e0b483be87d23383832aa6b558364a730c690fAdrian Roos @Test 57e1e0b483be87d23383832aa6b558364a730c690fAdrian Roos public void testWeaklyReferences() { 58e1e0b483be87d23383832aa6b558364a730c690fAdrian Roos Object object = new Object(); 59e1e0b483be87d23383832aa6b558364a730c690fAdrian Roos CollectionWaiter collectionWaiter = ReferenceTestUtils.createCollectionWaiter(object); 60e1e0b483be87d23383832aa6b558364a730c690fAdrian Roos 61e1e0b483be87d23383832aa6b558364a730c690fAdrian Roos mMap.put(object, "value"); 62e1e0b483be87d23383832aa6b558364a730c690fAdrian Roos object = null; 63e1e0b483be87d23383832aa6b558364a730c690fAdrian Roos 64e1e0b483be87d23383832aa6b558364a730c690fAdrian Roos // Wait until object has been collected. We'll also need to wait for mMap to become empty, 65e1e0b483be87d23383832aa6b558364a730c690fAdrian Roos // because our collection waiter may be told about the collection earlier than mMap. 66e1e0b483be87d23383832aa6b558364a730c690fAdrian Roos collectionWaiter.waitForCollection(); 67e1e0b483be87d23383832aa6b558364a730c690fAdrian Roos ReferenceTestUtils.waitForCondition(mMap::isEmpty); 68e1e0b483be87d23383832aa6b558364a730c690fAdrian Roos 69e1e0b483be87d23383832aa6b558364a730c690fAdrian Roos assertEquals(0, mMap.size()); 70e1e0b483be87d23383832aa6b558364a730c690fAdrian Roos assertTrue(mMap.isEmpty()); 71e1e0b483be87d23383832aa6b558364a730c690fAdrian Roos } 72e1e0b483be87d23383832aa6b558364a730c690fAdrian Roos}