]> git.argeo.org Git - lgpl/argeo-commons.git/blobdiff - org.argeo.jcr/ext/test/org/argeo/jcr/docbook/DocBookModelTest.java
Rename Commons bundles
[lgpl/argeo-commons.git] / org.argeo.jcr / ext / test / org / argeo / jcr / docbook / DocBookModelTest.java
diff --git a/org.argeo.jcr/ext/test/org/argeo/jcr/docbook/DocBookModelTest.java b/org.argeo.jcr/ext/test/org/argeo/jcr/docbook/DocBookModelTest.java
new file mode 100644 (file)
index 0000000..5af20ba
--- /dev/null
@@ -0,0 +1,115 @@
+package org.argeo.jcr.docbook;
+
+import java.io.ByteArrayInputStream;
+import java.io.ByteArrayOutputStream;
+import java.io.InputStream;
+import java.io.InputStreamReader;
+
+import javax.jcr.RepositoryException;
+
+import org.apache.commons.io.IOUtils;
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+import org.apache.jackrabbit.commons.cnd.CndImporter;
+import org.argeo.jackrabbit.unit.AbstractJackrabbitTestCase;
+import org.argeo.jcr.JcrUtils;
+
+public class DocBookModelTest extends AbstractJackrabbitTestCase {
+       private final static Log log = LogFactory.getLog(DocBookModelTest.class);
+
+       public void testLoadWikipediaSample() throws Exception {
+               importXml("WikipediaSample.dbk.xml");
+       }
+
+       public void XXXtestLoadHowTo() throws Exception {
+               importXml("howto.xml", false);
+       }
+
+       protected void importXml(String res) throws Exception {
+               importXml(res, true);
+       }
+
+       protected void importXml(String res, Boolean mini) throws Exception {
+               byte[] bytes;
+               try (InputStream in = getClass().getResourceAsStream(res)) {
+                       bytes = IOUtils.toByteArray(in);
+               }
+
+               {// cnd
+                       long begin = System.currentTimeMillis();
+                       if (mini) {
+                               InputStreamReader reader = new InputStreamReader(getClass()
+                                               .getResourceAsStream(
+                                                               "/org/argeo/jcr/docbook/docbook.cnd"));
+                               CndImporter.registerNodeTypes(reader, session());
+                               reader.close();
+                       } else {
+                               InputStreamReader reader = new InputStreamReader(getClass()
+                                               .getResourceAsStream(
+                                                               "/org/argeo/jcr/docbook/docbook-full.cnd"));
+                               CndImporter.registerNodeTypes(reader, session());
+                               reader.close();
+                       }
+                       long duration = System.currentTimeMillis() - begin;
+                       if (log.isDebugEnabled())
+                               log.debug(" CND loaded in " + duration + " ms");
+               }
+
+               String testPath = "/" + res;
+               // if (mini)
+               JcrUtils.mkdirs(session(), testPath, "dbk:set");
+               // else
+               // JcrUtils.mkdirs(session(), testPath, "dbk:book");
+
+               DocBookModel model = new DocBookModel(session());
+               try (InputStream in = new ByteArrayInputStream(bytes)) {
+                       long begin = System.currentTimeMillis();
+                       model.importXml(testPath, in);
+                       long duration = System.currentTimeMillis() - begin;
+                       if (log.isDebugEnabled())
+                               log.debug("Imported " + res + " " + (bytes.length / 1024l)
+                                               + " kB in " + duration + " ms ("
+                                               + (bytes.length / duration) + " B/ms)");
+               }
+
+               saveSession();
+               // JcrUtils.debug(session().getRootNode());
+
+               try (ByteArrayOutputStream out = new ByteArrayOutputStream()) {
+                       try {
+                               model.exportXml(testPath + "/dbk:book", out);
+                       } catch (Exception e) {
+                               model.exportXml(testPath + "/dbk:article", out);
+                       }
+                       bytes = out.toByteArray();
+
+                       session().logout();
+                       model.setSession(session());
+
+                       // log.debug(new String(bytes));
+                       try (InputStream in = new ByteArrayInputStream(bytes)) {
+                               long begin = System.currentTimeMillis();
+                               model.importXml(testPath, in);
+                               long duration = System.currentTimeMillis() - begin;
+                               if (log.isDebugEnabled())
+                                       log.debug("Re-imported " + res + " "
+                                                       + (bytes.length / 1024l) + " kB in " + duration
+                                                       + " ms (" + (bytes.length / duration) + " B/ms)");
+                       }
+               }
+               saveSession();
+       }
+
+       protected void saveSession() throws RepositoryException {
+               long begin = System.currentTimeMillis();
+               session().save();
+               long duration = System.currentTimeMillis() - begin;
+               if (log.isDebugEnabled())
+                       log.debug(" Session save took " + duration + " ms");
+       }
+
+       // public static Test suite() {
+       // return defaultTestSuite(DocBookModelTest.class);
+       // }
+
+}