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.defaults;
012
013 import org.picocontainer.ComponentAdapter;
014 import org.picocontainer.PicoContainer;
015 import org.picocontainer.PicoVisitor;
016
017 import org.jmock.Mock;
018 import org.jmock.MockObjectTestCase;
019
020
021 /**
022 * @author Paul Hammant
023 * @author Jörg Schaible
024 */
025 public class ImmutablePicoContainerProxyFactoryTest extends MockObjectTestCase {
026
027 public void testImmutingOfNullBarfs() {
028 try {
029 ImmutablePicoContainerProxyFactory.newProxyInstance(null);
030 fail("Should have barfed");
031 } catch (NullPointerException e) {
032 // expected
033 }
034 }
035
036 public void testLifecylceBarfs() {
037 Mock mockPicoContainer = mock(PicoContainer.class);
038 PicoContainer ipc = ImmutablePicoContainerProxyFactory.newProxyInstance((PicoContainer)mockPicoContainer
039 .proxy());
040 try {
041 ipc.start();
042 fail("should have barfed");
043 } catch (UnsupportedOperationException e) {
044 // expected
045 }
046 try {
047 ipc.stop();
048 fail("should have barfed");
049 } catch (UnsupportedOperationException e) {
050 // expected
051 }
052 try {
053 ipc.dispose();
054 fail("should have barfed");
055 } catch (UnsupportedOperationException e) {
056 // expected
057 }
058 }
059
060 public void testVisitingOfImmutableContainerWorks() {
061 DefaultPicoContainer pico = new DefaultPicoContainer();
062 Object foo = new Object();
063 ComponentAdapter componentAdapter = pico.registerComponentInstance(foo);
064
065 Mock fooVisitor = new Mock(PicoVisitor.class);
066 fooVisitor.expects(once()).method("visitContainer").with(same(pico));
067 fooVisitor.expects(once()).method("visitComponentAdapter").with(same(componentAdapter));
068
069 PicoContainer ipc = ImmutablePicoContainerProxyFactory.newProxyInstance(pico);
070 ipc.accept((PicoVisitor)fooVisitor.proxy());
071 }
072
073 public void testProxyEquals() throws Exception {
074 DefaultPicoContainer pico = new DefaultPicoContainer();
075 PicoContainer ipc = ImmutablePicoContainerProxyFactory.newProxyInstance(pico);
076 assertEquals(ipc, ipc);
077 assertEquals(ipc, ImmutablePicoContainerProxyFactory.newProxyInstance(pico));
078 }
079
080 public void testHashCodeIsSame() throws Exception {
081 DefaultPicoContainer pico = new DefaultPicoContainer();
082 PicoContainer ipc = ImmutablePicoContainerProxyFactory.newProxyInstance(pico);
083 assertEquals(ipc.hashCode(), ImmutablePicoContainerProxyFactory.newProxyInstance(pico).hashCode());
084 }
085
086 public void testDoesNotEqualsToNull() {
087 DefaultPicoContainer pico = new DefaultPicoContainer();
088 PicoContainer ipc = ImmutablePicoContainerProxyFactory.newProxyInstance(pico);
089 assertFalse(ipc.equals(null));
090 }
091 }