if(_document != null) {
OPCPackage pkg = _document.getPackage();
if(pkg != null) {
- pkg.close();
+ // revert the package to not re-write the file, which is very likely not wanted for a TextExtractor!
+ pkg.revert();
}
}
super.close();
} catch(OfficeXmlFileException e) {
// opening as .xls failed => try opening as .xlsx
OPCPackage pkg = OPCPackage.open(file);
- return new XSSFWorkbook(pkg);
+ try {
+ return new XSSFWorkbook(pkg);
+ } catch (IOException ioe) {
+ // ensure that file handles are closed (use revert() to not re-write the file)
+ pkg.revert();
+ //pkg.close();
+
+ // rethrow exception
+ throw ioe;
+ } catch (IllegalArgumentException ioe) {
+ // ensure that file handles are closed (use revert() to not re-write the file)
+ pkg.revert();
+ //pkg.close();
+
+ // rethrow exception
+ throw ioe;
+ }
}
}
}
}
try {
- NotesMasterDocument doc = NotesMasterDocument.Factory.parse(is);
- CTNotesMaster slide = doc.getNotesMaster();
- return slide;
+ try {
+ NotesMasterDocument doc = NotesMasterDocument.Factory.parse(is);
+ CTNotesMaster slide = doc.getNotesMaster();
+ return slide;
+ } finally {
+ is.close();
+ }
} catch (Exception e) {
throw new POIXMLException("Can't initialize NotesMaster", e);
}
void deregisterSheetMapping(XSSFSheet xSheet)
{
SXSSFSheet sxSheet=getSXSSFSheet(xSheet);
+
+ // ensure that the writer is closed in all cases to not have lingering writers
+ try {
+ sxSheet.getSheetDataWriter().close();
+ } catch (IOException e) {
+ // ignore exception here
+ }
+
_sxFromXHash.remove(sxSheet);
+
_xFromSxHash.remove(xSheet);
}
private XSSFSheet getSheetFromZipEntryName(String sheetRef)
*/
@Override
public void close() throws IOException {
+ // ensure that any lingering writer is closed
+ for (SXSSFSheet sheet : _xFromSxHash.values())
+ {
+ try {
+ sheet.getSheetDataWriter().close();
+ } catch (IOException e) {
+ // ignore exception here
+ }
+ }
+
+
// Tell the base workbook to close, does nothing if
// it's a newly created one
_wb.close();
package org.apache.poi;
+import java.io.InputStream;
+import java.io.PushbackInputStream;
+
import junit.framework.TestCase;
-import java.io.*;
import org.apache.poi.hssf.HSSFTestDataSamples;
import org.apache.poi.openxml4j.opc.OPCPackage;
HSSFTestDataSamples.openSampleFileStream("SampleSS.xlsx"), 10
);
assertTrue(POIXMLDocument.hasOOXMLHeader(in));
+ in.close();
// xls file isn't
in = new PushbackInputStream(
HSSFTestDataSamples.openSampleFileStream("SampleSS.xls"), 10
);
assertFalse(POIXMLDocument.hasOOXMLHeader(in));
+ in.close();
// text file isn't
in = new PushbackInputStream(
HSSFTestDataSamples.openSampleFileStream("SampleSS.txt"), 10
);
assertFalse(POIXMLDocument.hasOOXMLHeader(in));
+ in.close();
}
}
out.close();
OPCPackage pkg2 = OPCPackage.open(tmp.getAbsolutePath());
-
- doc = new OPCParser(pkg1);
- doc.parse(new TestFactory());
- context = new HashMap<String,POIXMLDocumentPart>();
- traverse(doc, context);
- context.clear();
-
- assertEquals(pkg1.getRelationships().size(), pkg2.getRelationships().size());
-
- ArrayList<PackagePart> l1 = pkg1.getParts();
- ArrayList<PackagePart> l2 = pkg2.getParts();
-
- assertEquals(l1.size(), l2.size());
- for (int i=0; i < l1.size(); i++){
- PackagePart p1 = l1.get(i);
- PackagePart p2 = l2.get(i);
-
- assertEquals(p1.getContentType(), p2.getContentType());
- assertEquals(p1.hasRelationships(), p2.hasRelationships());
- if(p1.hasRelationships()){
- assertEquals(p1.getRelationships().size(), p2.getRelationships().size());
+ try {
+ doc = new OPCParser(pkg1);
+ doc.parse(new TestFactory());
+ context = new HashMap<String,POIXMLDocumentPart>();
+ traverse(doc, context);
+ context.clear();
+
+ assertEquals(pkg1.getRelationships().size(), pkg2.getRelationships().size());
+
+ ArrayList<PackagePart> l1 = pkg1.getParts();
+ ArrayList<PackagePart> l2 = pkg2.getParts();
+
+ assertEquals(l1.size(), l2.size());
+ for (int i=0; i < l1.size(); i++){
+ PackagePart p1 = l1.get(i);
+ PackagePart p2 = l2.get(i);
+
+ assertEquals(p1.getContentType(), p2.getContentType());
+ assertEquals(p1.hasRelationships(), p2.hasRelationships());
+ if(p1.hasRelationships()){
+ assertEquals(p1.getRelationships().size(), p2.getRelationships().size());
+ }
+ assertEquals(p1.getPartName(), p2.getPartName());
}
- assertEquals(p1.getPartName(), p2.getPartName());
+ } finally {
+ pkg2.close();
}
}
for(POIXMLDocumentPart rel : doc.getRelations()){
//TODO finish me
+ assertNotNull(rel);
}
}
import org.apache.poi.POIDataSamples;
import org.apache.poi.POIOLE2TextExtractor;
import org.apache.poi.POITextExtractor;
+import org.apache.poi.POIXMLTextExtractor;
import org.apache.poi.hdgf.extractor.VisioTextExtractor;
import org.apache.poi.hpbf.extractor.PublisherTextExtractor;
import org.apache.poi.hslf.extractor.PowerPointExtractor;
import org.apache.poi.hwpf.extractor.WordExtractor;
import org.apache.poi.openxml4j.exceptions.InvalidOperationException;
import org.apache.poi.openxml4j.opc.OPCPackage;
+import org.apache.poi.openxml4j.opc.PackageAccess;
import org.apache.poi.poifs.filesystem.POIFSFileSystem;
import org.apache.poi.xslf.extractor.XSLFPowerPointExtractor;
import org.apache.poi.xssf.extractor.XSSFEventBasedExcelExtractor;
assertTrue(
xlsExtractor.getText().length() > 200
);
+ xlsExtractor.close();
+ POITextExtractor extractor = ExtractorFactory.createExtractor(xlsx);
assertTrue(
- ExtractorFactory.createExtractor(xlsx)
+ extractor
instanceof XSSFExcelExtractor
);
+ extractor.close();
+
+ extractor = ExtractorFactory.createExtractor(xlsx);
assertTrue(
- ExtractorFactory.createExtractor(xlsx).getText().length() > 200
+ extractor.getText().length() > 200
);
+ extractor.close();
+ extractor = ExtractorFactory.createExtractor(xltx);
assertTrue(
- ExtractorFactory.createExtractor(xltx)
+ extractor
instanceof XSSFExcelExtractor
);
+ extractor.close();
+
+ extractor = ExtractorFactory.createExtractor(xltx);
assertTrue(
- ExtractorFactory.createExtractor(xltx).getText().contains("test")
+ extractor.getText().contains("test")
);
+ extractor.close();
// Word
ExtractorFactory.createExtractor(doc95).getText().length() > 120
);
-
+ extractor = ExtractorFactory.createExtractor(docx);
assertTrue(
- ExtractorFactory.createExtractor(docx)
- instanceof XWPFWordExtractor
+ extractor instanceof XWPFWordExtractor
);
+ extractor.close();
+
+ extractor = ExtractorFactory.createExtractor(docx);
assertTrue(
- ExtractorFactory.createExtractor(docx).getText().length() > 120
+ extractor.getText().length() > 120
);
+ extractor.close();
+ extractor = ExtractorFactory.createExtractor(dotx);
assertTrue(
- ExtractorFactory.createExtractor(dotx)
- instanceof XWPFWordExtractor
+ extractor instanceof XWPFWordExtractor
);
+ extractor.close();
+
+ extractor = ExtractorFactory.createExtractor(dotx);
assertTrue(
- ExtractorFactory.createExtractor(dotx).getText().contains("Test")
+ extractor.getText().contains("Test")
);
+ extractor.close();
// PowerPoint
assertTrue(
ExtractorFactory.createExtractor(ppt).getText().length() > 120
);
+ extractor = ExtractorFactory.createExtractor(pptx);
assertTrue(
- ExtractorFactory.createExtractor(pptx)
+ extractor
instanceof XSLFPowerPointExtractor
);
+ extractor.close();
+
+ extractor = ExtractorFactory.createExtractor(pptx);
assertTrue(
- ExtractorFactory.createExtractor(pptx).getText().length() > 120
+ extractor.getText().length() > 120
);
+ extractor.close();
// Visio
assertTrue(
// Text
try {
- ExtractorFactory.createExtractor(new FileInputStream(txt));
- fail();
+ FileInputStream stream = new FileInputStream(txt);
+ try {
+ ExtractorFactory.createExtractor(stream);
+ fail();
+ } finally {
+ stream.close();
+ }
} catch(IllegalArgumentException e) {
// Good
}
public void testPackage() throws Exception {
// Excel
- assertTrue(
- ExtractorFactory.createExtractor(OPCPackage.open(xlsx.toString()))
+ POIXMLTextExtractor extractor = ExtractorFactory.createExtractor(OPCPackage.open(xlsx.toString(), PackageAccess.READ));
+ assertTrue(
+ extractor
instanceof XSSFExcelExtractor
);
- assertTrue(
- ExtractorFactory.createExtractor(OPCPackage.open(xlsx.toString())).getText().length() > 200
- );
+ extractor.close();
+ extractor = ExtractorFactory.createExtractor(OPCPackage.open(xlsx.toString()));
+ assertTrue(extractor.getText().length() > 200);
+ extractor.close();
// Word
- assertTrue(
- ExtractorFactory.createExtractor(OPCPackage.open(docx.toString()))
+ extractor = ExtractorFactory.createExtractor(OPCPackage.open(docx.toString()));
+ assertTrue(
+ extractor
instanceof XWPFWordExtractor
);
- assertTrue(
- ExtractorFactory.createExtractor(OPCPackage.open(docx.toString())).getText().length() > 120
+ extractor.close();
+
+ extractor = ExtractorFactory.createExtractor(OPCPackage.open(docx.toString()));
+ assertTrue(
+ extractor.getText().length() > 120
);
+ extractor.close();
// PowerPoint
- assertTrue(
- ExtractorFactory.createExtractor(OPCPackage.open(pptx.toString()))
+ extractor = ExtractorFactory.createExtractor(OPCPackage.open(pptx.toString()));
+ assertTrue(
+ extractor
instanceof XSLFPowerPointExtractor
);
- assertTrue(
- ExtractorFactory.createExtractor(OPCPackage.open(pptx.toString())).getText().length() > 120
+ extractor.close();
+
+ extractor = ExtractorFactory.createExtractor(OPCPackage.open(pptx.toString()));
+ assertTrue(
+ extractor.getText().length() > 120
);
+ extractor.close();
// Text
try {
// Check we get the right extractors now
+ POITextExtractor extractor = ExtractorFactory.createExtractor(new POIFSFileSystem(new FileInputStream(xls)));
assertTrue(
- ExtractorFactory.createExtractor(new POIFSFileSystem(new FileInputStream(xls)))
+ extractor
instanceof EventBasedExcelExtractor
);
+ extractor.close();
+ extractor = ExtractorFactory.createExtractor(new POIFSFileSystem(new FileInputStream(xls)));
assertTrue(
- ExtractorFactory.createExtractor(new POIFSFileSystem(new FileInputStream(xls))).getText().length() > 200
+ extractor.getText().length() > 200
);
+ extractor.close();
+ extractor = ExtractorFactory.createExtractor(OPCPackage.open(xlsx.toString(), PackageAccess.READ));
+ assertTrue(extractor instanceof XSSFEventBasedExcelExtractor);
+ extractor.close();
+
+ extractor = ExtractorFactory.createExtractor(OPCPackage.open(xlsx.toString(), PackageAccess.READ));
assertTrue(
- ExtractorFactory.createExtractor(OPCPackage.open(xlsx.toString()))
- instanceof XSSFEventBasedExcelExtractor
- );
- assertTrue(
- ExtractorFactory.createExtractor(OPCPackage.open(xlsx.toString())).getText().length() > 200
+ extractor.getText().length() > 200
);
+ extractor.close();
// Put back to normal
assertNull(ExtractorFactory.getAllThreadsPreferEventExtractors());
// And back
+ extractor = ExtractorFactory.createExtractor(new POIFSFileSystem(new FileInputStream(xls)));
assertTrue(
- ExtractorFactory.createExtractor(new POIFSFileSystem(new FileInputStream(xls)))
+ extractor
instanceof ExcelExtractor
);
+ extractor.close();
+ extractor = ExtractorFactory.createExtractor(new POIFSFileSystem(new FileInputStream(xls)));
assertTrue(
- ExtractorFactory.createExtractor(new POIFSFileSystem(new FileInputStream(xls))).getText().length() > 200
+ extractor.getText().length() > 200
);
+ extractor.close();
+ extractor = ExtractorFactory.createExtractor(OPCPackage.open(xlsx.toString(), PackageAccess.READ));
assertTrue(
- ExtractorFactory.createExtractor(OPCPackage.open(xlsx.toString()))
+ extractor
instanceof XSSFExcelExtractor
);
+ extractor.close();
+ extractor = ExtractorFactory.createExtractor(OPCPackage.open(xlsx.toString()));
assertTrue(
- ExtractorFactory.createExtractor(OPCPackage.open(xlsx.toString())).getText().length() > 200
+ extractor.getText().length() > 200
);
+ extractor.close();
}
/**
File targetFile = OpenXML4JTestDataSamples.getOutputFile("TestPackageOpenSaveTMP.docx");
OPCPackage p = OPCPackage.open(originalFile, PackageAccess.READ_WRITE);
- p.save(targetFile.getAbsoluteFile());
-
- // Compare the original and newly saved document
- assertTrue(targetFile.exists());
- ZipFileAssert.assertEquals(new File(originalFile), targetFile);
- assertTrue(targetFile.delete());
+ try {
+ p.save(targetFile.getAbsoluteFile());
+
+ // Compare the original and newly saved document
+ assertTrue(targetFile.exists());
+ ZipFileAssert.assertEquals(new File(originalFile), targetFile);
+ assertTrue(targetFile.delete());
+ } finally {
+ // use revert to not re-write the input file
+ p.revert();
+ }
}
/**
PackageRelationship rel =
corePart.addRelationship(sheetPartName, TargetMode.INTERNAL, "http://schemas.openxmlformats.org/officeDocument/2006/relationships/worksheet", "rSheet1");
PackagePart part = pkg.createPart(sheetPartName, "application/vnd.openxmlformats-officedocument.spreadsheetml.worksheet+xml");
+ assertNotNull(part);
+
// Dummy content again
coreOut = corePart.getOutputStream();
coreOut.write("<dummy-xml2 />".getBytes());
// Save and re-load
pkg.close();
File tmp = TempFile.createTempFile("testCreatePackageWithCoreDocument", ".zip");
- FileOutputStream fout = new FileOutputStream(tmp);
- fout.write(baos.toByteArray());
- fout.close();
+ OutputStream fout = new FileOutputStream(tmp);
+ try {
+ fout.write(baos.toByteArray());
+ } finally {
+ fout.close();
+ }
pkg = OPCPackage.open(tmp.getPath());
//tmp.delete();
- // Check still right
- coreRels = pkg.getRelationshipsByType(PackageRelationshipTypes.CORE_DOCUMENT);
- assertEquals(1, coreRels.size());
- coreRel = coreRels.getRelationship(0);
-
- assertEquals("/", coreRel.getSourceURI().toString());
- assertEquals("/xl/workbook.xml", coreRel.getTargetURI().toString());
- corePart = pkg.getPart(coreRel);
- assertNotNull(corePart);
-
- PackageRelationshipCollection rels = corePart.getRelationshipsByType("http://schemas.openxmlformats.org/officeDocument/2006/relationships/hyperlink");
- assertEquals(1, rels.size());
- rel = rels.getRelationship(0);
- assertEquals("Sheet1!A1", rel.getTargetURI().getRawFragment());
-
- assertMSCompatibility(pkg);
+ try {
+ // Check still right
+ coreRels = pkg.getRelationshipsByType(PackageRelationshipTypes.CORE_DOCUMENT);
+ assertEquals(1, coreRels.size());
+ coreRel = coreRels.getRelationship(0);
+
+ assertEquals("/", coreRel.getSourceURI().toString());
+ assertEquals("/xl/workbook.xml", coreRel.getTargetURI().toString());
+ corePart = pkg.getPart(coreRel);
+ assertNotNull(corePart);
+
+ PackageRelationshipCollection rels = corePart.getRelationshipsByType("http://schemas.openxmlformats.org/officeDocument/2006/relationships/hyperlink");
+ assertEquals(1, rels.size());
+ rel = rels.getRelationship(0);
+ assertEquals("Sheet1!A1", rel.getTargetURI().getRawFragment());
+
+ assertMSCompatibility(pkg);
+ } finally {
+ pkg.close();
+ }
}
private void assertMSCompatibility(OPCPackage pkg) throws Exception {
File targetFile = OpenXML4JTestDataSamples.getOutputFile("TestPackageOpenSaveTMP.docx");
OPCPackage p = OPCPackage.open(originalFile, PackageAccess.READ_WRITE);
- FileOutputStream fout = new FileOutputStream(targetFile);
- p.save(fout);
- fout.close();
-
- // Compare the original and newly saved document
- assertTrue(targetFile.exists());
- ZipFileAssert.assertEquals(new File(originalFile), targetFile);
- assertTrue(targetFile.delete());
+ try {
+ FileOutputStream fout = new FileOutputStream(targetFile);
+ try {
+ p.save(fout);
+ } finally {
+ fout.close();
+ }
+
+ // Compare the original and newly saved document
+ assertTrue(targetFile.exists());
+ ZipFileAssert.assertEquals(new File(originalFile), targetFile);
+ assertTrue(targetFile.delete());
+ } finally {
+ // use revert to not re-write the input file
+ p.revert();
+ }
}
/**
String filepath = OpenXML4JTestDataSamples.getSampleFileName("sample.docx");
OPCPackage pkg = OPCPackage.open(filepath, PackageAccess.READ_WRITE);
- List<PackagePart> rs = pkg.getPartsByName(Pattern.compile("/word/.*?\\.xml"));
- HashMap<String, PackagePart> selected = new HashMap<String, PackagePart>();
-
- for(PackagePart p : rs)
- selected.put(p.getPartName().getName(), p);
-
- assertEquals(6, selected.size());
- assertTrue(selected.containsKey("/word/document.xml"));
- assertTrue(selected.containsKey("/word/fontTable.xml"));
- assertTrue(selected.containsKey("/word/settings.xml"));
- assertTrue(selected.containsKey("/word/styles.xml"));
- assertTrue(selected.containsKey("/word/theme/theme1.xml"));
- assertTrue(selected.containsKey("/word/webSettings.xml"));
+ try {
+ List<PackagePart> rs = pkg.getPartsByName(Pattern.compile("/word/.*?\\.xml"));
+ HashMap<String, PackagePart> selected = new HashMap<String, PackagePart>();
+
+ for(PackagePart p : rs)
+ selected.put(p.getPartName().getName(), p);
+
+ assertEquals(6, selected.size());
+ assertTrue(selected.containsKey("/word/document.xml"));
+ assertTrue(selected.containsKey("/word/fontTable.xml"));
+ assertTrue(selected.containsKey("/word/settings.xml"));
+ assertTrue(selected.containsKey("/word/styles.xml"));
+ assertTrue(selected.containsKey("/word/theme/theme1.xml"));
+ assertTrue(selected.containsKey("/word/webSettings.xml"));
+ } finally {
+ // use revert to not re-write the input file
+ pkg.revert();
+ }
}
public void testGetPartSize() throws Exception {
String filepath = OpenXML4JTestDataSamples.getSampleFileName("sample.docx");
OPCPackage pkg = OPCPackage.open(filepath, PackageAccess.READ);
-
- int checked = 0;
- for (PackagePart part : pkg.getParts()) {
- // Can get the size of zip parts
- if (part.getPartName().getName().equals("/word/document.xml")) {
- checked++;
- assertEquals(ZipPackagePart.class, part.getClass());
- assertEquals(6031l, part.getSize());
- }
- if (part.getPartName().getName().equals("/word/fontTable.xml")) {
- checked++;
- assertEquals(ZipPackagePart.class, part.getClass());
- assertEquals(1312l, part.getSize());
- }
-
- // But not from the others
- if (part.getPartName().getName().equals("/docProps/core.xml")) {
- checked++;
- assertEquals(PackagePropertiesPart.class, part.getClass());
- assertEquals(-1, part.getSize());
- }
+ try {
+ int checked = 0;
+ for (PackagePart part : pkg.getParts()) {
+ // Can get the size of zip parts
+ if (part.getPartName().getName().equals("/word/document.xml")) {
+ checked++;
+ assertEquals(ZipPackagePart.class, part.getClass());
+ assertEquals(6031l, part.getSize());
+ }
+ if (part.getPartName().getName().equals("/word/fontTable.xml")) {
+ checked++;
+ assertEquals(ZipPackagePart.class, part.getClass());
+ assertEquals(1312l, part.getSize());
+ }
+
+ // But not from the others
+ if (part.getPartName().getName().equals("/docProps/core.xml")) {
+ checked++;
+ assertEquals(PackagePropertiesPart.class, part.getClass());
+ assertEquals(-1, part.getSize());
+ }
+ }
+ // Ensure we actually found the parts we want to check
+ assertEquals(3, checked);
+ } finally {
+ pkg.close();
}
- // Ensure we actually found the parts we want to check
- assertEquals(3, checked);
}
public void testReplaceContentType() throws Exception {
// Open package
OPCPackage p = OPCPackage.open(inputPath, PackageAccess.READ_WRITE);
-
- SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss'Z'");
- df.setTimeZone(TimeZone.getTimeZone("UTC"));
- Date dateToInsert = df.parse("2007-05-12T08:00:00Z", new ParsePosition(
- 0));
-
- PackageProperties props = p.getPackageProperties();
- props.setCategoryProperty("MyCategory");
- props.setContentStatusProperty("MyContentStatus");
- props.setContentTypeProperty("MyContentType");
- props.setCreatedProperty(new Nullable<Date>(dateToInsert));
- props.setCreatorProperty("MyCreator");
- props.setDescriptionProperty("MyDescription");
- props.setIdentifierProperty("MyIdentifier");
- props.setKeywordsProperty("MyKeywords");
- props.setLanguageProperty("MyLanguage");
- props.setLastModifiedByProperty("Julien Chable");
- props.setLastPrintedProperty(new Nullable<Date>(dateToInsert));
- props.setModifiedProperty(new Nullable<Date>(dateToInsert));
- props.setRevisionProperty("2");
- props.setTitleProperty("MyTitle");
- props.setSubjectProperty("MySubject");
- props.setVersionProperty("2");
- // Save the package in the output directory
- p.save(outputFile);
-
- // Open the newly created file to check core properties saved values.
- OPCPackage p2 = OPCPackage.open(outputFile.getAbsolutePath(), PackageAccess.READ);
- compareProperties(p2);
- p2.revert();
- outputFile.delete();
+ try {
+ SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss'Z'");
+ df.setTimeZone(TimeZone.getTimeZone("UTC"));
+ Date dateToInsert = df.parse("2007-05-12T08:00:00Z", new ParsePosition(
+ 0));
+
+ PackageProperties props = p.getPackageProperties();
+ props.setCategoryProperty("MyCategory");
+ props.setContentStatusProperty("MyContentStatus");
+ props.setContentTypeProperty("MyContentType");
+ props.setCreatedProperty(new Nullable<Date>(dateToInsert));
+ props.setCreatorProperty("MyCreator");
+ props.setDescriptionProperty("MyDescription");
+ props.setIdentifierProperty("MyIdentifier");
+ props.setKeywordsProperty("MyKeywords");
+ props.setLanguageProperty("MyLanguage");
+ props.setLastModifiedByProperty("Julien Chable");
+ props.setLastPrintedProperty(new Nullable<Date>(dateToInsert));
+ props.setModifiedProperty(new Nullable<Date>(dateToInsert));
+ props.setRevisionProperty("2");
+ props.setTitleProperty("MyTitle");
+ props.setSubjectProperty("MySubject");
+ props.setVersionProperty("2");
+ // Save the package in the output directory
+ p.save(outputFile);
+
+ // Open the newly created file to check core properties saved values.
+ OPCPackage p2 = OPCPackage.open(outputFile.getAbsolutePath(), PackageAccess.READ);
+ try {
+ compareProperties(p2);
+ p2.revert();
+ } finally {
+ p2.close();
+ }
+ outputFile.delete();
+ } finally {
+ // use revert to not re-write the input file
+ p.revert();
+ }
}
private void compareProperties(OPCPackage p) throws InvalidFormatException {
// Open package
OPCPackage p = OPCPackage.open(inputPath, PackageAccess.READ_WRITE);
- p.addThumbnail(imagePath);
- // Save the package in the output directory
- p.save(outputFile);
-
- // Open the newly created file to check core properties saved values.
- OPCPackage p2 = OPCPackage.open(outputFile.getAbsolutePath(), PackageAccess.READ);
- if (p2.getRelationshipsByType(PackageRelationshipTypes.THUMBNAIL)
- .size() == 0)
- fail("Thumbnail not added to the package !");
- p2.revert();
- outputFile.delete();
+ try {
+ p.addThumbnail(imagePath);
+ // Save the package in the output directory
+ p.save(outputFile);
+
+ // Open the newly created file to check core properties saved values.
+ OPCPackage p2 = OPCPackage.open(outputFile.getAbsolutePath(), PackageAccess.READ);
+ try {
+ if (p2.getRelationshipsByType(PackageRelationshipTypes.THUMBNAIL)
+ .size() == 0)
+ fail("Thumbnail not added to the package !");
+ } finally {
+ p2.revert();
+ p2.close();
+ }
+ } finally {
+ p.revert();
+ outputFile.delete();
+ }
}
}
// Write out and re-load
ByteArrayOutputStream baos = new ByteArrayOutputStream();
pkg.save(baos);
- ByteArrayInputStream bais = new ByteArrayInputStream(baos.toByteArray());
+
+ // use revert to not re-write the input file
+ pkg.revert();
+
+ ByteArrayInputStream bais = new ByteArrayInputStream(baos.toByteArray());
pkg = OPCPackage.open(bais);
// Check again
public void testTargetWithSpecialChars() throws Exception{
-
OPCPackage pkg;
String filepath = OpenXML4JTestDataSamples.getSampleFileName("50154.xlsx");
ByteArrayOutputStream baos = new ByteArrayOutputStream();
pkg.save(baos);
+
+ // use revert to not re-write the input file
+ pkg.revert();
+
ByteArrayInputStream bais = new ByteArrayInputStream(baos.toByteArray());
pkg = OPCPackage.open(bais);
@Test\r
public void office2007prettyPrintedRels() throws Exception {\r
OPCPackage pkg = OPCPackage.open(testdata.getFile("office2007prettyPrintedRels.docx"), PackageAccess.READ);\r
- SignatureConfig sic = new SignatureConfig();\r
- sic.setOpcPackage(pkg);\r
- SignatureInfo si = new SignatureInfo();\r
- si.setSignatureConfig(sic);\r
- boolean isValid = si.verifySignature();\r
- assertTrue(isValid);\r
+ try {\r
+ SignatureConfig sic = new SignatureConfig();\r
+ sic.setOpcPackage(pkg);\r
+ SignatureInfo si = new SignatureInfo();\r
+ si.setSignatureConfig(sic);\r
+ boolean isValid = si.verifySignature();\r
+ assertTrue(isValid);\r
+ } finally {\r
+ pkg.close();\r
+ }\r
}\r
\r
@Test\r
package org.apache.poi.ss;
+import java.io.InputStream;
+
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.hssf.HSSFTestDataSamples;
import org.apache.poi.poifs.filesystem.POIFSFileSystem;
);
assertNotNull(wb);
assertTrue(wb instanceof HSSFWorkbook);
+ wb.close();
// Package -> xssf
wb = WorkbookFactory.create(
);
assertNotNull(wb);
assertTrue(wb instanceof XSSFWorkbook);
+ // TODO: this re-writes the sample-file?! wb.close();
}
/**
);
assertNotNull(wb);
assertTrue(wb instanceof HSSFWorkbook);
+ wb.close();
wb = WorkbookFactory.create(
HSSFTestDataSamples.openSampleFileStream(xlsx)
);
assertNotNull(wb);
assertTrue(wb instanceof XSSFWorkbook);
+ // TODO: this re-writes the sample-file?! wb.close();
// File -> either
wb = WorkbookFactory.create(
);
assertNotNull(wb);
assertTrue(wb instanceof HSSFWorkbook);
+ wb.close();
wb = WorkbookFactory.create(
HSSFTestDataSamples.getSampleFile(xlsx)
);
assertNotNull(wb);
assertTrue(wb instanceof XSSFWorkbook);
+
+ // TODO: close() re-writes the sample-file?! Resort to revert() for now to close file handle...
+ ((XSSFWorkbook)wb).getPackage().revert();
// Invalid type -> exception
try {
- wb = WorkbookFactory.create(
- HSSFTestDataSamples.openSampleFileStream(txt)
- );
+ InputStream stream = HSSFTestDataSamples.openSampleFileStream(txt);
+ try {
+ wb = WorkbookFactory.create(stream);
+ } finally {
+ stream.close();
+ }
fail();
} catch(IllegalArgumentException e) {
// Good
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.fail;
+import java.io.IOException;
+
import org.apache.poi.ss.usermodel.BaseTestSheet;
import org.apache.poi.ss.usermodel.Sheet;
import org.apache.poi.ss.usermodel.Workbook;
}
@Test
- public void overrideFlushedRows() {
+ public void overrideFlushedRows() throws IOException {
Workbook wb = new SXSSFWorkbook(3);
- Sheet sheet = wb.createSheet();
-
- sheet.createRow(1);
- sheet.createRow(2);
- sheet.createRow(3);
- sheet.createRow(4);
-
- thrown.expect(Throwable.class);
- thrown.expectMessage("Attempting to write a row[1] in the range [0,1] that is already written to disk.");
- sheet.createRow(1);
+ try {
+ Sheet sheet = wb.createSheet();
+
+ sheet.createRow(1);
+ sheet.createRow(2);
+ sheet.createRow(3);
+ sheet.createRow(4);
+
+ thrown.expect(Throwable.class);
+ thrown.expectMessage("Attempting to write a row[1] in the range [0,1] that is already written to disk.");
+ sheet.createRow(1);
+ } finally {
+ wb.close();
+ }
}
@Test
- public void overrideRowsInTemplate() {
+ public void overrideRowsInTemplate() throws IOException {
XSSFWorkbook template = new XSSFWorkbook();
template.createSheet().createRow(1);
Workbook wb = new SXSSFWorkbook(template);
- Sheet sheet = wb.getSheetAt(0);
-
try {
- sheet.createRow(1);
- fail("expected exception");
- } catch (Throwable e){
- assertEquals("Attempting to write a row[1] in the range [0,1] that is already written to disk.", e.getMessage());
- }
- try {
- sheet.createRow(0);
- fail("expected exception");
- } catch (Throwable e){
- assertEquals("Attempting to write a row[0] in the range [0,1] that is already written to disk.", e.getMessage());
+ Sheet sheet = wb.getSheetAt(0);
+
+ try {
+ sheet.createRow(1);
+ fail("expected exception");
+ } catch (Throwable e){
+ assertEquals("Attempting to write a row[1] in the range [0,1] that is already written to disk.", e.getMessage());
+ }
+ try {
+ sheet.createRow(0);
+ fail("expected exception");
+ } catch (Throwable e){
+ assertEquals("Attempting to write a row[0] in the range [0,1] that is already written to disk.", e.getMessage());
+ }
+ sheet.createRow(2);
+ } finally {
+ wb.close();
}
- sheet.createRow(2);
}
}
import static org.junit.Assert.assertSame;
import static org.junit.Assert.fail;
+import java.io.IOException;
import java.util.Arrays;
import java.util.HashSet;
import java.util.List;
}
@Test
- public void bug54607() {
+ public void bug54607() throws IOException {
// run with the file provided in the Bug-Report
runGetTopRow("54607.xlsx", true, 1, 0, 0);
runGetLeftCol("54607.xlsx", true, 0, 0, 0);
runGetLeftCol("TwoSheetsNoneHidden.xls", false, 0, 0);
}
- private void runGetTopRow(String file, boolean isXSSF, int... topRows) {
+ private void runGetTopRow(String file, boolean isXSSF, int... topRows) throws IOException {
final Workbook wb;
if(isXSSF) {
wb = XSSFTestDataSamples.openSampleWorkbook(file);
// for XSSF also test with SXSSF
if(isXSSF) {
Workbook swb = new SXSSFWorkbook((XSSFWorkbook) wb);
- for (int si = 0; si < swb.getNumberOfSheets(); si++) {
- Sheet sh = swb.getSheetAt(si);
- assertNotNull(sh.getSheetName());
- assertEquals("Did not match for sheet " + si, topRows[si], sh.getTopRow());
+ try {
+ for (int si = 0; si < swb.getNumberOfSheets(); si++) {
+ Sheet sh = swb.getSheetAt(si);
+ assertNotNull(sh.getSheetName());
+ assertEquals("Did not match for sheet " + si, topRows[si], sh.getTopRow());
+ }
+ } finally {
+ swb.close();
}
}
}
- private void runGetLeftCol(String file, boolean isXSSF, int... topRows) {
+ private void runGetLeftCol(String file, boolean isXSSF, int... topRows) throws IOException {
final Workbook wb;
if(isXSSF) {
wb = XSSFTestDataSamples.openSampleWorkbook(file);
assertNotNull(sh.getSheetName());
assertEquals("Did not match for sheet " + si, topRows[si], sh.getLeftCol());
}
+ swb.close();
}
}
import java.io.ByteArrayOutputStream;
import java.io.ByteArrayInputStream;
+import java.io.InputStream;
import java.math.BigInteger;
import java.util.List;
import org.apache.poi.POIDataSamples;
import org.apache.xmlbeans.XmlObject;
+
import schemasMicrosoftComVml.*;
import schemasMicrosoftComOfficeOffice.CTShapeLayout;
import schemasMicrosoftComOfficeOffice.STConnectType;
public void testFindCommentShape() throws Exception {
XSSFVMLDrawing vml = new XSSFVMLDrawing();
- vml.read(POIDataSamples.getSpreadSheetInstance().openResourceAsStream("vmlDrawing1.vml"));
+ InputStream stream = POIDataSamples.getSpreadSheetInstance().openResourceAsStream("vmlDrawing1.vml");
+ try {
+ vml.read(stream);
+ } finally {
+ stream.close();
+ }
CTShape sh_a1 = vml.findCommentShape(0, 0);
assertNotNull(sh_a1);
public void testRemoveCommentShape() throws Exception {
XSSFVMLDrawing vml = new XSSFVMLDrawing();
- vml.read(POIDataSamples.getSpreadSheetInstance().openResourceAsStream("vmlDrawing1.vml"));
+ InputStream stream = POIDataSamples.getSpreadSheetInstance().openResourceAsStream("vmlDrawing1.vml");
+ try {
+ vml.read(stream);
+ } finally {
+ stream.close();
+ }
CTShape sh_a1 = vml.findCommentShape(0, 0);
assertNotNull(sh_a1);
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
+ fs.close();\r
}\r
}\r
import java.io.UnsupportedEncodingException;
import java.util.List;
-import junit.framework.Assert;
import junit.framework.TestCase;
+
import org.apache.poi.POIDataSamples;
import org.apache.poi.hpsf.DocumentSummaryInformation;
import org.apache.poi.hpsf.HPSFException;
{
String[] expected = POI_FILES;
for (int i = 0; i < expected.length; i++)
- Assert.assertEquals(poiFiles[i].getName(), expected[i]);
+ assertEquals(poiFiles[i].getName(), expected[i]);
}
/**
public void testCreatePropertySets()
throws UnsupportedEncodingException, IOException
{
- Class[] expected = new Class[]
+ Class<?>[] expected = new Class[]
{
SummaryInformation.class,
DocumentSummaryInformation.class,
o = ex;
}
in.close();
- Assert.assertEquals(expected[i], o.getClass());
+ assertEquals(expected[i], o.getClass());
}
}
byte[] b = poiFiles[i].getBytes();
PropertySet ps =
PropertySetFactory.create(new ByteArrayInputStream(b));
- Assert.assertEquals(ps.getByteOrder(), BYTE_ORDER);
- Assert.assertEquals(ps.getFormat(), FORMAT);
- Assert.assertEquals(ps.getOSVersion(), OS_VERSION);
- Assert.assertEquals(new String(ps.getClassID().getBytes()),
+ assertEquals(ps.getByteOrder(), BYTE_ORDER);
+ assertEquals(ps.getFormat(), FORMAT);
+ assertEquals(ps.getOSVersion(), OS_VERSION);
+ assertEquals(new String(ps.getClassID().getBytes()),
new String(CLASS_ID));
- Assert.assertEquals(ps.getSectionCount(), SECTION_COUNT[i]);
- Assert.assertEquals(ps.isSummaryInformation(),
+ assertEquals(ps.getSectionCount(), SECTION_COUNT[i]);
+ assertEquals(ps.isSummaryInformation(),
IS_SUMMARY_INFORMATION[i]);
- Assert.assertEquals(ps.isDocumentSummaryInformation(),
+ assertEquals(ps.isDocumentSummaryInformation(),
IS_DOCUMENT_SUMMARY_INFORMATION[i]);
}
}
final SummaryInformation si = (SummaryInformation)
PropertySetFactory.create(new ByteArrayInputStream
(poiFiles[0].getBytes()));
- final List sections = si.getSections();
- final Section s = (Section) sections.get(0);
- Assert.assertTrue(org.apache.poi.hpsf.Util.equal
+ final List<Section> sections = si.getSections();
+ final Section s = sections.get(0);
+ assertTrue(org.apache.poi.hpsf.Util.equal
(s.getFormatID().getBytes(), SectionIDMap.SUMMARY_INFORMATION_ID));
- Assert.assertNotNull(s.getProperties());
- Assert.assertEquals(17, s.getPropertyCount());
- Assert.assertEquals("Titel", s.getProperty(2));
- Assert.assertEquals(1764, s.getSize());
+ assertNotNull(s.getProperties());
+ assertEquals(17, s.getPropertyCount());
+ assertEquals("Titel", s.getProperty(2));
+ assertEquals(1764, s.getSize());
}
}
import java.io.InputStream;
import java.io.UnsupportedEncodingException;
-import junit.framework.Assert;
import junit.framework.TestCase;
+import org.apache.poi.POIDataSamples;
import org.apache.poi.hpsf.DocumentSummaryInformation;
import org.apache.poi.hpsf.HPSFException;
import org.apache.poi.hpsf.MarkUnsupportedException;
import org.apache.poi.hpsf.PropertySetFactory;
import org.apache.poi.hpsf.SummaryInformation;
import org.apache.poi.hpsf.Variant;
-import org.apache.poi.POIDataSamples;
/**
* <p>Test case for OLE2 files with empty properties. An empty property's type
{
String[] expected = POI_FILES;
for (int i = 0; i < expected.length; i++)
- Assert.assertEquals(poiFiles[i].getName(), expected[i]);
+ assertEquals(poiFiles[i].getName(), expected[i]);
}
/**
public void testCreatePropertySets()
throws UnsupportedEncodingException, IOException
{
- Class[] expected = new Class[]
+ Class<?>[] expected = new Class[]
{
NoPropertySetStreamException.class,
SummaryInformation.class,
o = ex;
}
in.close();
- Assert.assertEquals(o.getClass(), expected[i]);
+ assertEquals(o.getClass(), expected[i]);
}
}
import java.io.FileNotFoundException;
import java.io.IOException;
-import junit.framework.Assert;
import junit.framework.TestCase;
import org.apache.poi.POIDataSamples;
byte[] b = poiFile.getBytes();
PropertySet ps =
PropertySetFactory.create(new ByteArrayInputStream(b));
- Assert.assertTrue(ps.isDocumentSummaryInformation());
- Assert.assertEquals(ps.getSectionCount(), 2);
- Section s = (Section) ps.getSections().get(1);
- Assert.assertEquals(s.getProperty(1),
+ assertTrue(ps.isDocumentSummaryInformation());
+ assertEquals(ps.getSectionCount(), 2);
+ Section s = ps.getSections().get(1);
+ assertEquals(s.getProperty(1),
Integer.valueOf(CodePageUtil.CP_UTF16));
- Assert.assertEquals(s.getProperty(2),
+ assertEquals(s.getProperty(2),
Integer.valueOf(-96070278));
- Assert.assertEquals(s.getProperty(3),
+ assertEquals(s.getProperty(3),
"MCon_Info zu Office bei Schreiner");
- Assert.assertEquals(s.getProperty(4),
+ assertEquals(s.getProperty(4),
"petrovitsch@schreiner-online.de");
- Assert.assertEquals(s.getProperty(5),
+ assertEquals(s.getProperty(5),
"Petrovitsch, Wilhelm");
}
}
r.registerListener(pfl, poiFiles[i]);
/* Read the POI filesystem. */
- r.read(new FileInputStream(poiFs));
+ FileInputStream stream = new FileInputStream(poiFs);
+ try {
+ r.read(stream);
+ } finally {
+ stream.close();
+ }
POIFile[] result = new POIFile[files.size()];
for (int i = 0; i < result.length; i++)
result[i] = files.get(i);
POIFile[] result = new POIFile[files.size()];
for (int i = 0; i < result.length; i++)
- result[i] = (POIFile) files.get(i);
+ result[i] = files.get(i);
return result;
}
public static void printSystemProperties()
{
final Properties p = System.getProperties();
- final List names = new LinkedList();
- for (Iterator i = p.keySet().iterator(); i.hasNext();)
+ final List<String> names = new LinkedList<String>();
+ for (Iterator<String> i = p.stringPropertyNames().iterator(); i.hasNext();)
names.add(i.next());
Collections.sort(names);
- for (final Iterator i = names.iterator(); i.hasNext();)
+ for (final Iterator<String> i = names.iterator(); i.hasNext();)
{
- String name = (String) i.next();
- String value = (String) p.get(name);
+ String name = i.next();
+ String value = p.getProperty(name);
System.out.println(name + ": " + value);
}
System.out.println("Current directory: " +
/** test for bug 34021*/
public void testComplexSheetRefs () throws IOException {
HSSFWorkbook sb = new HSSFWorkbook();
- HSSFSheet s1 = sb.createSheet("Sheet a.1");
- HSSFSheet s2 = sb.createSheet("Sheet.A");
- s2.createRow(1).createCell(2).setCellFormula("'Sheet a.1'!A1");
- s1.createRow(1).createCell(2).setCellFormula("'Sheet.A'!A1");
- File file = TempFile.createTempFile("testComplexSheetRefs",".xls");
- sb.write(new FileOutputStream(file));
+ try {
+ HSSFSheet s1 = sb.createSheet("Sheet a.1");
+ HSSFSheet s2 = sb.createSheet("Sheet.A");
+ s2.createRow(1).createCell(2).setCellFormula("'Sheet a.1'!A1");
+ s1.createRow(1).createCell(2).setCellFormula("'Sheet.A'!A1");
+ File file = TempFile.createTempFile("testComplexSheetRefs",".xls");
+ FileOutputStream stream = new FileOutputStream(file);
+ try {
+ sb.write(stream);
+ } finally {
+ stream.close();
+ }
+ } finally {
+ sb.close();
+ }
}
/** Unknown Ptg 3C*/
wb.getSheetAt(0);
assertEquals("Reference for named range ", "Compliance!#REF!",wb.getNameAt(0).getRefersToFormula());
File outF = TempFile.createTempFile("bug27272_1",".xls");
- wb.write(new FileOutputStream(outF));
+ FileOutputStream stream = new FileOutputStream(outF);
+ try {
+ wb.write(stream);
+ } finally {
+ stream.close();
+ }
System.out.println("Open "+outF.getAbsolutePath()+" in Excel");
}
/** Unknown Ptg 3D*/
HSSFWorkbook wb = openSample("27272_2.xls");
assertEquals("Reference for named range ", "LOAD.POD_HISTORIES!#REF!",wb.getNameAt(0).getRefersToFormula());
File outF = TempFile.createTempFile("bug27272_2",".xls");
- wb.write(new FileOutputStream(outF));
+ FileOutputStream stream = new FileOutputStream(outF);
+ try {
+ wb.write(stream);
+ } finally {
+ stream.close();
+ }
System.out.println("Open "+outF.getAbsolutePath()+" in Excel");
}
- /** MissingArgPtg */
- public void testMissingArgPtg() {
+ /** MissingArgPtg
+ * @throws IOException */
+ public void testMissingArgPtg() throws IOException {
HSSFWorkbook wb = new HSSFWorkbook();
- HSSFCell cell = wb.createSheet("Sheet1").createRow(4).createCell(0);
- cell.setCellFormula("IF(A1=\"A\",1,)");
+ try {
+ HSSFCell cell = wb.createSheet("Sheet1").createRow(4).createCell(0);
+ cell.setCellFormula("IF(A1=\"A\",1,)");
+ } finally {
+ wb.close();
+ }
}
public void testSharedFormula() {
/**
* Verify that FormulaParser handles defined names beginning with underscores,
* see Bug #49640
+ * @throws IOException
*/
- public void testFormulasWithUnderscore(){
+ public void testFormulasWithUnderscore() throws IOException{
HSSFWorkbook wb = new HSSFWorkbook();
- Name nm1 = wb.createName();
- nm1.setNameName("_score1");
- nm1.setRefersToFormula("A1");
-
- Name nm2 = wb.createName();
- nm2.setNameName("_score2");
- nm2.setRefersToFormula("A2");
-
- Sheet sheet = wb.createSheet();
- Cell cell = sheet.createRow(0).createCell(2);
- cell.setCellFormula("_score1*SUM(_score1+_score2)");
- assertEquals("_score1*SUM(_score1+_score2)", cell.getCellFormula());
+ try {
+ Name nm1 = wb.createName();
+ nm1.setNameName("_score1");
+ nm1.setRefersToFormula("A1");
+
+ Name nm2 = wb.createName();
+ nm2.setNameName("_score2");
+ nm2.setRefersToFormula("A2");
+
+ Sheet sheet = wb.createSheet();
+ Cell cell = sheet.createRow(0).createCell(2);
+ cell.setCellFormula("_score1*SUM(_score1+_score2)");
+ assertEquals("_score1*SUM(_score1+_score2)", cell.getCellFormula());
+ } finally {
+ wb.close();
+ }
}
}
DocumentInputStream stream;
NPOIFSFileSystem npoifs = new NPOIFSFileSystem(sample);
- POIFSFileSystem opoifs = new POIFSFileSystem(new FileInputStream(sample));
-
- // Ensure we have what we expect on the root
- assertEquals(npoifs, npoifs.getRoot().getNFileSystem());
- assertEquals(null, npoifs.getRoot().getFileSystem());
- assertEquals(opoifs, opoifs.getRoot().getFileSystem());
- assertEquals(null, opoifs.getRoot().getNFileSystem());
-
- // Check inside
- for(DirectoryNode root : new DirectoryNode[] { opoifs.getRoot(), npoifs.getRoot() }) {
- // Top Level
- Entry top = root.getEntry("Contents");
- assertEquals(true, top.isDocumentEntry());
- stream = root.createDocumentInputStream(top);
- stream.read();
-
- // One Level Down
- DirectoryNode escher = (DirectoryNode)root.getEntry("Escher");
- Entry one = escher.getEntry("EscherStm");
- assertEquals(true, one.isDocumentEntry());
- stream = escher.createDocumentInputStream(one);
- stream.read();
-
- // Two Levels Down
- DirectoryNode quill = (DirectoryNode)root.getEntry("Quill");
- DirectoryNode quillSub = (DirectoryNode)quill.getEntry("QuillSub");
- Entry two = quillSub.getEntry("CONTENTS");
- assertEquals(true, two.isDocumentEntry());
- stream = quillSub.createDocumentInputStream(two);
- stream.read();
+ try {
+ POIFSFileSystem opoifs = new POIFSFileSystem(new FileInputStream(sample));
+
+ // Ensure we have what we expect on the root
+ assertEquals(npoifs, npoifs.getRoot().getNFileSystem());
+ assertEquals(null, npoifs.getRoot().getFileSystem());
+ assertEquals(opoifs, opoifs.getRoot().getFileSystem());
+ assertEquals(null, opoifs.getRoot().getNFileSystem());
+
+ // Check inside
+ for(DirectoryNode root : new DirectoryNode[] { opoifs.getRoot(), npoifs.getRoot() }) {
+ // Top Level
+ Entry top = root.getEntry("Contents");
+ assertEquals(true, top.isDocumentEntry());
+ stream = root.createDocumentInputStream(top);
+ stream.read();
+
+ // One Level Down
+ DirectoryNode escher = (DirectoryNode)root.getEntry("Escher");
+ Entry one = escher.getEntry("EscherStm");
+ assertEquals(true, one.isDocumentEntry());
+ stream = escher.createDocumentInputStream(one);
+ stream.read();
+
+ // Two Levels Down
+ DirectoryNode quill = (DirectoryNode)root.getEntry("Quill");
+ DirectoryNode quillSub = (DirectoryNode)quill.getEntry("QuillSub");
+ Entry two = quillSub.getEntry("CONTENTS");
+ assertEquals(true, two.isDocumentEntry());
+ stream = quillSub.createDocumentInputStream(two);
+ stream.read();
+ }
+ } finally {
+ npoifs.close();
}
}
}
package org.apache.poi.poifs.filesystem;
import junit.framework.TestCase;
+
import java.io.*;
import org.apache.poi.hssf.HSSFTestDataSamples;
}
}
- public void testDetectAsPOIFS() {
+ public void testDetectAsPOIFS() throws IOException {
// ooxml file isn't
confirmIsPOIFS("SampleSS.xlsx", false);
// text file isn't
confirmIsPOIFS("SampleSS.txt", false);
}
- private void confirmIsPOIFS(String sampleFileName, boolean expectedResult) {
+ private void confirmIsPOIFS(String sampleFileName, boolean expectedResult) throws IOException {
InputStream in = new PushbackInputStream(openSampleStream(sampleFileName), 10);
- boolean actualResult;
try {
- actualResult = POIFSFileSystem.hasPOIFSHeader(in);
- } catch (IOException e) {
- throw new RuntimeException(e);
+ boolean actualResult;
+ try {
+ actualResult = POIFSFileSystem.hasPOIFSHeader(in);
+ } catch (IOException e) {
+ throw new RuntimeException(e);
+ }
+ assertEquals(expectedResult, actualResult);
+ } finally {
+ in.close();
}
- assertEquals(expectedResult, actualResult);
}
}
* sectors that exist in the file.
*/
public void testFATandDIFATsectors() throws Exception {
- // Open the file up
- try {
- POIFSFileSystem fs = new POIFSFileSystem(
- _samples.openResourceAsStream("ReferencesInvalidSectors.mpp")
- );
- fail("File is corrupt and shouldn't have been opened");
- } catch(IOException e) {
- String msg = e.getMessage();
- assertTrue(msg.startsWith("Your file contains 695 sectors"));
- }
+ // Open the file up
+ try {
+ InputStream stream = _samples.openResourceAsStream("ReferencesInvalidSectors.mpp");
+ try {
+ new POIFSFileSystem(stream);
+ fail("File is corrupt and shouldn't have been opened");
+ } finally {
+ stream.close();
+ }
+ } catch (IOException e) {
+ String msg = e.getMessage();
+ assertTrue(msg.startsWith("Your file contains 695 sectors"));
+ }
}
/**
* use 4k blocks. Check that we can open these.
*/
public void test4KBlocks() throws Exception {
- POIDataSamples _samples = POIDataSamples.getPOIFSInstance();
- InputStream inp = _samples.openResourceAsStream("BlockSize4096.zvi");
-
- // First up, check that we can process the header properly
- HeaderBlock header_block = new HeaderBlock(inp);
- POIFSBigBlockSize bigBlockSize = header_block.getBigBlockSize();
- assertEquals(4096, bigBlockSize.getBigBlockSize());
-
- // Check the fat info looks sane
- assertEquals(1, header_block.getBATArray().length);
- assertEquals(1, header_block.getBATCount());
- assertEquals(0, header_block.getXBATCount());
-
- // Now check we can get the basic fat
- RawDataBlockList data_blocks = new RawDataBlockList(inp, bigBlockSize);
+ POIDataSamples _samples = POIDataSamples.getPOIFSInstance();
+ InputStream inp = _samples.openResourceAsStream("BlockSize4096.zvi");
+ try {
+ // First up, check that we can process the header properly
+ HeaderBlock header_block = new HeaderBlock(inp);
+ POIFSBigBlockSize bigBlockSize = header_block.getBigBlockSize();
+ assertEquals(4096, bigBlockSize.getBigBlockSize());
-
- // Now try and open properly
- POIFSFileSystem fs = new POIFSFileSystem(
- _samples.openResourceAsStream("BlockSize4096.zvi")
- );
- assertTrue(fs.getRoot().getEntryCount() > 3);
-
- // Check we can get at all the contents
- checkAllDirectoryContents(fs.getRoot());
-
-
- // Finally, check we can do a similar 512byte one too
- fs = new POIFSFileSystem(
- _samples.openResourceAsStream("BlockSize512.zvi")
- );
- assertTrue(fs.getRoot().getEntryCount() > 3);
- checkAllDirectoryContents(fs.getRoot());
+ // Check the fat info looks sane
+ assertEquals(1, header_block.getBATArray().length);
+ assertEquals(1, header_block.getBATCount());
+ assertEquals(0, header_block.getXBATCount());
+
+ // Now check we can get the basic fat
+ RawDataBlockList data_blocks = new RawDataBlockList(inp,
+ bigBlockSize);
+ assertEquals(15, data_blocks.blockCount());
+
+ // Now try and open properly
+ POIFSFileSystem fs = new POIFSFileSystem(
+ _samples.openResourceAsStream("BlockSize4096.zvi"));
+ assertTrue(fs.getRoot().getEntryCount() > 3);
+
+ // Check we can get at all the contents
+ checkAllDirectoryContents(fs.getRoot());
+
+ // Finally, check we can do a similar 512byte one too
+ fs = new POIFSFileSystem(
+ _samples.openResourceAsStream("BlockSize512.zvi"));
+ assertTrue(fs.getRoot().getEntryCount() > 3);
+ checkAllDirectoryContents(fs.getRoot());
+ } finally {
+ inp.close();
+ }
}
private void checkAllDirectoryContents(DirectoryEntry dir) throws IOException {
for(Entry entry : dir) {
} else {
DocumentNode doc = (DocumentNode) entry;
DocumentInputStream dis = new DocumentInputStream(doc);
- int numBytes = dis.available();
- byte[] data = new byte [numBytes];
- dis.read(data);
+ try {
+ int numBytes = dis.available();
+ byte[] data = new byte [numBytes];
+ dis.read(data);
+ } finally {
+ dis.close();
+ }
}
}
}
File f = data.getFile("Notes.ole2");
FileBackedDataSource ds = new FileBackedDataSource(f);
- assertEquals(8192, ds.size());
-
- // Start of file
- ByteBuffer bs;
- bs = ds.read(4, 0);
- assertEquals(4, bs.capacity());
- assertEquals(0, bs.position());
- assertEquals(0xd0-256, bs.get(0));
- assertEquals(0xcf-256, bs.get(1));
- assertEquals(0x11-000, bs.get(2));
- assertEquals(0xe0-256, bs.get(3));
- assertEquals(0xd0-256, bs.get());
- assertEquals(0xcf-256, bs.get());
- assertEquals(0x11-000, bs.get());
- assertEquals(0xe0-256, bs.get());
-
- // Mid way through
- bs = ds.read(8, 0x400);
- assertEquals(8, bs.capacity());
- assertEquals(0, bs.position());
- assertEquals((byte)'R', bs.get(0));
- assertEquals(0, bs.get(1));
- assertEquals((byte)'o', bs.get(2));
- assertEquals(0, bs.get(3));
- assertEquals((byte)'o', bs.get(4));
- assertEquals(0, bs.get(5));
- assertEquals((byte)'t', bs.get(6));
- assertEquals(0, bs.get(7));
-
- // Can go to the end, but not past it
- bs = ds.read(8, 8190);
- assertEquals(0, bs.position()); // TODO How best to warn of a short read?
-
- // Can't go off the end
try {
- bs = ds.read(4, 8192);
- fail("Shouldn't be able to read off the end of the file");
- } catch(IllegalArgumentException e) {}
+ assertEquals(8192, ds.size());
+
+ // Start of file
+ ByteBuffer bs;
+ bs = ds.read(4, 0);
+ assertEquals(4, bs.capacity());
+ assertEquals(0, bs.position());
+ assertEquals(0xd0-256, bs.get(0));
+ assertEquals(0xcf-256, bs.get(1));
+ assertEquals(0x11-000, bs.get(2));
+ assertEquals(0xe0-256, bs.get(3));
+ assertEquals(0xd0-256, bs.get());
+ assertEquals(0xcf-256, bs.get());
+ assertEquals(0x11-000, bs.get());
+ assertEquals(0xe0-256, bs.get());
+
+ // Mid way through
+ bs = ds.read(8, 0x400);
+ assertEquals(8, bs.capacity());
+ assertEquals(0, bs.position());
+ assertEquals((byte)'R', bs.get(0));
+ assertEquals(0, bs.get(1));
+ assertEquals((byte)'o', bs.get(2));
+ assertEquals(0, bs.get(3));
+ assertEquals((byte)'o', bs.get(4));
+ assertEquals(0, bs.get(5));
+ assertEquals((byte)'t', bs.get(6));
+ assertEquals(0, bs.get(7));
+
+ // Can go to the end, but not past it
+ bs = ds.read(8, 8190);
+ assertEquals(0, bs.position()); // TODO How best to warn of a short read?
+
+ // Can't go off the end
+ try {
+ bs = ds.read(4, 8192);
+ fail("Shouldn't be able to read off the end of the file");
+ } catch(IllegalArgumentException e) {}
+ } finally {
+ ds.close();
+ }
}
public void testByteArray() throws Exception {
import static org.junit.Assert.assertSame;
import static org.junit.Assert.assertTrue;
import static org.junit.Assert.fail;
+
+import java.io.IOException;
+
import junit.framework.AssertionFailedError;
import org.apache.poi.ss.ITestDataProvider;
}
@Test
- public void removeSheetAt() {
+ public void removeSheetAt() throws IOException {
Workbook workbook = _testDataProvider.createWorkbook();
- workbook.createSheet("sheet1");
- workbook.createSheet("sheet2");
- workbook.createSheet("sheet3");
- assertEquals(3, workbook.getNumberOfSheets());
-
- assertEquals(0, workbook.getActiveSheetIndex());
-
- workbook.removeSheetAt(1);
- assertEquals(2, workbook.getNumberOfSheets());
- assertEquals("sheet3", workbook.getSheetName(1));
- assertEquals(0, workbook.getActiveSheetIndex());
-
- workbook.removeSheetAt(0);
- assertEquals(1, workbook.getNumberOfSheets());
- assertEquals("sheet3", workbook.getSheetName(0));
- assertEquals(0, workbook.getActiveSheetIndex());
-
- workbook.removeSheetAt(0);
- assertEquals(0, workbook.getNumberOfSheets());
- assertEquals(0, workbook.getActiveSheetIndex());
-
- //re-create the sheets
- workbook.createSheet("sheet1");
- workbook.createSheet("sheet2");
- workbook.createSheet("sheet3");
- workbook.createSheet("sheet4");
- assertEquals(4, workbook.getNumberOfSheets());
-
- assertEquals(0, workbook.getActiveSheetIndex());
- workbook.setActiveSheet(2);
- assertEquals(2, workbook.getActiveSheetIndex());
-
- workbook.removeSheetAt(2);
- assertEquals(2, workbook.getActiveSheetIndex());
-
- workbook.removeSheetAt(1);
- assertEquals(1, workbook.getActiveSheetIndex());
-
- workbook.removeSheetAt(0);
- assertEquals(0, workbook.getActiveSheetIndex());
-
- workbook.removeSheetAt(0);
- assertEquals(0, workbook.getActiveSheetIndex());
+ try {
+ workbook.createSheet("sheet1");
+ workbook.createSheet("sheet2");
+ workbook.createSheet("sheet3");
+ assertEquals(3, workbook.getNumberOfSheets());
+
+ assertEquals(0, workbook.getActiveSheetIndex());
+
+ workbook.removeSheetAt(1);
+ assertEquals(2, workbook.getNumberOfSheets());
+ assertEquals("sheet3", workbook.getSheetName(1));
+ assertEquals(0, workbook.getActiveSheetIndex());
+
+ workbook.removeSheetAt(0);
+ assertEquals(1, workbook.getNumberOfSheets());
+ assertEquals("sheet3", workbook.getSheetName(0));
+ assertEquals(0, workbook.getActiveSheetIndex());
+
+ workbook.removeSheetAt(0);
+ assertEquals(0, workbook.getNumberOfSheets());
+ assertEquals(0, workbook.getActiveSheetIndex());
+
+ //re-create the sheets
+ workbook.createSheet("sheet1");
+ workbook.createSheet("sheet2");
+ workbook.createSheet("sheet3");
+ workbook.createSheet("sheet4");
+ assertEquals(4, workbook.getNumberOfSheets());
+
+ assertEquals(0, workbook.getActiveSheetIndex());
+ workbook.setActiveSheet(2);
+ assertEquals(2, workbook.getActiveSheetIndex());
+
+ workbook.removeSheetAt(2);
+ assertEquals(2, workbook.getActiveSheetIndex());
+
+ workbook.removeSheetAt(1);
+ assertEquals(1, workbook.getActiveSheetIndex());
+
+ workbook.removeSheetAt(0);
+ assertEquals(0, workbook.getActiveSheetIndex());
+
+ workbook.removeSheetAt(0);
+ assertEquals(0, workbook.getActiveSheetIndex());
+ } finally {
+ workbook.close();
+ }
}
@Test