Add missing close() of resources in both production code and tests

Use revert() instead of close() on OCPPackage in some places to not re-write the file unnecessarily.
This should now run tests without leftover file handles when checked with file leak detector and
allows to find newly introduced cases more easily.

git-svn-id: https://svn.apache.org/repos/asf/poi/trunk@1648160 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
Dominik Stadler 2014-12-28 09:16:57 +00:00
parent 7c9d23d887
commit 5c76ccba5b
27 changed files with 717 additions and 452 deletions

View File

@ -84,7 +84,8 @@ public abstract class POIXMLTextExtractor extends POITextExtractor {
if(_document != null) { if(_document != null) {
OPCPackage pkg = _document.getPackage(); OPCPackage pkg = _document.getPackage();
if(pkg != null) { 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(); super.close();

View File

@ -107,7 +107,23 @@ public class WorkbookFactory {
} catch(OfficeXmlFileException e) { } catch(OfficeXmlFileException e) {
// opening as .xls failed => try opening as .xlsx // opening as .xls failed => try opening as .xlsx
OPCPackage pkg = OPCPackage.open(file); 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;
}
} }
} }
} }

View File

@ -70,9 +70,13 @@ import org.openxmlformats.schemas.presentationml.x2006.main.NotesMasterDocument;
} }
try { try {
NotesMasterDocument doc = NotesMasterDocument.Factory.parse(is); try {
CTNotesMaster slide = doc.getNotesMaster(); NotesMasterDocument doc = NotesMasterDocument.Factory.parse(is);
return slide; CTNotesMaster slide = doc.getNotesMaster();
return slide;
} finally {
is.close();
}
} catch (Exception e) { } catch (Exception e) {
throw new POIXMLException("Can't initialize NotesMaster", e); throw new POIXMLException("Can't initialize NotesMaster", e);
} }

View File

@ -312,7 +312,16 @@ public class SXSSFWorkbook implements Workbook
void deregisterSheetMapping(XSSFSheet xSheet) void deregisterSheetMapping(XSSFSheet xSheet)
{ {
SXSSFSheet sxSheet=getSXSSFSheet(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); _sxFromXHash.remove(sxSheet);
_xFromSxHash.remove(xSheet); _xFromSxHash.remove(xSheet);
} }
private XSSFSheet getSheetFromZipEntryName(String sheetRef) private XSSFSheet getSheetFromZipEntryName(String sheetRef)
@ -827,6 +836,17 @@ public class SXSSFWorkbook implements Workbook
*/ */
@Override @Override
public void close() throws IOException { 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 // Tell the base workbook to close, does nothing if
// it's a newly created one // it's a newly created one
_wb.close(); _wb.close();

View File

@ -19,8 +19,10 @@
package org.apache.poi; package org.apache.poi;
import java.io.InputStream;
import java.io.PushbackInputStream;
import junit.framework.TestCase; import junit.framework.TestCase;
import java.io.*;
import org.apache.poi.hssf.HSSFTestDataSamples; import org.apache.poi.hssf.HSSFTestDataSamples;
import org.apache.poi.openxml4j.opc.OPCPackage; import org.apache.poi.openxml4j.opc.OPCPackage;
@ -44,17 +46,20 @@ public class TestDetectAsOOXML extends TestCase
HSSFTestDataSamples.openSampleFileStream("SampleSS.xlsx"), 10 HSSFTestDataSamples.openSampleFileStream("SampleSS.xlsx"), 10
); );
assertTrue(POIXMLDocument.hasOOXMLHeader(in)); assertTrue(POIXMLDocument.hasOOXMLHeader(in));
in.close();
// xls file isn't // xls file isn't
in = new PushbackInputStream( in = new PushbackInputStream(
HSSFTestDataSamples.openSampleFileStream("SampleSS.xls"), 10 HSSFTestDataSamples.openSampleFileStream("SampleSS.xls"), 10
); );
assertFalse(POIXMLDocument.hasOOXMLHeader(in)); assertFalse(POIXMLDocument.hasOOXMLHeader(in));
in.close();
// text file isn't // text file isn't
in = new PushbackInputStream( in = new PushbackInputStream(
HSSFTestDataSamples.openSampleFileStream("SampleSS.txt"), 10 HSSFTestDataSamples.openSampleFileStream("SampleSS.txt"), 10
); );
assertFalse(POIXMLDocument.hasOOXMLHeader(in)); assertFalse(POIXMLDocument.hasOOXMLHeader(in));
in.close();
} }
} }

View File

@ -105,29 +105,32 @@ public final class TestPOIXMLDocument extends TestCase {
out.close(); out.close();
OPCPackage pkg2 = OPCPackage.open(tmp.getAbsolutePath()); OPCPackage pkg2 = OPCPackage.open(tmp.getAbsolutePath());
try {
doc = new OPCParser(pkg1);
doc.parse(new TestFactory());
context = new HashMap<String,POIXMLDocumentPart>();
traverse(doc, context);
context.clear();
doc = new OPCParser(pkg1); assertEquals(pkg1.getRelationships().size(), pkg2.getRelationships().size());
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();
ArrayList<PackagePart> l1 = pkg1.getParts(); assertEquals(l1.size(), l2.size());
ArrayList<PackagePart> l2 = pkg2.getParts(); for (int i=0; i < l1.size(); i++){
PackagePart p1 = l1.get(i);
PackagePart p2 = l2.get(i);
assertEquals(l1.size(), l2.size()); assertEquals(p1.getContentType(), p2.getContentType());
for (int i=0; i < l1.size(); i++){ assertEquals(p1.hasRelationships(), p2.hasRelationships());
PackagePart p1 = l1.get(i); if(p1.hasRelationships()){
PackagePart p2 = l2.get(i); assertEquals(p1.getRelationships().size(), p2.getRelationships().size());
}
assertEquals(p1.getContentType(), p2.getContentType()); assertEquals(p1.getPartName(), p2.getPartName());
assertEquals(p1.hasRelationships(), p2.hasRelationships());
if(p1.hasRelationships()){
assertEquals(p1.getRelationships().size(), p2.getRelationships().size());
} }
assertEquals(p1.getPartName(), p2.getPartName()); } finally {
pkg2.close();
} }
} }
@ -156,6 +159,7 @@ public final class TestPOIXMLDocument extends TestCase {
for(POIXMLDocumentPart rel : doc.getRelations()){ for(POIXMLDocumentPart rel : doc.getRelations()){
//TODO finish me //TODO finish me
assertNotNull(rel);
} }
} }

View File

