package org.krakenapps.docxcod.test; import static org.junit.Assert.assertTrue; import java.io.File; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStreamReader; import java.util.ArrayList; import java.util.Arrays; import java.util.List; import java.util.Map; import org.json.JSONException; import org.json.JSONObject; import org.json.JSONTokener; import org.junit.After; import org.junit.Before; import org.junit.Test; import org.krakenapps.docxcod.AugmentedDirectiveProcessor; import org.krakenapps.docxcod.ChartDirectiveParser; import org.krakenapps.docxcod.Directive; import org.krakenapps.docxcod.DirectiveExtractor; import org.krakenapps.docxcod.FreeMarkerRunner; import org.krakenapps.docxcod.JsonHelper; import org.krakenapps.docxcod.MagicNodeUnwrapper; import org.krakenapps.docxcod.MergeFieldParser; import org.krakenapps.docxcod.OOXMLPackage; import org.krakenapps.docxcod.OOXMLProcessor; import org.krakenapps.docxcod.util.ZipHelper; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.w3c.dom.Node; public class DocxTest { private Logger logger = LoggerFactory.getLogger(getClass().getName()); private TearDownHelper tearDownHelper = new TearDownHelper(); @Before public void setUp() throws Exception { } @After public void tearDown() throws Exception { tearDownHelper.tearDown(); } // @Test public void fieldTest() throws IOException { File targetDir = new File("fieldTest"); targetDir.mkdirs(); // tearDownHelper.add(targetDir); OOXMLPackage docx = new OOXMLPackage(); docx.load(getClass().getResourceAsStream("/fieldTest.docx"), targetDir); List<OOXMLProcessor> parsers = new ArrayList<OOXMLProcessor>(); DirectiveExtractor directiveExtractor = new DirectiveExtractor(); parsers.add(directiveExtractor); for (OOXMLProcessor parser : parsers) { parser.process(docx, null); } String[] expected = new String[] { "@before-row#list data as a asdfasdfasdsfd", "asdsfdadsfadsfsdfa", "aslasdfasdfasdfddkfj", "asdfasdfasdf", "@before-row #list .vars[\"stania\"] as a", "asdfadfasdf", "ahsdfl;aksjdflksdjf", "#list asdf as qwer" }; int cnt = 0; for (Directive dir : directiveExtractor.getDirectives()) { @SuppressWarnings("unused") Node n = dir.getPosition(); String dirStr = dir.getDirectiveString(); logger.debug("extracted: " + dirStr); assertTrue(dirStr.equals(expected[cnt++])); } } @Test public void chartTest() throws IOException, JSONException { File targetDir = new File("_chartTest"); targetDir.mkdirs(); //tearDownHelper.add(targetDir); OOXMLPackage docx = new OOXMLPackage(); docx.load(getClass().getResourceAsStream("/chartTest.docx"), targetDir); InputStreamReader inputReader = new InputStreamReader(getClass().getResourceAsStream("/nestedListTest.in")); JSONTokener tokener = new JSONTokener(inputReader); Map<String, Object> rootMap = JsonHelper.parse((JSONObject) tokener.nextValue()); List<OOXMLProcessor> processors = new ArrayList<OOXMLProcessor>(); processors.add(new MergeFieldParser()); processors.add(new AugmentedDirectiveProcessor()); processors.add(new ChartDirectiveParser()); processors.add(new MagicNodeUnwrapper()); processors.add(new FreeMarkerRunner(rootMap)); for (OOXMLProcessor processor : processors) { processor.process(docx, rootMap); } File saveFile = new File("chartTest-save.docx"); docx.save(new FileOutputStream(saveFile)); // tearDownHelper.add(saveFile); } @Test public void mainTest() throws IOException, JSONException { File targetDir = new File("mainTest"); targetDir.mkdirs(); //tearDownHelper.add(targetDir); OOXMLPackage docx = new OOXMLPackage(); docx.load(getClass().getResourceAsStream("/nestedList2.docx"), targetDir); InputStreamReader inputReader = new InputStreamReader(getClass().getResourceAsStream("/nestedListTest.in")); JSONTokener tokener = new JSONTokener(inputReader); Map<String, Object> rootMap = JsonHelper.parse((JSONObject) tokener.nextValue()); List<OOXMLProcessor> processors = new ArrayList<OOXMLProcessor>(); processors.add(new MergeFieldParser()); processors.add(new AugmentedDirectiveProcessor()); processors.add(new MagicNodeUnwrapper()); processors.add(new FreeMarkerRunner(rootMap)); for (OOXMLProcessor processor : processors) { processor.process(docx, rootMap); } File saveFile = new File("mainTest-save.docx"); docx.save(new FileOutputStream(saveFile)); // tearDownHelper.add(saveFile); } @Test public void saveTest() throws IOException { File targetDir = new File("saveTest"); targetDir.mkdirs(); tearDownHelper.add(targetDir); OOXMLPackage docx = new OOXMLPackage(); docx.load(getClass().getResourceAsStream("/nestedList2.docx"), targetDir); File saveFile = new File("saveTest.docx"); docx.save(new FileOutputStream(saveFile)); tearDownHelper.add(saveFile); // diff word file } // @Test public void extractingTest() throws IOException { File targetDir = new File("extractingTest"); targetDir.mkdirs(); tearDownHelper.add(targetDir); OOXMLPackage docx = new OOXMLPackage(); docx.load(getClass().getResourceAsStream("/nestedList2.docx"), targetDir); String[] relPaths = { "", "customXml", "customXml/item1.xml", "customXml/itemProps1.xml", "customXml/_rels", "customXml/_rels/item1.xml.rels", "docProps", "docProps/app.xml", "docProps/core.xml", "word", "word/charts", "word/charts/chart1.xml", "word/charts/_rels", "word/charts/_rels/chart1.xml.rels", "word/document.xml", "word/embeddings", "word/embeddings/Microsoft_Excel_____1.xlsx", "word/endnotes.xml", "word/fontTable.xml", "word/footnotes.xml", "word/settings.xml", "word/styles.xml", "word/stylesWithEffects.xml", "word/theme", "word/theme/theme1.xml", "word/webSettings.xml", "word/_rels", "word/_rels/document.xml.rels", "[Content_Types].xml", "_rels", "_rels/.rels", }; ArrayList<File> extractedFiles = new ArrayList<File>(); ZipHelper.getFilesRecursivelyIn(targetDir, extractedFiles); File[] files = new File[relPaths.length]; for (int i = 0; i < relPaths.length; ++i) { files[i] = new File(targetDir, relPaths[i]); } Arrays.sort(files); Object[] extractedArray = extractedFiles.toArray(); Arrays.sort(extractedArray); assertTrue(Arrays.equals(extractedArray, files)); } @Test public void relsTest() { } }