001/***************************************************************************** 002 * Copyright (C) PicoContainer Organization. All rights reserved. * 003 * ------------------------------------------------------------------------- * 004 * The software in this package is published under the terms of the BSD * 005 * style license a copy of which has been included with this distribution in * 006 * the LICENSE.txt file. * 007 * * 008 * Original code by * 009 *****************************************************************************/ 010package org.picocontainer.tck; 011 012import static org.junit.Assert.assertEquals; 013import static org.junit.Assert.assertNotNull; 014import static org.junit.Assert.assertSame; 015 016import org.junit.Test; 017import org.picocontainer.Characteristics; 018import org.picocontainer.MutablePicoContainer; 019import org.picocontainer.PicoException; 020 021/** 022 * @author Aslak Hellesøy 023 */ 024public abstract class AbstractLazyInstantiationTest { 025 026 protected abstract MutablePicoContainer createPicoContainer(); 027 028 public static class Kilroy { 029 public Kilroy(Havana havana) { 030 havana.graffiti("Kilroy was here"); 031 } 032 } 033 034 public static class Havana { 035 public String paint = "Clean wall"; 036 037 public void graffiti(String paint) { 038 this.paint = paint; 039 } 040 } 041 042 @Test public void testLazyInstantiation() throws PicoException { 043 MutablePicoContainer pico = createPicoContainer(); 044 045 pico.as(Characteristics.CACHE).addComponent(Kilroy.class); 046 pico.as(Characteristics.CACHE).addComponent(Havana.class); 047 048 assertSame(pico.getComponent(Havana.class), pico.getComponent(Havana.class)); 049 assertNotNull(pico.getComponent(Havana.class)); 050 assertEquals("Clean wall", pico.getComponent(Havana.class).paint); 051 assertNotNull(pico.getComponent(Kilroy.class)); 052 assertEquals("Kilroy was here", pico.getComponent(Havana.class).paint); 053 } 054}