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