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    package org.picocontainer.defaults;
009    
010    import java.io.Serializable;
011    
012    import org.jmock.Mock;
013    import org.jmock.MockObjectTestCase;
014    import org.picocontainer.Disposable;
015    import org.picocontainer.Startable;
016    import org.picocontainer.monitors.DefaultComponentMonitor;
017    
018    /**
019     * 
020     * @author Mauro Talevi
021     */
022    public class DefaultLifecycleStrategyTestCase extends MockObjectTestCase {
023    
024        private DefaultLifecycleStrategy strategy;
025        
026        public void setUp(){
027            strategy = new DefaultLifecycleStrategy(new DefaultComponentMonitor());
028        }
029    
030        public void testStartable(){
031            Object startable = mockComponent(true, false);
032            strategy.start(startable);
033            strategy.stop(startable);
034        }
035    
036        public void testDisposable(){
037            Object startable = mockComponent(false, true);
038            strategy.dispose(startable);
039        }
040    
041        public void testSerializable(){
042            Object serializable = mockComponent(false, false);
043            strategy.start(serializable);
044            strategy.stop(serializable);
045            strategy.dispose(serializable);
046        }
047        
048        private Object mockComponent(boolean startable, boolean disposeable) {
049            Mock mock = mock(Serializable.class);
050            if ( startable ) {
051                mock = mock(Startable.class);
052                mock.expects(atLeastOnce()).method("start");
053                mock.expects(atLeastOnce()).method("stop");
054            }
055            if ( disposeable ) {
056                mock = mock(Disposable.class);
057                mock.expects(atLeastOnce()).method("dispose");
058            }
059            return mock.proxy();
060        }
061    }