@ -25,6 +25,7 @@ import junit.framework.TestCase;
import org.apache.poi.POIDataSamples; import org.apache.poi.POIDataSamples;
import org.apache.poi.POIOLE2TextExtractor; import org.apache.poi.POIOLE2TextExtractor;
import org.apache.poi.POITextExtractor; import org.apache.poi.POITextExtractor;
import org.apache.poi.POIXMLTextExtractor;
import org.apache.poi.hdgf.extractor.VisioTextExtractor; import org.apache.poi.hdgf.extractor.VisioTextExtractor;
import org.apache.poi.hpbf.extractor.PublisherTextExtractor; import org.apache.poi.hpbf.extractor.PublisherTextExtractor;
import org.apache.poi.hslf.extractor.PowerPointExtractor; import org.apache.poi.hslf.extractor.PowerPointExtractor;
@ -35,6 +36,7 @@ import org.apache.poi.hwpf.extractor.Word6Extractor;
import org.apache.poi.hwpf.extractor.WordExtractor; import org.apache.poi.hwpf.extractor.WordExtractor;
import org.apache.poi.openxml4j.exceptions.InvalidOperationException; import org.apache.poi.openxml4j.exceptions.InvalidOperationException;
import org.apache.poi.openxml4j.opc.OPCPackage; 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.poifs.filesystem.POIFSFileSystem;
import org.apache.poi.xslf.extractor.XSLFPowerPointExtractor; import org.apache.poi.xslf.extractor.XSLFPowerPointExtractor;
import org.apache.poi.xssf.extractor.XSSFEventBasedExcelExtractor; import org.apache.poi.xssf.extractor.XSSFEventBasedExcelExtractor;
@ -128,22 +130,33 @@ public class TestExtractorFactory extends TestCase {
assertTrue( assertTrue(
xlsExtractor.getText().length() > 200 xlsExtractor.getText().length() > 200
); );
xlsExtractor.close();
POITextExtractor extractor = ExtractorFactory.createExtractor(xlsx);
assertTrue( assertTrue(
ExtractorFactory.createExtractor(xlsx) extractor
instanceof XSSFExcelExtractor instanceof XSSFExcelExtractor
); );
assertTrue( extractor.close();
ExtractorFactory.createExtractor(xlsx).getText().length() > 200
);
extractor = ExtractorFactory.createExtractor(xlsx);
assertTrue( assertTrue(
ExtractorFactory.createExtractor(xltx) extractor.getText().length() > 200
);
extractor.close();
extractor = ExtractorFactory.createExtractor(xltx);
assertTrue(
extractor
instanceof XSSFExcelExtractor instanceof XSSFExcelExtractor
); );
extractor.close();
extractor = ExtractorFactory.createExtractor(xltx);
assertTrue( assertTrue(
ExtractorFactory.createExtractor(xltx).getText().contains("test") extractor.getText().contains("test")
); );
extractor.close();
// Word // Word
@ -171,22 +184,29 @@ public class TestExtractorFactory extends TestCase {
ExtractorFactory.createExtractor(doc95).getText().length() > 120 ExtractorFactory.createExtractor(doc95).getText().length() > 120
); );
extractor = ExtractorFactory.createExtractor(docx);
assertTrue(
extractor instanceof XWPFWordExtractor
);
extractor.close();
extractor = ExtractorFactory.createExtractor(docx);
assertTrue( assertTrue(
ExtractorFactory.createExtractor(docx) extractor.getText().length() > 120
instanceof XWPFWordExtractor
);
assertTrue(
ExtractorFactory.createExtractor(docx).getText().length() > 120
); );
extractor.close();
extractor = ExtractorFactory.createExtractor(dotx);
assertTrue( assertTrue(
ExtractorFactory.createExtractor(dotx) extractor instanceof XWPFWordExtractor
instanceof XWPFWordExtractor
); );
extractor.close();
extractor = ExtractorFactory.createExtractor(dotx);
assertTrue( assertTrue(
ExtractorFactory.createExtractor(dotx).getText().contains("Test") extractor.getText().contains("Test")
); );
extractor.close();
// PowerPoint // PowerPoint
assertTrue( assertTrue(
@ -197,13 +217,18 @@ public class TestExtractorFactory extends TestCase {
ExtractorFactory.createExtractor(ppt).getText().length() > 120 ExtractorFactory.createExtractor(ppt).getText().length() > 120
); );
extractor = ExtractorFactory.createExtractor(pptx);
assertTrue( assertTrue(
ExtractorFactory.createExtractor(pptx) extractor
instanceof XSLFPowerPointExtractor instanceof XSLFPowerPointExtractor
); );
extractor.close();
extractor = ExtractorFactory.createExtractor(pptx);
assertTrue( assertTrue(
ExtractorFactory.createExtractor(pptx).getText().length() > 120 extractor.getText().length() > 120
); );
extractor.close();
// Visio // Visio
assertTrue( assertTrue(
@ -338,8 +363,13 @@ public class TestExtractorFactory extends TestCase {
// Text // Text
try { try {
ExtractorFactory.createExtractor(new FileInputStream(txt)); FileInputStream stream = new FileInputStream(txt);
fail(); try {
ExtractorFactory.createExtractor(stream);
fail();
} finally {
stream.close();
}
} catch(IllegalArgumentException e) { } catch(IllegalArgumentException e) {
// Good // Good
} }
@ -427,31 +457,43 @@ public class TestExtractorFactory extends TestCase {
public void testPackage() throws Exception { public void testPackage() throws Exception {
// Excel // Excel
assertTrue( POIXMLTextExtractor extractor = ExtractorFactory.createExtractor(OPCPackage.open(xlsx.toString(), PackageAccess.READ));
ExtractorFactory.createExtractor(OPCPackage.open(xlsx.toString())) assertTrue(
extractor
instanceof XSSFExcelExtractor instanceof XSSFExcelExtractor
); );
assertTrue( extractor.close();
ExtractorFactory.createExtractor(OPCPackage.open(xlsx.toString())).getText().length() > 200 extractor = ExtractorFactory.createExtractor(OPCPackage.open(xlsx.toString()));
); assertTrue(extractor.getText().length() > 200);
extractor.close();
// Word // Word
assertTrue( extractor = ExtractorFactory.createExtractor(OPCPackage.open(docx.toString()));
ExtractorFactory.createExtractor(OPCPackage.open(docx.toString())) assertTrue(
extractor
instanceof XWPFWordExtractor instanceof XWPFWordExtractor
); );
assertTrue( extractor.close();
ExtractorFactory.createExtractor(OPCPackage.open(docx.toString())).getText().length() > 120
extractor = ExtractorFactory.createExtractor(OPCPackage.open(docx.toString()));
assertTrue(
extractor.getText().length() > 120
); );
extractor.close();
// PowerPoint // PowerPoint
assertTrue( extractor = ExtractorFactory.createExtractor(OPCPackage.open(pptx.toString()));
ExtractorFactory.createExtractor(OPCPackage.open(pptx.toString())) assertTrue(
extractor
instanceof XSLFPowerPointExtractor instanceof XSLFPowerPointExtractor
); );
assertTrue( extractor.close();
ExtractorFactory.createExtractor(OPCPackage.open(pptx.toString())).getText().length() > 120
extractor = ExtractorFactory.createExtractor(OPCPackage.open(pptx.toString()));
assertTrue(
extractor.getText().length() > 120
); );
extractor.close();
// Text // Text
try { try {
@ -487,21 +529,27 @@ public class TestExtractorFactory extends TestCase {
// Check we get the right extractors now // Check we get the right extractors now
POITextExtractor extractor = ExtractorFactory.createExtractor(new POIFSFileSystem(new FileInputStream(xls)));
assertTrue( assertTrue(
ExtractorFactory.createExtractor(new POIFSFileSystem(new FileInputStream(xls))) extractor
instanceof EventBasedExcelExtractor instanceof EventBasedExcelExtractor
); );
extractor.close();
extractor = ExtractorFactory.createExtractor(new POIFSFileSystem(new FileInputStream(xls)));
assertTrue( 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( assertTrue(
ExtractorFactory.createExtractor(OPCPackage.open(xlsx.toString())) extractor.getText().length() > 200
instanceof XSSFEventBasedExcelExtractor
);
assertTrue(
ExtractorFactory.createExtractor(OPCPackage.open(xlsx.toString())).getText().length() > 200
); );
extractor.close();
// Put back to normal // Put back to normal
@ -511,21 +559,29 @@ public class TestExtractorFactory extends TestCase {
assertNull(ExtractorFactory.getAllThreadsPreferEventExtractors()); assertNull(ExtractorFactory.getAllThreadsPreferEventExtractors());
// And back // And back
extractor = ExtractorFactory.createExtractor(new POIFSFileSystem(new FileInputStream(xls)));
assertTrue( assertTrue(
ExtractorFactory.createExtractor(new POIFSFileSystem(new FileInputStream(xls))) extractor
instanceof ExcelExtractor instanceof ExcelExtractor
); );
extractor.close();
extractor = ExtractorFactory.createExtractor(new POIFSFileSystem(new FileInputStream(xls)));
assertTrue( 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( assertTrue(
ExtractorFactory.createExtractor(OPCPackage.open(xlsx.toString())) extractor
instanceof XSSFExcelExtractor instanceof XSSFExcelExtractor
); );
extractor.close();
extractor = ExtractorFactory.createExtractor(OPCPackage.open(xlsx.toString()));
assertTrue( assertTrue(
ExtractorFactory.createExtractor(OPCPackage.open(xlsx.toString())).getText().length() > 200 extractor.getText().length() > 200
); );
extractor.close();
} }
/** /**

View File

@ -58,12 +58,17 @@ public final class TestPackage extends TestCase {
File targetFile = OpenXML4JTestDataSamples.getOutputFile("TestPackageOpenSaveTMP.docx"); File targetFile = OpenXML4JTestDataSamples.getOutputFile("TestPackageOpenSaveTMP.docx");
OPCPackage p = OPCPackage.open(originalFile, PackageAccess.READ_WRITE); OPCPackage p = OPCPackage.open(originalFile, PackageAccess.READ_WRITE);
p.save(targetFile.getAbsoluteFile()); try {
p.save(targetFile.getAbsoluteFile());
// Compare the original and newly saved document // Compare the original and newly saved document
assertTrue(targetFile.exists()); assertTrue(targetFile.exists());
ZipFileAssert.assertEquals(new File(originalFile), targetFile); ZipFileAssert.assertEquals(new File(originalFile), targetFile);
assertTrue(targetFile.delete()); assertTrue(targetFile.delete());
} finally {
// use revert to not re-write the input file
p.revert();
}
} }
/** /**
@ -168,6 +173,8 @@ public final class TestPackage extends TestCase {
PackageRelationship rel = PackageRelationship rel =
corePart.addRelationship(sheetPartName, TargetMode.INTERNAL, "http://schemas.openxmlformats.org/officeDocument/2006/relationships/worksheet", "rSheet1"); 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"); PackagePart part = pkg.createPart(sheetPartName, "application/vnd.openxmlformats-officedocument.spreadsheetml.worksheet+xml");
assertNotNull(part);
// Dummy content again // Dummy content again
coreOut = corePart.getOutputStream(); coreOut = corePart.getOutputStream();
coreOut.write("<dummy-xml2 />".getBytes()); coreOut.write("<dummy-xml2 />".getBytes());
@ -189,28 +196,35 @@ public final class TestPackage extends TestCase {
// Save and re-load // Save and re-load
pkg.close(); pkg.close();
File tmp = TempFile.createTempFile("testCreatePackageWithCoreDocument", ".zip"); File tmp = TempFile.createTempFile("testCreatePackageWithCoreDocument", ".zip");
FileOutputStream fout = new FileOutputStream(tmp); OutputStream fout = new FileOutputStream(tmp);
fout.write(baos.toByteArray()); try {
fout.close(); fout.write(baos.toByteArray());
} finally {
fout.close();
}
pkg = OPCPackage.open(tmp.getPath()); pkg = OPCPackage.open(tmp.getPath());
//tmp.delete(); //tmp.delete();
// Check still right try {
coreRels = pkg.getRelationshipsByType(PackageRelationshipTypes.CORE_DOCUMENT); // Check still right
assertEquals(1, coreRels.size()); coreRels = pkg.getRelationshipsByType(PackageRelationshipTypes.CORE_DOCUMENT);
coreRel = coreRels.getRelationship(0); assertEquals(1, coreRels.size());
coreRel = coreRels.getRelationship(0);
assertEquals("/", coreRel.getSourceURI().toString()); assertEquals("/", coreRel.getSourceURI().toString());
assertEquals("/xl/workbook.xml", coreRel.getTargetURI().toString()); assertEquals("/xl/workbook.xml", coreRel.getTargetURI().toString());
corePart = pkg.getPart(coreRel); corePart = pkg.getPart(coreRel);
assertNotNull(corePart); assertNotNull(corePart);
PackageRelationshipCollection rels = corePart.getRelationshipsByType("http://schemas.openxmlformats.org/officeDocument/2006/relationships/hyperlink"); PackageRelationshipCollection rels = corePart.getRelationshipsByType("http://schemas.openxmlformats.org/officeDocument/2006/relationships/hyperlink");
assertEquals(1, rels.size()); assertEquals(1, rels.size());
rel = rels.getRelationship(0); rel = rels.getRelationship(0);
assertEquals("Sheet1!A1", rel.getTargetURI().getRawFragment()); assertEquals("Sheet1!A1", rel.getTargetURI().getRawFragment());
assertMSCompatibility(pkg); assertMSCompatibility(pkg);
} finally {
pkg.close();
}
} }
private void assertMSCompatibility(OPCPackage pkg) throws Exception { private void assertMSCompatibility(OPCPackage pkg) throws Exception {
@ -297,14 +311,22 @@ public final class TestPackage extends TestCase {
File targetFile = OpenXML4JTestDataSamples.getOutputFile("TestPackageOpenSaveTMP.docx"); File targetFile = OpenXML4JTestDataSamples.getOutputFile("TestPackageOpenSaveTMP.docx");
OPCPackage p = OPCPackage.open(originalFile, PackageAccess.READ_WRITE); OPCPackage p = OPCPackage.open(originalFile, PackageAccess.READ_WRITE);
FileOutputStream fout = new FileOutputStream(targetFile); try {
p.save(fout); FileOutputStream fout = new FileOutputStream(targetFile);
fout.close(); try {
p.save(fout);
} finally {
fout.close();
}
// Compare the original and newly saved document // Compare the original and newly saved document
assertTrue(targetFile.exists()); assertTrue(targetFile.exists());
ZipFileAssert.assertEquals(new File(originalFile), targetFile); ZipFileAssert.assertEquals(new File(originalFile), targetFile);
assertTrue(targetFile.delete()); assertTrue(targetFile.delete());
} finally {
// use revert to not re-write the input file
p.revert();
}
} }
/** /**
@ -511,48 +533,56 @@ public final class TestPackage extends TestCase {
String filepath = OpenXML4JTestDataSamples.getSampleFileName("sample.docx"); String filepath = OpenXML4JTestDataSamples.getSampleFileName("sample.docx");
OPCPackage pkg = OPCPackage.open(filepath, PackageAccess.READ_WRITE); OPCPackage pkg = OPCPackage.open(filepath, PackageAccess.READ_WRITE);
List<PackagePart> rs = pkg.getPartsByName(Pattern.compile("/word/.*?\\.xml")); try {
HashMap<String, PackagePart> selected = new HashMap<String, PackagePart>(); List<PackagePart> rs = pkg.getPartsByName(Pattern.compile("/word/.*?\\.xml"));
HashMap<String, PackagePart> selected = new HashMap<String, PackagePart>();
for(PackagePart p : rs) for(PackagePart p : rs)
selected.put(p.getPartName().getName(), p); selected.put(p.getPartName().getName(), p);
assertEquals(6, selected.size()); assertEquals(6, selected.size());
assertTrue(selected.containsKey("/word/document.xml")); assertTrue(selected.containsKey("/word/document.xml"));
assertTrue(selected.containsKey("/word/fontTable.xml")); assertTrue(selected.containsKey("/word/fontTable.xml"));
assertTrue(selected.containsKey("/word/settings.xml")); assertTrue(selected.containsKey("/word/settings.xml"));
assertTrue(selected.containsKey("/word/styles.xml")); assertTrue(selected.containsKey("/word/styles.xml"));
assertTrue(selected.containsKey("/word/theme/theme1.xml")); assertTrue(selected.containsKey("/word/theme/theme1.xml"));
assertTrue(selected.containsKey("/word/webSettings.xml")); assertTrue(selected.containsKey("/word/webSettings.xml"));
} finally {
// use revert to not re-write the input file
pkg.revert();
}
} }
public void testGetPartSize() throws Exception { public void testGetPartSize() throws Exception {
String filepath = OpenXML4JTestDataSamples.getSampleFileName("sample.docx"); String filepath = OpenXML4JTestDataSamples.getSampleFileName("sample.docx");
OPCPackage pkg = OPCPackage.open(filepath, PackageAccess.READ); OPCPackage pkg = OPCPackage.open(filepath, PackageAccess.READ);
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());
}
int checked = 0; // But not from the others
for (PackagePart part : pkg.getParts()) { if (part.getPartName().getName().equals("/docProps/core.xml")) {
// Can get the size of zip parts checked++;
if (part.getPartName().getName().equals("/word/document.xml")) { assertEquals(PackagePropertiesPart.class, part.getClass());
checked++; assertEquals(-1, part.getSize());
assertEquals(ZipPackagePart.class, part.getClass()); }
assertEquals(6031l, part.getSize()); }
} // Ensure we actually found the parts we want to check
if (part.getPartName().getName().equals("/word/fontTable.xml")) { assertEquals(3, checked);
checked++; } finally {
assertEquals(ZipPackagePart.class, part.getClass()); pkg.close();
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);
} }
public void testReplaceContentType() throws Exception { public void testReplaceContentType() throws Exception {

View File

@ -70,37 +70,45 @@ public final class TestPackageCoreProperties extends TestCase {
// Open package // Open package
OPCPackage p = OPCPackage.open(inputPath, PackageAccess.READ_WRITE); OPCPackage p = OPCPackage.open(inputPath, PackageAccess.READ_WRITE);
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));
SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss'Z'"); PackageProperties props = p.getPackageProperties();
df.setTimeZone(TimeZone.getTimeZone("UTC")); props.setCategoryProperty("MyCategory");
Date dateToInsert = df.parse("2007-05-12T08:00:00Z", new ParsePosition( props.setContentStatusProperty("MyContentStatus");
0)); 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);
PackageProperties props = p.getPackageProperties(); // Open the newly created file to check core properties saved values.
props.setCategoryProperty("MyCategory"); OPCPackage p2 = OPCPackage.open(outputFile.getAbsolutePath(), PackageAccess.READ);
props.setContentStatusProperty("MyContentStatus"); try {
props.setContentTypeProperty("MyContentType"); compareProperties(p2);
props.setCreatedProperty(new Nullable<Date>(dateToInsert)); p2.revert();
props.setCreatorProperty("MyCreator"); } finally {
props.setDescriptionProperty("MyDescription"); p2.close();
props.setIdentifierProperty("MyIdentifier"); }
props.setKeywordsProperty("MyKeywords"); outputFile.delete();
props.setLanguageProperty("MyLanguage"); } finally {
props.setLastModifiedByProperty("Julien Chable"); // use revert to not re-write the input file
props.setLastPrintedProperty(new Nullable<Date>(dateToInsert)); p.revert();
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();
} }
private void compareProperties(OPCPackage p) throws InvalidFormatException { private void compareProperties(OPCPackage p) throws InvalidFormatException {

View File

@ -42,16 +42,24 @@ public final class TestPackageThumbnail extends TestCase {
// Open package // Open package
OPCPackage p = OPCPackage.open(inputPath, PackageAccess.READ_WRITE); OPCPackage p = OPCPackage.open(inputPath, PackageAccess.READ_WRITE);
p.addThumbnail(imagePath); try {
// Save the package in the output directory p.addThumbnail(imagePath);
p.save(outputFile); // Save the package in the output directory
p.save(outputFile);
// Open the newly created file to check core properties saved values. // Open the newly created file to check core properties saved values.
OPCPackage p2 = OPCPackage.open(outputFile.getAbsolutePath(), PackageAccess.READ); OPCPackage p2 = OPCPackage.open(outputFile.getAbsolutePath(), PackageAccess.READ);
if (p2.getRelationshipsByType(PackageRelationshipTypes.THUMBNAIL) try {
.size() == 0) if (p2.getRelationshipsByType(PackageRelationshipTypes.THUMBNAIL)
fail("Thumbnail not added to the package !"); .size() == 0)
p2.revert(); fail("Thumbnail not added to the package !");
outputFile.delete(); } finally {
p2.revert();
p2.close();
}
} finally {
p.revert();
outputFile.delete();
}
} }
} }

View File

@ -188,7 +188,11 @@ public class TestRelationships extends TestCase {
// Write out and re-load // Write out and re-load
ByteArrayOutputStream baos = new ByteArrayOutputStream(); ByteArrayOutputStream baos = new ByteArrayOutputStream();
pkg.save(baos); 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); pkg = OPCPackage.open(bais);
// Check again // Check again
@ -280,7 +284,6 @@ public class TestRelationships extends TestCase {
public void testTargetWithSpecialChars() throws Exception{ public void testTargetWithSpecialChars() throws Exception{
OPCPackage pkg; OPCPackage pkg;
String filepath = OpenXML4JTestDataSamples.getSampleFileName("50154.xlsx"); String filepath = OpenXML4JTestDataSamples.getSampleFileName("50154.xlsx");
@ -289,6 +292,10 @@ public class TestRelationships extends TestCase {
ByteArrayOutputStream baos = new ByteArrayOutputStream(); ByteArrayOutputStream baos = new ByteArrayOutputStream();
pkg.save(baos); pkg.save(baos);
// use revert to not re-write the input file
pkg.revert();
ByteArrayInputStream bais = new ByteArrayInputStream(baos.toByteArray()); ByteArrayInputStream bais = new ByteArrayInputStream(baos.toByteArray());
pkg = OPCPackage.open(bais); pkg = OPCPackage.open(bais);

View File

@ -114,12 +114,16 @@ public class TestSignatureInfo {
@Test @Test
public void office2007prettyPrintedRels() throws Exception { public void office2007prettyPrintedRels() throws Exception {
OPCPackage pkg = OPCPackage.open(testdata.getFile("office2007prettyPrintedRels.docx"), PackageAccess.READ); OPCPackage pkg = OPCPackage.open(testdata.getFile("office2007prettyPrintedRels.docx"), PackageAccess.READ);
SignatureConfig sic = new SignatureConfig(); try {
sic.setOpcPackage(pkg); SignatureConfig sic = new SignatureConfig();
SignatureInfo si = new SignatureInfo(); sic.setOpcPackage(pkg);
si.setSignatureConfig(sic); SignatureInfo si = new SignatureInfo();
boolean isValid = si.verifySignature(); si.setSignatureConfig(sic);
assertTrue(isValid); boolean isValid = si.verifySignature();
assertTrue(isValid);
} finally {
pkg.close();
}
} }
@Test @Test

View File

@ -17,6 +17,8 @@
package org.apache.poi.ss; package org.apache.poi.ss;
import java.io.InputStream;
import org.apache.poi.hssf.usermodel.HSSFWorkbook; import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.hssf.HSSFTestDataSamples; import org.apache.poi.hssf.HSSFTestDataSamples;
import org.apache.poi.poifs.filesystem.POIFSFileSystem; import org.apache.poi.poifs.filesystem.POIFSFileSystem;
@ -47,6 +49,7 @@ public final class TestWorkbookFactory extends TestCase {
); );
assertNotNull(wb); assertNotNull(wb);
assertTrue(wb instanceof HSSFWorkbook); assertTrue(wb instanceof HSSFWorkbook);
wb.close();
// Package -> xssf // Package -> xssf
wb = WorkbookFactory.create( wb = WorkbookFactory.create(
@ -55,6 +58,7 @@ public final class TestWorkbookFactory extends TestCase {
); );
assertNotNull(wb); assertNotNull(wb);
assertTrue(wb instanceof XSSFWorkbook); assertTrue(wb instanceof XSSFWorkbook);
// TODO: this re-writes the sample-file?! wb.close();
} }
/** /**
@ -71,12 +75,14 @@ public final class TestWorkbookFactory extends TestCase {
); );
assertNotNull(wb); assertNotNull(wb);
assertTrue(wb instanceof HSSFWorkbook); assertTrue(wb instanceof HSSFWorkbook);
wb.close();
wb = WorkbookFactory.create( wb = WorkbookFactory.create(
HSSFTestDataSamples.openSampleFileStream(xlsx) HSSFTestDataSamples.openSampleFileStream(xlsx)
); );
assertNotNull(wb); assertNotNull(wb);
assertTrue(wb instanceof XSSFWorkbook); assertTrue(wb instanceof XSSFWorkbook);
// TODO: this re-writes the sample-file?! wb.close();
// File -> either // File -> either
wb = WorkbookFactory.create( wb = WorkbookFactory.create(
@ -84,6 +90,7 @@ public final class TestWorkbookFactory extends TestCase {
); );
assertNotNull(wb); assertNotNull(wb);
assertTrue(wb instanceof HSSFWorkbook); assertTrue(wb instanceof HSSFWorkbook);
wb.close();
wb = WorkbookFactory.create( wb = WorkbookFactory.create(
HSSFTestDataSamples.getSampleFile(xlsx) HSSFTestDataSamples.getSampleFile(xlsx)
@ -91,11 +98,17 @@ public final class TestWorkbookFactory extends TestCase {
assertNotNull(wb); assertNotNull(wb);
assertTrue(wb instanceof XSSFWorkbook); 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 // Invalid type -> exception
try { try {
wb = WorkbookFactory.create( InputStream stream = HSSFTestDataSamples.openSampleFileStream(txt);
HSSFTestDataSamples.openSampleFileStream(txt) try {
); wb = WorkbookFactory.create(stream);
} finally {
stream.close();
}
fail(); fail();
} catch(IllegalArgumentException e) { } catch(IllegalArgumentException e) {
// Good // Good

View File

@ -22,6 +22,8 @@ package org.apache.poi.xssf.streaming;
import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertEquals;
import static org.junit.Assert.fail; import static org.junit.Assert.fail;
import java.io.IOException;
import org.apache.poi.ss.usermodel.BaseTestSheet; import org.apache.poi.ss.usermodel.BaseTestSheet;
import org.apache.poi.ss.usermodel.Sheet; import org.apache.poi.ss.usermodel.Sheet;
import org.apache.poi.ss.usermodel.Workbook; import org.apache.poi.ss.usermodel.Workbook;
@ -94,41 +96,49 @@ public class TestSXSSFSheet extends BaseTestSheet {
} }
@Test @Test
public void overrideFlushedRows() { public void overrideFlushedRows() throws IOException {
Workbook wb = new SXSSFWorkbook(3); Workbook wb = new SXSSFWorkbook(3);
Sheet sheet = wb.createSheet(); try {
Sheet sheet = wb.createSheet();
sheet.createRow(1); sheet.createRow(1);
sheet.createRow(2); sheet.createRow(2);
sheet.createRow(3); sheet.createRow(3);
sheet.createRow(4); sheet.createRow(4);
thrown.expect(Throwable.class); thrown.expect(Throwable.class);
thrown.expectMessage("Attempting to write a row[1] in the range [0,1] that is already written to disk."); thrown.expectMessage("Attempting to write a row[1] in the range [0,1] that is already written to disk.");
sheet.createRow(1); sheet.createRow(1);
} finally {
wb.close();
}
} }
@Test @Test
public void overrideRowsInTemplate() { public void overrideRowsInTemplate() throws IOException {
XSSFWorkbook template = new XSSFWorkbook(); XSSFWorkbook template = new XSSFWorkbook();
template.createSheet().createRow(1); template.createSheet().createRow(1);
Workbook wb = new SXSSFWorkbook(template); Workbook wb = new SXSSFWorkbook(template);
Sheet sheet = wb.getSheetAt(0); try {
Sheet sheet = wb.getSheetAt(0);
try { try {
sheet.createRow(1); sheet.createRow(1);
fail("expected exception"); fail("expected exception");
} catch (Throwable e){ } catch (Throwable e){
assertEquals("Attempting to write a row[1] in the range [0,1] that is already written to disk.", e.getMessage()); 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();
} }
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);
} }
} }

View File

@ -28,6 +28,7 @@ import static org.junit.Assert.assertNull;
import static org.junit.Assert.assertSame; import static org.junit.Assert.assertSame;
import static org.junit.Assert.fail; import static org.junit.Assert.fail;
import java.io.IOException;
import java.util.Arrays; import java.util.Arrays;
import java.util.HashSet; import java.util.HashSet;
import java.util.List; import java.util.List;
@ -1188,7 +1189,7 @@ public final class TestXSSFSheet extends BaseTestSheet {
} }
@Test @Test
public void bug54607() { public void bug54607() throws IOException {
// run with the file provided in the Bug-Report // run with the file provided in the Bug-Report
runGetTopRow("54607.xlsx", true, 1, 0, 0); runGetTopRow("54607.xlsx", true, 1, 0, 0);
runGetLeftCol("54607.xlsx", true, 0, 0, 0); runGetLeftCol("54607.xlsx", true, 0, 0, 0);
@ -1202,7 +1203,7 @@ public final class TestXSSFSheet extends BaseTestSheet {
runGetLeftCol("TwoSheetsNoneHidden.xls", false, 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; final Workbook wb;
if(isXSSF) { if(isXSSF) {
wb = XSSFTestDataSamples.openSampleWorkbook(file); wb = XSSFTestDataSamples.openSampleWorkbook(file);
@ -1218,15 +1219,19 @@ public final class TestXSSFSheet extends BaseTestSheet {
// for XSSF also test with SXSSF // for XSSF also test with SXSSF
if(isXSSF) { if(isXSSF) {
Workbook swb = new SXSSFWorkbook((XSSFWorkbook) wb); Workbook swb = new SXSSFWorkbook((XSSFWorkbook) wb);
for (int si = 0; si < swb.getNumberOfSheets(); si++) { try {
Sheet sh = swb.getSheetAt(si); for (int si = 0; si < swb.getNumberOfSheets(); si++) {
assertNotNull(sh.getSheetName()); Sheet sh = swb.getSheetAt(si);
assertEquals("Did not match for sheet " + si, topRows[si], sh.getTopRow()); 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; final Workbook wb;
if(isXSSF) { if(isXSSF) {
wb = XSSFTestDataSamples.openSampleWorkbook(file); wb = XSSFTestDataSamples.openSampleWorkbook(file);
@ -1247,6 +1252,7 @@ public final class TestXSSFSheet extends BaseTestSheet {
assertNotNull(sh.getSheetName()); assertNotNull(sh.getSheetName());
assertEquals("Did not match for sheet " + si, topRows[si], sh.getLeftCol()); assertEquals("Did not match for sheet " + si, topRows[si], sh.getLeftCol());
} }
swb.close();
} }
} }

View File

@ -18,6 +18,7 @@ package org.apache.poi.xssf.usermodel;
import java.io.ByteArrayOutputStream; import java.io.ByteArrayOutputStream;
import java.io.ByteArrayInputStream; import java.io.ByteArrayInputStream;
import java.io.InputStream;
import java.math.BigInteger; import java.math.BigInteger;
import java.util.List; import java.util.List;
@ -25,6 +26,7 @@ import junit.framework.TestCase;
import org.apache.poi.POIDataSamples; import org.apache.poi.POIDataSamples;
import org.apache.xmlbeans.XmlObject; import org.apache.xmlbeans.XmlObject;
import schemasMicrosoftComVml.*; import schemasMicrosoftComVml.*;
import schemasMicrosoftComOfficeOffice.CTShapeLayout; import schemasMicrosoftComOfficeOffice.CTShapeLayout;
import schemasMicrosoftComOfficeOffice.STConnectType; import schemasMicrosoftComOfficeOffice.STConnectType;
@ -95,7 +97,12 @@ public class TestXSSFVMLDrawing extends TestCase {
public void testFindCommentShape() throws Exception { public void testFindCommentShape() throws Exception {
XSSFVMLDrawing vml = new XSSFVMLDrawing(); 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); CTShape sh_a1 = vml.findCommentShape(0, 0);
assertNotNull(sh_a1); assertNotNull(sh_a1);
@ -127,7 +134,12 @@ public class TestXSSFVMLDrawing extends TestCase {
public void testRemoveCommentShape() throws Exception { public void testRemoveCommentShape() throws Exception {
XSSFVMLDrawing vml = new XSSFVMLDrawing(); 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); CTShape sh_a1 = vml.findCommentShape(0, 0);
assertNotNull(sh_a1); assertNotNull(sh_a1);

View File

@ -178,5 +178,6 @@ public class TestDocumentEncryption {
ps = PropertySetFactory.create(fs2.getRoot(), DocumentSummaryInformation.DEFAULT_STREAM_NAME); ps = PropertySetFactory.create(fs2.getRoot(), DocumentSummaryInformation.DEFAULT_STREAM_NAME);
assertTrue(ps.isDocumentSummaryInformation()); assertTrue(ps.isDocumentSummaryInformation());
assertEquals("On-screen Show (4:3)", ps.getProperties()[1].getValue()); assertEquals("On-screen Show (4:3)", ps.getProperties()[1].getValue());
fs.close();
} }
} }

View File

@ -25,8 +25,8 @@ import java.io.InputStream;
import java.io.UnsupportedEncodingException; import java.io.UnsupportedEncodingException;
import java.util.List; import java.util.List;
import junit.framework.Assert;
import junit.framework.TestCase; import junit.framework.TestCase;
import org.apache.poi.POIDataSamples; import org.apache.poi.POIDataSamples;
import org.apache.poi.hpsf.DocumentSummaryInformation; import org.apache.poi.hpsf.DocumentSummaryInformation;
import org.apache.poi.hpsf.HPSFException; import org.apache.poi.hpsf.HPSFException;
@ -95,7 +95,7 @@ public final class TestBasic extends TestCase {
{ {
String[] expected = POI_FILES; String[] expected = POI_FILES;
for (int i = 0; i < expected.length; i++) for (int i = 0; i < expected.length; i++)
Assert.assertEquals(poiFiles[i].getName(), expected[i]); assertEquals(poiFiles[i].getName(), expected[i]);
} }
/** /**
@ -115,7 +115,7 @@ public final class TestBasic extends TestCase {
public void testCreatePropertySets() public void testCreatePropertySets()
throws UnsupportedEncodingException, IOException throws UnsupportedEncodingException, IOException
{ {
Class[] expected = new Class[] Class<?>[] expected = new Class[]
{ {
SummaryInformation.class, SummaryInformation.class,
DocumentSummaryInformation.class, DocumentSummaryInformation.class,
@ -140,7 +140,7 @@ public final class TestBasic extends TestCase {
o = ex; o = ex;
} }
in.close(); in.close();
Assert.assertEquals(expected[i], o.getClass()); assertEquals(expected[i], o.getClass());
} }
} }
@ -160,15 +160,15 @@ public final class TestBasic extends TestCase {
byte[] b = poiFiles[i].getBytes(); byte[] b = poiFiles[i].getBytes();
PropertySet ps = PropertySet ps =
PropertySetFactory.create(new ByteArrayInputStream(b)); PropertySetFactory.create(new ByteArrayInputStream(b));
Assert.assertEquals(ps.getByteOrder(), BYTE_ORDER); assertEquals(ps.getByteOrder(), BYTE_ORDER);
Assert.assertEquals(ps.getFormat(), FORMAT); assertEquals(ps.getFormat(), FORMAT);
Assert.assertEquals(ps.getOSVersion(), OS_VERSION); assertEquals(ps.getOSVersion(), OS_VERSION);
Assert.assertEquals(new String(ps.getClassID().getBytes()), assertEquals(new String(ps.getClassID().getBytes()),
new String(CLASS_ID)); new String(CLASS_ID));
Assert.assertEquals(ps.getSectionCount(), SECTION_COUNT[i]); assertEquals(ps.getSectionCount(), SECTION_COUNT[i]);
Assert.assertEquals(ps.isSummaryInformation(), assertEquals(ps.isSummaryInformation(),
IS_SUMMARY_INFORMATION[i]); IS_SUMMARY_INFORMATION[i]);
Assert.assertEquals(ps.isDocumentSummaryInformation(), assertEquals(ps.isDocumentSummaryInformation(),
IS_DOCUMENT_SUMMARY_INFORMATION[i]); IS_DOCUMENT_SUMMARY_INFORMATION[i]);
} }
} }
@ -186,13 +186,13 @@ public final class TestBasic extends TestCase {
final SummaryInformation si = (SummaryInformation) final SummaryInformation si = (SummaryInformation)
PropertySetFactory.create(new ByteArrayInputStream PropertySetFactory.create(new ByteArrayInputStream
(poiFiles[0].getBytes())); (poiFiles[0].getBytes()));
final List sections = si.getSections(); final List<Section> sections = si.getSections();
final Section s = (Section) sections.get(0); final Section s = sections.get(0);
Assert.assertTrue(org.apache.poi.hpsf.Util.equal assertTrue(org.apache.poi.hpsf.Util.equal
(s.getFormatID().getBytes(), SectionIDMap.SUMMARY_INFORMATION_ID)); (s.getFormatID().getBytes(), SectionIDMap.SUMMARY_INFORMATION_ID));
Assert.assertNotNull(s.getProperties()); assertNotNull(s.getProperties());
Assert.assertEquals(17, s.getPropertyCount()); assertEquals(17, s.getPropertyCount());
Assert.assertEquals("Titel", s.getProperty(2)); assertEquals("Titel", s.getProperty(2));
Assert.assertEquals(1764, s.getSize()); assertEquals(1764, s.getSize());
} }
} }

View File

@ -24,9 +24,9 @@ import java.io.IOException;
import java.io.InputStream; import java.io.InputStream;
import java.io.UnsupportedEncodingException; import java.io.UnsupportedEncodingException;
import junit.framework.Assert;
import junit.framework.TestCase; import junit.framework.TestCase;
import org.apache.poi.POIDataSamples;
import org.apache.poi.hpsf.DocumentSummaryInformation; import org.apache.poi.hpsf.DocumentSummaryInformation;
import org.apache.poi.hpsf.HPSFException; import org.apache.poi.hpsf.HPSFException;
import org.apache.poi.hpsf.MarkUnsupportedException; import org.apache.poi.hpsf.MarkUnsupportedException;
@ -35,7 +35,6 @@ import org.apache.poi.hpsf.PropertySet;
import org.apache.poi.hpsf.PropertySetFactory; import org.apache.poi.hpsf.PropertySetFactory;
import org.apache.poi.hpsf.SummaryInformation; import org.apache.poi.hpsf.SummaryInformation;
import org.apache.poi.hpsf.Variant; 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 * <p>Test case for OLE2 files with empty properties. An empty property's type
@ -84,7 +83,7 @@ public final class TestEmptyProperties extends TestCase {
{ {
String[] expected = POI_FILES; String[] expected = POI_FILES;
for (int i = 0; i < expected.length; i++) for (int i = 0; i < expected.length; i++)
Assert.assertEquals(poiFiles[i].getName(), expected[i]); assertEquals(poiFiles[i].getName(), expected[i]);
} }
/** /**
@ -104,7 +103,7 @@ public final class TestEmptyProperties extends TestCase {
public void testCreatePropertySets() public void testCreatePropertySets()
throws UnsupportedEncodingException, IOException throws UnsupportedEncodingException, IOException
{ {
Class[] expected = new Class[] Class<?>[] expected = new Class[]
{ {
NoPropertySetStreamException.class, NoPropertySetStreamException.class,
SummaryInformation.class, SummaryInformation.class,
@ -127,7 +126,7 @@ public final class TestEmptyProperties extends TestCase {
o = ex; o = ex;
} }
in.close(); in.close();
Assert.assertEquals(o.getClass(), expected[i]); assertEquals(o.getClass(), expected[i]);
} }
} }

View File

@ -22,7 +22,6 @@ import java.io.File;
import java.io.FileNotFoundException; import java.io.FileNotFoundException;
import java.io.IOException; import java.io.IOException;
import junit.framework.Assert;
import junit.framework.TestCase; import junit.framework.TestCase;
import org.apache.poi.POIDataSamples; import org.apache.poi.POIDataSamples;
@ -78,18 +77,18 @@ public class TestUnicode extends TestCase {
byte[] b = poiFile.getBytes(); byte[] b = poiFile.getBytes();
PropertySet ps = PropertySet ps =
PropertySetFactory.create(new ByteArrayInputStream(b)); PropertySetFactory.create(new ByteArrayInputStream(b));
Assert.assertTrue(ps.isDocumentSummaryInformation()); assertTrue(ps.isDocumentSummaryInformation());
Assert.assertEquals(ps.getSectionCount(), 2); assertEquals(ps.getSectionCount(), 2);
Section s = (Section) ps.getSections().get(1); Section s = ps.getSections().get(1);
Assert.assertEquals(s.getProperty(1), assertEquals(s.getProperty(1),
Integer.valueOf(CodePageUtil.CP_UTF16)); Integer.valueOf(CodePageUtil.CP_UTF16));
Assert.assertEquals(s.getProperty(2), assertEquals(s.getProperty(2),
Integer.valueOf(-96070278)); Integer.valueOf(-96070278));
Assert.assertEquals(s.getProperty(3), assertEquals(s.getProperty(3),
"MCon_Info zu Office bei Schreiner"); "MCon_Info zu Office bei Schreiner");
Assert.assertEquals(s.getProperty(4), assertEquals(s.getProperty(4),
"petrovitsch@schreiner-online.de"); "petrovitsch@schreiner-online.de");
Assert.assertEquals(s.getProperty(5), assertEquals(s.getProperty(5),
"Petrovitsch, Wilhelm"); "Petrovitsch, Wilhelm");
} }
} }

View File

@ -167,7 +167,12 @@ final class Util {
r.registerListener(pfl, poiFiles[i]); r.registerListener(pfl, poiFiles[i]);
/* Read the POI filesystem. */ /* 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()]; POIFile[] result = new POIFile[files.size()];
for (int i = 0; i < result.length; i++) for (int i = 0; i < result.length; i++)
result[i] = files.get(i); result[i] = files.get(i);
@ -238,7 +243,7 @@ final class Util {
POIFile[] result = new POIFile[files.size()]; POIFile[] result = new POIFile[files.size()];
for (int i = 0; i < result.length; i++) for (int i = 0; i < result.length; i++)
result[i] = (POIFile) files.get(i); result[i] = files.get(i);
return result; return result;
} }
@ -250,14 +255,14 @@ final class Util {
public static void printSystemProperties() public static void printSystemProperties()
{ {
final Properties p = System.getProperties(); final Properties p = System.getProperties();
final List names = new LinkedList(); final List<String> names = new LinkedList<String>();
for (Iterator i = p.keySet().iterator(); i.hasNext();) for (Iterator<String> i = p.stringPropertyNames().iterator(); i.hasNext();)
names.add(i.next()); names.add(i.next());
Collections.sort(names); 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 name = i.next();
String value = (String) p.get(name); String value = p.getProperty(name);
System.out.println(name + ": " + value); System.out.println(name + ": " + value);
} }
System.out.println("Current directory: " + System.out.println("Current directory: " +

View File

@ -850,12 +850,21 @@ public final class TestFormulas extends TestCase {
/** test for bug 34021*/ /** test for bug 34021*/
public void testComplexSheetRefs () throws IOException { public void testComplexSheetRefs () throws IOException {
HSSFWorkbook sb = new HSSFWorkbook(); HSSFWorkbook sb = new HSSFWorkbook();
HSSFSheet s1 = sb.createSheet("Sheet a.1"); try {
HSSFSheet s2 = sb.createSheet("Sheet.A"); HSSFSheet s1 = sb.createSheet("Sheet a.1");
s2.createRow(1).createCell(2).setCellFormula("'Sheet a.1'!A1"); HSSFSheet s2 = sb.createSheet("Sheet.A");
s1.createRow(1).createCell(2).setCellFormula("'Sheet.A'!A1"); s2.createRow(1).createCell(2).setCellFormula("'Sheet a.1'!A1");
File file = TempFile.createTempFile("testComplexSheetRefs",".xls"); s1.createRow(1).createCell(2).setCellFormula("'Sheet.A'!A1");
sb.write(new FileOutputStream(file)); File file = TempFile.createTempFile("testComplexSheetRefs",".xls");
FileOutputStream stream = new FileOutputStream(file);
try {
sb.write(stream);
} finally {
stream.close();
}
} finally {
sb.close();
}
} }
/** Unknown Ptg 3C*/ /** Unknown Ptg 3C*/
@ -864,7 +873,12 @@ public final class TestFormulas extends TestCase {
wb.getSheetAt(0); wb.getSheetAt(0);
assertEquals("Reference for named range ", "Compliance!#REF!",wb.getNameAt(0).getRefersToFormula()); assertEquals("Reference for named range ", "Compliance!#REF!",wb.getNameAt(0).getRefersToFormula());
File outF = TempFile.createTempFile("bug27272_1",".xls"); 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"); System.out.println("Open "+outF.getAbsolutePath()+" in Excel");
} }
/** Unknown Ptg 3D*/ /** Unknown Ptg 3D*/
@ -872,15 +886,25 @@ public final class TestFormulas extends TestCase {
HSSFWorkbook wb = openSample("27272_2.xls"); HSSFWorkbook wb = openSample("27272_2.xls");
assertEquals("Reference for named range ", "LOAD.POD_HISTORIES!#REF!",wb.getNameAt(0).getRefersToFormula()); assertEquals("Reference for named range ", "LOAD.POD_HISTORIES!#REF!",wb.getNameAt(0).getRefersToFormula());
File outF = TempFile.createTempFile("bug27272_2",".xls"); 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"); System.out.println("Open "+outF.getAbsolutePath()+" in Excel");
} }
/** MissingArgPtg */ /** MissingArgPtg
public void testMissingArgPtg() { * @throws IOException */
public void testMissingArgPtg() throws IOException {
HSSFWorkbook wb = new HSSFWorkbook(); HSSFWorkbook wb = new HSSFWorkbook();
HSSFCell cell = wb.createSheet("Sheet1").createRow(4).createCell(0); try {
cell.setCellFormula("IF(A1=\"A\",1,)"); HSSFCell cell = wb.createSheet("Sheet1").createRow(4).createCell(0);
cell.setCellFormula("IF(A1=\"A\",1,)");
} finally {
wb.close();
}
} }
public void testSharedFormula() { public void testSharedFormula() {
@ -942,20 +966,25 @@ public final class TestFormulas extends TestCase {
/** /**
* Verify that FormulaParser handles defined names beginning with underscores, * Verify that FormulaParser handles defined names beginning with underscores,
* see Bug #49640 * see Bug #49640
* @throws IOException
*/ */
public void testFormulasWithUnderscore(){ public void testFormulasWithUnderscore() throws IOException{
HSSFWorkbook wb = new HSSFWorkbook(); HSSFWorkbook wb = new HSSFWorkbook();
Name nm1 = wb.createName(); try {
nm1.setNameName("_score1"); Name nm1 = wb.createName();
nm1.setRefersToFormula("A1"); nm1.setNameName("_score1");
nm1.setRefersToFormula("A1");
Name nm2 = wb.createName(); Name nm2 = wb.createName();
nm2.setNameName("_score2"); nm2.setNameName("_score2");
nm2.setRefersToFormula("A2"); nm2.setRefersToFormula("A2");
Sheet sheet = wb.createSheet(); Sheet sheet = wb.createSheet();
Cell cell = sheet.createRow(0).createCell(2); Cell cell = sheet.createRow(0).createCell(2);
cell.setCellFormula("_score1*SUM(_score1+_score2)"); cell.setCellFormula("_score1*SUM(_score1+_score2)");
assertEquals("_score1*SUM(_score1+_score2)", cell.getCellFormula()); assertEquals("_score1*SUM(_score1+_score2)", cell.getCellFormula());
} finally {
wb.close();
}
} }
} }

View File

@ -513,36 +513,40 @@ public final class TestDocumentInputStream extends TestCase {
DocumentInputStream stream; DocumentInputStream stream;
NPOIFSFileSystem npoifs = new NPOIFSFileSystem(sample); NPOIFSFileSystem npoifs = new NPOIFSFileSystem(sample);
POIFSFileSystem opoifs = new POIFSFileSystem(new FileInputStream(sample)); try {
POIFSFileSystem opoifs = new POIFSFileSystem(new FileInputStream(sample));
// Ensure we have what we expect on the root // Ensure we have what we expect on the root
assertEquals(npoifs, npoifs.getRoot().getNFileSystem()); assertEquals(npoifs, npoifs.getRoot().getNFileSystem());
assertEquals(null, npoifs.getRoot().getFileSystem()); assertEquals(null, npoifs.getRoot().getFileSystem());
assertEquals(opoifs, opoifs.getRoot().getFileSystem()); assertEquals(opoifs, opoifs.getRoot().getFileSystem());
assertEquals(null, opoifs.getRoot().getNFileSystem()); assertEquals(null, opoifs.getRoot().getNFileSystem());
// Check inside // Check inside
for(DirectoryNode root : new DirectoryNode[] { opoifs.getRoot(), npoifs.getRoot() }) { for(DirectoryNode root : new DirectoryNode[] { opoifs.getRoot(), npoifs.getRoot() }) {
// Top Level // Top Level
Entry top = root.getEntry("Contents"); Entry top = root.getEntry("Contents");
assertEquals(true, top.isDocumentEntry()); assertEquals(true, top.isDocumentEntry());
stream = root.createDocumentInputStream(top); stream = root.createDocumentInputStream(top);
stream.read(); stream.read();
// One Level Down // One Level Down
DirectoryNode escher = (DirectoryNode)root.getEntry("Escher"); DirectoryNode escher = (DirectoryNode)root.getEntry("Escher");
Entry one = escher.getEntry("EscherStm"); Entry one = escher.getEntry("EscherStm");
assertEquals(true, one.isDocumentEntry()); assertEquals(true, one.isDocumentEntry());
stream = escher.createDocumentInputStream(one); stream = escher.createDocumentInputStream(one);
stream.read(); stream.read();
// Two Levels Down // Two Levels Down
DirectoryNode quill = (DirectoryNode)root.getEntry("Quill"); DirectoryNode quill = (DirectoryNode)root.getEntry("Quill");
DirectoryNode quillSub = (DirectoryNode)quill.getEntry("QuillSub"); DirectoryNode quillSub = (DirectoryNode)quill.getEntry("QuillSub");
Entry two = quillSub.getEntry("CONTENTS"); Entry two = quillSub.getEntry("CONTENTS");
assertEquals(true, two.isDocumentEntry()); assertEquals(true, two.isDocumentEntry());
stream = quillSub.createDocumentInputStream(two); stream = quillSub.createDocumentInputStream(two);
stream.read(); stream.read();
}
} finally {
npoifs.close();
} }
} }
} }

View File

@ -18,6 +18,7 @@
package org.apache.poi.poifs.filesystem; package org.apache.poi.poifs.filesystem;
import junit.framework.TestCase; import junit.framework.TestCase;
import java.io.*; import java.io.*;
import org.apache.poi.hssf.HSSFTestDataSamples; import org.apache.poi.hssf.HSSFTestDataSamples;
@ -46,7 +47,7 @@ public class TestOffice2007XMLException extends TestCase {
} }
} }
public void testDetectAsPOIFS() { public void testDetectAsPOIFS() throws IOException {
// ooxml file isn't // ooxml file isn't
confirmIsPOIFS("SampleSS.xlsx", false); confirmIsPOIFS("SampleSS.xlsx", false);
@ -57,14 +58,18 @@ public class TestOffice2007XMLException extends TestCase {
// text file isn't // text file isn't
confirmIsPOIFS("SampleSS.txt", false); 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); InputStream in = new PushbackInputStream(openSampleStream(sampleFileName), 10);
boolean actualResult;
try { try {
actualResult = POIFSFileSystem.hasPOIFSHeader(in); boolean actualResult;
} catch (IOException e) { try {
throw new RuntimeException(e); actualResult = POIFSFileSystem.hasPOIFSHeader(in);
} catch (IOException e) {
throw new RuntimeException(e);
}
assertEquals(expectedResult, actualResult);
} finally {
in.close();
} }
assertEquals(expectedResult, actualResult);
} }
} }

View File

@ -163,16 +163,19 @@ public final class TestPOIFSFileSystem extends TestCase {
* sectors that exist in the file. * sectors that exist in the file.
*/ */
public void testFATandDIFATsectors() throws Exception { public void testFATandDIFATsectors() throws Exception {
// Open the file up // Open the file up
try { try {
POIFSFileSystem fs = new POIFSFileSystem( InputStream stream = _samples.openResourceAsStream("ReferencesInvalidSectors.mpp");
_samples.openResourceAsStream("ReferencesInvalidSectors.mpp") try {
); new POIFSFileSystem(stream);
fail("File is corrupt and shouldn't have been opened"); fail("File is corrupt and shouldn't have been opened");
} catch(IOException e) { } finally {
String msg = e.getMessage(); stream.close();
assertTrue(msg.startsWith("Your file contains 695 sectors")); }
} } catch (IOException e) {
String msg = e.getMessage();
assertTrue(msg.startsWith("Your file contains 695 sectors"));
}
} }
/** /**
@ -242,39 +245,40 @@ public final class TestPOIFSFileSystem extends TestCase {
* use 4k blocks. Check that we can open these. * use 4k blocks. Check that we can open these.
*/ */
public void test4KBlocks() throws Exception { public void test4KBlocks() throws Exception {
POIDataSamples _samples = POIDataSamples.getPOIFSInstance(); POIDataSamples _samples = POIDataSamples.getPOIFSInstance();
InputStream inp = _samples.openResourceAsStream("BlockSize4096.zvi"); 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());
// First up, check that we can process the header properly // Check the fat info looks sane
HeaderBlock header_block = new HeaderBlock(inp); assertEquals(1, header_block.getBATArray().length);
POIFSBigBlockSize bigBlockSize = header_block.getBigBlockSize(); assertEquals(1, header_block.getBATCount());
assertEquals(4096, bigBlockSize.getBigBlockSize()); assertEquals(0, header_block.getXBATCount());
// Check the fat info looks sane // Now check we can get the basic fat
assertEquals(1, header_block.getBATArray().length); RawDataBlockList data_blocks = new RawDataBlockList(inp,
assertEquals(1, header_block.getBATCount()); bigBlockSize);
assertEquals(0, header_block.getXBATCount()); assertEquals(15, data_blocks.blockCount());
// Now check we can get the basic fat // Now try and open properly
RawDataBlockList data_blocks = new RawDataBlockList(inp, bigBlockSize); POIFSFileSystem fs = new POIFSFileSystem(
_samples.openResourceAsStream("BlockSize4096.zvi"));
assertTrue(fs.getRoot().getEntryCount() > 3);
// Check we can get at all the contents
checkAllDirectoryContents(fs.getRoot());
// Now try and open properly // Finally, check we can do a similar 512byte one too
POIFSFileSystem fs = new POIFSFileSystem( fs = new POIFSFileSystem(
_samples.openResourceAsStream("BlockSize4096.zvi") _samples.openResourceAsStream("BlockSize512.zvi"));
); assertTrue(fs.getRoot().getEntryCount() > 3);
assertTrue(fs.getRoot().getEntryCount() > 3); checkAllDirectoryContents(fs.getRoot());
} finally {
// Check we can get at all the contents inp.close();
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());
} }
private void checkAllDirectoryContents(DirectoryEntry dir) throws IOException { private void checkAllDirectoryContents(DirectoryEntry dir) throws IOException {
for(Entry entry : dir) { for(Entry entry : dir) {
@ -283,9 +287,13 @@ public final class TestPOIFSFileSystem extends TestCase {
} else { } else {
DocumentNode doc = (DocumentNode) entry; DocumentNode doc = (DocumentNode) entry;
DocumentInputStream dis = new DocumentInputStream(doc); DocumentInputStream dis = new DocumentInputStream(doc);
int numBytes = dis.available(); try {
byte[] data = new byte [numBytes]; int numBytes = dis.available();
dis.read(data); byte[] data = new byte [numBytes];
dis.read(data);
} finally {
dis.close();
}
} }
} }
} }

