001    package org.picocontainer.defaults;
002    
003    import com.thoughtworks.xstream.XStream;
004    import com.thoughtworks.xstream.core.JVM;
005    import com.thoughtworks.xstream.io.xml.XppDriver;
006    import junit.framework.TestCase;
007    import org.picocontainer.MutablePicoContainer;
008    import org.picocontainer.PicoContainer;
009    import org.picocontainer.testmodel.DependsOnTouchable;
010    import org.picocontainer.testmodel.SimpleTouchable;
011    
012    /**
013     * @author Aslak Hellesøy
014     * @version $Revision: 1697 $
015     */
016    public class XStreamSerialisationTestCase extends TestCase {
017        private XStream xStream = new XStream(new XppDriver());
018    
019        public void testShouldBeAbleToSerialiseEmptyPico() {
020            if (JVM.is14()) {
021                MutablePicoContainer pico = new DefaultPicoContainer();
022                String picoXml = xStream.toXML(pico);
023                PicoContainer serializedPico = (PicoContainer) xStream.fromXML(picoXml);
024    
025                assertEquals(0, serializedPico.getComponentInstances().size());
026            }
027        }
028    
029        public void testShouldBeAbleToSerialisePicoWithUninstantiatedComponents() {
030            if (JVM.is14()) {
031                MutablePicoContainer pico = new DefaultPicoContainer();
032                pico.registerComponentImplementation(SimpleTouchable.class);
033                pico.registerComponentImplementation(DependsOnTouchable.class);
034                String picoXml = xStream.toXML(pico);
035                PicoContainer serializedPico = (PicoContainer) xStream.fromXML(picoXml);
036    
037                assertEquals(2, serializedPico.getComponentInstances().size());
038            }
039        }
040    
041        public void testShouldBeAbleToSerialisePicoWithInstantiatedComponents() {
042            if (JVM.is14()) {
043                MutablePicoContainer pico = new DefaultPicoContainer();
044                pico.registerComponentImplementation(SimpleTouchable.class);
045                pico.registerComponentImplementation(DependsOnTouchable.class);
046                pico.getComponentInstances();
047                String picoXml = xStream.toXML(pico);
048                PicoContainer serializedPico = (PicoContainer) xStream.fromXML(picoXml);
049    
050                assertEquals(2, serializedPico.getComponentInstances().size());
051            }
052        }
053    }