/** * Copyright (c) 2008 Really Strategies, Inc. */ package org.dita2indesign.indesign.inx; import java.io.File; import java.util.Iterator; import java.util.List; import junit.framework.Test; import junit.framework.TestSuite; import org.apache.log4j.Logger; import org.dita2indesign.indesign.inx.model.InDesignComponent; import org.dita2indesign.indesign.inx.model.InDesignDocument; import org.dita2indesign.indesign.inx.model.InDesignObject; import org.dita2indesign.indesign.inx.model.InxHelper; import org.dita2indesign.indesign.inx.model.MasterSpread; import org.dita2indesign.indesign.inx.model.Page; import org.dita2indesign.indesign.inx.model.PageSideOption; import org.dita2indesign.indesign.inx.model.Rectangle; import org.dita2indesign.indesign.inx.model.Spread; import org.dita2indesign.indesign.inx.model.Story; import org.dita2indesign.indesign.inx.model.TextFrame; import org.dita2indesign.indesign.inx.model.TextStyleRange; import org.dita2indesign.indesign.inx.model.TransformationMatix; import org.dita2indesign.indesign.inx.writers.InxWriter; import org.dita2indesign.util.DataUtil; import org.w3c.dom.Document; import org.w3c.dom.Element; /** * */ public class ComplexPageCreationTest extends InxReaderTestBase { Logger logger = Logger.getLogger(ComplexPageCreationTest.class); private InDesignDocument inDesignDoc; public static Test suite() { TestSuite suite = new TestSuite(ComplexPageCreationTest.class); return suite; } public void setUp() throws Exception { super.setUp(); inDesignDoc = new InDesignDocument(); inDesignDoc.load(ddgTemplate); } public void testCreateNewComplexPage() throws Exception { String masterSpreadName = "B-Meditation"; String INITIAL_FRAME_LABEL = "initialFrame"; MasterSpread masterSpread = inDesignDoc.getMasterSpread(masterSpreadName); assertNotNull("Failed to find master spread", masterSpread); int overrideableFrameCount = 0; for (TextFrame frame : masterSpread.getAllFrames()) { if (frame.isOverrideable()) overrideableFrameCount++; } System.out.println("Overrideable frame count; " + overrideableFrameCount); Spread spread = null; Page page = null; spread = inDesignDoc.getSpread(0); page = spread.getOddPage(); assertNotNull("Didn't get a page", page); assertEquals(spread, page.getSpread()); // See if we can delete the first page: assertEquals("Expected 1 pages", 1, spread.getPages().size()); spread.addPage(2); assertEquals("Expected 2 pages", 2, spread.getPages().size()); page = spread.getEvenPage(); assertNotNull("Expected an even page", page); spread.removePage(page); assertEquals("Expected only 1 page", 1, spread.getPages().size()); page = spread.getEvenPage(); assertNull("Expected no even page", page); page = spread.getOddPage(); assertNotNull("Expected an odd page"); List<Page> pages = spread.getPages(); int pageIndex = pages.indexOf(page); assertEquals(0,pageIndex); InDesignObject obj = inDesignDoc.getObject("u226"); assertNotNull(obj); // Check the page geometry: assertEquals(576.0, page.getWidth()); assertEquals(783.0, page.getHeight()); TransformationMatix matrix = page.getTransformationMatrix(); assertEquals(0.0, matrix.getXTranslation()); // Odd pages have no horizontal translation. assertEquals(-391.5, matrix.getYTranslation()); // Spread origin is center of spread, so Y translate is -(H/2) page.setAppliedMaster(masterSpread); page.overrideMasterSpreadObjects(); // Verify that overridden threaded frames do not still have the master spread as their // parent spread: Spread master = page.getAppliedMaster(); assertNotNull(master); spread = page.getSpread(); for (TextFrame frame : page.getAllFrames()) { TextFrame next = frame.getNextInThread(); while (next != null) { assertSame(spread, (Spread)next.getParent()); assertNotSame(master, (Spread)next.getParent()); TextFrame prev = frame.getPreviousInThread(); if (prev != null) { assertSame(spread, (Spread)prev.getParent()); assertNotSame(master, (Spread)prev.getParent()); TextFrame first = frame.getFirstFrameInThread(); assertSame(spread, (Spread)first.getParent()); assertNotSame(master, (Spread)first.getParent()); TextFrame last = frame.getLastFrameInThread(); assertSame(spread, (Spread)last.getParent()); assertNotSame(master, (Spread)last.getParent()); } next = next.getNextInThread(); } } // Now look for a text frame with the label "initialFrame" or // just get the first text frame in the list of frames. String targetLabel = INITIAL_FRAME_LABEL + (page.getPageSide().equals(PageSideOption.LEFT_HAND)? "Even" : "Odd"); TextFrame frame = InxHelper.getFrameForLabel(spread, targetLabel); assertNotNull("Did not find frame with label \"" + targetLabel + "\"", frame); assertTrue("Expected some children", frame.getChildren().size() > 0); InDesignComponent wrapPrefs = null; for (InDesignComponent child : frame.getChildren()) { if ("ctxw".equals(child.getInxTagName())) { wrapPrefs = child; break; } } assertNotNull("Failed to find wrap preferences child.", wrapPrefs); // Make the story assertNotNull("Didn't get InCopy article resource", incopyArticle01); Story incxStory = InxHelper.getStoryForIncxDoc(inDesignDoc, incopyArticle01); int txsrCnt = 0; Iterator<TextStyleRange> iter = incxStory.getTextStyleRangeIterator(); while (iter.hasNext()) { iter.next(); txsrCnt++; } assertTrue("Expected some text ranges", txsrCnt > 0); assertNotNull("Failed to get story from InCopy aricle", incxStory); frame.setParentStory(incxStory); assertEquals("Story doesn't match", incxStory, frame.getParentStory()); File inxFile = File.createTempFile("testWriteInxFile_", ".inx"); System.err.println("Temp file: " + inxFile.getAbsolutePath()); InxWriter writer = new InxWriter(inxFile); writer.write(inDesignDoc); assertTrue("File does not exist", inxFile.exists()); assertTrue("File has no data", inxFile.length() > 0); // logger.info("inxXML=" + inxXml); assertTrue("File is not long enough", inxFile.length() > 1000); // Now load the file we just wrote and check it: Document inxDom = DataUtil.constructNonValidatingDocumentBuilder().parse(inxFile); assertNotNull("inxDom is null", inxDom); Element docElem = inxDom.getDocumentElement(); assertNotNull("No document element", docElem); assertEquals("Expected <docu>", "docu", docElem.getNodeName()); InDesignDocument newDoc = new InDesignDocument(); newDoc.load(docElem); assertEquals("Expected one spread", 1, newDoc.getSpreads().size()); int originalChildCount = spread.getRectangles().size(); spread = newDoc.getSpread(0); assertNotNull("Expected a spread", spread); //assertEquals("Child count does not match original", originalChildCount, spread.getChildren().size()); //assertEquals("Frame count did not match", overrideableFrameCount, spread.getAllFrames().size()); page = spread.getOddPage(); assertNotNull("Expected a page", page); page.overrideMasterSpreadObjects(); List<Rectangle> rects = page.getRectangles(); assertNotNull(rects); //assertEquals("Overridden frames doesn't match expected count", overrideableFrameCount, rects.size()); } }