@Test public void testWeakReference() { final Metadata m1 = lookup.lookup(Metadata.class); // Flush m1 out of the reference keeper final List<Metadata> list = new ArrayList<Metadata>(); createInstances(NNNN, list); assertFalse(MetadataCachedLookup.referenceKeeper.contains(m1)); // m1 is keeping the same object alive final Metadata m2 = lookup.lookup(Metadata.class); assertSame(m1, m2); }
@Test public void testLoookupAnotherClass() { assertNull(lookup.lookup(String.class)); }
@Test public void testLookup() { final Metadata metadata = lookup.lookup(Metadata.class); assertNotNull(metadata); assertSame(dataObject, metadata.getDataObject()); assertSame(metadata, lookup.metadataRef.get()); assertTrue(MetadataCachedLookup.referenceKeeper.contains(metadata)); final Metadata metadata1 = lookup.lookup(Metadata.class); assertSame(metadata, metadata1); }
@Test public void testWeakReference2() { Metadata m1 = lookup.lookup(Metadata.class); // Flush m1 out of the reference keeper final List<Metadata> list = new ArrayList<Metadata>(); createInstances(NNNN, list); assertFalse(MetadataCachedLookup.referenceKeeper.contains(m1)); m1 = null; // only weak reference from now metadataFactory.creationCount = 0; final Metadata m2 = lookup.lookup(Metadata.class); assertNotNull(m2); assertSame(dataObject, m2.getDataObject()); assertEquals(0, metadataFactory.creationCount); // not a new instance, the weak ref still keeps the old one alive }
@Test public void testGC() { Metadata m1 = lookup.lookup(Metadata.class); // Flush m1 out of the reference keeper final List<Metadata> list = new ArrayList<Metadata>(); createInstances(NNNN, list); assertFalse(MetadataCachedLookup.referenceKeeper.contains(m1)); m1 = null; // only weak reference from now consumeAllAvailableMemory(); metadataFactory.creationCount = 0; final Metadata m2 = lookup.lookup(Metadata.class); assertNotNull(m2); assertSame(dataObject, m2.getDataObject()); assertEquals(1, metadataFactory.creationCount); // a new instance has been created }
@Test public void testLookupWithTemplate() { final Result<Metadata> result = lookup.lookup(new Lookup.Template<Metadata>(Metadata.class)); assertNotNull(result); final Collection<? extends Metadata> allInstances = result.allInstances(); assertNotNull(allInstances); assertEquals(1, allInstances.size()); final Metadata metadata = allInstances.iterator().next(); assertNotNull(metadata); assertSame(dataObject, metadata.getDataObject()); assertSame(metadata, lookup.metadataRef.get()); assertTrue(MetadataCachedLookup.referenceKeeper.contains(metadata)); final Metadata metadata1 = lookup.lookup(Metadata.class); assertSame(metadata, metadata1); }
@Test public void testLoookupAnotherClassWithTemplate() { final Result<String> result = lookup.lookup(new Lookup.Template<String>(String.class)); assertNotNull(result); final Collection<? extends String> allInstances = result.allInstances(); assertNotNull(allInstances); assertTrue(allInstances.isEmpty()); }