package org.dita2indesign.indesign.inx; import java.util.ArrayList; import java.util.Collection; import java.util.Iterator; import java.util.List; import java.util.Set; import junit.framework.Test; import junit.framework.TestSuite; import org.apache.log4j.Logger; import org.dita2indesign.indesign.inx.model.Box; import org.dita2indesign.indesign.inx.model.DocumentPreferences; import org.dita2indesign.indesign.inx.model.Geometry; import org.dita2indesign.indesign.inx.model.InDesignComponent; import org.dita2indesign.indesign.inx.model.InDesignDocument; 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.Path; import org.dita2indesign.indesign.inx.model.PathPoint; 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; /** * Test ability to read an INX file. */ public class InxReaderTests extends InxReaderTestBase { Logger logger = Logger.getLogger(this.getClass()); public static Test suite() { TestSuite suite = new TestSuite(InxReaderTests.class); return suite; } public void setUp() throws Exception { super.setUp(); } public void testReadInx() throws Throwable { InDesignDocument doc = new InDesignDocument(); doc.load(inxData); DocumentPreferences docPrefs; docPrefs = doc.getDocumentPreferences(); assertNotNull(docPrefs); assertEquals("Unexpected page height value", 792.0, docPrefs.getPageHeight()); assertEquals("Unexpected page width value", 612.0, docPrefs.getPageWidth()); Iterator<Story> iter = doc.getStoryIterator(); assertNotNull(iter); assertTrue(iter.hasNext()); Story story = iter.next(); assertNotNull(story.getId()); assertEquals("ud6", story.getId()); assertEquals(doc.getObject("ud6"), story); Iterator<TextStyleRange> trIter = story.getTextStyleRangeIterator(); assertTrue(trIter.hasNext()); int cnt = 0; InDesignComponent comp; TextStyleRange run; while (trIter.hasNext()) { comp = trIter.next(); assertTrue(comp instanceof TextStyleRange); run = (TextStyleRange)comp; assertTrue(run.hasProperty("prst")); assertTrue(run.hasProperty("crst")); cnt++; if (cnt == 4) { String text = run.getText(); assertTrue("Expected specific text for text run " + cnt + ", got \"" + text + "\"", text.startsWith(" 1866 was marked by a bizarre development")); } } assertEquals(7, cnt); } /** * Tests the ability to access the page masters and frames within those page * masters. * @throws Throwable */ public void testFrameProperities() throws Throwable { InDesignDocument doc = new InDesignDocument(); Spread spread; List<TextFrame> frames; InDesignComponent frame; doc = new InDesignDocument(); doc.load(geoTest); spread = doc.getSpreads().get(0); assertNotNull("Didn't find spreads[0]", spread); frames = spread.getAllFrames(); assertNotNull("Got null list of frames", frames); assertTrue("Got empty list of frames, expected at least 8", frames.size() > 0); frame = frames.get(0); assertNotNull("No parent for frame", frame.getParent()); assertEquals("Wrong parent for frame", spread, frame.getParent()); String label = frame.getLabel(); assertNotNull("Got null label", label); } /** * Tests the ability to access the page masters and frames within those page * masters. * @throws Throwable */ public void testPageProperities() throws Throwable { InDesignDocument doc = new InDesignDocument(); MasterSpread master; Spread spread; Collection<Page> pages; Page page; List<TextFrame> frames; String masterName; masterName = "A-Master"; doc.load(inxData); master = doc.getMasterSpread(masterName); assertNotNull(master); pages = master.getPages(); // Document inxData uses facing pages, inxData2 does not. page = master.getEvenPage(); assertNotNull(page); assertEquals("Page does not report left hand", PageSideOption.LEFT_HAND, page.getPageSide()); page = master.getOddPage(); assertNotNull(page); assertEquals("Page does not report right hand", PageSideOption.RIGHT_HAND, page.getPageSide()); // geoTest has lots of frames on first spread doc = new InDesignDocument(); doc.load(geoTest); spread = doc.getSpreads().get(0); return; // These tests are now bogus because you don't automatically // copy frames from the master page. // assertNotNull("Didn't find spreads[0]", spread); // frames = spread.getAllFrames(); // assertNotNull("Got null list of frames", frames); // assertTrue("Got empty list of frames, expected at least 6", frames.size() > 0); // page = spread.getOddPage(); // assertNotNull("Didn't get an odd page from the master spread", page); // assertEquals("Page did not return expected parent", spread, page.getParent()); // // frames = page.getAllFrames(); // assertNotNull("Got a null frame list from getAllFrames()", frames); // assertTrue("No frames in frame list", frames.size() > 0); // assertEquals("Expected 5 frames on page, found " + frames.size(), 5, frames.size()); } public void testBoxOperations() throws Exception { // Values are left, top, right bottom, defining // the positions of the four sides. String boxData1 = "x_4_D_10_D_20_D_30_D_40"; String boxData2 = "x_4_D_15_D_20_D_30_D_40"; String boxData3 = "x_4_D_50_D_20_D_70_D_40"; String boxData4 = "x_4_D_50_D_50_D_-70_D_-40"; String boxData5 = "x_4_D_15_D_21_D_29_D_39"; Box box1; Box box2; Box box3; Box box4; Box box5; box1 = new Box(boxData1); assertEquals(10.0, box1.getLeft()); assertEquals(20.0, box1.getTop()); assertEquals(30.0, box1.getRight()); assertEquals(40.0, box1.getBottom()); box2 = new Box(boxData2); box3 = new Box(boxData3); box4 = new Box(boxData4); box5 = new Box(boxData5); assertTrue("Box 2 should be reported as intersecting box 1", box2.intersects(box1)); assertTrue("Box 1 should be reported as intersecting box 1", box1.intersects(box2)); assertFalse("Box 3 should be reported as not intersecting box 1", box3.intersects(box1)); assertFalse("Box 1 should be reported as not intersecting box 3", box1.intersects(box3)); assertTrue("Box 4 should be reported as intersecting box 1", box4.intersects(box1)); assertTrue("Box 1 should be reported as containing box 5", box1.contains(box5)); } /** * Tests the ability to access the page masters and frames within those page * masters. * @throws Throwable */ public void testGetPageMasterFrames() throws Throwable { InDesignDocument doc = new InDesignDocument(); doc.load(inxData2); Set<String> masterNames = doc.getPageMasterNames(); assertNotNull(masterNames); assertEquals(3, masterNames.size()); Spread master; master = doc.getMasterSpread("LT-BB_Left"); assertNotNull("Failed to find master frame", master); assertEquals("Name isn't as expected", "LT-BB_Left", master.getName()); Collection<Page> pages; pages = master.getPages(); assertNotNull(pages); assertEquals(1, pages.size()); List<Rectangle> recs; List<Rectangle> allRecs = new ArrayList<Rectangle>(); recs = master.getRectangles(); assertNotNull(recs); getAllRecs(recs, allRecs); assertEquals(12, allRecs.size()); Rectangle rect; rect = recs.get(0); Geometry geo; geo = rect.getGeometry(); assertNotNull(geo); Box box; box = geo.getBoundingBox(); assertNotNull(box); } public void testGeometry() throws Exception { Geometry geo = new Geometry(iGeo); // Expect one path List<Path> paths = geo.getPaths(); assertNotNull(paths); assertEquals(1, paths.size()); Path path = paths.get(0); assertNotNull(path); List<PathPoint> points = path.getPoints(); assertNotNull(points); assertEquals(4, points.size()); PathPoint point; // Data for four points: // l_2_D_36_D_-360_l_2_D_36_D_-175.2_l_2_D_309.8181818181818_D_-175.2_l_2_D_309.8181818181818_D_-360 point = points.get(0); assertEquals(36.0, point.getX()); assertEquals(-360.0, point.getY()); point = points.get(1); assertEquals(36.0, point.getX()); assertEquals(-175.2, point.getY()); point = points.get(2); assertEquals(309.8181818181818, point.getX()); assertEquals(-175.2, point.getY()); point = points.get(3); assertEquals(309.8181818181818, point.getX()); assertEquals(-360.0, point.getY()); assertFalse(path.isOpen()); Box box = geo.getBoundingBox(); assertNotNull(box); assertEquals(36.0, box.getLeft()); assertEquals(360.0, box.getTop()); assertEquals(309.8181818181818, box.getRight()); assertEquals(-175.2, box.getBottom()); geo = new Geometry(iGeoGBB); TransformationMatix transformMatrix = geo.getTransformationMatrix(); assertNotNull("Got a null transformation matrix", transformMatrix); assertEquals("Expected 5.0", 5.0, transformMatrix.getXTranslation()); assertEquals("Expected 6.0", 6.0, transformMatrix.getYTranslation()); box = geo.getGraphicBoundingBox(); assertNotNull(box); assertEquals(36.0, box.getLeft()); assertEquals(360.0, box.getTop()); assertEquals(309.8181818181818, box.getRight()); assertEquals(-175.2, box.getBottom()); double[] values = {1,0,0,1,20,10}; TransformationMatix matrix = new TransformationMatix(values); Box pbBox; pbBox = box.transform(matrix); assertNotNull(pbBox); assertEquals(56.0, pbBox.getLeft()); assertEquals(370.0, pbBox.getTop()); assertEquals(329.8181818181818, pbBox.getRight()); assertEquals(-165.2, pbBox.getBottom()); } }