/**
* Demonstrates how you can extract misc embedded data from a ppt file
- *
- * @author Yegor Kozlov
*/
public final class DataExtraction {
FileOutputStream out = new FileOutputStream(name + "-("+(oleIdx)+").doc");
doc.write(out);
out.close();
+ doc.close();
} else {
FileOutputStream out = new FileOutputStream(ole.getProgID() + "-"+(oleIdx+1)+".dat");
InputStream dis = data.getData();
out.close();
}
}
-
}
+ ppt.close();
}
private static void usage(){
*/
public void processAttachment(AttachmentChunks attachment,
File dir) throws IOException {
- String fileName = attachment.attachFileName.toString();
- if(attachment.attachLongFileName != null) {
- fileName = attachment.attachLongFileName.toString();
+ String fileName = attachment.getAttachFileName().toString();
+ if(attachment.getAttachLongFileName() != null) {
+ fileName = attachment.getAttachLongFileName().toString();
}
File f = new File(dir, fileName);
OutputStream fileOut = null;
try {
fileOut = new FileOutputStream(f);
- fileOut.write(attachment.attachData.getValue());
+ fileOut.write(attachment.getAttachData().getValue());
} finally {
if(fileOut != null) {
fileOut.close();
/**
* A simple WOrdprocessingML document created by POI XWPF API
- *
- * @author Yegor Kozlov
*/
public class SimpleDocument {
XWPFRun r2 = p2.createRun();
r2.setText("jumped over the lazy dog");
- r2.setStrike(true);
+ r2.setStrikeThrough(true);
r2.setFontSize(20);
XWPFRun r3 = p2.createRun();
r3.setText("and went away");
- r3.setStrike(true);
+ r3.setStrikeThrough(true);
r3.setFontSize(20);
r3.setSubscript(VerticalAlign.SUPERSCRIPT);
XWPFParagraph p3 = doc.createParagraph();
- p3.setWordWrap(true);
+ p3.setWordWrapped(true);
p3.setPageBreak(true);
//p3.setAlignment(ParagraphAlignment.DISTRIBUTE);
FileOutputStream out = new FileOutputStream("simple.docx");
doc.write(out);
out.close();
-
+ doc.close();
}
}
*/
package org.apache.poi.xwpf.usermodel.examples;
+import java.io.FileInputStream;
+import java.io.FileOutputStream;
+import java.io.IOException;
+
+import org.apache.poi.openxml4j.exceptions.InvalidFormatException;
import org.apache.poi.util.Units;
import org.apache.poi.xwpf.usermodel.BreakType;
import org.apache.poi.xwpf.usermodel.XWPFDocument;
import org.apache.poi.xwpf.usermodel.XWPFParagraph;
import org.apache.poi.xwpf.usermodel.XWPFRun;
-import java.io.FileInputStream;
-import java.io.FileOutputStream;
-
/**
* Demonstrates how to add pictures in a .docx document
- *
- * @author Yegor Kozlov
*/
public class SimpleImages {
- public static void main(String[] args) throws Exception {
+ public static void main(String[] args) throws IOException, InvalidFormatException {
XWPFDocument doc = new XWPFDocument();
XWPFParagraph p = doc.createParagraph();
FileOutputStream out = new FileOutputStream("images.docx");
doc.write(out);
out.close();
+ doc.close();
}
for(AttachmentChunks attachment : attachments) {
- DirectoryChunk chunkDirectory = attachment.attachmentDirectory;
+ DirectoryChunk chunkDirectory = attachment.getAttachmentDirectory();
if(chunkDirectory != null) {
MAPIMessage attachmentMSG = chunkDirectory.getAsEmbededMessage();
assertNotNull(attachmentMSG);
*
* @return {@code true} if dummy directory was created, {@code false} otherwise
*/
+ @SuppressWarnings("resource")
@Internal
protected boolean initDirectory() {
if (directory == null) {
package org.apache.poi.hssf.record;
-import java.io.ByteArrayOutputStream;
-import java.io.DataOutputStream;
-import java.io.IOException;
-
import org.apache.poi.ss.util.CellRangeAddress;
import org.apache.poi.util.HexDump;
import org.apache.poi.util.HexRead;
-import org.apache.poi.util.LittleEndianByteArrayInputStream;
+import org.apache.poi.util.LittleEndian;
import org.apache.poi.util.LittleEndianInput;
import org.apache.poi.util.LittleEndianOutput;
import org.apache.poi.util.POILogFactory;
}
public long getD4() {
- //
- ByteArrayOutputStream baos = new ByteArrayOutputStream(8);
- try {
- new DataOutputStream(baos).writeLong(_d4);
- } catch (IOException e) {
- throw new RuntimeException(e);
- }
- byte[] buf = baos.toByteArray();
- return new LittleEndianByteArrayInputStream(buf).readLong();
+ byte[] result = new byte[Long.SIZE/Byte.SIZE];
+ long l = _d4;
+ for (int i = result.length-1; i >= 0; i--) {
+ result[i] = (byte)(l & 0xFF);
+ l >>= 8;
+ }
+
+ return LittleEndian.getLong(result, 0);
}
public String formatAsString() {
* If an I/O error occur.
*/
public static void copyFile(File in, File out) throws IOException {
- FileChannel sourceChannel = new FileInputStream(in).getChannel();
- FileChannel destinationChannel = new FileOutputStream(out).getChannel();
+ FileInputStream fis = new FileInputStream(in);
+ FileOutputStream fos = new FileOutputStream(out);
+ FileChannel sourceChannel = fis.getChannel();
+ FileChannel destinationChannel = fos.getChannel();
sourceChannel.transferTo(0, sourceChannel.size(), destinationChannel);
sourceChannel.close();
destinationChannel.close();
+ fos.close();
+ fis.close();
}
/**
\r
package org.apache.poi.openxml4j.opc;\r
\r
+import static org.junit.Assert.assertArrayEquals;\r
+import static org.junit.Assert.assertNotNull;\r
+import static org.junit.Assert.assertTrue;\r
+\r
import java.io.BufferedInputStream;\r
import java.io.ByteArrayOutputStream;\r
import java.io.File;\r
import java.io.FileInputStream;\r
import java.io.IOException;\r
-import java.util.Iterator;\r
import java.util.Set;\r
import java.util.TreeMap;\r
import java.util.zip.ZipEntry;\r
import java.util.zip.ZipInputStream;\r
\r
-import junit.framework.Assert;\r
+import org.junit.Assert;\r
+\r
import junit.framework.AssertionFailedError;\r
\r
/**\r
* Compare the contents of 2 zip files.\r
- * \r
- * @author CDubettier\r
*/\r
public class ZipFileAssert {\r
private ZipFileAssert() {\r
\r
static final int BUFFER_SIZE = 2048;\r
\r
- protected static boolean equals(\r
+ protected static void equals(\r
TreeMap<String, ByteArrayOutputStream> file1,\r
TreeMap<String, ByteArrayOutputStream> file2) {\r
- Set listFile1 = file1.keySet();\r
- if (listFile1.size() == file2.keySet().size()) {\r
- for (Iterator iter = listFile1.iterator(); iter.hasNext();) {\r
- String fileName = (String) iter.next();\r
- // extract the contents for both\r
- ByteArrayOutputStream contain2 = file2.get(fileName);\r
- ByteArrayOutputStream contain1 = file1.get(fileName);\r
-\r
- if (contain2 == null) {\r
- // file not found in archive 2\r
- Assert.fail(fileName + " not found in 2nd zip");\r
- return false;\r
- }\r
- // no need to check for contain1. The key come from it\r
-\r
- if ((fileName.endsWith(".xml")) || fileName.endsWith(".rels")) {\r
- // we have a xml file\r
- // TODO\r
- // YK: the original OpenXML4J version attempted to compare xml using xmlunit (http://xmlunit.sourceforge.net),\r
- // but POI does not depend on this library\r
- } else {\r
- // not xml, may be an image or other binary format\r
- if (contain2.size() != contain1.size()) {\r
- // not the same size\r
- Assert.fail(fileName\r
- + " does not have the same size in both zip:"\r
- + contain2.size() + "!=" + contain1.size());\r
- return false;\r
- }\r
- byte array1[] = contain1.toByteArray();\r
- byte array2[] = contain2.toByteArray();\r
- for (int i = 0; i < array1.length; i++) {\r
- if (array1[i] != array2[i]) {\r
- Assert.fail(fileName + " differ at index:" + i);\r
- return false;\r
- }\r
- }\r
- }\r
+ Set<String> listFile1 = file1.keySet();\r
+ Assert.assertEquals("not the same number of files in zip:", listFile1.size(), file2.keySet().size());\r
+ \r
+ for (String fileName : listFile1) {\r
+ // extract the contents for both\r
+ ByteArrayOutputStream contain2 = file2.get(fileName);\r
+ ByteArrayOutputStream contain1 = file1.get(fileName);\r
+\r
+ assertNotNull(fileName + " not found in 2nd zip", contain2);\r
+ // no need to check for contain1. The key come from it\r
+\r
+ if ((fileName.endsWith(".xml")) || fileName.endsWith(".rels")) {\r
+ // we have a xml file\r
+ // TODO\r
+ // YK: the original OpenXML4J version attempted to compare xml using xmlunit (http://xmlunit.sourceforge.net),\r
+ // but POI does not depend on this library\r
+ } else {\r
+ // not xml, may be an image or other binary format\r
+ Assert.assertEquals(fileName + " does not have the same size in both zip:", contain2.size(), contain1.size());\r
+ assertArrayEquals("contents differ", contain1.toByteArray(), contain2.toByteArray());\r
}\r
- } else {\r
- // not the same number of files -> cannot be equals\r
- Assert.fail("not the same number of files in zip:"\r
- + listFile1.size() + "!=" + file2.keySet().size());\r
- return false;\r
}\r
- return true;\r
}\r
\r
protected static TreeMap<String, ByteArrayOutputStream> decompress(\r
* \r
*/\r
public static void assertEquals(File expected, File actual) {\r
- Assert.assertNotNull(expected);\r
- Assert.assertNotNull(actual);\r
+ assertNotNull(expected);\r
+ assertNotNull(actual);\r
\r
- Assert.assertTrue("File does not exist [" + expected.getAbsolutePath()\r
+ assertTrue("File does not exist [" + expected.getAbsolutePath()\r
+ "]", expected.exists());\r
- Assert.assertTrue("File does not exist [" + actual.getAbsolutePath()\r
+ assertTrue("File does not exist [" + actual.getAbsolutePath()\r
+ "]", actual.exists());\r
\r
- Assert.assertTrue("Expected file not readable", expected.canRead());\r
- Assert.assertTrue("Actual file not readable", actual.canRead());\r
+ assertTrue("Expected file not readable", expected.canRead());\r
+ assertTrue("Actual file not readable", actual.canRead());\r
\r
try {\r
TreeMap<String, ByteArrayOutputStream> file1 = decompress(expected);\r
// Stored in the Attachment blocks
MAPIMessage msg = ((OutlookTextExtactor)ext).getMAPIMessage();
for (AttachmentChunks attachment : msg.getAttachmentFiles()) {
- if (attachment.attachData != null) {
- byte[] data = attachment.attachData.getValue();
+ if (attachment.getAttachData() != null) {
+ byte[] data = attachment.getAttachData().getValue();
nonPOIFS.add( new ByteArrayInputStream(data) );
- } else if (attachment.attachmentDirectory != null) {
- dirs.add(attachment.attachmentDirectory.getDirectory());
+ } else if (attachment.getAttachmentDirectory() != null) {
+ dirs.add(attachment.getAttachmentDirectory().getDirectory());
}
}
}
package org.apache.poi.hpbf.extractor;
-import java.io.File;
-import java.io.FileInputStream;
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.assertTrue;
-import junit.framework.TestCase;
+import java.io.IOException;
+import java.io.InputStream;
import org.apache.poi.POIDataSamples;
import org.apache.poi.hpbf.HPBFDocument;
import org.apache.poi.poifs.filesystem.NPOIFSFileSystem;
+import org.junit.Test;
-public final class TestPublisherTextExtractor extends TestCase {
+public final class TestPublisherTextExtractor {
private static final POIDataSamples _samples = POIDataSamples.getPublisherInstance();
-
+
private static final String SAMPLE_TEXT =
- "This is some text on the first page\n" +
- "It\u2019s in times new roman, font size 10, all normal\n" +
- "" +
- "This is in bold and italic\n" +
- "It\u2019s Arial, 20 point font\n" +
- "It\u2019s in the second textbox on the first page\n" +
- "" +
- "This is the second page\n\n" +
- "" +
- "It is also times new roman, 10 point\n" +
- "" +
- "Table on page 2\nTop right\n" +
- "P2 table left\nP2 table right\n" +
- "Bottom Left\nBottom Right\n" +
- "" +
- "This text is on page two\n" +
- "#This is a link to Apache POI\n" +
- "More normal text\n" +
- "Link to a file\n" +
- "" +
- "More text, more hyperlinks\n" +
- "email link\n" +
- "Final hyperlink\n" +
- "Within doc to page 1\n";
+ "This is some text on the first page\n" +
+ "It\u2019s in times new roman, font size 10, all normal\n" +
+ "" +
+ "This is in bold and italic\n" +
+ "It\u2019s Arial, 20 point font\n" +
+ "It\u2019s in the second textbox on the first page\n" +
+ "" +
+ "This is the second page\n\n" +
+ "" +
+ "It is also times new roman, 10 point\n" +
+ "" +
+ "Table on page 2\nTop right\n" +
+ "P2 table left\nP2 table right\n" +
+ "Bottom Left\nBottom Right\n" +
+ "" +
+ "This text is on page two\n" +
+ "#This is a link to Apache POI\n" +
+ "More normal text\n" +
+ "Link to a file\n" +
+ "" +
+ "More text, more hyperlinks\n" +
+ "email link\n" +
+ "Final hyperlink\n" +
+ "Within doc to page 1\n";
+
private static final String SIMPLE_TEXT =
- "0123456789\n" +
- "0123456789abcdef\n" +
- "0123456789abcdef0123456789abcdef\n" +
- "0123456789\n" +
- "0123456789abcdef\n" +
- "0123456789abcdef0123456789abcdef\n" +
- "0123456789abcdef0123456789abcdef0123456789abcdef\n";
-
- public void testBasics() throws Exception {
- HPBFDocument doc = new HPBFDocument(
- _samples.openResourceAsStream("Sample.pub")
- );
-
- PublisherTextExtractor ext =
- new PublisherTextExtractor(doc);
- ext.getText();
-
- ext = new PublisherTextExtractor(
- _samples.openResourceAsStream("Simple.pub")
- );
- ext.getText();
- }
-
- public void testContents() throws Exception {
- PublisherTextExtractor ext;
- File sample = _samples.getFile("Sample.pub");
- File simple = _samples.getFile("Simple.pub");
-
- // Check this complicated file using POIFS
- HPBFDocument docOPOIFS = new HPBFDocument(
- new FileInputStream(sample)
- );
- ext = new PublisherTextExtractor(docOPOIFS);
- assertEquals( SAMPLE_TEXT, ext.getText() );
-
- // And with NPOIFS
- NPOIFSFileSystem fs = new NPOIFSFileSystem(sample);
- HPBFDocument docNPOIFS = new HPBFDocument(
- fs
- );
- ext = new PublisherTextExtractor(docNPOIFS);
- assertEquals( SAMPLE_TEXT, ext.getText() );
-
-
- // Now a simpler file
- ext = new PublisherTextExtractor(
- new FileInputStream(simple)
- );
- assertEquals( SIMPLE_TEXT, ext.getText() );
- fs.close();
- }
-
- /**
- * We have the same file saved for Publisher 98, Publisher
- * 2000 and Publisher 2007. Check they all agree.
- * @throws Exception
- */
- public void testMultipleVersions() throws Exception {
- File f;
- HPBFDocument doc;
-
- doc = new HPBFDocument(
- _samples.openResourceAsStream("Sample.pub")
- );
- String s2007 = (new PublisherTextExtractor(doc)).getText();
-
- doc = new HPBFDocument(
- _samples.openResourceAsStream("Sample2000.pub")
- );
- String s2000 = (new PublisherTextExtractor(doc)).getText();
-
- doc = new HPBFDocument(
- _samples.openResourceAsStream("Sample98.pub")
- );
- String s98 = (new PublisherTextExtractor(doc)).getText();
-
- // Check they all agree
- assertEquals(s2007, s2000);
- assertEquals(s2007, s98);
- }
-
- /**
- * Test that the hyperlink extraction stuff works as well
- * as we can hope it to.
- */
- public void testWithHyperlinks() throws Exception {
- HPBFDocument doc = new HPBFDocument(
- _samples.openResourceAsStream("LinkAt10.pub")
- );
-
- PublisherTextExtractor ext =
- new PublisherTextExtractor(doc);
- ext.getText();
-
- // Default is no hyperlinks
- assertEquals("1234567890LINK\n", ext.getText());
-
- // Turn on
- ext.setHyperlinksByDefault(true);
- assertEquals("1234567890LINK\n<http://poi.apache.org/>\n", ext.getText());
-
-
- // Now a much more complex document
- ext = new PublisherTextExtractor(
- _samples.openResourceAsStream("Sample.pub")
- );
- ext.setHyperlinksByDefault(true);
- String text = ext.getText();
-
- assertTrue(text.endsWith(
- "<http://poi.apache.org/>\n" +
- "<C:\\Documents and Settings\\Nick\\My Documents\\Booleans.xlsx>\n" +
- "<>\n" +
- "<mailto:dev@poi.apache.org?subject=HPBF>\n" +
- "<mailto:dev@poi.apache.org?subject=HPBF>\n"
- ));
- }
+ "0123456789\n" +
+ "0123456789abcdef\n" +
+ "0123456789abcdef0123456789abcdef\n" +
+ "0123456789\n" +
+ "0123456789abcdef\n" +
+ "0123456789abcdef0123456789abcdef\n" +
+ "0123456789abcdef0123456789abcdef0123456789abcdef\n";
+
+ @Test
+ public void testBasics() throws IOException {
+ InputStream sample = _samples.openResourceAsStream("Sample.pub");
+ HPBFDocument doc = new HPBFDocument(sample);
+ PublisherTextExtractor ext = new PublisherTextExtractor(doc);
+ assertNotNull(ext.getText());
+ ext.close();
+ doc.close();
+ sample.close();
+
+ InputStream simple = _samples.openResourceAsStream("Simple.pub");
+ ext = new PublisherTextExtractor(simple);
+ assertNotNull(ext.getText());
+ ext.close();
+ simple.close();
+ }
+
+ @Test
+ public void testContents() throws IOException {
+ // Check this complicated file using POIFS
+ InputStream sample = _samples.openResourceAsStream("Sample.pub");
+ HPBFDocument docOPOIFS = new HPBFDocument(sample);
+ PublisherTextExtractor ext = new PublisherTextExtractor(docOPOIFS);
+ assertEquals(SAMPLE_TEXT, ext.getText());
+ ext.close();
+ docOPOIFS.close();
+ sample.close();
+
+ // And with NPOIFS
+ sample = _samples.openResourceAsStream("Sample.pub");
+ NPOIFSFileSystem fs = new NPOIFSFileSystem(sample);
+ HPBFDocument docNPOIFS = new HPBFDocument(fs);
+ ext = new PublisherTextExtractor(docNPOIFS);
+ assertEquals(SAMPLE_TEXT, ext.getText());
+ ext.close();
+ docNPOIFS.close();
+ fs.close();
+ sample.close();
+
+ // Now a simpler file
+ InputStream simple = _samples.openResourceAsStream("Simple.pub");
+ ext = new PublisherTextExtractor(simple);
+ assertEquals(SIMPLE_TEXT, ext.getText());
+ ext.close();
+ }
+
+ /**
+ * We have the same file saved for Publisher 98, Publisher 2000 and
+ * Publisher 2007. Check they all agree.
+ *
+ * @throws Exception
+ */
+ @Test
+ public void testMultipleVersions() throws Exception {
+ InputStream sample = _samples.openResourceAsStream("Sample.pub");
+ HPBFDocument doc = new HPBFDocument(sample);
+ PublisherTextExtractor ext = new PublisherTextExtractor(doc);
+ String s2007 = ext.getText();
+ ext.close();
+ doc.close();
+ sample.close();
+
+ InputStream sample2000 = _samples.openResourceAsStream("Sample2000.pub");
+ doc = new HPBFDocument(sample2000);
+ ext = new PublisherTextExtractor(doc);
+ String s2000 = ext.getText();
+ ext.close();
+ doc.close();
+ sample2000.close();
+
+ InputStream sample98 = _samples.openResourceAsStream("Sample98.pub");
+ doc = new HPBFDocument(sample98);
+ ext = new PublisherTextExtractor(doc);
+ String s98 = ext.getText();
+ ext.close();
+ doc.close();
+ sample98.close();
+
+ // Check they all agree
+ assertEquals(s2007, s2000);
+ assertEquals(s2007, s98);
+ }
+
+ /**
+ * Test that the hyperlink extraction stuff works as well as we can hope it
+ * to.
+ */
+ @Test
+ public void testWithHyperlinks() throws Exception {
+ InputStream linkAt = _samples.openResourceAsStream("LinkAt10.pub");
+ HPBFDocument doc = new HPBFDocument(linkAt);
+
+ PublisherTextExtractor ext = new PublisherTextExtractor(doc);
+
+ // Default is no hyperlinks
+ assertEquals("1234567890LINK\n", ext.getText());
+
+ // Turn on
+ ext.setHyperlinksByDefault(true);
+ assertEquals("1234567890LINK\n<http://poi.apache.org/>\n", ext.getText());
+ ext.close();
+ doc.close();
+ linkAt.close();
+
+ // Now a much more complex document
+ InputStream sample = _samples.openResourceAsStream("Sample.pub");
+ ext = new PublisherTextExtractor(sample);
+ ext.setHyperlinksByDefault(true);
+ String text = ext.getText();
+ ext.close();
+ sample.close();
+
+ assertTrue(text.endsWith("<http://poi.apache.org/>\n"
+ + "<C:\\Documents and Settings\\Nick\\My Documents\\Booleans.xlsx>\n"
+ + "<>\n" + "<mailto:dev@poi.apache.org?subject=HPBF>\n"
+ + "<mailto:dev@poi.apache.org?subject=HPBF>\n"));
+ }
}
package org.apache.poi.hpbf.model;
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.assertNull;
+import static org.junit.Assert.assertTrue;
+
+import java.io.IOException;
+
+import org.apache.poi.POIDataSamples;
import org.apache.poi.hpbf.HPBFDocument;
-import org.apache.poi.hpbf.model.qcbits.QCTextBit;
-import org.apache.poi.hpbf.model.qcbits.QCPLCBit.Type12;
import org.apache.poi.hpbf.model.qcbits.QCPLCBit.Type0;
+import org.apache.poi.hpbf.model.qcbits.QCPLCBit.Type12;
import org.apache.poi.hpbf.model.qcbits.QCPLCBit.Type4;
import org.apache.poi.hpbf.model.qcbits.QCPLCBit.Type8;
-import org.apache.poi.POIDataSamples;
-
-import junit.framework.TestCase;
+import org.apache.poi.hpbf.model.qcbits.QCTextBit;
+import org.junit.Test;
-public final class TestQuillContents extends TestCase {
+public final class TestQuillContents {
private static final POIDataSamples _samples = POIDataSamples.getPublisherInstance();
- public void testBasics() throws Exception {
+ @Test
+ public void testBasics() throws IOException {
HPBFDocument doc = new HPBFDocument(
_samples.openResourceAsStream("Sample.pub")
);
assertEquals("STSH", qc.getBits()[3].getThingType());
assertEquals("STSH", qc.getBits()[3].getBitType());
assertEquals(2, qc.getBits()[3].getOptA());
+
+ doc.close();
}
- public void testText() throws Exception {
+ @Test
+ public void testText() throws IOException {
HPBFDocument doc = new HPBFDocument(
_samples.openResourceAsStream("Sample.pub")
);
String t = text.getText();
assertTrue(t.startsWith("This is some text on the first page"));
assertTrue(t.endsWith("Within doc to page 1\r"));
+
+ doc.close();
}
- public void testPLC() throws Exception {
+ @Test
+ public void testPLC() throws IOException {
HPBFDocument doc = new HPBFDocument(
_samples.openResourceAsStream("Simple.pub")
);
assertEquals(0x22000000, plc12.getPlcValB()[0]);
assertEquals(0x05, plc12.getPlcValA()[1]);
assertEquals(0x04, plc12.getPlcValB()[1]);
+
+ doc.close();
}
- public void testComplexPLC() throws Exception {
+ @SuppressWarnings("unused")
+ @Test
+ public void testComplexPLC() throws IOException {
HPBFDocument doc = new HPBFDocument(
_samples.openResourceAsStream("Sample.pub")
);
assertEquals(0x000004, plc16.getPlcValB()[4]);
assertEquals(0x000004, plc16.getPlcValA()[5]);
assertEquals(0x000004, plc16.getPlcValB()[5]);
+
+ doc.close();
}
- public void testNoHyperlinks() throws Exception {
+ @Test
+ public void testNoHyperlinks() throws IOException {
HPBFDocument doc = new HPBFDocument(
_samples.openResourceAsStream("SampleNewsletter.pub")
);
assertEquals(0, plc18.getNumberOfHyperlinks());
assertEquals(0, plc18.getTextStartAt(0));
assertEquals(601, plc18.getAllTextEndAt());
+
+ doc.close();
}
- public void testSimpleHyperlink() throws Exception {
+ @Test
+ public void testSimpleHyperlink() throws IOException {
HPBFDocument doc;
QuillContents qc;
Type12 hlBit;
assertEquals(10, hlBit.getTextStartAt(0));
assertEquals(15, hlBit.getAllTextEndAt());
assertEquals("http://poi.apache.org/", hlBit.getHyperlink(0));
+ doc.close();
// Longer link at 10
doc = new HPBFDocument(
assertEquals(10, hlBit.getTextStartAt(0));
assertEquals(15, hlBit.getAllTextEndAt());
assertEquals("http://poi.apache.org/hpbf/", hlBit.getHyperlink(0));
+ doc.close();
// Link at 20
doc = new HPBFDocument(
assertEquals(20, hlBit.getTextStartAt(0));
assertEquals(25, hlBit.getAllTextEndAt());
assertEquals("http://poi.apache.org/", hlBit.getHyperlink(0));
+ doc.close();
}
- public void testManyHyperlinks() throws Exception {
+ @Test
+ public void testManyHyperlinks() throws IOException {
HPBFDocument doc;
QuillContents qc;
Type12 hlBit;
assertEquals(10, hlBit.getTextStartAt(0));
assertEquals(15, hlBit.getAllTextEndAt());
assertEquals("http://poi.apache.org/", hlBit.getHyperlink(0));
-
+
+ doc.close();
}
- public void testHyperlinkDifferentVersions() throws Exception {
+ @Test
+ public void testHyperlinkDifferentVersions() throws IOException {
HPBFDocument doc;
QuillContents qc;
Type12 hlBitA;
assertEquals("", hlBitB.getHyperlink(0));
assertEquals("mailto:dev@poi.apache.org?subject=HPBF", hlBitB.getHyperlink(1));
assertEquals("mailto:dev@poi.apache.org?subject=HPBF", hlBitB.getHyperlink(2));
+ doc.close();
// 2000 version
doc = new HPBFDocument(
assertEquals("", hlBitB.getHyperlink(0));
assertEquals("mailto:dev@poi.apache.org?subject=HPBF", hlBitB.getHyperlink(1));
assertEquals("mailto:dev@poi.apache.org?subject=HPBF", hlBitB.getHyperlink(2));
+ doc.close();
// 98 version
doc = new HPBFDocument(
assertEquals("", hlBitB.getHyperlink(0));
assertEquals("mailto:dev@poi.apache.org?subject=HPBF", hlBitB.getHyperlink(1));
assertEquals("mailto:dev@poi.apache.org?subject=HPBF", hlBitB.getHyperlink(2));
- }
+ doc.close();
+ }
}
package org.apache.poi.hslf;
-import junit.framework.TestCase;
+import static org.junit.Assert.assertNotNull;
+import java.io.IOException;
+import java.io.InputStream;
+
+import org.apache.poi.POIDataSamples;
import org.apache.poi.hslf.exceptions.EncryptedPowerPointFileException;
import org.apache.poi.hslf.usermodel.HSLFSlideShowImpl;
-import org.apache.poi.POIDataSamples;
+import org.junit.Test;
/**
* Tests that HSLFSlideShow does the right thing with an encrypted file
- *
- * @author Nick Burch (nick at torchbox dot com)
*/
-public final class TestEncryptedFile extends TestCase {
- private static POIDataSamples slTests = POIDataSamples.getSlideShowInstance();
-
- public void testLoadNonEncrypted() throws Exception {
- HSLFSlideShowImpl hss = new HSLFSlideShowImpl(slTests.openResourceAsStream("basic_test_ppt_file.ppt"));
+public final class TestEncryptedFile {
+ private static final POIDataSamples slTests = POIDataSamples.getSlideShowInstance();
+ @Test
+ public void testLoadNonEncrypted() throws IOException {
+ InputStream is = slTests.openResourceAsStream("basic_test_ppt_file.ppt");
+ HSLFSlideShowImpl hss = new HSLFSlideShowImpl(is);
assertNotNull(hss);
+ hss.close();
+ is.close();
}
- public void testLoadEncrypted() throws Exception {
+ @Test(expected=EncryptedPowerPointFileException.class)
+ public void testLoadEncrypted1() throws IOException {
+ InputStream is = slTests.openResourceAsStream("Password_Protected-hello.ppt");
try {
- new HSLFSlideShowImpl(slTests.openResourceAsStream("Password_Protected-hello.ppt"));
- fail();
- } catch(EncryptedPowerPointFileException e) {
- // Good
+ new HSLFSlideShowImpl(is).close();
+ } finally {
+ is.close();
}
-
+ }
+
+ @Test(expected=EncryptedPowerPointFileException.class)
+ public void testLoadEncrypted2() throws IOException {
+ InputStream is = slTests.openResourceAsStream("Password_Protected-np-hello.ppt");
try {
- new HSLFSlideShowImpl(slTests.openResourceAsStream("Password_Protected-np-hello.ppt"));
- fail();
- } catch(EncryptedPowerPointFileException e) {
- // Good
+ new HSLFSlideShowImpl(is).close();
+ } finally {
+ is.close();
}
-
+ }
+
+ @Test(expected=EncryptedPowerPointFileException.class)
+ public void testLoadEncrypted3() throws IOException {
+ InputStream is = slTests.openResourceAsStream("Password_Protected-56-hello.ppt");
try {
- new HSLFSlideShowImpl(slTests.openResourceAsStream("Password_Protected-56-hello.ppt"));
- fail();
- } catch(EncryptedPowerPointFileException e) {
- // Good
+ new HSLFSlideShowImpl(is).close();
+ } finally {
+ is.close();
}
}
}
try {\r
NPOIFSFileSystem fs = new NPOIFSFileSystem(slTests.getFile(pptFile), true);\r
HSLFSlideShowImpl hss = new HSLFSlideShowImpl(fs);\r
- new HSLFSlideShow(hss);\r
+ new HSLFSlideShow(hss).close();\r
fs.close();\r
} catch (EncryptedPowerPointFileException e) {\r
fail(pptFile+" can't be decrypted");\r
\r
ByteArrayOutputStream bos = new ByteArrayOutputStream();\r
hss.write(bos);\r
+ hss.close();\r
fs.close();\r
\r
fs = new NPOIFSFileSystem(new ByteArrayInputStream(bos.toByteArray()));\r
hss = new HSLFSlideShowImpl(fs);\r
List<HSLFPictureData> picsActual = hss.getPictureData();\r
- fs.close();\r
\r
assertEquals(picsExpected.size(), picsActual.size());\r
for (int i=0; i<picsExpected.size(); i++) {\r
assertArrayEquals(picsExpected.get(i).getRawData(), picsActual.get(i).getRawData());\r
}\r
+ hss.close();\r
+ fs.close();\r
}\r
\r
@Test\r
Biff8EncryptionKey.setCurrentUserPassword("hello");\r
ByteArrayOutputStream encrypted = new ByteArrayOutputStream();\r
hss.write(encrypted);\r
+ hss.close();\r
fs.close();\r
\r
// decrypted\r
Biff8EncryptionKey.setCurrentUserPassword(null);\r
ByteArrayOutputStream actual = new ByteArrayOutputStream();\r
hss.write(actual);\r
+ hss.close();\r
fs.close();\r
\r
assertArrayEquals(expected.toByteArray(), actual.toByteArray());\r
ps = PropertySetFactory.create(fs2.getRoot(), DocumentSummaryInformation.DEFAULT_STREAM_NAME);\r
assertTrue(ps.isDocumentSummaryInformation());\r
assertEquals("On-screen Show (4:3)", ps.getProperties()[1].getValue());\r
+ ss.close();\r
fs.close();\r
fs2.close();\r
}\r
}
@Test
- @SuppressWarnings("resource")
public void bug57796() throws IOException {
HSLFSlideShow ppt = open("WithLinks.ppt");
HSLFSlide slide = ppt.getSlides().get(0);
assertEquals(hlRun.getId(), hlShape.getId());
assertEquals(hlRun.getAddress(), hlShape.getAddress());
assertEquals(hlRun.getLabel(), hlShape.getLabel());
- assertEquals(hlRun.getType(), hlShape.getType());
+ assertEquals(hlRun.getTypeEnum(), hlShape.getTypeEnum());
assertEquals(hlRun.getStartIndex(), hlShape.getStartIndex());
assertEquals(hlRun.getEndIndex(), hlShape.getEndIndex());
long persistId = vbaAtom.getPersistIdRef();
for (HSLFObjectData objData : ppt.getEmbeddedObjects()) {
if (objData.getExOleObjStg().getPersistId() == persistId) {
- return new VBAMacroReader(objData.getData()).readMacros();
+ VBAMacroReader mr = new VBAMacroReader(objData.getData());
+ try {
+ return mr.readMacros();
+ } finally {
+ mr.close();
+ }
}
}
+
+ ppt.close();
} finally {
IOUtils.closeQuietly(npoifs);
assertTrue(groups[4] instanceof NameIdChunks);
attachment = (AttachmentChunks)groups[2];
- assertEquals("TEST-U~1.DOC", attachment.attachFileName.toString());
- assertEquals("test-unicode.doc", attachment.attachLongFileName.toString());
- assertEquals(24064, attachment.attachData.getValue().length);
+ assertEquals("TEST-U~1.DOC", attachment.getAttachFileName().toString());
+ assertEquals("test-unicode.doc", attachment.getAttachLongFileName().toString());
+ assertEquals(24064, attachment.getAttachData().getValue().length);
attachment = (AttachmentChunks)groups[3];
- assertEquals("pj1.txt", attachment.attachFileName.toString());
- assertEquals("pj1.txt", attachment.attachLongFileName.toString());
- assertEquals(89, attachment.attachData.getValue().length);
+ assertEquals("pj1.txt", attachment.getAttachFileName().toString());
+ assertEquals("pj1.txt", attachment.getAttachLongFileName().toString());
+ assertEquals(89, attachment.getAttachData().getValue().length);
// Check raw details on one without
assertEquals(2, msgWith.getAttachmentFiles().length);
attachment = msgWith.getAttachmentFiles()[0];
- assertEquals("TEST-U~1.DOC", attachment.attachFileName.toString());
- assertEquals("test-unicode.doc", attachment.attachLongFileName.toString());
- assertEquals(24064, attachment.attachData.getValue().length);
+ assertEquals("TEST-U~1.DOC", attachment.getAttachFileName().toString());
+ assertEquals("test-unicode.doc", attachment.getAttachLongFileName().toString());
+ assertEquals(24064, attachment.getAttachData().getValue().length);
attachment = msgWith.getAttachmentFiles()[1];
- assertEquals("pj1.txt", attachment.attachFileName.toString());
- assertEquals("pj1.txt", attachment.attachLongFileName.toString());
- assertEquals(89, attachment.attachData.getValue().length);
+ assertEquals("pj1.txt", attachment.getAttachFileName().toString());
+ assertEquals("pj1.txt", attachment.getAttachLongFileName().toString());
+ assertEquals(89, attachment.getAttachData().getValue().length);
// Plus check core details are there
assertEquals("'nicolas1.23456@free.fr'", msgWith.getDisplayTo());
package org.apache.poi.hwpf.usermodel;
+import static org.junit.Assert.assertEquals;
+
+import java.io.IOException;
+
import org.apache.poi.OldFileFormatException;
import org.apache.poi.hwpf.HWPFOldDocument;
import org.apache.poi.hwpf.HWPFTestCase;
import org.apache.poi.hwpf.HWPFTestDataSamples;
+import org.junit.Test;
/**
* Tests for Word 6 and Word 95 support
*/
public final class TestHWPFOldDocument extends HWPFTestCase {
- /**
- * Test a simple Word 6 document
- */
- public void testWord6() throws Exception {
- // Can't open as HWPFDocument
- try {
- HWPFTestDataSamples.openSampleFile("Word6.doc");
- fail("Shouldn't be openable");
- } catch(OldFileFormatException e) {}
-
- // Open
- HWPFOldDocument doc = HWPFTestDataSamples.openOldSampleFile("Word6.doc");
-
- // Check
- assertEquals(1, doc.getRange().numSections());
- assertEquals(1, doc.getRange().numParagraphs());
- assertEquals(1, doc.getRange().numCharacterRuns());
-
- assertEquals(
- "The quick brown fox jumps over the lazy dog\r",
- doc.getRange().getParagraph(0).text()
- );
- }
-
- /**
- * Test a simple Word 95 document
- */
- public void testWord95() throws Exception {
- // Can't open as HWPFDocument
- try {
- HWPFTestDataSamples.openSampleFile("Word95.doc");
- fail("Shouldn't be openable");
- } catch(OldFileFormatException e) {}
-
- // Open
- HWPFOldDocument doc = HWPFTestDataSamples.openOldSampleFile("Word95.doc");
-
- // Check
- assertEquals(1, doc.getRange().numSections());
- assertEquals(7, doc.getRange().numParagraphs());
-
- assertEquals(
- "The quick brown fox jumps over the lazy dog\r",
- doc.getRange().getParagraph(0).text()
- );
- assertEquals("\r", doc.getRange().getParagraph(1).text());
- assertEquals(
- "Paragraph 2\r",
- doc.getRange().getParagraph(2).text()
- );
- assertEquals("\r", doc.getRange().getParagraph(3).text());
- assertEquals(
- "Paragraph 3. Has some RED text and some " +
- "BLUE BOLD text in it.\r",
- doc.getRange().getParagraph(4).text()
- );
- assertEquals("\r", doc.getRange().getParagraph(5).text());
- assertEquals(
- "Last (4th) paragraph.\r",
- doc.getRange().getParagraph(6).text()
- );
-
- assertEquals(1, doc.getRange().getParagraph(0).numCharacterRuns());
- assertEquals(1, doc.getRange().getParagraph(1).numCharacterRuns());
- assertEquals(1, doc.getRange().getParagraph(2).numCharacterRuns());
- assertEquals(1, doc.getRange().getParagraph(3).numCharacterRuns());
- // Normal, red, normal, blue+bold, normal
- assertEquals(5, doc.getRange().getParagraph(4).numCharacterRuns());
- assertEquals(1, doc.getRange().getParagraph(5).numCharacterRuns());
- // Normal, superscript for 4th, normal
- assertEquals(3, doc.getRange().getParagraph(6).numCharacterRuns());
- }
-
- /**
- * Test a word document that has sections,
- * as well as the usual paragraph stuff.
- */
- public void testWord6Sections() throws Exception {
- HWPFOldDocument doc = HWPFTestDataSamples.openOldSampleFile("Word6_sections.doc");
-
- assertEquals(3, doc.getRange().numSections());
- assertEquals(6, doc.getRange().numParagraphs());
-
- assertEquals(
- "This is a test.\r",
- doc.getRange().getParagraph(0).text()
- );
- assertEquals("\r", doc.getRange().getParagraph(1).text());
- assertEquals("\u000c", doc.getRange().getParagraph(2).text()); // Section line?
- assertEquals("This is a new section.\r", doc.getRange().getParagraph(3).text());
- assertEquals("\u000c", doc.getRange().getParagraph(4).text()); // Section line?
- assertEquals("\r", doc.getRange().getParagraph(5).text());
- }
-
- /**
- * Another word document with sections, this time with a
- * few more section properties set on it
- */
- public void testWord6Sections2() throws Exception {
- HWPFOldDocument doc = HWPFTestDataSamples.openOldSampleFile("Word6_sections2.doc");
-
- assertEquals(1, doc.getRange().numSections());
- assertEquals(57, doc.getRange().numParagraphs());
-
- assertEquals(
- "\r",
- doc.getRange().getParagraph(0).text()
- );
- assertEquals(
- "STATEMENT OF INSOLVENCY PRACTICE 10 (SCOTLAND)\r",
- doc.getRange().getParagraph(1).text()
- );
- }
+ /**
+ * Test a simple Word 6 document
+ */
+ @Test(expected=OldFileFormatException.class)
+ public void testWord6hwpf() throws IOException {
+ // Can't open as HWPFDocument
+ HWPFTestDataSamples.openSampleFile("Word6.doc");
+ }
+
+ @Test
+ public void testWord6hwpfOld() throws IOException {
+ // Open
+ HWPFOldDocument doc = HWPFTestDataSamples.openOldSampleFile("Word6.doc");
+
+ // Check
+ assertEquals(1, doc.getRange().numSections());
+ assertEquals(1, doc.getRange().numParagraphs());
+ assertEquals(1, doc.getRange().numCharacterRuns());
+
+ assertEquals("The quick brown fox jumps over the lazy dog\r",
+ doc.getRange().getParagraph(0).text());
+ doc.close();
+ }
+
+
+
+ /**
+ * Test a simple Word 95 document
+ */
+ @Test(expected=OldFileFormatException.class)
+ public void testWord95hwpf() throws IOException {
+ // Can't open as HWPFDocument
+ HWPFTestDataSamples.openSampleFile("Word95.doc");
+ }
+
+ @Test
+ public void testWord95hwpfOld() throws IOException {
+ // Open
+ HWPFOldDocument doc = HWPFTestDataSamples
+ .openOldSampleFile("Word95.doc");
+
+ // Check
+ assertEquals(1, doc.getRange().numSections());
+ assertEquals(7, doc.getRange().numParagraphs());
+
+ assertEquals("The quick brown fox jumps over the lazy dog\r",
+ doc.getRange().getParagraph(0).text());
+ assertEquals("\r", doc.getRange().getParagraph(1).text());
+ assertEquals("Paragraph 2\r", doc.getRange().getParagraph(2).text());
+ assertEquals("\r", doc.getRange().getParagraph(3).text());
+ assertEquals(
+ "Paragraph 3. Has some RED text and some "
+ + "BLUE BOLD text in it.\r",
+ doc.getRange().getParagraph(4).text());
+ assertEquals("\r", doc.getRange().getParagraph(5).text());
+ assertEquals("Last (4th) paragraph.\r",
+ doc.getRange().getParagraph(6).text());
+
+ assertEquals(1, doc.getRange().getParagraph(0).numCharacterRuns());
+ assertEquals(1, doc.getRange().getParagraph(1).numCharacterRuns());
+ assertEquals(1, doc.getRange().getParagraph(2).numCharacterRuns());
+ assertEquals(1, doc.getRange().getParagraph(3).numCharacterRuns());
+ // Normal, red, normal, blue+bold, normal
+ assertEquals(5, doc.getRange().getParagraph(4).numCharacterRuns());
+ assertEquals(1, doc.getRange().getParagraph(5).numCharacterRuns());
+ // Normal, superscript for 4th, normal
+ assertEquals(3, doc.getRange().getParagraph(6).numCharacterRuns());
+
+ doc.close();
+ }
+
+ /**
+ * Test a word document that has sections, as well as the usual paragraph
+ * stuff.
+ */
+ @Test
+ public void testWord6Sections() throws IOException {
+ HWPFOldDocument doc = HWPFTestDataSamples.openOldSampleFile("Word6_sections.doc");
+
+ assertEquals(3, doc.getRange().numSections());
+ assertEquals(6, doc.getRange().numParagraphs());
+
+ assertEquals("This is a test.\r",
+ doc.getRange().getParagraph(0).text());
+ assertEquals("\r", doc.getRange().getParagraph(1).text());
+ // Section / line?
+ assertEquals("\u000c", doc.getRange().getParagraph(2).text());
+ assertEquals("This is a new section.\r",
+ doc.getRange().getParagraph(3).text());
+ // Section / line?
+ assertEquals("\u000c", doc.getRange().getParagraph(4).text());
+ assertEquals("\r", doc.getRange().getParagraph(5).text());
+ doc.close();
+ }
+
+ /**
+ * Another word document with sections, this time with a few more section
+ * properties set on it
+ */
+ @Test
+ public void testWord6Sections2() throws IOException {
+ HWPFOldDocument doc = HWPFTestDataSamples
+ .openOldSampleFile("Word6_sections2.doc");
+
+ assertEquals(1, doc.getRange().numSections());
+ assertEquals(57, doc.getRange().numParagraphs());
+
+ assertEquals("\r", doc.getRange().getParagraph(0).text());
+ assertEquals("STATEMENT OF INSOLVENCY PRACTICE 10 (SCOTLAND)\r",
+ doc.getRange().getParagraph(1).text());
+ doc.close();
+ }
}
package org.apache.poi.hwpf.usermodel;
-import java.io.*;
+import static org.junit.Assert.assertEquals;
+
+import java.io.ByteArrayInputStream;
+import java.io.ByteArrayOutputStream;
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.FileOutputStream;
+import java.io.IOException;
+import java.io.InputStream;
import org.apache.poi.POIDataSamples;
import org.apache.poi.hwpf.HWPFDocument;
import org.apache.poi.poifs.filesystem.POIFSFileSystem;
import org.apache.poi.util.IOUtils;
import org.apache.poi.util.TempFile;
+import org.junit.Test;
/**
* Test various write situations
*/
public final class TestHWPFWrite extends HWPFTestCase {
- /**
- * Write to a stream
- */
- public void testWriteStream() throws Exception {
- HWPFDocument doc = HWPFTestDataSamples.openSampleFile("SampleDoc.doc");
-
- Range r = doc.getRange();
- assertEquals("I am a test document\r", r.getParagraph(0).text());
-
- ByteArrayOutputStream baos = new ByteArrayOutputStream();
- doc.write(baos);
- doc.close();
- ByteArrayInputStream bais = new ByteArrayInputStream(baos.toByteArray());
-
- doc = new HWPFDocument(bais);
- r = doc.getRange();
- assertEquals("I am a test document\r", r.getParagraph(0).text());
- doc.close();
- }
-
- /**
- * Write to a new file
- */
- public void testWriteNewFile() throws Exception {
- HWPFDocument doc = HWPFTestDataSamples.openSampleFile("SampleDoc.doc");
-
- Range r = doc.getRange();
- assertEquals("I am a test document\r", r.getParagraph(0).text());
-
- File file = TempFile.createTempFile("TestDocument", ".doc");
- doc.write(file);
- doc.close();
-
- // Check reading from File and Stream
- doc = new HWPFDocument(new FileInputStream(file));
- r = doc.getRange();
- assertEquals("I am a test document\r", r.getParagraph(0).text());
- doc.close();
-
- doc = new HWPFDocument(new POIFSFileSystem(file));
- r = doc.getRange();
- assertEquals("I am a test document\r", r.getParagraph(0).text());
- doc.close();
- }
-
- /**
- * Writing to the file we opened from - note, uses a temp file to
- * avoid changing our test files!
- */
- @SuppressWarnings("resource")
- public void testInPlaceWrite() throws Exception {
- // Setup as a copy of a known-good file
- final File file = TempFile.createTempFile("TestDocument", ".doc");
- InputStream inputStream = POIDataSamples.getDocumentInstance().openResourceAsStream("SampleDoc.doc");
- try {
- FileOutputStream outputStream = new FileOutputStream(file);
- try {
- IOUtils.copy(inputStream, outputStream);
- } finally {
- outputStream.close();
- }
- } finally {
- inputStream.close();
- }
-
- // Open from the temp file in read-write mode
- HWPFDocument doc = new HWPFDocument(new NPOIFSFileSystem(file, false).getRoot());
- Range r = doc.getRange();
- assertEquals("I am a test document\r", r.getParagraph(0).text());
-
- // Change
- r.replaceText("X XX a test document\r", false);
-
- // Save in-place, close, re-open and check
- doc.write();
- doc.close();
-
- doc = new HWPFDocument(new NPOIFSFileSystem(file).getRoot());
- r = doc.getRange();
- assertEquals("X XX a test document\r", r.getParagraph(0).text());
- doc.close();
- }
-
- @SuppressWarnings("resource")
- public void testInvalidInPlaceWrite() throws Exception {
- HWPFDocument doc;
-
- // Can't work for InputStream opened files
- doc = new HWPFDocument(
- POIDataSamples.getDocumentInstance().openResourceAsStream("SampleDoc.doc"));
- try {
- doc.write();
- fail("Shouldn't work for InputStream");
- } catch (IllegalStateException e) {
- // expected here
- }
- doc.close();
-
- // Can't work for OPOIFS
- OPOIFSFileSystem ofs = new OPOIFSFileSystem(
- POIDataSamples.getDocumentInstance().openResourceAsStream("SampleDoc.doc"));
- doc = new HWPFDocument(ofs.getRoot());
- try {
- doc.write();
- fail("Shouldn't work for OPOIFSFileSystem");
- } catch (IllegalStateException e) {
- // expected here
- }
- doc.close();
-
- // Can't work for Read-Only files
- NPOIFSFileSystem fs = new NPOIFSFileSystem(
- POIDataSamples.getDocumentInstance().getFile("SampleDoc.doc"), true);
- doc = new HWPFDocument(fs.getRoot());
- try {
- doc.write();
- fail("Shouldn't work for Read Only");
- } catch (IllegalStateException e) {
- // expected here
- }
- doc.close();
- }
+ private static final POIDataSamples SAMPLES = POIDataSamples.getDocumentInstance();
+
+ /**
+ * Write to a stream
+ */
+ @Test
+ public void testWriteStream() throws IOException {
+ HWPFDocument doc = HWPFTestDataSamples.openSampleFile("SampleDoc.doc");
+
+ Range r = doc.getRange();
+ assertEquals("I am a test document\r", r.getParagraph(0).text());
+
+ ByteArrayOutputStream baos = new ByteArrayOutputStream();
+ doc.write(baos);
+ doc.close();
+ ByteArrayInputStream bais = new ByteArrayInputStream(baos.toByteArray());
+
+ doc = new HWPFDocument(bais);
+ r = doc.getRange();
+ assertEquals("I am a test document\r", r.getParagraph(0).text());
+ doc.close();
+ }
+
+ /**
+ * Write to a new file
+ */
+ @Test
+ public void testWriteNewFile() throws IOException {
+ HWPFDocument doc = HWPFTestDataSamples.openSampleFile("SampleDoc.doc");
+
+ Range r = doc.getRange();
+ assertEquals("I am a test document\r", r.getParagraph(0).text());
+
+ File file = TempFile.createTempFile("TestDocument", ".doc");
+ doc.write(file);
+ doc.close();
+
+ // Check reading from File and Stream
+ doc = new HWPFDocument(new FileInputStream(file));
+ r = doc.getRange();
+ assertEquals("I am a test document\r", r.getParagraph(0).text());
+ doc.close();
+
+ doc = new HWPFDocument(new POIFSFileSystem(file));
+ r = doc.getRange();
+ assertEquals("I am a test document\r", r.getParagraph(0).text());
+ doc.close();
+ }
+
+ /**
+ * Writing to the file we opened from - note, uses a temp file to avoid
+ * changing our test files!
+ */
+ @Test
+ public void testInPlaceWrite() throws Exception {
+ // Setup as a copy of a known-good file
+ final File file = TempFile.createTempFile("TestDocument", ".doc");
+ InputStream inputStream = SAMPLES.openResourceAsStream("SampleDoc.doc");
+ try {
+ FileOutputStream outputStream = new FileOutputStream(file);
+ try {
+ IOUtils.copy(inputStream, outputStream);
+ } finally {
+ outputStream.close();
+ }
+ } finally {
+ inputStream.close();
+ }
+
+ // Open from the temp file in read-write mode
+ NPOIFSFileSystem poifs = new NPOIFSFileSystem(file, false);
+ HWPFDocument doc = new HWPFDocument(poifs.getRoot());
+ Range r = doc.getRange();
+ assertEquals("I am a test document\r", r.getParagraph(0).text());
+
+ // Change
+ r.replaceText("X XX a test document\r", false);
+
+ // Save in-place, close, re-open and check
+ doc.write();
+ doc.close();
+ poifs.close();
+
+ poifs = new NPOIFSFileSystem(file);
+ doc = new HWPFDocument(poifs.getRoot());
+ r = doc.getRange();
+ assertEquals("X XX a test document\r", r.getParagraph(0).text());
+ doc.close();
+ poifs.close();
+ }
+
+ @Test(expected=IllegalStateException.class)
+ public void testInvalidInPlaceWriteInputStream() throws IOException {
+ // Can't work for InputStream opened files
+ InputStream is = SAMPLES.openResourceAsStream("SampleDoc.doc");
+ HWPFDocument doc = new HWPFDocument(is);
+ is.close();
+ try {
+ doc.write();
+ } finally {
+ doc.close();
+ }
+ }
+
+ @Test(expected=IllegalStateException.class)
+ public void testInvalidInPlaceWriteOPOIFS() throws Exception {
+ // Can't work for OPOIFS
+ OPOIFSFileSystem ofs = new OPOIFSFileSystem(SAMPLES.openResourceAsStream("SampleDoc.doc"));
+ HWPFDocument doc = new HWPFDocument(ofs.getRoot());
+ try {
+ doc.write();
+ } finally {
+ doc.close();
+ }
+ }
+
+ @Test(expected=IllegalStateException.class)
+ public void testInvalidInPlaceWriteNPOIFS() throws Exception {
+ // Can't work for Read-Only files
+ NPOIFSFileSystem fs = new NPOIFSFileSystem(SAMPLES.getFile("SampleDoc.doc"), true);
+ HWPFDocument doc = new HWPFDocument(fs.getRoot());
+ try {
+ doc.write();
+ } finally {
+ doc.close();
+ fs.close();
+ }
+ }
}
package org.apache.poi.hwpf.usermodel;
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertNotNull;
+import java.io.IOException;
import org.apache.poi.EncryptedDocumentException;
import org.apache.poi.hwpf.HWPFDocument;
import org.apache.poi.hwpf.HWPFTestDataSamples;
import org.apache.poi.hwpf.extractor.WordExtractor;
import org.apache.poi.hwpf.model.StyleSheet;
+import org.junit.Test;
/**
* Test various problem documents
- *
- * @author Nick Burch (nick at torchbox dot com)
*/
public final class TestProblems extends HWPFTestCase {
-
- /**
- * ListEntry passed no ListTable
- */
- public void testListEntryNoListTable() {
- HWPFDocument doc = HWPFTestDataSamples.openSampleFile("ListEntryNoListTable.doc");
-
- Range r = doc.getRange();
- StyleSheet styleSheet = doc.getStyleSheet();
- for (int x = 0; x < r.numSections(); x++) {
- Section s = r.getSection(x);
- for (int y = 0; y < s.numParagraphs(); y++) {
- Paragraph paragraph = s.getParagraph(y);
- // System.out.println(paragraph.getCharacterRun(0).text());
- }
- }
- }
-
- /**
- * AIOOB for TableSprmUncompressor.unCompressTAPOperation
- */
- public void testSprmAIOOB() {
- HWPFDocument doc = HWPFTestDataSamples.openSampleFile("AIOOB-Tap.doc");
-
- Range r = doc.getRange();
- StyleSheet styleSheet = doc.getStyleSheet();
- for (int x = 0; x < r.numSections(); x++) {
- Section s = r.getSection(x);
- for (int y = 0; y < s.numParagraphs(); y++) {
- Paragraph paragraph = s.getParagraph(y);
- // System.out.println(paragraph.getCharacterRun(0).text());
- }
- }
- }
-
- /**
- * Test for TableCell not skipping the last paragraph. Bugs #45062 and
- * #44292
- */
- public void testTableCellLastParagraph() {
- HWPFDocument doc = HWPFTestDataSamples.openSampleFile("Bug44292.doc");
- Range r = doc.getRange();
- assertEquals(6, r.numParagraphs());
- assertEquals(0, r.getStartOffset());
- assertEquals(87, r.getEndOffset());
-
- // Paragraph with table
- Paragraph p = r.getParagraph(0);
- assertEquals(0, p.getStartOffset());
- assertEquals(20, p.getEndOffset());
-
- // Check a few bits of the table directly
- assertEquals("One paragraph is ok\7", r.getParagraph(0).text());
- assertEquals("First para is ok\r", r.getParagraph(1).text());
- assertEquals("Second paragraph is skipped\7", r.getParagraph(2).text());
- assertEquals("One paragraph is ok\7", r.getParagraph(3).text());
- assertEquals("\7", r.getParagraph(4).text());
- assertEquals("\r", r.getParagraph(5).text());
-
- // Get the table
- Table t = r.getTable(p);
-
- // get the only row
- assertEquals(1, t.numRows());
- TableRow row = t.getRow(0);
-
- // sanity check our row
- assertEquals(5, row.numParagraphs());
- assertEquals(0, row._parStart);
- assertEquals(5, row._parEnd);
- assertEquals(0, row.getStartOffset());
- assertEquals(86, row.getEndOffset());
-
-
- // get the first cell
- TableCell cell = row.getCell(0);
- // First cell should have one paragraph
- assertEquals(1, cell.numParagraphs());
- assertEquals("One paragraph is ok\7", cell.getParagraph(0).text());
- assertEquals(0, cell._parStart);
- assertEquals(1, cell._parEnd);
- assertEquals(0, cell.getStartOffset());
- assertEquals(20, cell.getEndOffset());
-
-
- // get the second
- cell = row.getCell(1);
- // Second cell should be detected as having two paragraphs
- assertEquals(2, cell.numParagraphs());
- assertEquals("First para is ok\r", cell.getParagraph(0).text());
- assertEquals("Second paragraph is skipped\7", cell.getParagraph(1).text());
- assertEquals(1, cell._parStart);
- assertEquals(3, cell._parEnd);
- assertEquals(20, cell.getStartOffset());
- assertEquals(65, cell.getEndOffset());
-
-
- // get the last cell
- cell = row.getCell(2);
- // Last cell should have one paragraph
- assertEquals(1, cell.numParagraphs());
- assertEquals("One paragraph is ok\7", cell.getParagraph(0).text());
- assertEquals(3, cell._parStart);
- assertEquals(4, cell._parEnd);
- assertEquals(65, cell.getStartOffset());
- assertEquals(85, cell.getEndOffset());
- }
-
- public void testRangeDelete() {
- HWPFDocument doc = HWPFTestDataSamples.openSampleFile("Bug28627.doc");
-
- Range range = doc.getRange();
- int numParagraphs = range.numParagraphs();
-
- int totalLength = 0, deletedLength = 0;
-
- for (int i = 0; i < numParagraphs; i++) {
- Paragraph para = range.getParagraph(i);
- String text = para.text();
-
- totalLength += text.length();
- if (text.indexOf("{delete me}") > -1) {
- para.delete();
- deletedLength = text.length();
- }
- }
-
- // check the text length after deletion
- int newLength = 0;
- range = doc.getRange();
- numParagraphs = range.numParagraphs();
-
- for (int i = 0; i < numParagraphs; i++) {
- Paragraph para = range.getParagraph(i);
- String text = para.text();
-
- newLength += text.length();
- }
-
- assertEquals(newLength, totalLength - deletedLength);
- }
-
- /**
- * With an encrypted file, we should give a suitable exception, and not OOM
- */
- public void testEncryptedFile() {
- try {
- HWPFTestDataSamples.openSampleFile("PasswordProtected.doc");
- fail();
- } catch (EncryptedDocumentException e) {
- // Good
- }
- }
-
- public void testWriteProperties() {
- HWPFDocument doc = HWPFTestDataSamples.openSampleFile("SampleDoc.doc");
- assertEquals("Nick Burch", doc.getSummaryInformation().getAuthor());
-
- // Write and read
- HWPFDocument doc2 = writeOutAndRead(doc);
- assertEquals("Nick Burch", doc2.getSummaryInformation().getAuthor());
- }
-
- /**
- * Test for reading paragraphs from Range after replacing some
- * text in this Range.
- * Bug #45269
- */
- public void testReadParagraphsAfterReplaceText()throws Exception{
- HWPFDocument doc = HWPFTestDataSamples.openSampleFile("Bug45269.doc");
- Range range = doc.getRange();
-
- String toFind = "campo1";
- String longer = " foi porraaaaa ";
- String shorter = " foi ";
-
- //check replace with longer text
- for (int x = 0; x < range.numParagraphs(); x++) {
- Paragraph para = range.getParagraph(x);
- int offset = para.text().indexOf(toFind);
- if (offset >= 0) {
- para.replaceText(toFind, longer, offset);
- assertEquals(offset, para.text().indexOf(longer));
- }
- }
-
- doc = HWPFTestDataSamples.openSampleFile("Bug45269.doc");
- range = doc.getRange();
-
- //check replace with shorter text
- for (int x = 0; x < range.numParagraphs(); x++) {
- Paragraph para = range.getParagraph(x);
- int offset = para.text().indexOf(toFind);
- if (offset >= 0) {
- para.replaceText(toFind, shorter, offset);
- assertEquals(offset, para.text().indexOf(shorter));
- }
- }
- }
-
- /**
- * Bug #49936 - Problems with reading the header out of
- * the Header Stories
- */
- public void testProblemHeaderStories49936() throws Exception {
- HWPFDocument doc = HWPFTestDataSamples.openSampleFile("HeaderFooterProblematic.doc");
- HeaderStories hs = new HeaderStories(doc);
-
- assertEquals("", hs.getFirstHeader());
- assertEquals("\r", hs.getEvenHeader());
- assertEquals("", hs.getOddHeader());
-
- assertEquals("", hs.getFirstFooter());
- assertEquals("", hs.getEvenFooter());
- assertEquals("", hs.getOddFooter());
-
- WordExtractor ext = new WordExtractor(doc);
- assertEquals("\n", ext.getHeaderText());
- assertEquals("", ext.getFooterText());
- }
-
- /**
- * Bug #45877 - problematic PAPX with no parent set
- */
- public void testParagraphPAPXNoParent45877() throws Exception {
- HWPFDocument doc = HWPFTestDataSamples.openSampleFile("Bug45877.doc");
- assertEquals(17, doc.getRange().numParagraphs());
-
- assertEquals("First paragraph\r", doc.getRange().getParagraph(0).text());
- assertEquals("After Crashing Part\r", doc.getRange().getParagraph(13).text());
- }
-
- /**
- * Bug #48245 - don't include the text from the
- * next cell in the current one
- */
- public void testTableIterator() throws Exception {
- HWPFDocument doc = HWPFTestDataSamples.openSampleFile("simple-table2.doc");
- Range r = doc.getRange();
-
- // Check the text is as we'd expect
- assertEquals(13, r.numParagraphs());
- assertEquals("Row 1/Cell 1\u0007", r.getParagraph(0).text());
- assertEquals("Row 1/Cell 2\u0007", r.getParagraph(1).text());
- assertEquals("Row 1/Cell 3\u0007", r.getParagraph(2).text());
- assertEquals("\u0007", r.getParagraph(3).text());
- assertEquals("Row 2/Cell 1\u0007", r.getParagraph(4).text());
- assertEquals("Row 2/Cell 2\u0007", r.getParagraph(5).text());
- assertEquals("Row 2/Cell 3\u0007", r.getParagraph(6).text());
- assertEquals("\u0007", r.getParagraph(7).text());
- assertEquals("Row 3/Cell 1\u0007", r.getParagraph(8).text());
- assertEquals("Row 3/Cell 2\u0007", r.getParagraph(9).text());
- assertEquals("Row 3/Cell 3\u0007", r.getParagraph(10).text());
- assertEquals("\u0007", r.getParagraph(11).text());
- assertEquals("\r", r.getParagraph(12).text());
-
- Paragraph p;
-
- // Take a look in detail at the first couple of
- // paragraphs
- p = r.getParagraph(0);
- assertEquals(1, p.numParagraphs());
- assertEquals(0, p.getStartOffset());
- assertEquals(13, p.getEndOffset());
- assertEquals(0, p._parStart);
- assertEquals(1, p._parEnd);
-
- p = r.getParagraph(1);
- assertEquals(1, p.numParagraphs());
- assertEquals(13, p.getStartOffset());
- assertEquals(26, p.getEndOffset());
- assertEquals(1, p._parStart);
- assertEquals(2, p._parEnd);
-
- p = r.getParagraph(2);
- assertEquals(1, p.numParagraphs());
- assertEquals(26, p.getStartOffset());
- assertEquals(39, p.getEndOffset());
- assertEquals(2, p._parStart);
- assertEquals(3, p._parEnd);
-
-
- // Now look at the table
- Table table = r.getTable(r.getParagraph(0));
- assertEquals(3, table.numRows());
-
- TableRow row;
- TableCell cell;
-
-
- row = table.getRow(0);
- assertEquals(0, row._parStart);
- assertEquals(4, row._parEnd);
-
- cell = row.getCell(0);
- assertEquals(1, cell.numParagraphs());
- assertEquals(0, cell._parStart);
- assertEquals(1, cell._parEnd);
- assertEquals(0, cell.getStartOffset());
- assertEquals(13, cell.getEndOffset());
- assertEquals("Row 1/Cell 1\u0007", cell.text());
- assertEquals("Row 1/Cell 1\u0007", cell.getParagraph(0).text());
-
- cell = row.getCell(1);
- assertEquals(1, cell.numParagraphs());
- assertEquals(1, cell._parStart);
- assertEquals(2, cell._parEnd);
- assertEquals(13, cell.getStartOffset());
- assertEquals(26, cell.getEndOffset());
- assertEquals("Row 1/Cell 2\u0007", cell.text());
- assertEquals("Row 1/Cell 2\u0007", cell.getParagraph(0).text());
-
- cell = row.getCell(2);
- assertEquals(1, cell.numParagraphs());
- assertEquals(2, cell._parStart);
- assertEquals(3, cell._parEnd);
- assertEquals(26, cell.getStartOffset());
- assertEquals(39, cell.getEndOffset());
- assertEquals("Row 1/Cell 3\u0007", cell.text());
- assertEquals("Row 1/Cell 3\u0007", cell.getParagraph(0).text());
-
-
- // Onto row #2
- row = table.getRow(1);
- assertEquals(4, row._parStart);
- assertEquals(8, row._parEnd);
-
- cell = row.getCell(0);
- assertEquals(1, cell.numParagraphs());
- assertEquals(4, cell._parStart);
- assertEquals(5, cell._parEnd);
- assertEquals(40, cell.getStartOffset());
- assertEquals(53, cell.getEndOffset());
- assertEquals("Row 2/Cell 1\u0007", cell.text());
-
- cell = row.getCell(1);
- assertEquals(1, cell.numParagraphs());
- assertEquals(5, cell._parStart);
- assertEquals(6, cell._parEnd);
- assertEquals(53, cell.getStartOffset());
- assertEquals(66, cell.getEndOffset());
- assertEquals("Row 2/Cell 2\u0007", cell.text());
-
- cell = row.getCell(2);
- assertEquals(1, cell.numParagraphs());
- assertEquals(6, cell._parStart);
- assertEquals(7, cell._parEnd);
- assertEquals(66, cell.getStartOffset());
- assertEquals(79, cell.getEndOffset());
- assertEquals("Row 2/Cell 3\u0007", cell.text());
-
-
- // Finally row 3
- row = table.getRow(2);
- assertEquals(8, row._parStart);
- assertEquals(12, row._parEnd);
-
- cell = row.getCell(0);
- assertEquals(1, cell.numParagraphs());
- assertEquals(8, cell._parStart);
- assertEquals(9, cell._parEnd);
- assertEquals(80, cell.getStartOffset());
- assertEquals(93, cell.getEndOffset());
- assertEquals("Row 3/Cell 1\u0007", cell.text());
-
- cell = row.getCell(1);
- assertEquals(1, cell.numParagraphs());
- assertEquals(9, cell._parStart);
- assertEquals(10, cell._parEnd);
- assertEquals(93, cell.getStartOffset());
- assertEquals(106, cell.getEndOffset());
- assertEquals("Row 3/Cell 2\u0007", cell.text());
-
- cell = row.getCell(2);
- assertEquals(1, cell.numParagraphs());
- assertEquals(10, cell._parStart);
- assertEquals(11, cell._parEnd);
- assertEquals(106, cell.getStartOffset());
- assertEquals(119, cell.getEndOffset());
- assertEquals("Row 3/Cell 3\u0007", cell.text());
- }
-
+ /**
+ * ListEntry passed no ListTable
+ */
+ @Test
+ public void testListEntryNoListTable() throws IOException {
+ HWPFDocument doc = HWPFTestDataSamples.openSampleFile("ListEntryNoListTable.doc");
+
+ Range r = doc.getRange();
+ for (int x = 0; x < r.numSections(); x++) {
+ Section s = r.getSection(x);
+ for (int y = 0; y < s.numParagraphs(); y++) {
+ s.getParagraph(y);
+ }
+ }
+
+ doc.close();
+ }
+
+ /**
+ * AIOOB for TableSprmUncompressor.unCompressTAPOperation
+ */
+ @Test
+ public void testSprmAIOOB() throws IOException {
+ HWPFDocument doc = HWPFTestDataSamples.openSampleFile("AIOOB-Tap.doc");
+
+ StyleSheet styleSheet = doc.getStyleSheet();
+ assertNotNull(styleSheet);
+
+ Range r = doc.getRange();
+ for (int x = 0; x < r.numSections(); x++) {
+ Section s = r.getSection(x);
+ for (int y = 0; y < s.numParagraphs(); y++) {
+ Paragraph paragraph = s.getParagraph(y);
+ assertNotNull(paragraph);
+ }
+ }
+ doc.close();
+ }
+
+ /**
+ * Test for TableCell not skipping the last paragraph. Bugs #45062 and
+ * #44292
+ */
+ @Test
+ public void testTableCellLastParagraph() throws IOException {
+ HWPFDocument doc = HWPFTestDataSamples.openSampleFile("Bug44292.doc");
+ Range r = doc.getRange();
+ assertEquals(6, r.numParagraphs());
+ assertEquals(0, r.getStartOffset());
+ assertEquals(87, r.getEndOffset());
+
+ // Paragraph with table
+ Paragraph p = r.getParagraph(0);
+ assertEquals(0, p.getStartOffset());
+ assertEquals(20, p.getEndOffset());
+
+ // Check a few bits of the table directly
+ assertEquals("One paragraph is ok\7", r.getParagraph(0).text());
+ assertEquals("First para is ok\r", r.getParagraph(1).text());
+ assertEquals("Second paragraph is skipped\7", r.getParagraph(2).text());
+ assertEquals("One paragraph is ok\7", r.getParagraph(3).text());
+ assertEquals("\7", r.getParagraph(4).text());
+ assertEquals("\r", r.getParagraph(5).text());
+
+ // Get the table
+ Table t = r.getTable(p);
+
+ // get the only row
+ assertEquals(1, t.numRows());
+ TableRow row = t.getRow(0);
+
+ // sanity check our row
+ assertEquals(5, row.numParagraphs());
+ assertEquals(0, row._parStart);
+ assertEquals(5, row._parEnd);
+ assertEquals(0, row.getStartOffset());
+ assertEquals(86, row.getEndOffset());
+
+ // get the first cell
+ TableCell cell = row.getCell(0);
+ // First cell should have one paragraph
+ assertEquals(1, cell.numParagraphs());
+ assertEquals("One paragraph is ok\7", cell.getParagraph(0).text());
+ assertEquals(0, cell._parStart);
+ assertEquals(1, cell._parEnd);
+ assertEquals(0, cell.getStartOffset());
+ assertEquals(20, cell.getEndOffset());
+
+ // get the second
+ cell = row.getCell(1);
+ // Second cell should be detected as having two paragraphs
+ assertEquals(2, cell.numParagraphs());
+ assertEquals("First para is ok\r", cell.getParagraph(0).text());
+ assertEquals("Second paragraph is skipped\7",
+ cell.getParagraph(1).text());
+ assertEquals(1, cell._parStart);
+ assertEquals(3, cell._parEnd);
+ assertEquals(20, cell.getStartOffset());
+ assertEquals(65, cell.getEndOffset());
+
+ // get the last cell
+ cell = row.getCell(2);
+ // Last cell should have one paragraph
+ assertEquals(1, cell.numParagraphs());
+ assertEquals("One paragraph is ok\7", cell.getParagraph(0).text());
+ assertEquals(3, cell._parStart);
+ assertEquals(4, cell._parEnd);
+ assertEquals(65, cell.getStartOffset());
+ assertEquals(85, cell.getEndOffset());
+
+ doc.close();
+ }
+
+ @Test
+ public void testRangeDelete() throws IOException {
+ HWPFDocument doc = HWPFTestDataSamples.openSampleFile("Bug28627.doc");
+
+ Range range = doc.getRange();
+ int numParagraphs = range.numParagraphs();
+
+ int totalLength = 0, deletedLength = 0;
+
+ for (int i = 0; i < numParagraphs; i++) {
+ Paragraph para = range.getParagraph(i);
+ String text = para.text();
+
+ totalLength += text.length();
+ if (text.indexOf("{delete me}") > -1) {
+ para.delete();
+ deletedLength = text.length();
+ }
+ }
+
+ // check the text length after deletion
+ int newLength = 0;
+ range = doc.getRange();
+ numParagraphs = range.numParagraphs();
+
+ for (int i = 0; i < numParagraphs; i++) {
+ Paragraph para = range.getParagraph(i);
+ String text = para.text();
+
+ newLength += text.length();
+ }
+
+ assertEquals(newLength, totalLength - deletedLength);
+
+ doc.close();
+ }
+
+ /**
+ * With an encrypted file, we should give a suitable exception, and not OOM
+ */
+ @Test(expected=EncryptedDocumentException.class)
+ public void testEncryptedFile() throws IOException {
+ HWPFTestDataSamples.openSampleFile("PasswordProtected.doc");
+ }
+
+ @Test
+ public void testWriteProperties() throws IOException {
+ HWPFDocument doc = HWPFTestDataSamples.openSampleFile("SampleDoc.doc");
+ assertEquals("Nick Burch", doc.getSummaryInformation().getAuthor());
+
+ // Write and read
+ HWPFDocument doc2 = writeOutAndRead(doc);
+ assertEquals("Nick Burch", doc2.getSummaryInformation().getAuthor());
+ doc2.close();
+ doc.close();
+ }
+
+ /**
+ * Test for reading paragraphs from Range after replacing some text in this
+ * Range. Bug #45269
+ */
+ @Test
+ public void testReadParagraphsAfterReplaceText() throws IOException {
+ HWPFDocument doc = HWPFTestDataSamples.openSampleFile("Bug45269.doc");
+ Range range = doc.getRange();
+
+ String toFind = "campo1";
+ String longer = " foi porraaaaa ";
+ String shorter = " foi ";
+
+ // check replace with longer text
+ for (int x = 0; x < range.numParagraphs(); x++) {
+ Paragraph para = range.getParagraph(x);
+ int offset = para.text().indexOf(toFind);
+ if (offset >= 0) {
+ para.replaceText(toFind, longer, offset);
+ assertEquals(offset, para.text().indexOf(longer));
+ }
+ }
+
+ doc = HWPFTestDataSamples.openSampleFile("Bug45269.doc");
+ range = doc.getRange();
+
+ // check replace with shorter text
+ for (int x = 0; x < range.numParagraphs(); x++) {
+ Paragraph para = range.getParagraph(x);
+ int offset = para.text().indexOf(toFind);
+ if (offset >= 0) {
+ para.replaceText(toFind, shorter, offset);
+ assertEquals(offset, para.text().indexOf(shorter));
+ }
+ }
+
+ doc.close();
+ }
+
+ /**
+ * Bug #49936 - Problems with reading the header out of the Header Stories
+ */
+ @SuppressWarnings("deprecation")
+ @Test
+ public void testProblemHeaderStories49936() throws IOException {
+ HWPFDocument doc = HWPFTestDataSamples.openSampleFile("HeaderFooterProblematic.doc");
+ HeaderStories hs = new HeaderStories(doc);
+
+ assertEquals("", hs.getFirstHeader());
+ assertEquals("\r", hs.getEvenHeader());
+ assertEquals("", hs.getOddHeader());
+
+ assertEquals("", hs.getFirstFooter());
+ assertEquals("", hs.getEvenFooter());
+ assertEquals("", hs.getOddFooter());
+
+ WordExtractor ext = new WordExtractor(doc);
+ assertEquals("\n", ext.getHeaderText());
+ assertEquals("", ext.getFooterText());
+ ext.close();
+ doc.close();
+ }
+
+ /**
+ * Bug #45877 - problematic PAPX with no parent set
+ */
+ @Test
+ public void testParagraphPAPXNoParent45877() throws IOException {
+ HWPFDocument doc = HWPFTestDataSamples.openSampleFile("Bug45877.doc");
+ assertEquals(17, doc.getRange().numParagraphs());
+
+ assertEquals("First paragraph\r",
+ doc.getRange().getParagraph(0).text());
+ assertEquals("After Crashing Part\r",
+ doc.getRange().getParagraph(13).text());
+
+ doc.close();
+ }
+
+ /**
+ * Bug #48245 - don't include the text from the next cell in the current one
+ */
+ @Test
+ public void testTableIterator() throws IOException {
+ HWPFDocument doc = HWPFTestDataSamples.openSampleFile("simple-table2.doc");
+ Range r = doc.getRange();
+
+ // Check the text is as we'd expect
+ assertEquals(13, r.numParagraphs());
+ assertEquals("Row 1/Cell 1\u0007", r.getParagraph(0).text());
+ assertEquals("Row 1/Cell 2\u0007", r.getParagraph(1).text());
+ assertEquals("Row 1/Cell 3\u0007", r.getParagraph(2).text());
+ assertEquals("\u0007", r.getParagraph(3).text());
+ assertEquals("Row 2/Cell 1\u0007", r.getParagraph(4).text());
+ assertEquals("Row 2/Cell 2\u0007", r.getParagraph(5).text());
+ assertEquals("Row 2/Cell 3\u0007", r.getParagraph(6).text());
+ assertEquals("\u0007", r.getParagraph(7).text());
+ assertEquals("Row 3/Cell 1\u0007", r.getParagraph(8).text());
+ assertEquals("Row 3/Cell 2\u0007", r.getParagraph(9).text());
+ assertEquals("Row 3/Cell 3\u0007", r.getParagraph(10).text());
+ assertEquals("\u0007", r.getParagraph(11).text());
+ assertEquals("\r", r.getParagraph(12).text());
+
+ Paragraph p;
+
+ // Take a look in detail at the first couple of
+ // paragraphs
+ p = r.getParagraph(0);
+ assertEquals(1, p.numParagraphs());
+ assertEquals(0, p.getStartOffset());
+ assertEquals(13, p.getEndOffset());
+ assertEquals(0, p._parStart);
+ assertEquals(1, p._parEnd);
+
+ p = r.getParagraph(1);
+ assertEquals(1, p.numParagraphs());
+ assertEquals(13, p.getStartOffset());
+ assertEquals(26, p.getEndOffset());
+ assertEquals(1, p._parStart);
+ assertEquals(2, p._parEnd);
+
+ p = r.getParagraph(2);
+ assertEquals(1, p.numParagraphs());
+ assertEquals(26, p.getStartOffset());
+ assertEquals(39, p.getEndOffset());
+ assertEquals(2, p._parStart);
+ assertEquals(3, p._parEnd);
+
+ // Now look at the table
+ Table table = r.getTable(r.getParagraph(0));
+ assertEquals(3, table.numRows());
+
+ TableRow row;
+ TableCell cell;
+
+ row = table.getRow(0);
+ assertEquals(0, row._parStart);
+ assertEquals(4, row._parEnd);
+
+ cell = row.getCell(0);
+ assertEquals(1, cell.numParagraphs());
+ assertEquals(0, cell._parStart);
+ assertEquals(1, cell._parEnd);
+ assertEquals(0, cell.getStartOffset());
+ assertEquals(13, cell.getEndOffset());
+ assertEquals("Row 1/Cell 1\u0007", cell.text());
+ assertEquals("Row 1/Cell 1\u0007", cell.getParagraph(0).text());
+
+ cell = row.getCell(1);
+ assertEquals(1, cell.numParagraphs());
+ assertEquals(1, cell._parStart);
+ assertEquals(2, cell._parEnd);
+ assertEquals(13, cell.getStartOffset());
+ assertEquals(26, cell.getEndOffset());
+ assertEquals("Row 1/Cell 2\u0007", cell.text());
+ assertEquals("Row 1/Cell 2\u0007", cell.getParagraph(0).text());
+
+ cell = row.getCell(2);
+ assertEquals(1, cell.numParagraphs());
+ assertEquals(2, cell._parStart);
+ assertEquals(3, cell._parEnd);
+ assertEquals(26, cell.getStartOffset());
+ assertEquals(39, cell.getEndOffset());
+ assertEquals("Row 1/Cell 3\u0007", cell.text());
+ assertEquals("Row 1/Cell 3\u0007", cell.getParagraph(0).text());
+
+ // Onto row #2
+ row = table.getRow(1);
+ assertEquals(4, row._parStart);
+ assertEquals(8, row._parEnd);
+
+ cell = row.getCell(0);
+ assertEquals(1, cell.numParagraphs());
+ assertEquals(4, cell._parStart);
+ assertEquals(5, cell._parEnd);
+ assertEquals(40, cell.getStartOffset());
+ assertEquals(53, cell.getEndOffset());
+ assertEquals("Row 2/Cell 1\u0007", cell.text());
+
+ cell = row.getCell(1);
+ assertEquals(1, cell.numParagraphs());
+ assertEquals(5, cell._parStart);
+ assertEquals(6, cell._parEnd);
+ assertEquals(53, cell.getStartOffset());
+ assertEquals(66, cell.getEndOffset());
+ assertEquals("Row 2/Cell 2\u0007", cell.text());
+
+ cell = row.getCell(2);
+ assertEquals(1, cell.numParagraphs());
+ assertEquals(6, cell._parStart);
+ assertEquals(7, cell._parEnd);
+ assertEquals(66, cell.getStartOffset());
+ assertEquals(79, cell.getEndOffset());
+ assertEquals("Row 2/Cell 3\u0007", cell.text());
+
+ // Finally row 3
+ row = table.getRow(2);
+ assertEquals(8, row._parStart);
+ assertEquals(12, row._parEnd);
+
+ cell = row.getCell(0);
+ assertEquals(1, cell.numParagraphs());
+ assertEquals(8, cell._parStart);
+ assertEquals(9, cell._parEnd);
+ assertEquals(80, cell.getStartOffset());
+ assertEquals(93, cell.getEndOffset());
+ assertEquals("Row 3/Cell 1\u0007", cell.text());
+
+ cell = row.getCell(1);
+ assertEquals(1, cell.numParagraphs());
+ assertEquals(9, cell._parStart);
+ assertEquals(10, cell._parEnd);
+ assertEquals(93, cell.getStartOffset());
+ assertEquals(106, cell.getEndOffset());
+ assertEquals("Row 3/Cell 2\u0007", cell.text());
+
+ cell = row.getCell(2);
+ assertEquals(1, cell.numParagraphs());
+ assertEquals(10, cell._parStart);
+ assertEquals(11, cell._parEnd);
+ assertEquals(106, cell.getStartOffset());
+ assertEquals(119, cell.getEndOffset());
+ assertEquals("Row 3/Cell 3\u0007", cell.text());
+
+ doc.close();
+ }
}