View File

@ -38,44 +38,48 @@ public class TestDataSource extends TestCase
File f = data.getFile("Notes.ole2"); File f = data.getFile("Notes.ole2");
FileBackedDataSource ds = new FileBackedDataSource(f); 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 { try {
bs = ds.read(4, 8192); assertEquals(8192, ds.size());
fail("Shouldn't be able to read off the end of the file");
} catch(IllegalArgumentException e) {} // 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 { public void testByteArray() throws Exception {

View File

@ -24,6 +24,9 @@ import static org.junit.Assert.assertNull;
import static org.junit.Assert.assertSame; import static org.junit.Assert.assertSame;
import static org.junit.Assert.assertTrue; import static org.junit.Assert.assertTrue;
import static org.junit.Assert.fail; import static org.junit.Assert.fail;
import java.io.IOException;
import junit.framework.AssertionFailedError; import junit.framework.AssertionFailedError;
import org.apache.poi.ss.ITestDataProvider; import org.apache.poi.ss.ITestDataProvider;
@ -186,51 +189,55 @@ public abstract class BaseTestWorkbook {
} }
@Test @Test
public void removeSheetAt() { public void removeSheetAt() throws IOException {
Workbook workbook = _testDataProvider.createWorkbook(); Workbook workbook = _testDataProvider.createWorkbook();
workbook.createSheet("sheet1"); try {
workbook.createSheet("sheet2"); workbook.createSheet("sheet1");
workbook.createSheet("sheet3"); workbook.createSheet("sheet2");
assertEquals(3, workbook.getNumberOfSheets()); workbook.createSheet("sheet3");
assertEquals(3, workbook.getNumberOfSheets());
assertEquals(0, workbook.getActiveSheetIndex()); assertEquals(0, workbook.getActiveSheetIndex());
workbook.removeSheetAt(1); workbook.removeSheetAt(1);
assertEquals(2, workbook.getNumberOfSheets()); assertEquals(2, workbook.getNumberOfSheets());
assertEquals("sheet3", workbook.getSheetName(1)); assertEquals("sheet3", workbook.getSheetName(1));
assertEquals(0, workbook.getActiveSheetIndex()); assertEquals(0, workbook.getActiveSheetIndex());
workbook.removeSheetAt(0); workbook.removeSheetAt(0);
assertEquals(1, workbook.getNumberOfSheets()); assertEquals(1, workbook.getNumberOfSheets());
assertEquals("sheet3", workbook.getSheetName(0)); assertEquals("sheet3", workbook.getSheetName(0));
assertEquals(0, workbook.getActiveSheetIndex()); assertEquals(0, workbook.getActiveSheetIndex());
workbook.removeSheetAt(0); workbook.removeSheetAt(0);
assertEquals(0, workbook.getNumberOfSheets()); assertEquals(0, workbook.getNumberOfSheets());
assertEquals(0, workbook.getActiveSheetIndex()); assertEquals(0, workbook.getActiveSheetIndex());
//re-create the sheets //re-create the sheets
workbook.createSheet("sheet1"); workbook.createSheet("sheet1");
workbook.createSheet("sheet2"); workbook.createSheet("sheet2");
workbook.createSheet("sheet3"); workbook.createSheet("sheet3");
workbook.createSheet("sheet4"); workbook.createSheet("sheet4");
assertEquals(4, workbook.getNumberOfSheets()); assertEquals(4, workbook.getNumberOfSheets());
assertEquals(0, workbook.getActiveSheetIndex()); assertEquals(0, workbook.getActiveSheetIndex());
workbook.setActiveSheet(2); workbook.setActiveSheet(2);
assertEquals(2, workbook.getActiveSheetIndex()); assertEquals(2, workbook.getActiveSheetIndex());
workbook.removeSheetAt(2); workbook.removeSheetAt(2);
assertEquals(2, workbook.getActiveSheetIndex()); assertEquals(2, workbook.getActiveSheetIndex());
workbook.removeSheetAt(1); workbook.removeSheetAt(1);
assertEquals(1, workbook.getActiveSheetIndex()); assertEquals(1, workbook.getActiveSheetIndex());
workbook.removeSheetAt(0); workbook.removeSheetAt(0);
assertEquals(0, workbook.getActiveSheetIndex()); assertEquals(0, workbook.getActiveSheetIndex());
workbook.removeSheetAt(0); workbook.removeSheetAt(0);
assertEquals(0, workbook.getActiveSheetIndex()); assertEquals(0, workbook.getActiveSheetIndex());
} finally {
workbook.close();
}
} }
@Test @Test