public Metadata findOrCreateMetadata (final DataObject dataObject) { final Metadata metadata = Mockito.mock(Metadata.class); Mockito.stub(metadata.getDataObject()).toReturn(dataObject); creationCount++; return metadata; } }
@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 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 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 }