package org.exoplatform.services.jcr.impl.core.nodetype; import org.exoplatform.services.jcr.JcrImplBaseTest; import org.exoplatform.services.jcr.core.nodetype.NodeTypeData; import org.exoplatform.services.jcr.impl.core.NamespaceRegistryImpl; import org.exoplatform.services.jcr.impl.core.nodetype.registration.CNDStreamReader; import org.exoplatform.services.jcr.impl.core.nodetype.registration.CNDStreamWriter; import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; import java.io.InputStream; import java.util.List; /** * Created by The eXo Platform SAS.<br> * Class that tests read-write-read cycle for compact node type definition tools * ({@link CNDStreamReader} and {@link CNDStreamWriter}) * * @author <a href="mailto:nikolazius@gmail.com">Nikolay Zamosenchuk</a> * @version $Id: $ */ public class TestCNDSerialization extends JcrImplBaseTest { private static final String TEST_FILE = "cnd-reader-test-input.cnd"; public void testSerialization() throws Exception { /** input stream */ InputStream is = getClass().getClassLoader().getResourceAsStream("" + TEST_FILE); ByteArrayOutputStream baos = new ByteArrayOutputStream(); NamespaceRegistryImpl nsm = new NamespaceRegistryImpl(); /** reading and writing */ List<NodeTypeData> ntdList1 = new CNDStreamReader(nsm).read(is); new CNDStreamWriter(nsm).write(ntdList1, baos); /** new reader to read previous output */ List<NodeTypeData> ntdList2 = new CNDStreamReader(nsm).read(new ByteArrayInputStream(baos.toByteArray())); /** checking equality */ if (ntdList1.size() == 0 || ntdList1.size() != ntdList2.size()) { fail("Exported node type definition was not successfully read back in"); } else { for (int k = 0; k < ntdList1.size(); k++) { NodeTypeData ntd1 = ntdList1.get(k); NodeTypeData ntd2 = ntdList2.get(k); if (!ntd1.equals(ntd2)) { fail("Exported node type definition was not successfully read back in. \r\n" + ntd2.getName() + "differs from original " + ntd1.getName() + "\r\n" + baos.toString()); } } } } }