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 org.picocontainer.ComponentAdapter;
014 import org.picocontainer.PicoContainer;
015 import org.picocontainer.PicoVisitor;
016 import org.picocontainer.DefaultPicoContainer;
017
018 import org.jmock.Mock;
019 import org.jmock.MockObjectTestCase;
020
021
022 /**
023 * @author Paul Hammant
024 * @author Jörg Schaible
025 */
026 public class ImmutablePicoContainerTestCase extends MockObjectTestCase {
027
028 public void testImmutingOfNullBarfs() {
029 try {
030 new ImmutablePicoContainer(null);
031 fail("Should have barfed");
032 } catch (NullPointerException e) {
033 // expected
034 }
035 }
036
037 public void testVisitingOfImmutableContainerWorks() {
038 DefaultPicoContainer pico = new DefaultPicoContainer();
039 Object foo = new Object();
040 ComponentAdapter componentAdapter = pico.addComponent(foo).getComponentAdapter(foo.getClass(), null);
041
042 Mock fooVisitor = new Mock(PicoVisitor.class);
043 fooVisitor.expects(once()).method("visitContainer").with(same(pico));
044 fooVisitor.expects(once()).method("visitComponentAdapter").with(same(componentAdapter));
045
046 PicoContainer ipc = new ImmutablePicoContainer(pico);
047 ipc.accept((PicoVisitor)fooVisitor.proxy());
048 }
049
050 public void testProxyEquals() throws Exception {
051 DefaultPicoContainer pico = new DefaultPicoContainer();
052 PicoContainer ipc = new ImmutablePicoContainer(pico);
053 assertEquals(ipc, ipc);
054 assertEquals(ipc, new ImmutablePicoContainer(pico));
055 }
056
057 public void testHashCodeIsSame() throws Exception {
058 DefaultPicoContainer pico = new DefaultPicoContainer();
059 assertEquals(pico.hashCode(), new ImmutablePicoContainer(pico).hashCode());
060 }
061
062 public void testDoesNotEqualsToNull() {
063 DefaultPicoContainer pico = new DefaultPicoContainer();
064 PicoContainer ipc = new ImmutablePicoContainer(pico);
065 assertFalse(ipc.equals(null));
066 }
067 }