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 Paul Hammant * 009 *****************************************************************************/ 010 011 package org.picocontainer.containers; 012 013 import static org.junit.Assert.assertEquals; 014 import static org.junit.Assert.assertFalse; 015 import static org.junit.Assert.fail; 016 import static org.picocontainer.tck.MockFactory.mockeryWithCountingNamingScheme; 017 018 import org.jmock.Expectations; 019 import org.jmock.Mockery; 020 import org.jmock.integration.junit4.JMock; 021 import org.junit.Test; 022 import org.junit.runner.RunWith; 023 import org.picocontainer.ComponentAdapter; 024 import org.picocontainer.DefaultPicoContainer; 025 import org.picocontainer.NameBinding; 026 import org.picocontainer.PicoContainer; 027 import org.picocontainer.PicoVisitor; 028 import org.picocontainer.injectors.AdaptingInjection; 029 030 031 /** 032 * @author Paul Hammant 033 * @author Jörg Schaible 034 */ 035 @RunWith(JMock.class) 036 public class ImmutablePicoContainerTestCase { 037 038 private Mockery mockery = mockeryWithCountingNamingScheme(); 039 040 @Test public void testImmutingOfNullBarfs() { 041 try { 042 new ImmutablePicoContainer(null); 043 fail("Should have barfed"); 044 } catch (NullPointerException e) { 045 // expected 046 } 047 } 048 049 @Test public void testVisitingOfImmutableContainerWorks() { 050 final AdaptingInjection ai = new AdaptingInjection(); 051 final DefaultPicoContainer pico = new DefaultPicoContainer(ai); 052 Object foo = new Object(); 053 final ComponentAdapter componentAdapter = pico.addComponent(foo).getComponentAdapter(foo.getClass(), (NameBinding) null); 054 055 final PicoVisitor fooVisitor = mockery.mock(PicoVisitor.class); 056 mockery.checking(new Expectations() {{ 057 one(fooVisitor).visitContainer(with(same(pico))); will(returnValue(true)); 058 one(fooVisitor).visitComponentFactory(with(same(ai))); 059 one(fooVisitor).visitComponentAdapter(with(same(componentAdapter))); 060 }}); 061 PicoContainer ipc = new ImmutablePicoContainer(pico); 062 ipc.accept(fooVisitor); 063 } 064 065 @Test public void testProxyEquals() throws Exception { 066 DefaultPicoContainer pico = new DefaultPicoContainer(); 067 PicoContainer ipc = new ImmutablePicoContainer(pico); 068 assertEquals(ipc, ipc); 069 assertEquals(ipc, new ImmutablePicoContainer(pico)); 070 } 071 072 @Test public void testHashCodeIsSame() throws Exception { 073 DefaultPicoContainer pico = new DefaultPicoContainer(); 074 assertEquals(pico.hashCode(), new ImmutablePicoContainer(pico).hashCode()); 075 } 076 077 @Test public void testDoesNotEqualsToNull() { 078 DefaultPicoContainer pico = new DefaultPicoContainer(); 079 PicoContainer ipc = new ImmutablePicoContainer(pico); 080 assertFalse(ipc.equals(null)); 081 } 082 }