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 }