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 import org.picocontainer.behaviors.AdaptingBehavior;
030
031
032 /**
033 * @author Paul Hammant
034 * @author Jörg Schaible
035 */
036 @RunWith(JMock.class)
037 public class ImmutablePicoContainerTestCase {
038
039 private Mockery mockery = mockeryWithCountingNamingScheme();
040
041 @Test public void testImmutingOfNullBarfs() {
042 try {
043 new ImmutablePicoContainer(null);
044 fail("Should have barfed");
045 } catch (NullPointerException e) {
046 // expected
047 }
048 }
049
050 @Test public void testVisitingOfImmutableContainerWorks() {
051 final AdaptingInjection ai = new AdaptingInjection();
052 final DefaultPicoContainer pico = new DefaultPicoContainer(ai);
053 Object foo = new Object();
054 final ComponentAdapter componentAdapter = pico.addComponent(foo).getComponentAdapter(foo.getClass(), (NameBinding) null);
055
056 final PicoVisitor fooVisitor = mockery.mock(PicoVisitor.class);
057 mockery.checking(new Expectations() {{
058 one(fooVisitor).visitContainer(with(same(pico)));
059 one(fooVisitor).visitComponentFactory(with(same(ai)));
060 one(fooVisitor).visitComponentAdapter(with(same(componentAdapter)));
061 }});
062 PicoContainer ipc = new ImmutablePicoContainer(pico);
063 ipc.accept(fooVisitor);
064 }
065
066 @Test public void testProxyEquals() throws Exception {
067 DefaultPicoContainer pico = new DefaultPicoContainer();
068 PicoContainer ipc = new ImmutablePicoContainer(pico);
069 assertEquals(ipc, ipc);
070 assertEquals(ipc, new ImmutablePicoContainer(pico));
071 }
072
073 @Test public void testHashCodeIsSame() throws Exception {
074 DefaultPicoContainer pico = new DefaultPicoContainer();
075 assertEquals(pico.hashCode(), new ImmutablePicoContainer(pico).hashCode());
076 }
077
078 @Test public void testDoesNotEqualsToNull() {
079 DefaultPicoContainer pico = new DefaultPicoContainer();
080 PicoContainer ipc = new ImmutablePicoContainer(pico);
081 assertFalse(ipc.equals(null));
082 }
083 }