diff options
author | Andrey Loskutov | 2016-08-25 14:55:41 +0000 |
---|---|---|
committer | Andrey Loskutov | 2016-08-25 14:55:41 +0000 |
commit | ba0abc228cde4836afb6bc6fc4baf8259973e762 (patch) | |
tree | 425421aaba53b162dfbf13fdfbe4e24187b8c2ab /org.eclipse.debug.tests | |
parent | 60e34dbeeeb3d5c8a2fe7f2e81a93bcdbd2b7b00 (diff) | |
download | eclipse.platform.debug-ba0abc228cde4836afb6bc6fc4baf8259973e762.tar.gz eclipse.platform.debug-ba0abc228cde4836afb6bc6fc4baf8259973e762.tar.xz eclipse.platform.debug-ba0abc228cde4836afb6bc6fc4baf8259973e762.zip |
Bug 500273 - Removing elements from source lookup cache not workingY20160908-1000Y20160901-1000I20160906-0800I20160830-0800
properly
Applied patch from Alexander Schwarz and added test for the LRU cache.
Change-Id: I145af345d019a7f1414e7b97d1802891948ccf91
Signed-off-by: Andrey Loskutov <loskutov@gmx.de>
Diffstat (limited to 'org.eclipse.debug.tests')
-rw-r--r-- | org.eclipse.debug.tests/src/org/eclipse/debug/tests/sourcelookup/SourceLookupFacilityTests.java | 49 |
1 files changed, 48 insertions, 1 deletions
diff --git a/org.eclipse.debug.tests/src/org/eclipse/debug/tests/sourcelookup/SourceLookupFacilityTests.java b/org.eclipse.debug.tests/src/org/eclipse/debug/tests/sourcelookup/SourceLookupFacilityTests.java index 9e474edd1..693f81b0e 100644 --- a/org.eclipse.debug.tests/src/org/eclipse/debug/tests/sourcelookup/SourceLookupFacilityTests.java +++ b/org.eclipse.debug.tests/src/org/eclipse/debug/tests/sourcelookup/SourceLookupFacilityTests.java @@ -10,12 +10,17 @@ *******************************************************************************/ package org.eclipse.debug.tests.sourcelookup; -import junit.framework.TestCase; +import java.lang.reflect.Field; +import java.util.HashMap; +import java.util.LinkedHashMap; import org.eclipse.debug.core.model.IStackFrame; import org.eclipse.debug.internal.ui.sourcelookup.SourceLookupFacility; +import org.eclipse.debug.internal.ui.sourcelookup.SourceLookupResult; import org.eclipse.debug.ui.sourcelookup.ISourceLookupResult; +import junit.framework.TestCase; + /** * Tests {@link SourceLookupFacility} * @@ -289,4 +294,46 @@ public class SourceLookupFacilityTests extends TestCase { SourceLookupFacility.shutdown(); } } + + public void testLRU() throws Exception { + try { + final int MAX_LRU_SIZE = 10; + + // Get the original map + Field field = SourceLookupFacility.class.getDeclaredField("fLookupResults"); //$NON-NLS-1$ + field.setAccessible(true); + HashMap<?, ?> map = (HashMap<?, ?>) field.get(null); + LinkedHashMap<String, ISourceLookupResult> cached = new LinkedHashMap<>(); + + // fill the LRU with one element overflow + for (int i = 0; i < MAX_LRU_SIZE + 1; i++) { + String artifact = "" + i; //$NON-NLS-1$ + ISourceLookupResult result = SourceLookupFacility.getDefault().lookup(artifact, fTestLocator, false); + assertNotNull("There should be a result", result); //$NON-NLS-1$ + assertFalse(cached.containsKey(result)); + cached.put(artifact, result); + + result = SourceLookupFacility.getDefault().lookup(artifact, fTestLocator, false); + assertTrue(cached.containsValue(result)); + assertTrue(map.size() <= MAX_LRU_SIZE); + } + assertEquals(MAX_LRU_SIZE, map.size()); + + + // The LRU cache is full now, and the very first element should be + // *not* in the LRU cache anymore + assertFalse(map.containsValue(cached.values().iterator().next())); + + // If we lookup for the first element again, we should get new one + String artifact = "" + 0; //$NON-NLS-1$ + SourceLookupResult result = SourceLookupFacility.getDefault().lookup(artifact, fTestLocator, false); + assertNotNull("There should be a result", result); //$NON-NLS-1$ + assertFalse(cached.containsValue(result)); + + // Check: the LRU map size should not grow + assertEquals(MAX_LRU_SIZE, map.size()); + } finally { + SourceLookupFacility.shutdown(); + } + } } |