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    }