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                                                          *
009     *****************************************************************************/
010    package org.picocontainer.defaults;
011    
012    import com.thoughtworks.xstream.XStream;
013    import com.thoughtworks.xstream.core.JVM;
014    import com.thoughtworks.xstream.io.xml.XppDriver;
015    import junit.framework.TestCase;
016    import org.picocontainer.MutablePicoContainer;
017    import org.picocontainer.PicoContainer;
018    import org.picocontainer.DefaultPicoContainer;
019    import org.picocontainer.testmodel.DependsOnTouchable;
020    import org.picocontainer.testmodel.SimpleTouchable;
021    
022    /**
023     * @author Aslak Hellesøy
024     * @version $Revision: 3603 $
025     */
026    public final class XStreamSerialisationTestCase extends TestCase {
027        private final XStream xStream = new XStream(new XppDriver());
028    
029        public void testShouldBeAbleToSerialiseEmptyPico() {
030            if (JVM.is14()) {
031                MutablePicoContainer pico = new DefaultPicoContainer();
032                String picoXml = xStream.toXML(pico);
033                PicoContainer serializedPico = (PicoContainer) xStream.fromXML(picoXml);
034    
035                assertEquals(0, serializedPico.getComponents().size());
036            }
037        }
038    
039        public void testShouldBeAbleToSerialisePicoWithUninstantiatedComponents() {
040            if (JVM.is14()) {
041                MutablePicoContainer pico = new DefaultPicoContainer();
042                pico.addComponent(SimpleTouchable.class);
043                pico.addComponent(DependsOnTouchable.class);
044                String picoXml = xStream.toXML(pico);
045                PicoContainer serializedPico = (PicoContainer) xStream.fromXML(picoXml);
046    
047                assertEquals(2, serializedPico.getComponents().size());
048            }
049        }
050    
051        public void testShouldBeAbleToSerialisePicoWithInstantiatedComponents() {
052            if (JVM.is14()) {
053                MutablePicoContainer pico = new DefaultPicoContainer();
054                pico.addComponent(SimpleTouchable.class);
055                pico.addComponent(DependsOnTouchable.class);
056                pico.getComponents();
057                String picoXml = xStream.toXML(pico);
058                PicoContainer serializedPico = (PicoContainer) xStream.fromXML(picoXml);
059    
060                assertEquals(2, serializedPico.getComponents().size());
061            }
062        }
063    }