/**
* Copyright (c) 2008 Really Strategies, Inc.
*/
package org.dita2indesign.indesign.inx;
import java.io.File;
import junit.framework.Test;
import junit.framework.TestSuite;
import org.apache.log4j.Logger;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.dita2indesign.indesign.inx.DocumentObjectCreationTests;
import org.dita2indesign.indesign.inx.InxReaderTestBase;
import org.dita2indesign.indesign.inx.model.Geometry;
import org.dita2indesign.indesign.inx.model.Image;
import org.dita2indesign.indesign.inx.model.InDesignComponent;
import org.dita2indesign.indesign.inx.model.InDesignDocument;
import org.dita2indesign.indesign.inx.model.InxUnit;
import org.dita2indesign.indesign.inx.model.Link;
import org.dita2indesign.indesign.inx.model.MasterSpread;
import org.dita2indesign.indesign.inx.model.Page;
import org.dita2indesign.indesign.inx.model.Rectangle;
import org.dita2indesign.indesign.inx.model.Spread;
import org.dita2indesign.indesign.inx.model.TextFrame;
import org.dita2indesign.indesign.inx.model.TextWrapPreferences;
import org.dita2indesign.indesign.inx.writers.InxWriter;
import org.dita2indesign.util.DataUtil;
/**
*
*/
public class DocumentObjectCreationTests extends InxReaderTestBase {
Logger logger = Logger.getLogger(DocumentObjectCreationTests.class);
private InDesignDocument doc;
private InDesignDocument cloned;
public static Test suite() {
TestSuite suite = new TestSuite(DocumentObjectCreationTests.class);
return suite;
}
public void setUp() throws Exception {
super.setUp();
doc = new InDesignDocument();
doc.load(inxData2);
logger.info("------------------------------------------------------------------");
logger.info("setUp(): Cloning InDesign document " + doc.getDataSource().getDocumentURI() + "...");
cloned = new InDesignDocument(doc, true);
logger.info("setUp(): Cloning complete.");
// logger.info("setUp(): child objects of cloned document: " + cloned.reportChildObjects());
logger.info("------------------------------------------------------------------");
assertEquals("Object IDs should be equal", doc.getId(), cloned.getId());
assertEquals("Expected two master spreads", 3, cloned.getMasterSpreads().size());
// assertEquals("Expected zero body spreads", 0, cloned.getSpreads().size());
}
public void testCreateSpreads() throws Exception {
Spread newSpread;
String masterSpreadName = "RT-BB_Right";
newSpread = cloned.newSpread(masterSpreadName);
assertNotNull("New spread is null", newSpread);
assertNotNull("No tranformation matrix", newSpread.getTransformationMatrix());
assertEquals("No parent for spread", cloned, newSpread.getParent());
newSpread = cloned.newSpread(masterSpreadName);
assertNotNull("New spread is null", newSpread);
assertNotNull("No tranformation matrix", newSpread.getTransformationMatrix());
newSpread = cloned.newSpread(masterSpreadName);
assertNotNull("New spread is null", newSpread);
assertNotNull("No tranformation matrix", newSpread.getTransformationMatrix());
MasterSpread master = cloned.getMasterSpread(masterSpreadName);
assertNotNull("Didn't get the master spread", master);
assertEquals("Expected 1 page in master spread", 1, master.getPages().size());
assertEquals("Expected no pages in new spread", 0, newSpread.getPages().size());
Page newPage = newSpread.addPage(10);
assertNotNull("Got a null new page", newPage);
Rectangle rect;
System.err.println("Objects in doc:" + doc.reportObjectsById());
rect = (Rectangle)doc.getObject("u1ae");
assertNotNull("Failed to find rectangle with ID \"u1ae\"", rect);
InDesignComponent clonedObj = cloned.clone(rect);
assertNotNull("Got null clone", clonedObj);
Rectangle clonedRect = (Rectangle)clonedObj;
assertTrue("IDs should not match", !rect.getId().equals(clonedRect.getId()));
newSpread.addRectangle(clonedRect);
assertTrue("Page does not contain rectangle", newPage.contains(clonedRect));
}
public void testOverrideMasterSpreadObjects() throws Exception {
Spread newSpread;
String masterSpreadName = "RT-BB_Right";
newSpread = cloned.newSpread(masterSpreadName);
newSpread.setTransformationMatrix(0);
MasterSpread master = cloned.getMasterSpread(masterSpreadName);
assertNotNull("Didn't get the master spread", master);
Page newPage = newSpread.addPage(10);
assertNotNull("Got a null new page", newPage);
assertEquals("Expected no frames in the spread", 0, newSpread.getAllFrames().size());
newPage.overrideMasterSpreadObjects();
//newSpread.overrideMasterSpreadObjects();
assertTrue("Expected some frames", newSpread.getAllFrames().size() > 0);
boolean foundThread = false;
for (TextFrame frame : newSpread.getAllFrames()) {
String label = frame.getLabel().trim();
if ("Thread start".equals(label)) {
foundThread = true;
TextFrame nextInThread = frame.getNextInThread();
assertNotNull(nextInThread);
InDesignComponent nextInThreadMaster = nextInThread.getMasterFrame();
assertNotNull(nextInThreadMaster);
assertNotSame(nextInThreadMaster, frame.getNextInThread());
assertNotSame(nextInThread.getPreviousInThread(), frame.getMasterFrame());
assertEquals("Previous in thread did not return expected value",
frame,
nextInThread.getPreviousInThread());
}
}
assertTrue("Didn't find threaded frame with label 'Thread start'", foundThread);
assertTrue("Expected frames on the page", newPage.getAllFrames().size() > 0);
}
public void testWriteInxFile() throws Exception {
// Create a new document with a page with a frame
// copied from the template document:
Spread newSpread;
String masterSpreadName = "RT-BB_Right";
newSpread = cloned.newSpread(masterSpreadName);
MasterSpread master = cloned.getMasterSpread(masterSpreadName);
Page newPage = newSpread.addPage(10);
Spread spread = cloned.getSpread(0);
assertNotNull(spread);
Page page = spread.getPages().get(0);
assertNotNull(page);
Rectangle rect;
rect = (Rectangle)doc.getObject("u23a");
assertNotNull("Didn't find object with ID u23a", rect);
InDesignComponent clonedObj = cloned.clone(rect);
Rectangle clonedRect = (Rectangle)clonedObj;
newSpread.addRectangle(clonedRect);
// Now serialize the cloned document to INX:
File inxFile = File.createTempFile("testWriteInxFile_", ".inx");
System.err.println("Temp file: " + inxFile.getAbsolutePath());
InxWriter writer = new InxWriter(inxFile);
writer.write(cloned);
assertTrue("File does not exist", inxFile.exists());
assertTrue("File has no data", inxFile.length() > 0);
String inxXml = readFileToString(inxFile);
// 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);
spread = newDoc.getSpread(1);
assertNotNull("Expected a spread", spread);
page = spread.getPages().get(0);
assertNotNull("Expected a page", page);
}
public void testCreateNewRectangle() throws Exception {
Rectangle rect;
rect = cloned.newRectangle();
assertNotNull("Got null rectangle", rect);
rect.setWidth(100.0);
assertEquals("Width not correct", 100.0, rect.getGeometry().getWidth());
rect.setHeight(200.0);
assertEquals("Height not correct", 200.0, rect.getGeometry().getHeight());
}
public void testCreateNewImage() throws Exception {
Image image = doc.newImage();
assertNotNull("Got a null image", image);
Link link = doc.newLink();
String linkFn = "c:\\foo\\bar\\bar.jpg";
link.setWindowsFileName(linkFn);
image.setItemLink(link);
assertEquals(link, image.getItemLink());
TextWrapPreferences twPrefs = image.getTextWrapPreferences();
assertNotNull("Null text wrap prefs", twPrefs);
assertTrue("Values did not compare as equal", new InxUnit(0.0).equals(twPrefs.getTextWrapOffset().get(0)));
}
}