public class TestDetectAsOOXML {
@Test
public void testOpensProperly() throws IOException, InvalidFormatException {
- OPCPackage.open(HSSFTestDataSamples.openSampleFileStream("sample.xlsx"));
+ OPCPackage.open(HSSFTestDataSamples.openSampleFileStream("sample.xlsx")).close();
}
@Test
byte[] b = IOUtils.toByteArray(pp.getInputStream());
assertTrue(b.length > 0);
}
+
+ doc.close();
}
}
/**
* List all parts of a package.
*/
- public void testListParts() throws InvalidFormatException {
+ public void testListParts() throws InvalidFormatException, IOException {
InputStream is = OpenXML4JTestDataSamples.openSampleStream("sample.docx");
- OPCPackage p;
- try {
- p = OPCPackage.open(is);
- } catch (IOException e) {
- throw new RuntimeException(e);
- }
+ OPCPackage p = OPCPackage.open(is);
for (PackagePart part : p.getParts()) {
values.put(part.getPartName(), part.getContentType());
logger.log(POILogger.DEBUG, part.getPartName());
assertNotNull(values.get(partName));
assertEquals(expectedValues.get(partName), values.get(partName));
}
+
+ p.close();
}
}
import org.apache.poi.openxml4j.OpenXML4JTestDataSamples;
import org.apache.poi.util.POILogFactory;
import org.apache.poi.util.POILogger;
-import org.apache.poi.xwpf.usermodel.XWPFRelation;
public class TestRelationships extends TestCase {
*/
public void testLoadRelationships() throws Exception {
InputStream is = OpenXML4JTestDataSamples.openSampleStream("sample.xlsx");
- OPCPackage pkg = OPCPackage.open(is);
- logger.log(POILogger.DEBUG, "1: " + pkg);
- PackageRelationshipCollection rels = pkg.getRelationshipsByType(PackageRelationshipTypes.CORE_DOCUMENT);
- PackageRelationship coreDocRelationship = rels.getRelationship(0);
- PackagePart corePart = pkg.getPart(coreDocRelationship);
- String[] relIds = {"rId1", "rId2", "rId3"};
- for (String relId : relIds) {
- PackageRelationship rel = corePart.getRelationship(relId);
- assertNotNull(rel);
- PackagePartName relName = PackagingURIHelper.createPartName(rel.getTargetURI());
- PackagePart sheetPart = pkg.getPart(relName);
- assertEquals("Number of relationships1 for " + sheetPart.getPartName(), 1, sheetPart.getRelationships().size());
+ try (OPCPackage pkg = OPCPackage.open(is)) {
+ logger.log(POILogger.DEBUG, "1: " + pkg);
+ PackageRelationshipCollection rels = pkg.getRelationshipsByType(PackageRelationshipTypes.CORE_DOCUMENT);
+ PackageRelationship coreDocRelationship = rels.getRelationship(0);
+ PackagePart corePart = pkg.getPart(coreDocRelationship);
+ String[] relIds = {"rId1", "rId2", "rId3"};
+ for (String relId : relIds) {
+ PackageRelationship rel = corePart.getRelationship(relId);
+ assertNotNull(rel);
+ PackagePartName relName = PackagingURIHelper.createPartName(rel.getTargetURI());
+ PackagePart sheetPart = pkg.getPart(relName);
+ assertEquals("Number of relationships1 for " + sheetPart.getPartName(), 1, sheetPart.getRelationships().size());
+ }
}
}
*/
public void testFetchFromCollection() throws Exception {
InputStream is = OpenXML4JTestDataSamples.openSampleStream("ExcelWithHyperlinks.xlsx");
- OPCPackage pkg = OPCPackage.open(is);
- PackagePart sheet = pkg.getPart(
- PackagingURIHelper.createPartName(SHEET_WITH_COMMENTS));
- assertNotNull(sheet);
-
- assertTrue(sheet.hasRelationships());
- assertEquals(6, sheet.getRelationships().size());
-
- // Should have three hyperlinks, and one comment
- PackageRelationshipCollection hyperlinks =
- sheet.getRelationshipsByType(HYPERLINK_REL_TYPE);
- PackageRelationshipCollection comments =
- sheet.getRelationshipsByType(COMMENTS_REL_TYPE);
- assertEquals(3, hyperlinks.size());
- assertEquals(1, comments.size());
-
- // Check we can get bits out by id
- // Hyperlinks are rId1, rId2 and rId3
- // Comment is rId6
- assertNotNull(hyperlinks.getRelationshipByID("rId1"));
- assertNotNull(hyperlinks.getRelationshipByID("rId2"));
- assertNotNull(hyperlinks.getRelationshipByID("rId3"));
- assertNull(hyperlinks.getRelationshipByID("rId6"));
-
- assertNull(comments.getRelationshipByID("rId1"));
- assertNull(comments.getRelationshipByID("rId2"));
- assertNull(comments.getRelationshipByID("rId3"));
- assertNotNull(comments.getRelationshipByID("rId6"));
-
- assertNotNull(sheet.getRelationship("rId1"));
- assertNotNull(sheet.getRelationship("rId2"));
- assertNotNull(sheet.getRelationship("rId3"));
- assertNotNull(sheet.getRelationship("rId6"));
+ try (OPCPackage pkg = OPCPackage.open(is)) {
+ PackagePart sheet = pkg.getPart(
+ PackagingURIHelper.createPartName(SHEET_WITH_COMMENTS));
+ assertNotNull(sheet);
+
+ assertTrue(sheet.hasRelationships());
+ assertEquals(6, sheet.getRelationships().size());
+
+ // Should have three hyperlinks, and one comment
+ PackageRelationshipCollection hyperlinks =
+ sheet.getRelationshipsByType(HYPERLINK_REL_TYPE);
+ PackageRelationshipCollection comments =
+ sheet.getRelationshipsByType(COMMENTS_REL_TYPE);
+ assertEquals(3, hyperlinks.size());
+ assertEquals(1, comments.size());
+
+ // Check we can get bits out by id
+ // Hyperlinks are rId1, rId2 and rId3
+ // Comment is rId6
+ assertNotNull(hyperlinks.getRelationshipByID("rId1"));
+ assertNotNull(hyperlinks.getRelationshipByID("rId2"));
+ assertNotNull(hyperlinks.getRelationshipByID("rId3"));
+ assertNull(hyperlinks.getRelationshipByID("rId6"));
+
+ assertNull(comments.getRelationshipByID("rId1"));
+ assertNull(comments.getRelationshipByID("rId2"));
+ assertNull(comments.getRelationshipByID("rId3"));
+ assertNotNull(comments.getRelationshipByID("rId6"));
+
+ assertNotNull(sheet.getRelationship("rId1"));
+ assertNotNull(sheet.getRelationship("rId2"));
+ assertNotNull(sheet.getRelationship("rId3"));
+ assertNotNull(sheet.getRelationship("rId6"));
+ }
}
/**
*/
public void testLoadExcelHyperlinkRelations() throws Exception {
InputStream is = OpenXML4JTestDataSamples.openSampleStream("ExcelWithHyperlinks.xlsx");
- OPCPackage pkg = OPCPackage.open(is);
- PackagePart sheet = pkg.getPart(
- PackagingURIHelper.createPartName(SHEET_WITH_COMMENTS));
- assertNotNull(sheet);
-
- // rId1 is url
- PackageRelationship url = sheet.getRelationship("rId1");
- assertNotNull(url);
- assertEquals("rId1", url.getId());
- assertEquals("/xl/worksheets/sheet1.xml", url.getSourceURI().toString());
- assertEquals("http://poi.apache.org/", url.getTargetURI().toString());
-
- // rId2 is file
- PackageRelationship file = sheet.getRelationship("rId2");
- assertNotNull(file);
- assertEquals("rId2", file.getId());
- assertEquals("/xl/worksheets/sheet1.xml", file.getSourceURI().toString());
- assertEquals("WithVariousData.xlsx", file.getTargetURI().toString());
-
- // rId3 is mailto
- PackageRelationship mailto = sheet.getRelationship("rId3");
- assertNotNull(mailto);
- assertEquals("rId3", mailto.getId());
- assertEquals("/xl/worksheets/sheet1.xml", mailto.getSourceURI().toString());
- assertEquals("mailto:dev@poi.apache.org?subject=XSSF%20Hyperlinks", mailto.getTargetURI().toString());
+ try (OPCPackage pkg = OPCPackage.open(is)) {
+ PackagePart sheet = pkg.getPart(
+ PackagingURIHelper.createPartName(SHEET_WITH_COMMENTS));
+ assertNotNull(sheet);
+
+ // rId1 is url
+ PackageRelationship url = sheet.getRelationship("rId1");
+ assertNotNull(url);
+ assertEquals("rId1", url.getId());
+ assertEquals("/xl/worksheets/sheet1.xml", url.getSourceURI().toString());
+ assertEquals("http://poi.apache.org/", url.getTargetURI().toString());
+
+ // rId2 is file
+ PackageRelationship file = sheet.getRelationship("rId2");
+ assertNotNull(file);
+ assertEquals("rId2", file.getId());
+ assertEquals("/xl/worksheets/sheet1.xml", file.getSourceURI().toString());
+ assertEquals("WithVariousData.xlsx", file.getTargetURI().toString());
+
+ // rId3 is mailto
+ PackageRelationship mailto = sheet.getRelationship("rId3");
+ assertNotNull(mailto);
+ assertEquals("rId3", mailto.getId());
+ assertEquals("/xl/worksheets/sheet1.xml", mailto.getSourceURI().toString());
+ assertEquals("mailto:dev@poi.apache.org?subject=XSSF%20Hyperlinks", mailto.getTargetURI().toString());
+ }
}
/*
}
public void testCreateRelationsFromScratch() throws Exception {
- ByteArrayOutputStream baos = new ByteArrayOutputStream();
- OPCPackage pkg = OPCPackage.create(baos);
-
- PackagePart partA =
- pkg.createPart(PackagingURIHelper.createPartName("/partA"), "text/plain");
- PackagePart partB =
- pkg.createPart(PackagingURIHelper.createPartName("/partB"), "image/png");
- assertNotNull(partA);
- assertNotNull(partB);
-
- // Internal
- partA.addRelationship(partB.getPartName(), TargetMode.INTERNAL, "http://example/Rel");
-
- // External
- partA.addExternalRelationship("http://poi.apache.org/", "http://example/poi");
- partB.addExternalRelationship("http://poi.apache.org/ss/", "http://example/poi/ss");
-
- // Check as expected currently
- assertEquals("/partB", partA.getRelationship("rId1").getTargetURI().toString());
- assertEquals("http://poi.apache.org/",
- partA.getRelationship("rId2").getTargetURI().toString());
- assertEquals("http://poi.apache.org/ss/",
- partB.getRelationship("rId1").getTargetURI().toString());
-
-
- // Save, and re-load
- pkg.close();
- ByteArrayInputStream bais = new ByteArrayInputStream(baos.toByteArray());
- pkg = OPCPackage.open(bais);
-
- partA = pkg.getPart(PackagingURIHelper.createPartName("/partA"));
- partB = pkg.getPart(PackagingURIHelper.createPartName("/partB"));
-
-
- // Check the relations
- assertEquals(2, partA.getRelationships().size());
- assertEquals(1, partB.getRelationships().size());
-
- assertEquals("/partB", partA.getRelationship("rId1").getTargetURI().toString());
- assertEquals("http://poi.apache.org/",
- partA.getRelationship("rId2").getTargetURI().toString());
- assertEquals("http://poi.apache.org/ss/",
- partB.getRelationship("rId1").getTargetURI().toString());
- // Check core too
- assertEquals("/docProps/core.xml",
- pkg.getRelationshipsByType(PackageRelationshipTypes.CORE_PROPERTIES).getRelationship(0).getTargetURI().toString());
-
-
- // Add some more
- partB.addExternalRelationship("http://poi.apache.org/new", "http://example/poi/new");
- partB.addExternalRelationship("http://poi.apache.org/alt", "http://example/poi/alt");
-
- // Check the relations
- assertEquals(2, partA.getRelationships().size());
- assertEquals(3, partB.getRelationships().size());
-
- assertEquals("/partB", partA.getRelationship("rId1").getTargetURI().toString());
- assertEquals("http://poi.apache.org/",
+ ByteArrayOutputStream baos = new ByteArrayOutputStream();
+ OPCPackage pkg = OPCPackage.create(baos);
+
+ PackagePart partA =
+ pkg.createPart(PackagingURIHelper.createPartName("/partA"), "text/plain");
+ PackagePart partB =
+ pkg.createPart(PackagingURIHelper.createPartName("/partB"), "image/png");
+ assertNotNull(partA);
+ assertNotNull(partB);
+
+ // Internal
+ partA.addRelationship(partB.getPartName(), TargetMode.INTERNAL, "http://example/Rel");
+
+ // External
+ partA.addExternalRelationship("http://poi.apache.org/", "http://example/poi");
+ partB.addExternalRelationship("http://poi.apache.org/ss/", "http://example/poi/ss");
+
+ // Check as expected currently
+ assertEquals("/partB", partA.getRelationship("rId1").getTargetURI().toString());
+ assertEquals("http://poi.apache.org/",
+ partA.getRelationship("rId2").getTargetURI().toString());
+ assertEquals("http://poi.apache.org/ss/",
+ partB.getRelationship("rId1").getTargetURI().toString());
+
+
+ // Save, and re-load
+ pkg.close();
+ ByteArrayInputStream bais = new ByteArrayInputStream(baos.toByteArray());
+ pkg = OPCPackage.open(bais);
+
+ partA = pkg.getPart(PackagingURIHelper.createPartName("/partA"));
+ partB = pkg.getPart(PackagingURIHelper.createPartName("/partB"));
+
+
+ // Check the relations
+ assertEquals(2, partA.getRelationships().size());
+ assertEquals(1, partB.getRelationships().size());
+
+ assertEquals("/partB", partA.getRelationship("rId1").getTargetURI().toString());
+ assertEquals("http://poi.apache.org/",
+ partA.getRelationship("rId2").getTargetURI().toString());
+ assertEquals("http://poi.apache.org/ss/",
+ partB.getRelationship("rId1").getTargetURI().toString());
+ // Check core too
+ PackageRelationship relationship = pkg.getRelationshipsByType(PackageRelationshipTypes.CORE_PROPERTIES).getRelationship(0);
+ assertNotNull(relationship);
+ assertEquals("/docProps/core.xml", relationship.getTargetURI().toString());
+
+ // Add some more
+ partB.addExternalRelationship("http://poi.apache.org/new", "http://example/poi/new");
+ partB.addExternalRelationship("http://poi.apache.org/alt", "http://example/poi/alt");
+
+ // Check the relations
+ assertEquals(2, partA.getRelationships().size());
+ assertEquals(3, partB.getRelationships().size());
+
+ assertEquals("/partB", partA.getRelationship("rId1").getTargetURI().toString());
+ assertEquals("http://poi.apache.org/",
partA.getRelationship("rId2").getTargetURI().toString());
- assertEquals("http://poi.apache.org/ss/",
+ assertEquals("http://poi.apache.org/ss/",
partB.getRelationship("rId1").getTargetURI().toString());
- assertEquals("http://poi.apache.org/new",
+ assertEquals("http://poi.apache.org/new",
partB.getRelationship("rId2").getTargetURI().toString());
- assertEquals("http://poi.apache.org/alt",
+ assertEquals("http://poi.apache.org/alt",
partB.getRelationship("rId3").getTargetURI().toString());
}
-
public void testTargetWithSpecialChars() throws Exception{
OPCPackage pkg;
PackageRelationship rel2 = partA.getRelationships().getRelationship(0);
- assertEquals(rel1.getRelationshipType(), rel2.getRelationshipType());
+ assertNotNull(rel2);
+ assertEquals(rel1.getRelationshipType(), rel2.getRelationshipType());
assertEquals(rel1.getId(), rel2.getId());
assertEquals(rel1.getSourceURI(), rel2.getSourceURI());
assertEquals(rel1.getTargetURI(), rel2.getTargetURI());
// We will use the first core properties, and ignore the others
InputStream is = OpenXML4JTestDataSamples.openSampleStream("MultipleCoreProperties.docx");
- OPCPackage pkg = OPCPackage.open(is);
-
- // We can see 2 by type
- assertEquals(2, pkg.getPartsByContentType(ContentTypes.CORE_PROPERTIES_PART).size());
- // But only the first one by relationship
- assertEquals(1, pkg.getPartsByRelationshipType(PackageRelationshipTypes.CORE_PROPERTIES).size());
- // It should be core.xml not the older core1.xml
- assertEquals(
- "/docProps/core.xml",
- pkg.getPartsByRelationshipType(PackageRelationshipTypes.CORE_PROPERTIES).get(0).getPartName().toString()
- );
+ try (OPCPackage pkg = OPCPackage.open(is)) {
+
+ // We can see 2 by type
+ assertEquals(2, pkg.getPartsByContentType(ContentTypes.CORE_PROPERTIES_PART).size());
+ // But only the first one by relationship
+ assertEquals(1, pkg.getPartsByRelationshipType(PackageRelationshipTypes.CORE_PROPERTIES).size());
+ // It should be core.xml not the older core1.xml
+ assertEquals(
+ "/docProps/core.xml",
+ pkg.getPartsByRelationshipType(PackageRelationshipTypes.CORE_PROPERTIES).get(0).getPartName().toString()
+ );
+ }
}
private static URI createURI(String text) {
import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertTrue;
+import java.io.IOException;
import java.util.Locale;
import java.util.TimeZone;
import java.util.regex.Matcher;
import org.apache.poi.hssf.util.HSSFColor;
import org.apache.poi.ss.usermodel.Cell;
+import org.apache.poi.ss.usermodel.CellType;
import org.apache.poi.util.LocaleUtil;
import org.apache.poi.xssf.XSSFITestDataProvider;
import org.junit.AfterClass;
}
@Test
- public void testGeneralFormat() {
+ public void testGeneralFormat() throws IOException {
runFormatTests("GeneralFormatTests.xlsx", new CellValue() {
@Override
public Object getValue(Cell cell) {
}
@Test
- public void testNumberFormat() {
+ public void testNumberFormat() throws IOException {
runFormatTests("NumberFormatTests.xlsx", new CellValue() {
@Override
public Object getValue(Cell cell) {
}
@Test
- public void testNumberApproxFormat() {
+ public void testNumberApproxFormat() throws IOException {
runFormatTests("NumberFormatApproxTests.xlsx", new CellValue() {
@Override
public Object getValue(Cell cell) {
}
@Test
- public void testDateFormat() {
+ public void testDateFormat() throws IOException {
TimeZone tz = LocaleUtil.getUserTimeZone();
LocaleUtil.setUserTimeZone(TimeZone.getTimeZone("CET"));
try {
}
@Test
- public void testElapsedFormat() {
+ public void testElapsedFormat() throws IOException {
runFormatTests("ElapsedFormatTests.xlsx", new CellValue() {
@Override
public Object getValue(Cell cell) {
}
@Test
- public void testTextFormat() {
+ public void testTextFormat() throws IOException {
runFormatTests("TextFormatTests.xlsx", new CellValue() {
@Override
public Object getValue(Cell cell) {
- switch(CellFormat.ultimateType(cell)) {
- case BOOLEAN:
- return cell.getBooleanCellValue();
- default:
- return cell.getStringCellValue();
+ if (CellFormat.ultimateType(cell) == CellType.BOOLEAN) {
+ return cell.getBooleanCellValue();
}
+ return cell.getStringCellValue();
}
});
}
@Test
- public void testConditions() {
+ public void testConditions() throws IOException {
runFormatTests("FormatConditionTests.xlsx", new CellValue() {
@Override
Object getValue(Cell cell) {
import org.apache.poi.xssf.XSSFTestDataSamples;
import org.junit.Test;
+import java.io.IOException;
+
/**
*
*/
* handle null cell predicate
*/
@Test
- public void testBug60858() {
- Workbook wb = XSSFTestDataSamples.openSampleWorkbook("bug60858.xlsx");
- FormulaEvaluator fe = wb.getCreationHelper().createFormulaEvaluator();
-
- Sheet sheet = wb.getSheetAt(0);
- Cell cell = sheet.getRow(1).getCell(5);
- fe.evaluate(cell);
- assertEquals(0.0, cell.getNumericCellValue(), 0.0000000000000001);
+ public void testBug60858() throws IOException {
+ try (Workbook wb = XSSFTestDataSamples.openSampleWorkbook("bug60858.xlsx")) {
+ FormulaEvaluator fe = wb.getCreationHelper().createFormulaEvaluator();
+
+ Sheet sheet = wb.getSheetAt(0);
+ Cell cell = sheet.getRow(1).getCell(5);
+ fe.evaluate(cell);
+ assertEquals(0.0, cell.getNumericCellValue(), 0.0000000000000001);
+ }
}
}
import org.apache.poi.xssf.usermodel.XSSFRangeCopier;
import org.apache.poi.xssf.usermodel.XSSFRow;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
+import org.junit.After;
import org.junit.Before;
import org.junit.Test;
+import java.io.IOException;
+
public class TestXSSFRangeCopier extends TestRangeCopier {
public TestXSSFRangeCopier() {
super();
transSheetRangeCopier = new XSSFRangeCopier(sheet1, sheet2);
}
+ @After
+ public void shutdown() throws IOException {
+ workbook.close();
+ }
+
@Test // XSSF only. HSSF version wouldn't be so simple. And also this test is contained in following, more complex tests, so it's not really important.
public void copyRow() {
Row existingRow = sheet1.getRow(4);
import org.apache.poi.xslf.usermodel.XSLFSlide;
import org.apache.poi.xslf.usermodel.XSLFSlideShow;
import org.apache.xmlbeans.XmlException;
+import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import org.openxmlformats.schemas.officeDocument.x2006.extendedProperties.CTProperties;
pack = OPCPackage.open(slTests.openResourceAsStream("sample.pptx"));
}
+ @After
+ public void tearDown() throws IOException {
+ pack.close();
+ }
+
@Test
public void testContainsMainContentType() throws Exception {
boolean found = false;
==================================================================== */
package org.apache.poi.xssf;
-import junit.framework.TestCase;
-
import org.apache.poi.xssf.usermodel.XSSFSheet;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
+import org.junit.After;
+import org.junit.Before;
+import org.junit.Test;
+
+import java.io.IOException;
+
+import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertTrue;
-public class TestSheetProtection extends TestCase {
+public class TestSheetProtection {
+ private XSSFWorkbook workbook;
private XSSFSheet sheet;
- @Override
- protected void setUp() throws Exception {
- XSSFWorkbook workbook = XSSFTestDataSamples.openSampleWorkbook("sheetProtection_not_protected.xlsx");
+ @Before
+ public void setUp() {
+ workbook = XSSFTestDataSamples.openSampleWorkbook("sheetProtection_not_protected.xlsx");
sheet = workbook.getSheetAt(0);
}
-
- public void testShouldReadWorkbookProtection() throws Exception {
+
+ @After
+ public void tearDown() throws IOException {
+ workbook.close();
+ }
+
+ @Test
+ public void testShouldReadWorkbookProtection() throws IOException {
assertFalse(sheet.isAutoFilterLocked());
assertFalse(sheet.isDeleteColumnsLocked());
assertFalse(sheet.isDeleteRowsLocked());
assertFalse(sheet.isSelectUnlockedCellsLocked());
assertFalse(sheet.isSheetLocked());
- sheet = XSSFTestDataSamples.openSampleWorkbook("sheetProtection_allLocked.xlsx").getSheetAt(0);
+ try (XSSFWorkbook workbook = XSSFTestDataSamples.openSampleWorkbook("sheetProtection_allLocked.xlsx")) {
+ sheet = workbook.getSheetAt(0);
- assertTrue(sheet.isAutoFilterLocked());
- assertTrue(sheet.isDeleteColumnsLocked());
- assertTrue(sheet.isDeleteRowsLocked());
- assertTrue(sheet.isFormatCellsLocked());
- assertTrue(sheet.isFormatColumnsLocked());
- assertTrue(sheet.isFormatRowsLocked());
- assertTrue(sheet.isInsertColumnsLocked());
- assertTrue(sheet.isInsertHyperlinksLocked());
- assertTrue(sheet.isInsertRowsLocked());
- assertTrue(sheet.isPivotTablesLocked());
- assertTrue(sheet.isSortLocked());
- assertTrue(sheet.isObjectsLocked());
- assertTrue(sheet.isScenariosLocked());
- assertTrue(sheet.isSelectLockedCellsLocked());
- assertTrue(sheet.isSelectUnlockedCellsLocked());
- assertTrue(sheet.isSheetLocked());
+ assertTrue(sheet.isAutoFilterLocked());
+ assertTrue(sheet.isDeleteColumnsLocked());
+ assertTrue(sheet.isDeleteRowsLocked());
+ assertTrue(sheet.isFormatCellsLocked());
+ assertTrue(sheet.isFormatColumnsLocked());
+ assertTrue(sheet.isFormatRowsLocked());
+ assertTrue(sheet.isInsertColumnsLocked());
+ assertTrue(sheet.isInsertHyperlinksLocked());
+ assertTrue(sheet.isInsertRowsLocked());
+ assertTrue(sheet.isPivotTablesLocked());
+ assertTrue(sheet.isSortLocked());
+ assertTrue(sheet.isObjectsLocked());
+ assertTrue(sheet.isScenariosLocked());
+ assertTrue(sheet.isSelectLockedCellsLocked());
+ assertTrue(sheet.isSelectUnlockedCellsLocked());
+ assertTrue(sheet.isSheetLocked());
+ }
}
-
- public void testWriteAutoFilter() throws Exception {
+
+ @Test
+ public void testWriteAutoFilter() {
assertFalse(sheet.isAutoFilterLocked());
sheet.lockAutoFilter(true);
assertFalse(sheet.isAutoFilterLocked());
sheet.lockAutoFilter(false);
assertFalse(sheet.isAutoFilterLocked());
}
-
- public void testWriteDeleteColumns() throws Exception {
+
+ @Test
+ public void testWriteDeleteColumns() {
assertFalse(sheet.isDeleteColumnsLocked());
sheet.lockDeleteColumns(true);
assertFalse(sheet.isDeleteColumnsLocked());
sheet.lockDeleteColumns(false);
assertFalse(sheet.isDeleteColumnsLocked());
}
-
- public void testWriteDeleteRows() throws Exception {
+
+ @Test
+ public void testWriteDeleteRows() {
assertFalse(sheet.isDeleteRowsLocked());
sheet.lockDeleteRows(true);
assertFalse(sheet.isDeleteRowsLocked());
sheet.lockDeleteRows(false);
assertFalse(sheet.isDeleteRowsLocked());
}
-
- public void testWriteFormatCells() throws Exception {
+
+ @Test
+ public void testWriteFormatCells() {
assertFalse(sheet.isFormatCellsLocked());
sheet.lockFormatCells(true);
assertFalse(sheet.isFormatCellsLocked());
sheet.lockFormatCells(false);
assertFalse(sheet.isFormatCellsLocked());
}
-
- public void testWriteFormatColumns() throws Exception {
+
+ @Test
+ public void testWriteFormatColumns() {
assertFalse(sheet.isFormatColumnsLocked());
sheet.lockFormatColumns(true);
assertFalse(sheet.isFormatColumnsLocked());
sheet.lockFormatColumns(false);
assertFalse(sheet.isFormatColumnsLocked());
}
-
- public void testWriteFormatRows() throws Exception {
+
+ @Test
+ public void testWriteFormatRows() {
assertFalse(sheet.isFormatRowsLocked());
sheet.lockFormatRows(true);
assertFalse(sheet.isFormatRowsLocked());
sheet.lockFormatRows(false);
assertFalse(sheet.isFormatRowsLocked());
}
-
- public void testWriteInsertColumns() throws Exception {
+
+ @Test
+ public void testWriteInsertColumns() {
assertFalse(sheet.isInsertColumnsLocked());
sheet.lockInsertColumns(true);
assertFalse(sheet.isInsertColumnsLocked());
sheet.lockInsertColumns(false);
assertFalse(sheet.isInsertColumnsLocked());
}
-
- public void testWriteInsertHyperlinks() throws Exception {
+
+ @Test
+ public void testWriteInsertHyperlinks() {
assertFalse(sheet.isInsertHyperlinksLocked());
sheet.lockInsertHyperlinks(true);
assertFalse(sheet.isInsertHyperlinksLocked());
sheet.lockInsertHyperlinks(false);
assertFalse(sheet.isInsertHyperlinksLocked());
}
-
- public void testWriteInsertRows() throws Exception {
+
+ @Test
+ public void testWriteInsertRows() {
assertFalse(sheet.isInsertRowsLocked());
sheet.lockInsertRows(true);
assertFalse(sheet.isInsertRowsLocked());
sheet.lockInsertRows(false);
assertFalse(sheet.isInsertRowsLocked());
}
-
- public void testWritePivotTables() throws Exception {
+
+ @Test
+ public void testWritePivotTables() {
assertFalse(sheet.isPivotTablesLocked());
sheet.lockPivotTables(true);
assertFalse(sheet.isPivotTablesLocked());
sheet.lockPivotTables(false);
assertFalse(sheet.isPivotTablesLocked());
}
-
- public void testWriteSort() throws Exception {
+
+ @Test
+ public void testWriteSort() {
assertFalse(sheet.isSortLocked());
sheet.lockSort(true);
assertFalse(sheet.isSortLocked());
sheet.lockSort(false);
assertFalse(sheet.isSortLocked());
}
-
- public void testWriteObjects() throws Exception {
+
+ @Test
+ public void testWriteObjects() {
assertFalse(sheet.isObjectsLocked());
sheet.lockObjects(true);
assertFalse(sheet.isObjectsLocked());
sheet.lockObjects(false);
assertFalse(sheet.isObjectsLocked());
}
-
- public void testWriteScenarios() throws Exception {
+
+ @Test
+ public void testWriteScenarios() {
assertFalse(sheet.isScenariosLocked());
sheet.lockScenarios(true);
assertFalse(sheet.isScenariosLocked());
sheet.lockScenarios(false);
assertFalse(sheet.isScenariosLocked());
}
-
- public void testWriteSelectLockedCells() throws Exception {
+
+ @Test
+ public void testWriteSelectLockedCells() {
assertFalse(sheet.isSelectLockedCellsLocked());
sheet.lockSelectLockedCells(true);
assertFalse(sheet.isSelectLockedCellsLocked());
sheet.lockSelectLockedCells(false);
assertFalse(sheet.isSelectLockedCellsLocked());
}
-
- public void testWriteSelectUnlockedCells() throws Exception {
+
+ @Test
+ public void testWriteSelectUnlockedCells() {
assertFalse(sheet.isSelectUnlockedCellsLocked());
sheet.lockSelectUnlockedCells(true);
assertFalse(sheet.isSelectUnlockedCellsLocked());
assertFalse(sheet.isSelectUnlockedCellsLocked());
}
- public void testWriteSelectEnableLocking() throws Exception {
- sheet = XSSFTestDataSamples.openSampleWorkbook("sheetProtection_allLocked.xlsx").getSheetAt(0);
-
- assertTrue(sheet.isAutoFilterLocked());
- assertTrue(sheet.isDeleteColumnsLocked());
- assertTrue(sheet.isDeleteRowsLocked());
- assertTrue(sheet.isFormatCellsLocked());
- assertTrue(sheet.isFormatColumnsLocked());
- assertTrue(sheet.isFormatRowsLocked());
- assertTrue(sheet.isInsertColumnsLocked());
- assertTrue(sheet.isInsertHyperlinksLocked());
- assertTrue(sheet.isInsertRowsLocked());
- assertTrue(sheet.isPivotTablesLocked());
- assertTrue(sheet.isSortLocked());
- assertTrue(sheet.isObjectsLocked());
- assertTrue(sheet.isScenariosLocked());
- assertTrue(sheet.isSelectLockedCellsLocked());
- assertTrue(sheet.isSelectUnlockedCellsLocked());
- assertTrue(sheet.isSheetLocked());
-
- sheet.disableLocking();
-
- assertFalse(sheet.isAutoFilterLocked());
- assertFalse(sheet.isDeleteColumnsLocked());
- assertFalse(sheet.isDeleteRowsLocked());
- assertFalse(sheet.isFormatCellsLocked());
- assertFalse(sheet.isFormatColumnsLocked());
- assertFalse(sheet.isFormatRowsLocked());
- assertFalse(sheet.isInsertColumnsLocked());
- assertFalse(sheet.isInsertHyperlinksLocked());
- assertFalse(sheet.isInsertRowsLocked());
- assertFalse(sheet.isPivotTablesLocked());
- assertFalse(sheet.isSortLocked());
- assertFalse(sheet.isObjectsLocked());
- assertFalse(sheet.isScenariosLocked());
- assertFalse(sheet.isSelectLockedCellsLocked());
- assertFalse(sheet.isSelectUnlockedCellsLocked());
- assertFalse(sheet.isSheetLocked());
+ @Test
+ public void testWriteSelectEnableLocking() throws IOException {
+ try (XSSFWorkbook workbook = XSSFTestDataSamples.openSampleWorkbook("sheetProtection_allLocked.xlsx")) {
+ sheet = workbook.getSheetAt(0);
+
+ assertTrue(sheet.isAutoFilterLocked());
+ assertTrue(sheet.isDeleteColumnsLocked());
+ assertTrue(sheet.isDeleteRowsLocked());
+ assertTrue(sheet.isFormatCellsLocked());
+ assertTrue(sheet.isFormatColumnsLocked());
+ assertTrue(sheet.isFormatRowsLocked());
+ assertTrue(sheet.isInsertColumnsLocked());
+ assertTrue(sheet.isInsertHyperlinksLocked());
+ assertTrue(sheet.isInsertRowsLocked());
+ assertTrue(sheet.isPivotTablesLocked());
+ assertTrue(sheet.isSortLocked());
+ assertTrue(sheet.isObjectsLocked());
+ assertTrue(sheet.isScenariosLocked());
+ assertTrue(sheet.isSelectLockedCellsLocked());
+ assertTrue(sheet.isSelectUnlockedCellsLocked());
+ assertTrue(sheet.isSheetLocked());
+
+ sheet.disableLocking();
+
+ assertFalse(sheet.isAutoFilterLocked());
+ assertFalse(sheet.isDeleteColumnsLocked());
+ assertFalse(sheet.isDeleteRowsLocked());
+ assertFalse(sheet.isFormatCellsLocked());
+ assertFalse(sheet.isFormatColumnsLocked());
+ assertFalse(sheet.isFormatRowsLocked());
+ assertFalse(sheet.isInsertColumnsLocked());
+ assertFalse(sheet.isInsertHyperlinksLocked());
+ assertFalse(sheet.isInsertRowsLocked());
+ assertFalse(sheet.isPivotTablesLocked());
+ assertFalse(sheet.isSortLocked());
+ assertFalse(sheet.isObjectsLocked());
+ assertFalse(sheet.isScenariosLocked());
+ assertFalse(sheet.isSelectLockedCellsLocked());
+ assertFalse(sheet.isSelectUnlockedCellsLocked());
+ assertFalse(sheet.isSheetLocked());
+ }
}
}
import org.apache.poi.xssf.usermodel.XSSFRow;
import org.apache.poi.xssf.usermodel.XSSFSheet;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
-import org.junit.Ignore;
import org.junit.Test;
public class TestWorkbookProtection {
@Test
public void workbookAndRevisionPassword() throws Exception {
- XSSFWorkbook workbook;
String password = "test";
// validate password with an actual office file (Excel 2010)
- workbook = openSampleWorkbook("workbookProtection-workbook_password_user_range-2010.xlsx");
- assertTrue(workbook.validateWorkbookPassword(password));
+ try (XSSFWorkbook workbook = openSampleWorkbook("workbookProtection-workbook_password_user_range-2010.xlsx")) {
+ assertTrue(workbook.validateWorkbookPassword(password));
+ }
// validate with another office file (Excel 2013)
- workbook = openSampleWorkbook("workbookProtection-workbook_password-2013.xlsx");
- assertTrue(workbook.validateWorkbookPassword(password));
+ try (XSSFWorkbook workbook = openSampleWorkbook("workbookProtection-workbook_password-2013.xlsx")){
+ assertTrue(workbook.validateWorkbookPassword(password));
+ }
-
- workbook = openSampleWorkbook("workbookProtection_not_protected.xlsx");
-
- // setting a null password shouldn't introduce the protection element
- workbook.setWorkbookPassword(null, null);
- assertNull(workbook.getCTWorkbook().getWorkbookProtection());
-
- // compare the hashes
- workbook.setWorkbookPassword(password, null);
- int hashVal = CryptoFunctions.createXorVerifier1(password);
- int actualVal = Integer.parseInt(workbook.getCTWorkbook().getWorkbookProtection().xgetWorkbookPassword().getStringValue(),16);
- assertEquals(hashVal, actualVal);
- assertTrue(workbook.validateWorkbookPassword(password));
-
- // removing the password again
- workbook.setWorkbookPassword(null, null);
- assertFalse(workbook.getCTWorkbook().getWorkbookProtection().isSetWorkbookPassword());
-
- // removing the whole protection structure
- workbook.unLock();
- assertNull(workbook.getCTWorkbook().getWorkbookProtection());
-
- // setting a null password shouldn't introduce the protection element
- workbook.setRevisionsPassword(null, null);
- assertNull(workbook.getCTWorkbook().getWorkbookProtection());
-
- // compare the hashes
- password = "T\u0400ST\u0100passwordWhichIsLongerThan15Chars";
- workbook.setRevisionsPassword(password, null);
- hashVal = CryptoFunctions.createXorVerifier1(password);
- actualVal = Integer.parseInt(workbook.getCTWorkbook().getWorkbookProtection().xgetRevisionsPassword().getStringValue(),16);
- assertEquals(hashVal, actualVal);
- assertTrue(workbook.validateRevisionsPassword(password));
+
+ try (XSSFWorkbook workbook = openSampleWorkbook("workbookProtection_not_protected.xlsx")) {
+ // setting a null password shouldn't introduce the protection element
+ workbook.setWorkbookPassword(null, null);
+ assertNull(workbook.getCTWorkbook().getWorkbookProtection());
+
+ // compare the hashes
+ workbook.setWorkbookPassword(password, null);
+ int hashVal = CryptoFunctions.createXorVerifier1(password);
+ int actualVal = Integer.parseInt(workbook.getCTWorkbook().getWorkbookProtection().xgetWorkbookPassword().getStringValue(), 16);
+ assertEquals(hashVal, actualVal);
+ assertTrue(workbook.validateWorkbookPassword(password));
+
+ // removing the password again
+ workbook.setWorkbookPassword(null, null);
+ assertFalse(workbook.getCTWorkbook().getWorkbookProtection().isSetWorkbookPassword());
+
+ // removing the whole protection structure
+ workbook.unLock();
+ assertNull(workbook.getCTWorkbook().getWorkbookProtection());
+
+ // setting a null password shouldn't introduce the protection element
+ workbook.setRevisionsPassword(null, null);
+ assertNull(workbook.getCTWorkbook().getWorkbookProtection());
+
+ // compare the hashes
+ password = "T\u0400ST\u0100passwordWhichIsLongerThan15Chars";
+ workbook.setRevisionsPassword(password, null);
+ hashVal = CryptoFunctions.createXorVerifier1(password);
+ actualVal = Integer.parseInt(workbook.getCTWorkbook().getWorkbookProtection().xgetRevisionsPassword().getStringValue(), 16);
+ assertEquals(hashVal, actualVal);
+ assertTrue(workbook.validateRevisionsPassword(password));
+ }
}
@Test
public void shouldReadWorkbookProtection() throws Exception {
- XSSFWorkbook workbook = openSampleWorkbook("workbookProtection_not_protected.xlsx");
- assertFalse(workbook.isStructureLocked());
- assertFalse(workbook.isWindowsLocked());
- assertFalse(workbook.isRevisionLocked());
-
- workbook = openSampleWorkbook("workbookProtection_workbook_structure_protected.xlsx");
- assertTrue(workbook.isStructureLocked());
- assertFalse(workbook.isWindowsLocked());
- assertFalse(workbook.isRevisionLocked());
-
- workbook = openSampleWorkbook("workbookProtection_workbook_windows_protected.xlsx");
- assertTrue(workbook.isWindowsLocked());
- assertFalse(workbook.isStructureLocked());
- assertFalse(workbook.isRevisionLocked());
-
- workbook = openSampleWorkbook("workbookProtection_workbook_revision_protected.xlsx");
- assertTrue(workbook.isRevisionLocked());
- assertFalse(workbook.isWindowsLocked());
- assertFalse(workbook.isStructureLocked());
+ try (XSSFWorkbook workbook = openSampleWorkbook("workbookProtection_not_protected.xlsx")) {
+ assertFalse(workbook.isStructureLocked());
+ assertFalse(workbook.isWindowsLocked());
+ assertFalse(workbook.isRevisionLocked());
+ }
+
+ try (XSSFWorkbook workbook = openSampleWorkbook("workbookProtection_workbook_structure_protected.xlsx")) {
+ assertTrue(workbook.isStructureLocked());
+ assertFalse(workbook.isWindowsLocked());
+ assertFalse(workbook.isRevisionLocked());
+ }
+
+ try (XSSFWorkbook workbook = openSampleWorkbook("workbookProtection_workbook_windows_protected.xlsx")) {
+ assertTrue(workbook.isWindowsLocked());
+ assertFalse(workbook.isStructureLocked());
+ assertFalse(workbook.isRevisionLocked());
+ }
+
+ try (XSSFWorkbook workbook = openSampleWorkbook("workbookProtection_workbook_revision_protected.xlsx")) {
+ assertTrue(workbook.isRevisionLocked());
+ assertFalse(workbook.isWindowsLocked());
+ assertFalse(workbook.isStructureLocked());
+ }
}
@Test
public void shouldWriteStructureLock() throws Exception {
- XSSFWorkbook workbook = openSampleWorkbook("workbookProtection_not_protected.xlsx");
- assertFalse(workbook.isStructureLocked());
+ try (XSSFWorkbook workbook = openSampleWorkbook("workbookProtection_not_protected.xlsx")) {
+ assertFalse(workbook.isStructureLocked());
- workbook.lockStructure();
+ workbook.lockStructure();
- assertTrue(workbook.isStructureLocked());
+ assertTrue(workbook.isStructureLocked());
- workbook.unLockStructure();
+ workbook.unLockStructure();
- assertFalse(workbook.isStructureLocked());
+ assertFalse(workbook.isStructureLocked());
+ }
}
@Test
public void shouldWriteWindowsLock() throws Exception {
- XSSFWorkbook workbook = openSampleWorkbook("workbookProtection_not_protected.xlsx");
- assertFalse(workbook.isWindowsLocked());
+ try (XSSFWorkbook workbook = openSampleWorkbook("workbookProtection_not_protected.xlsx")) {
+ assertFalse(workbook.isWindowsLocked());
- workbook.lockWindows();
+ workbook.lockWindows();
- assertTrue(workbook.isWindowsLocked());
+ assertTrue(workbook.isWindowsLocked());
- workbook.unLockWindows();
+ workbook.unLockWindows();
- assertFalse(workbook.isWindowsLocked());
+ assertFalse(workbook.isWindowsLocked());
+ }
}
@Test
public void shouldWriteRevisionLock() throws Exception {
- XSSFWorkbook workbook = openSampleWorkbook("workbookProtection_not_protected.xlsx");
- assertFalse(workbook.isRevisionLocked());
+ try (XSSFWorkbook workbook = openSampleWorkbook("workbookProtection_not_protected.xlsx")) {
+ assertFalse(workbook.isRevisionLocked());
- workbook.lockRevision();
+ workbook.lockRevision();
- assertTrue(workbook.isRevisionLocked());
+ assertTrue(workbook.isRevisionLocked());
- workbook.unLockRevision();
+ workbook.unLockRevision();
- assertFalse(workbook.isRevisionLocked());
+ assertFalse(workbook.isRevisionLocked());
+ }
}
@SuppressWarnings("resource")
@Test
public void testHashPassword() throws Exception {
- XSSFWorkbook wb = new XSSFWorkbook();
- wb.lockRevision();
- wb.setRevisionsPassword("test", HashAlgorithm.sha1);
-
- wb = writeOutAndReadBack(wb);
-
- assertTrue(wb.isRevisionLocked());
- assertTrue(wb.validateRevisionsPassword("test"));
+ try (XSSFWorkbook wb = new XSSFWorkbook()) {
+ wb.lockRevision();
+ wb.setRevisionsPassword("test", HashAlgorithm.sha1);
+
+ try (XSSFWorkbook wbBack = writeOutAndReadBack(wb)) {
+
+ assertTrue(wbBack.isRevisionLocked());
+ assertTrue(wbBack.validateRevisionsPassword("test"));
+ }
+ }
}
@SuppressWarnings("resource")
@Test
public void testIntegration() throws Exception {
- XSSFWorkbook wb = new XSSFWorkbook();
- wb.createSheet("Testing purpose sheet");
- assertFalse(wb.isRevisionLocked());
+ try (XSSFWorkbook wb = new XSSFWorkbook()) {
+ wb.createSheet("Testing purpose sheet");
+ assertFalse(wb.isRevisionLocked());
- wb.lockRevision();
- wb.setRevisionsPassword("test", null);
+ wb.lockRevision();
+ wb.setRevisionsPassword("test", null);
- wb = writeOutAndReadBack(wb);
-
- assertTrue(wb.isRevisionLocked());
- assertTrue(wb.validateRevisionsPassword("test"));
+ try (XSSFWorkbook wbBack = writeOutAndReadBack(wb)) {
+
+ assertTrue(wbBack.isRevisionLocked());
+ assertTrue(wbBack.validateRevisionsPassword("test"));
+ }
+ }
}
@Test
final String password = "abc123";
final String sheetName = "TestSheet1";
final String cellValue = "customZipEntrySource";
- XSSFWorkbook workbook = new XSSFWorkbook();
- XSSFSheet sheet1 = workbook.createSheet(sheetName);
- XSSFRow row1 = sheet1.createRow(1);
- XSSFCell cell1 = row1.createCell(1);
- cell1.setCellValue(cellValue);
- File tf1 = TempFile.createTempFile("poitest", ".xlsx");
- FileOutputStream fos1 = new FileOutputStream(tf1);
- workbook.write(fos1);
- IOUtils.closeQuietly(fos1);
- POIFSFileSystem poiFileSystem = new POIFSFileSystem();
- EncryptionInfo encryptionInfo = new EncryptionInfo(EncryptionMode.agile);
- Encryptor enc = encryptionInfo.getEncryptor();
- enc.confirmPassword(password);
- FileInputStream fis = new FileInputStream(tf1);
- OPCPackage opc = OPCPackage.open(fis);
- IOUtils.closeQuietly(fis);
- try {
- OutputStream os = enc.getDataStream(poiFileSystem);
- opc.save(os);
- IOUtils.closeQuietly(os);
- } finally {
- IOUtils.closeQuietly(opc);
+ try (XSSFWorkbook workbook = new XSSFWorkbook()) {
+ XSSFSheet sheet1 = workbook.createSheet(sheetName);
+ XSSFRow row1 = sheet1.createRow(1);
+ XSSFCell cell1 = row1.createCell(1);
+ cell1.setCellValue(cellValue);
+ File tf1 = TempFile.createTempFile("poitest", ".xlsx");
+ FileOutputStream fos1 = new FileOutputStream(tf1);
+ workbook.write(fos1);
+ IOUtils.closeQuietly(fos1);
+ POIFSFileSystem poiFileSystem = new POIFSFileSystem();
+ EncryptionInfo encryptionInfo = new EncryptionInfo(EncryptionMode.agile);
+ Encryptor enc = encryptionInfo.getEncryptor();
+ enc.confirmPassword(password);
+ FileInputStream fis = new FileInputStream(tf1);
+ OPCPackage opc = OPCPackage.open(fis);
+ IOUtils.closeQuietly(fis);
+ try {
+ OutputStream os = enc.getDataStream(poiFileSystem);
+ opc.save(os);
+ IOUtils.closeQuietly(os);
+ } finally {
+ IOUtils.closeQuietly(opc);
+ }
+ assertTrue(tf1.delete());
+ FileOutputStream fos2 = new FileOutputStream(tf1);
+ poiFileSystem.writeFilesystem(fos2);
+ IOUtils.closeQuietly(fos2);
+ workbook.close();
+ fis = new FileInputStream(tf1);
+ POIFSFileSystem poiFileSystem2 = new POIFSFileSystem(fis);
+ IOUtils.closeQuietly(fis);
+ EncryptionInfo encryptionInfo2 = new EncryptionInfo(poiFileSystem2);
+ Decryptor decryptor = encryptionInfo2.getDecryptor();
+ decryptor.verifyPassword(password);
+ XSSFWorkbook workbook2 = new XSSFWorkbook(decryptor.getDataStream(poiFileSystem2));
+ workbook2.close();
+ assertTrue(tf1.delete());
}
- tf1.delete();
- FileOutputStream fos2 = new FileOutputStream(tf1);
- poiFileSystem.writeFilesystem(fos2);
- IOUtils.closeQuietly(fos2);
- workbook.close();
- fis = new FileInputStream(tf1);
- POIFSFileSystem poiFileSystem2 = new POIFSFileSystem(fis);
- IOUtils.closeQuietly(fis);
- EncryptionInfo encryptionInfo2 = new EncryptionInfo(poiFileSystem2);
- Decryptor decryptor = encryptionInfo2.getDecryptor();
- decryptor.verifyPassword(password);
- XSSFWorkbook workbook2 = new XSSFWorkbook(decryptor.getDataStream(poiFileSystem2));
- workbook2.close();
- tf1.delete();
}
-
}
import org.junit.Test;
public class TestXSSFBSharedStringsTable {
-
-
private static POIDataSamples _ssTests = POIDataSamples.getSpreadSheetInstance();
@Test
public void testBasic() throws Exception {
+ try (OPCPackage pkg = OPCPackage.open(_ssTests.openResourceAsStream("51519.xlsb"))) {
+ List<PackagePart> parts = pkg.getPartsByName(Pattern.compile("/xl/sharedStrings.bin"));
+ assertEquals(1, parts.size());
- OPCPackage pkg = OPCPackage.open(_ssTests.openResourceAsStream("51519.xlsb"));
- List<PackagePart> parts = pkg.getPartsByName(Pattern.compile("/xl/sharedStrings.bin"));
- assertEquals(1, parts.size());
-
- XSSFBSharedStringsTable rtbl = new XSSFBSharedStringsTable(parts.get(0));
- List<String> strings = rtbl.getItems();
- assertEquals(49, strings.size());
+ XSSFBSharedStringsTable rtbl = new XSSFBSharedStringsTable(parts.get(0));
+ List<String> strings = rtbl.getItems();
+ assertEquals(49, strings.size());
- assertEquals("\u30B3\u30E1\u30F3\u30C8", rtbl.getEntryAt(0));
- assertEquals("\u65E5\u672C\u30AA\u30E9\u30AF\u30EB", rtbl.getEntryAt(3));
- assertEquals(55, rtbl.getCount());
- assertEquals(49, rtbl.getUniqueCount());
-
- //TODO: add in tests for phonetic runs
+ assertEquals("\u30B3\u30E1\u30F3\u30C8", rtbl.getEntryAt(0));
+ assertEquals("\u65E5\u672C\u30AA\u30E9\u30AF\u30EB", rtbl.getEntryAt(3));
+ assertEquals(55, rtbl.getCount());
+ assertEquals(49, rtbl.getUniqueCount());
+ //TODO: add in tests for phonetic runs
+ }
}
-
-
}
import org.junit.Test;
public class TestXSSFBSheetHyperlinkManager {
-
private static POIDataSamples _ssTests = POIDataSamples.getSpreadSheetInstance();
@Test
public void testBasic() throws Exception {
-
- OPCPackage pkg = OPCPackage.open(_ssTests.openResourceAsStream("hyperlink.xlsb"));
- XSSFBReader reader = new XSSFBReader(pkg);
- XSSFReader.SheetIterator it = (XSSFReader.SheetIterator) reader.getSheetsData();
- it.next();
- XSSFBHyperlinksTable manager = new XSSFBHyperlinksTable(it.getSheetPart());
- List<XSSFHyperlinkRecord> records = manager.getHyperLinks().get(new CellAddress(0, 0));
- assertNotNull(records);
- assertEquals(1, records.size());
- XSSFHyperlinkRecord record = records.get(0);
- assertEquals("http://tika.apache.org/", record.getLocation());
- assertEquals("rId2", record.getRelId());
-
+ try (OPCPackage pkg = OPCPackage.open(_ssTests.openResourceAsStream("hyperlink.xlsb"))) {
+ XSSFBReader reader = new XSSFBReader(pkg);
+ XSSFReader.SheetIterator it = (XSSFReader.SheetIterator) reader.getSheetsData();
+ it.next();
+ XSSFBHyperlinksTable manager = new XSSFBHyperlinksTable(it.getSheetPart());
+ List<XSSFHyperlinkRecord> records = manager.getHyperLinks().get(new CellAddress(0, 0));
+ assertNotNull(records);
+ assertEquals(1, records.size());
+ XSSFHyperlinkRecord record = records.get(0);
+ assertEquals("http://tika.apache.org/", record.getLocation());
+ assertEquals("rId2", record.getRelId());
+ }
}
-
-
}
private static POIDataSamples _ssTests = POIDataSamples.getSpreadSheetInstance();
public void testParse() throws Exception {
- OPCPackage pkg = OPCPackage.open(_ssTests.openResourceAsStream("SampleSS.xlsx"));
- List<PackagePart> parts = pkg.getPartsByName(Pattern.compile("/xl/sharedStrings.xml"));
- assertEquals(1, parts.size());
-
- SharedStringsTable stbl = new SharedStringsTable(parts.get(0));
- ReadOnlySharedStringsTable rtbl = new ReadOnlySharedStringsTable(parts.get(0));
-
- assertEquals(stbl.getCount(), rtbl.getCount());
- assertEquals(stbl.getUniqueCount(), rtbl.getUniqueCount());
-
- assertEquals(stbl.getItems().size(), stbl.getUniqueCount());
- assertEquals(rtbl.getItems().size(), rtbl.getUniqueCount());
- for(int i=0; i < stbl.getUniqueCount(); i++){
- CTRst i1 = stbl.getEntryAt(i);
- String i2 = rtbl.getEntryAt(i);
- assertEquals(i1.getT(), i2);
+ try (OPCPackage pkg = OPCPackage.open(_ssTests.openResourceAsStream("SampleSS.xlsx"))) {
+ List<PackagePart> parts = pkg.getPartsByName(Pattern.compile("/xl/sharedStrings.xml"));
+ assertEquals(1, parts.size());
+
+ SharedStringsTable stbl = new SharedStringsTable(parts.get(0));
+ ReadOnlySharedStringsTable rtbl = new ReadOnlySharedStringsTable(parts.get(0));
+
+ assertEquals(stbl.getCount(), rtbl.getCount());
+ assertEquals(stbl.getUniqueCount(), rtbl.getUniqueCount());
+
+ assertEquals(stbl.getItems().size(), stbl.getUniqueCount());
+ assertEquals(rtbl.getItems().size(), rtbl.getUniqueCount());
+ for (int i = 0; i < stbl.getUniqueCount(); i++) {
+ CTRst i1 = stbl.getEntryAt(i);
+ String i2 = rtbl.getEntryAt(i);
+ assertEquals(i1.getT(), i2);
+ }
}
-
}
//51519
public void testPhoneticRuns() throws Exception {
- OPCPackage pkg = OPCPackage.open(_ssTests.openResourceAsStream("51519.xlsx"));
- List<PackagePart> parts = pkg.getPartsByName(Pattern.compile("/xl/sharedStrings.xml"));
- assertEquals(1, parts.size());
-
- ReadOnlySharedStringsTable rtbl = new ReadOnlySharedStringsTable(parts.get(0), true);
- List<String> strings = rtbl.getItems();
- assertEquals(49, strings.size());
+ try (OPCPackage pkg = OPCPackage.open(_ssTests.openResourceAsStream("51519.xlsx"))) {
+ List < PackagePart > parts = pkg.getPartsByName(Pattern.compile("/xl/sharedStrings.xml"));
+ assertEquals(1, parts.size());
- assertEquals("\u30B3\u30E1\u30F3\u30C8", rtbl.getEntryAt(0));
- assertEquals("\u65E5\u672C\u30AA\u30E9\u30AF\u30EB \u30CB\u30DB\u30F3", rtbl.getEntryAt(3));
+ ReadOnlySharedStringsTable rtbl = new ReadOnlySharedStringsTable(parts.get(0), true);
+ List<String> strings = rtbl.getItems();
+ assertEquals(49, strings.size());
- //now do not include phonetic runs
- rtbl = new ReadOnlySharedStringsTable(parts.get(0), false);
- strings = rtbl.getItems();
- assertEquals(49, strings.size());
+ assertEquals("\u30B3\u30E1\u30F3\u30C8", rtbl.getEntryAt(0));
+ assertEquals("\u65E5\u672C\u30AA\u30E9\u30AF\u30EB \u30CB\u30DB\u30F3", rtbl.getEntryAt(3));
- assertEquals("\u30B3\u30E1\u30F3\u30C8", rtbl.getEntryAt(0));
- assertEquals("\u65E5\u672C\u30AA\u30E9\u30AF\u30EB", rtbl.getEntryAt(3));
+ //now do not include phonetic runs
+ rtbl =new ReadOnlySharedStringsTable(parts.get(0),false);
+ strings = rtbl.getItems();
+ assertEquals(49, strings.size());
+ assertEquals("\u30B3\u30E1\u30F3\u30C8", rtbl.getEntryAt(0));
+ assertEquals("\u65E5\u672C\u30AA\u30E9\u30AF\u30EB", rtbl.getEntryAt(3));
+ }
}
public void testEmptySSTOnPackageObtainedViaWorkbook() throws Exception {
}
public void testEmptySSTOnPackageDirect() throws Exception {
- OPCPackage pkg = OPCPackage.open(_ssTests.openResourceAsStream("noSharedStringTable.xlsx"));
- assertEmptySST(pkg);
+ try (OPCPackage pkg = OPCPackage.open(_ssTests.openResourceAsStream("noSharedStringTable.xlsx"))) {
+ assertEmptySST(pkg);
+ }
}
private void assertEmptySST(OPCPackage pkg) throws IOException, SAXException {
assertEquals(0, sst.getUniqueCount());
assertNull(sst.getItems()); // same state it's left in if fed a package which has no SST part.
}
-
}
@Test
public void testAbsPath() throws Exception {
- OPCPackage pkg = OPCPackage.open(_ssTests.openResourceAsStream("testVarious.xlsb"));
- XSSFBReader r = new XSSFBReader(pkg);
- assertEquals("C:\\Users\\tallison\\Desktop\\working\\xlsb\\", r.getAbsPathMetadata());
+ try (OPCPackage pkg = OPCPackage.open(_ssTests.openResourceAsStream("testVarious.xlsb"))) {
+ XSSFBReader r = new XSSFBReader(pkg);
+ assertEquals("C:\\Users\\tallison\\Desktop\\working\\xlsb\\", r.getAbsPathMetadata());
+ }
}
private List<String> getSheets(String testFileName) throws Exception {
- OPCPackage pkg = OPCPackage.open(_ssTests.openResourceAsStream(testFileName));
- List<String> sheetTexts = new ArrayList<>();
- XSSFBReader r = new XSSFBReader(pkg);
+ try (OPCPackage pkg = OPCPackage.open(_ssTests.openResourceAsStream(testFileName))) {
+ List<String> sheetTexts = new ArrayList<>();
+ XSSFBReader r = new XSSFBReader(pkg);
// assertNotNull(r.getWorkbookData());
- // assertNotNull(r.getSharedStringsData());
- assertNotNull(r.getXSSFBStylesTable());
- XSSFBSharedStringsTable sst = new XSSFBSharedStringsTable(pkg);
- XSSFBStylesTable xssfbStylesTable = r.getXSSFBStylesTable();
- XSSFBReader.SheetIterator it = (XSSFBReader.SheetIterator) r.getSheetsData();
-
- while (it.hasNext()) {
- InputStream is = it.next();
- String name = it.getSheetName();
- TestSheetHandler testSheetHandler = new TestSheetHandler();
- testSheetHandler.startSheet(name);
- XSSFBSheetHandler sheetHandler = new XSSFBSheetHandler(is,
- xssfbStylesTable,
- it.getXSSFBSheetComments(),
- sst, testSheetHandler,
- new DataFormatter(),
- false);
- sheetHandler.parse();
- testSheetHandler.endSheet();
- sheetTexts.add(testSheetHandler.toString());
+ // assertNotNull(r.getSharedStringsData());
+ assertNotNull(r.getXSSFBStylesTable());
+ XSSFBSharedStringsTable sst = new XSSFBSharedStringsTable(pkg);
+ XSSFBStylesTable xssfbStylesTable = r.getXSSFBStylesTable();
+ XSSFBReader.SheetIterator it = (XSSFBReader.SheetIterator) r.getSheetsData();
+
+ while (it.hasNext()) {
+ InputStream is = it.next();
+ String name = it.getSheetName();
+ TestSheetHandler testSheetHandler = new TestSheetHandler();
+ testSheetHandler.startSheet(name);
+ XSSFBSheetHandler sheetHandler = new XSSFBSheetHandler(is,
+ xssfbStylesTable,
+ it.getXSSFBSheetComments(),
+ sst, testSheetHandler,
+ new DataFormatter(),
+ false);
+ sheetHandler.parse();
+ testSheetHandler.endSheet();
+ sheetTexts.add(testSheetHandler.toString());
+ }
+ return sheetTexts;
}
- return sheetTexts;
-
}
@Test
@Test
public void testGetBits() throws Exception {
- OPCPackage pkg = OPCPackage.open(_ssTests.openResourceAsStream("SampleSS.xlsx"));
+ try (OPCPackage pkg = OPCPackage.open(_ssTests.openResourceAsStream("SampleSS.xlsx"))) {
- XSSFReader r = new XSSFReader(pkg);
+ XSSFReader r = new XSSFReader(pkg);
- assertNotNull(r.getWorkbookData());
- assertNotNull(r.getSharedStringsData());
- assertNotNull(r.getStylesData());
+ assertNotNull(r.getWorkbookData());
+ assertNotNull(r.getSharedStringsData());
+ assertNotNull(r.getStylesData());
- assertNotNull(r.getSharedStringsTable());
- assertNotNull(r.getStylesTable());
+ assertNotNull(r.getSharedStringsTable());
+ assertNotNull(r.getStylesTable());
+ }
}
@Test
public void testStyles() throws Exception {
- OPCPackage pkg = OPCPackage.open(_ssTests.openResourceAsStream("SampleSS.xlsx"));
-
- XSSFReader r = new XSSFReader(pkg);
-
- assertEquals(3, r.getStylesTable().getFonts().size());
- assertEquals(0, r.getStylesTable().getNumDataFormats());
-
- // The Styles Table should have the themes associated with it too
- assertNotNull(r.getStylesTable().getTheme());
-
- // Check we get valid data for the two
- assertNotNull(r.getStylesData());
- assertNotNull(r.getThemesData());
+ try (OPCPackage pkg = OPCPackage.open(_ssTests.openResourceAsStream("SampleSS.xlsx"))) {
+
+ XSSFReader r = new XSSFReader(pkg);
+
+ assertEquals(3, r.getStylesTable().getFonts().size());
+ assertEquals(0, r.getStylesTable().getNumDataFormats());
+
+ // The Styles Table should have the themes associated with it too
+ assertNotNull(r.getStylesTable().getTheme());
+
+ // Check we get valid data for the two
+ assertNotNull(r.getStylesData());
+ assertNotNull(r.getThemesData());
+ }
}
@Test
public void testStrings() throws Exception {
- OPCPackage pkg = OPCPackage.open(_ssTests.openResourceAsStream("SampleSS.xlsx"));
+ try (OPCPackage pkg = OPCPackage.open(_ssTests.openResourceAsStream("SampleSS.xlsx"))) {
- XSSFReader r = new XSSFReader(pkg);
+ XSSFReader r = new XSSFReader(pkg);
- assertEquals(11, r.getSharedStringsTable().getItems().size());
- assertEquals("Test spreadsheet", new XSSFRichTextString(r.getSharedStringsTable().getEntryAt(0)).toString());
+ assertEquals(11, r.getSharedStringsTable().getItems().size());
+ assertEquals("Test spreadsheet", new XSSFRichTextString(r.getSharedStringsTable().getEntryAt(0)).toString());
+ }
}
@Test
public void testSheets() throws Exception {
- OPCPackage pkg = OPCPackage.open(_ssTests.openResourceAsStream("SampleSS.xlsx"));
-
- XSSFReader r = new XSSFReader(pkg);
- byte[] data = new byte[4096];
-
- // By r:id
- assertNotNull(r.getSheet("rId2"));
- int read = IOUtils.readFully(r.getSheet("rId2"), data);
- assertEquals(974, read);
-
- // All
- Iterator<InputStream> it = r.getSheetsData();
-
- int count = 0;
- while(it.hasNext()) {
- count++;
- InputStream inp = it.next();
- assertNotNull(inp);
- read = IOUtils.readFully(inp, data);
- inp.close();
-
- assertTrue(read > 400);
- assertTrue(read < 1500);
- }
- assertEquals(3, count);
+ try (OPCPackage pkg = OPCPackage.open(_ssTests.openResourceAsStream("SampleSS.xlsx"))) {
+
+ XSSFReader r = new XSSFReader(pkg);
+ byte[] data = new byte[4096];
+
+ // By r:id
+ assertNotNull(r.getSheet("rId2"));
+ int read = IOUtils.readFully(r.getSheet("rId2"), data);
+ assertEquals(974, read);
+
+ // All
+ Iterator<InputStream> it = r.getSheetsData();
+
+ int count = 0;
+ while (it.hasNext()) {
+ count++;
+ InputStream inp = it.next();
+ assertNotNull(inp);
+ read = IOUtils.readFully(inp, data);
+ inp.close();
+
+ assertTrue(read > 400);
+ assertTrue(read < 1500);
+ }
+ assertEquals(3, count);
+ }
}
/**
*/
@Test
public void testOrderOfSheets() throws Exception {
- OPCPackage pkg = OPCPackage.open(_ssTests.openResourceAsStream("reordered_sheets.xlsx"));
+ try (OPCPackage pkg = OPCPackage.open(_ssTests.openResourceAsStream("reordered_sheets.xlsx"))) {
- XSSFReader r = new XSSFReader(pkg);
+ XSSFReader r = new XSSFReader(pkg);
- String[] sheetNames = {"Sheet4", "Sheet2", "Sheet3", "Sheet1"};
- XSSFReader.SheetIterator it = (XSSFReader.SheetIterator)r.getSheetsData();
+ String[] sheetNames = {"Sheet4", "Sheet2", "Sheet3", "Sheet1"};
+ XSSFReader.SheetIterator it = (XSSFReader.SheetIterator) r.getSheetsData();
- int count = 0;
- while(it.hasNext()) {
- InputStream inp = it.next();
- assertNotNull(inp);
- inp.close();
+ int count = 0;
+ while (it.hasNext()) {
+ InputStream inp = it.next();
+ assertNotNull(inp);
+ inp.close();
- assertEquals(sheetNames[count], it.getSheetName());
- count++;
- }
- assertEquals(4, count);
+ assertEquals(sheetNames[count], it.getSheetName());
+ count++;
+ }
+ assertEquals(4, count);
+ }
}
@Test
public void testComments() throws Exception {
- OPCPackage pkg = XSSFTestDataSamples.openSamplePackage("comments.xlsx");
- XSSFReader r = new XSSFReader(pkg);
- XSSFReader.SheetIterator it = (XSSFReader.SheetIterator)r.getSheetsData();
-
- int count = 0;
- while(it.hasNext()) {
- count++;
- InputStream inp = it.next();
- inp.close();
-
- if(count == 1) {
- assertNotNull(it.getSheetComments());
- CommentsTable ct = it.getSheetComments();
- assertEquals(1, ct.getNumberOfAuthors());
- assertEquals(3, ct.getNumberOfComments());
- } else {
- assertNull(it.getSheetComments());
- }
+ try (OPCPackage pkg = XSSFTestDataSamples.openSamplePackage("comments.xlsx")) {
+ XSSFReader r = new XSSFReader(pkg);
+ XSSFReader.SheetIterator it = (XSSFReader.SheetIterator) r.getSheetsData();
+
+ int count = 0;
+ while (it.hasNext()) {
+ count++;
+ InputStream inp = it.next();
+ inp.close();
+
+ if (count == 1) {
+ assertNotNull(it.getSheetComments());
+ CommentsTable ct = it.getSheetComments();
+ assertEquals(1, ct.getNumberOfAuthors());
+ assertEquals(3, ct.getNumberOfComments());
+ } else {
+ assertNull(it.getSheetComments());
+ }
+ }
+ assertEquals(3, count);
}
- assertEquals(3, count);
}
/**
* Iterating over a workbook with chart sheets in it, using the
* XSSFReader method
- * @throws Exception
*/
@Test
public void test50119() throws Exception {
- OPCPackage pkg = XSSFTestDataSamples.openSamplePackage("WithChartSheet.xlsx");
- XSSFReader r = new XSSFReader(pkg);
- XSSFReader.SheetIterator it = (XSSFReader.SheetIterator)r.getSheetsData();
-
- while(it.hasNext())
- {
- InputStream stream = it.next();
- stream.close();
+ try (OPCPackage pkg = XSSFTestDataSamples.openSamplePackage("WithChartSheet.xlsx")) {
+ XSSFReader r = new XSSFReader(pkg);
+ XSSFReader.SheetIterator it = (XSSFReader.SheetIterator) r.getSheetsData();
+
+ while (it.hasNext()) {
+ InputStream stream = it.next();
+ stream.close();
+ }
}
}
/**
* Test text extraction from text box using getShapes()
- *
- * @throws Exception
*/
@Test
public void testShapes() throws Exception {
- OPCPackage pkg = XSSFTestDataSamples.openSamplePackage("WithTextBox.xlsx");
- XSSFReader r = new XSSFReader(pkg);
- XSSFReader.SheetIterator it = (XSSFReader.SheetIterator) r.getSheetsData();
-
- String text = getShapesString(it);
- assertContains(text, "Line 1");
- assertContains(text, "Line 2");
- assertContains(text, "Line 3");
+ try (OPCPackage pkg = XSSFTestDataSamples.openSamplePackage("WithTextBox.xlsx")) {
+ XSSFReader r = new XSSFReader(pkg);
+ XSSFReader.SheetIterator it = (XSSFReader.SheetIterator) r.getSheetsData();
+
+ String text = getShapesString(it);
+ assertContains(text, "Line 1");
+ assertContains(text, "Line 2");
+ assertContains(text, "Line 3");
+ }
}
private String getShapesString(XSSFReader.SheetIterator it) {
@Test
public void testBug57914() throws Exception {
- OPCPackage pkg = XSSFTestDataSamples.openSamplePackage("57914.xlsx");
- final XSSFReader r;
-
- // for now expect this to fail, when we fix 57699, this one should fail so we know we should adjust
- // this test as well
- try {
- r = new XSSFReader(pkg);
- fail("This will fail until bug 57699 is fixed");
- } catch (POIXMLException e) {
- assertContains(e.getMessage(), "57699");
- return;
- }
+ try (OPCPackage pkg = XSSFTestDataSamples.openSamplePackage("57914.xlsx")) {
+ final XSSFReader r;
+
+ // for now expect this to fail, when we fix 57699, this one should fail so we know we should adjust
+ // this test as well
+ try {
+ r = new XSSFReader(pkg);
+ fail("This will fail until bug 57699 is fixed");
+ } catch (POIXMLException e) {
+ assertContains(e.getMessage(), "57699");
+ return;
+ }
- XSSFReader.SheetIterator it = (XSSFReader.SheetIterator) r.getSheetsData();
+ XSSFReader.SheetIterator it = (XSSFReader.SheetIterator) r.getSheetsData();
- String text = getShapesString(it);
- assertContains(text, "Line 1");
- assertContains(text, "Line 2");
- assertContains(text, "Line 3");
+ String text = getShapesString(it);
+ assertContains(text, "Line 1");
+ assertContains(text, "Line 2");
+ assertContains(text, "Line 3");
+ }
}
/**
*/
@Test
public void test58747() throws Exception {
- OPCPackage pkg = XSSFTestDataSamples.openSamplePackage("58747.xlsx");
- ReadOnlySharedStringsTable strings = new ReadOnlySharedStringsTable(pkg);
- assertNotNull(strings);
- XSSFReader reader = new XSSFReader(pkg);
- StylesTable styles = reader.getStylesTable();
- assertNotNull(styles);
-
- XSSFReader.SheetIterator iter = (XSSFReader.SheetIterator) reader.getSheetsData();
- assertEquals(true, iter.hasNext());
- iter.next();
-
- assertEquals(false, iter.hasNext());
- assertEquals("Orders", iter.getSheetName());
-
- pkg.close();
+ try (OPCPackage pkg = XSSFTestDataSamples.openSamplePackage("58747.xlsx")) {
+ ReadOnlySharedStringsTable strings = new ReadOnlySharedStringsTable(pkg);
+ assertNotNull(strings);
+ XSSFReader reader = new XSSFReader(pkg);
+ StylesTable styles = reader.getStylesTable();
+ assertNotNull(styles);
+
+ XSSFReader.SheetIterator iter = (XSSFReader.SheetIterator) reader.getSheetsData();
+ assertTrue(iter.hasNext());
+ iter.next();
+
+ assertFalse(iter.hasNext());
+ assertEquals("Orders", iter.getSheetName());
+ }
}
/**
*/
@Test
public void testSheetWithNoRelationshipId() throws Exception {
- OPCPackage pkg = XSSFTestDataSamples.openSamplePackage("60825.xlsx");
- ReadOnlySharedStringsTable strings = new ReadOnlySharedStringsTable(pkg);
- assertNotNull(strings);
- XSSFReader reader = new XSSFReader(pkg);
- StylesTable styles = reader.getStylesTable();
- assertNotNull(styles);
-
- XSSFReader.SheetIterator iter = (XSSFReader.SheetIterator) reader.getSheetsData();
- assertNotNull(iter.next());
- assertFalse(iter.hasNext());
-
- pkg.close();
+ try (OPCPackage pkg = XSSFTestDataSamples.openSamplePackage("60825.xlsx")) {
+ ReadOnlySharedStringsTable strings = new ReadOnlySharedStringsTable(pkg);
+ assertNotNull(strings);
+ XSSFReader reader = new XSSFReader(pkg);
+ StylesTable styles = reader.getStylesTable();
+ assertNotNull(styles);
+
+ XSSFReader.SheetIterator iter = (XSSFReader.SheetIterator) reader.getSheetsData();
+ assertNotNull(iter.next());
+ assertFalse(iter.hasNext());
+ }
}
/**
*/
@Test
public void test61034() throws Exception {
- OPCPackage pkg = XSSFTestDataSamples.openSamplePackage("61034.xlsx");
- XSSFReader reader = new XSSFReader(pkg);
- XSSFReader.SheetIterator iter = (XSSFReader.SheetIterator) reader.getSheetsData();
- Set<String> seen = new HashSet<>();
- while (iter.hasNext()) {
- InputStream stream = iter.next();
- String sheetName = iter.getSheetName();
- assertNotContained(seen, sheetName);
- seen.add(sheetName);
- stream.close();
+ try (OPCPackage pkg = XSSFTestDataSamples.openSamplePackage("61034.xlsx")) {
+ XSSFReader reader = new XSSFReader(pkg);
+ XSSFReader.SheetIterator iter = (XSSFReader.SheetIterator) reader.getSheetsData();
+ Set<String> seen = new HashSet<>();
+ while (iter.hasNext()) {
+ InputStream stream = iter.next();
+ String sheetName = iter.getSheetName();
+ assertNotContained(seen, sheetName);
+ seen.add(sheetName);
+ stream.close();
+ }
}
- pkg.close();
}
@Test
package org.apache.poi.xwpf.usermodel;
import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertNull;
+import static org.junit.Assert.assertTrue;
import java.io.ByteArrayInputStream;
import java.io.IOException;
// True values: "true", "1", "on"
bold.setVal(STOnOff.TRUE);
- assertEquals(true, run.isBold());
+ assertTrue(run.isBold());
bold.setVal(STOnOff.X_1);
- assertEquals(true, run.isBold());
+ assertTrue(run.isBold());
bold.setVal(STOnOff.ON);
- assertEquals(true, run.isBold());
+ assertTrue(run.isBold());
// False values: "false", "0", "off"
bold.setVal(STOnOff.FALSE);
- assertEquals(false, run.isBold());
+ assertFalse(run.isBold());
bold.setVal(STOnOff.X_0);
- assertEquals(false, run.isBold());
+ assertFalse(run.isBold());
bold.setVal(STOnOff.OFF);
- assertEquals(false, run.isBold());
+ assertFalse(run.isBold());
}
@Test
rpr.addNewB().setVal(STOnOff.TRUE);
XWPFRun run = new XWPFRun(ctRun, irb);
- assertEquals(true, run.isBold());
+ assertTrue(run.isBold());
run.setBold(false);
// Implementation detail: POI natively prefers <w:b w:val="false"/>,
rpr.addNewI().setVal(STOnOff.TRUE);
XWPFRun run = new XWPFRun(ctRun, irb);
- assertEquals(true, run.isItalic());
+ assertTrue(run.isItalic());
run.setItalic(false);
assertEquals(STOnOff.FALSE, rpr.getI().getVal());
rpr.addNewStrike().setVal(STOnOff.TRUE);
XWPFRun run = new XWPFRun(ctRun, irb);
- assertEquals(true, run.isStrikeThrough());
+ assertTrue(run.isStrikeThrough());
run.setStrikeThrough(false);
assertEquals(STOnOff.FALSE, rpr.getStrike().getVal());
run = p.getRuns().get(0);
assertEquals("This is a test document", run.toString());
- assertEquals(false, run.isBold());
- assertEquals(false, run.isItalic());
- assertEquals(false, run.isStrikeThrough());
- assertEquals(null, run.getCTR().getRPr());
+ assertFalse(run.isBold());
+ assertFalse(run.isItalic());
+ assertFalse(run.isStrikeThrough());
+ assertNull(run.getCTR().getRPr());
run = p.getRuns().get(1);
assertEquals(".", run.toString());
- assertEquals(false, run.isBold());
- assertEquals(false, run.isItalic());
- assertEquals(false, run.isStrikeThrough());
- assertEquals(null, run.getCTR().getRPr());
+ assertFalse(run.isBold());
+ assertFalse(run.isItalic());
+ assertFalse(run.isStrikeThrough());
+ assertNull(run.getCTR().getRPr());
// Next paragraph is all in one style, but a different one
run = p.getRuns().get(0);
assertEquals("This bit is in bold and italic", run.toString());
- assertEquals(true, run.isBold());
- assertEquals(true, run.isItalic());
- assertEquals(false, run.isStrikeThrough());
- assertEquals(true, run.getCTR().getRPr().isSetB());
- assertEquals(false, run.getCTR().getRPr().getB().isSetVal());
+ assertTrue(run.isBold());
+ assertTrue(run.isItalic());
+ assertFalse(run.isStrikeThrough());
+ assertTrue(run.getCTR().getRPr().isSetB());
+ assertFalse(run.getCTR().getRPr().getB().isSetVal());
// Back to normal
run = p.getRuns().get(0);
assertEquals("Back to normal", run.toString());
- assertEquals(false, run.isBold());
- assertEquals(false, run.isItalic());
- assertEquals(false, run.isStrikeThrough());
- assertEquals(null, run.getCTR().getRPr());
+ assertFalse(run.isBold());
+ assertFalse(run.isItalic());
+ assertFalse(run.isStrikeThrough());
+ assertNull(run.getCTR().getRPr());
// Different styles in one paragraph
run = p.getRuns().get(0);
assertEquals("This contains ", run.toString());
- assertEquals(false, run.isBold());
- assertEquals(false, run.isItalic());
- assertEquals(false, run.isStrikeThrough());
- assertEquals(null, run.getCTR().getRPr());
+ assertFalse(run.isBold());
+ assertFalse(run.isItalic());
+ assertFalse(run.isStrikeThrough());
+ assertNull(run.getCTR().getRPr());
run = p.getRuns().get(1);
assertEquals("BOLD", run.toString());
- assertEquals(true, run.isBold());
- assertEquals(false, run.isItalic());
- assertEquals(false, run.isStrikeThrough());
+ assertTrue(run.isBold());
+ assertFalse(run.isItalic());
+ assertFalse(run.isStrikeThrough());
run = p.getRuns().get(2);
assertEquals(", ", run.toString());
- assertEquals(false, run.isBold());
- assertEquals(false, run.isItalic());
- assertEquals(false, run.isStrikeThrough());
- assertEquals(null, run.getCTR().getRPr());
+ assertFalse(run.isBold());
+ assertFalse(run.isItalic());
+ assertFalse(run.isStrikeThrough());
+ assertNull(run.getCTR().getRPr());
run = p.getRuns().get(3);
assertEquals("ITALIC", run.toString());
- assertEquals(false, run.isBold());
- assertEquals(true, run.isItalic());
- assertEquals(false, run.isStrikeThrough());
+ assertFalse(run.isBold());
+ assertTrue(run.isItalic());
+ assertFalse(run.isStrikeThrough());
run = p.getRuns().get(4);
assertEquals(" and ", run.toString());
- assertEquals(false, run.isBold());
- assertEquals(false, run.isItalic());
- assertEquals(false, run.isStrikeThrough());
- assertEquals(null, run.getCTR().getRPr());
+ assertFalse(run.isBold());
+ assertFalse(run.isItalic());
+ assertFalse(run.isStrikeThrough());
+ assertNull(run.getCTR().getRPr());
run = p.getRuns().get(5);
assertEquals("BOTH", run.toString());
- assertEquals(true, run.isBold());
- assertEquals(true, run.isItalic());
- assertEquals(false, run.isStrikeThrough());
+ assertTrue(run.isBold());
+ assertTrue(run.isItalic());
+ assertFalse(run.isStrikeThrough());
run = p.getRuns().get(6);
assertEquals(", as well as ", run.toString());
- assertEquals(false, run.isBold());
- assertEquals(false, run.isItalic());
- assertEquals(false, run.isStrikeThrough());
- assertEquals(null, run.getCTR().getRPr());
+ assertFalse(run.isBold());
+ assertFalse(run.isItalic());
+ assertFalse(run.isStrikeThrough());
+ assertNull(run.getCTR().getRPr());
run = p.getRuns().get(7);
assertEquals("RED", run.toString());
- assertEquals(false, run.isBold());
- assertEquals(false, run.isItalic());
- assertEquals(false, run.isStrikeThrough());
+ assertFalse(run.isBold());
+ assertFalse(run.isItalic());
+ assertFalse(run.isStrikeThrough());
run = p.getRuns().get(8);
assertEquals(" and ", run.toString());
- assertEquals(false, run.isBold());
- assertEquals(false, run.isItalic());
- assertEquals(false, run.isStrikeThrough());
- assertEquals(null, run.getCTR().getRPr());
+ assertFalse(run.isBold());
+ assertFalse(run.isItalic());
+ assertFalse(run.isStrikeThrough());
+ assertNull(run.getCTR().getRPr());
run = p.getRuns().get(9);
assertEquals("YELLOW", run.toString());
- assertEquals(false, run.isBold());
- assertEquals(false, run.isItalic());
- assertEquals(false, run.isStrikeThrough());
+ assertFalse(run.isBold());
+ assertFalse(run.isItalic());
+ assertFalse(run.isStrikeThrough());
run = p.getRuns().get(10);
assertEquals(" text.", run.toString());
- assertEquals(false, run.isBold());
- assertEquals(false, run.isItalic());
- assertEquals(false, run.isStrikeThrough());
- assertEquals(null, run.getCTR().getRPr());
+ assertFalse(run.isBold());
+ assertFalse(run.isItalic());
+ assertFalse(run.isStrikeThrough());
+ assertNull(run.getCTR().getRPr());
doc.close();
}
}
@Test
- public void testSetters() throws IOException {
+ public void testSetters() {
XWPFDocument document = new XWPFDocument();
final XWPFRun run = document.createParagraph().createRun();
XWPFDocument document = new XWPFDocument();
final XWPFRun run = document.createParagraph().createRun();
assertEquals(STHighlightColor.NONE, run.getTextHightlightColor());
- assertEquals(false, run.isHighlighted());
+ assertFalse(run.isHighlighted());
run.setTextHighlightColor("darkGreen"); // See 17.18.40 ST_HighlightColor (Text Highlight Colors)
assertEquals(STHighlightColor.DARK_GREEN, run.getTextHightlightColor());
- assertEquals(true, run.isHighlighted());
+ assertTrue(run.isHighlighted());
run.setTextHighlightColor("none");
- assertEquals(false, run.isHighlighted());
+ assertFalse(run.isHighlighted());
document.close();
}
public void testSetGetVanish() throws IOException {
XWPFDocument document = new XWPFDocument();
final XWPFRun run = document.createParagraph().createRun();
- assertEquals(false, run.isVanish());
+ assertFalse(run.isVanish());
run.setVanish(true);
- assertEquals(true, run.isVanish());
+ assertTrue(run.isVanish());
run.setVanish(false);
- assertEquals(false, run.isVanish());
+ assertFalse(run.isVanish());
document.close();
}
assertEquals(STVerticalAlignRun.BASELINE, rpr.getVertAlign().getVal());
}
-
@Test
public void testSetGetEmphasisMark() throws IOException {
XWPFDocument document = new XWPFDocument();
run.setStyle(styleId);
String candStyleId = run.getCTR().getRPr().getRStyle().getVal();
assertNotNull("Expected to find a run style ID", candStyleId);
- assertEquals(styleId, candStyleId);
+ assertEquals(styleId, candStyleId);
+
+ document.close();
}
}
filename = args[1];
}
- POIFSFileSystem poifs = new POIFSFileSystem(new File(filename));
- SlideShowDumper foo = new SlideShowDumper(poifs, System.out);
- poifs.close();
-
- if(args.length > 1) {
- if(args[0].equalsIgnoreCase("-escher")) {
- foo.setDDFEscher(true);
- } else {
- foo.setBasicEscher(true);
+ try (POIFSFileSystem poifs = new POIFSFileSystem(new File(filename))) {
+ SlideShowDumper foo = new SlideShowDumper(poifs, System.out);
+
+ if(args.length > 1) {
+ if(args[0].equalsIgnoreCase("-escher")) {
+ foo.setDDFEscher(true);
+ } else {
+ foo.setBasicEscher(true);
+ }
}
- }
- foo.printDump();
+ foo.printDump();
+ }
}
/**
System.exit(1);
}
- HSLFSlideShowImpl ss = new HSLFSlideShowImpl(args[0]);
+ try (HSLFSlideShowImpl ss = new HSLFSlideShowImpl(args[0])) {
+ // Find the documents, and then their SLWT
+ Record[] records = ss.getRecords();
+ for (Record record : records) {
+ if (record.getRecordType() == 1000L) {
+ Record[] docChildren = record.getChildRecords();
+ for (Record docChild : docChildren) {
+ if (docChild instanceof SlideListWithText) {
+ Record[] slwtChildren = docChild.getChildRecords();
- // Find the documents, and then their SLWT
- Record[] records = ss.getRecords();
- for (Record record : records) {
- if (record.getRecordType() == 1000L) {
- Record[] docChildren = record.getChildRecords();
- for (Record docChild : docChildren) {
- if (docChild instanceof SlideListWithText) {
- Record[] slwtChildren = docChild.getChildRecords();
+ int lastTextLen = -1;
+ for (Record slwtChild : slwtChildren) {
+ if (slwtChild instanceof TextCharsAtom) {
+ lastTextLen = ((TextCharsAtom) slwtChild).getText().length();
+ }
+ if (slwtChild instanceof TextBytesAtom) {
+ lastTextLen = ((TextBytesAtom) slwtChild).getText().length();
+ }
- int lastTextLen = -1;
- for (Record slwtChild : slwtChildren) {
- if (slwtChild instanceof TextCharsAtom) {
- lastTextLen = ((TextCharsAtom) slwtChild).getText().length();
- }
- if (slwtChild instanceof TextBytesAtom) {
- lastTextLen = ((TextBytesAtom) slwtChild).getText().length();
- }
-
- if (slwtChild instanceof StyleTextPropAtom) {
- StyleTextPropAtom stpa = (StyleTextPropAtom) slwtChild;
- stpa.setParentTextSize(lastTextLen);
- showStyleTextPropAtom(stpa);
+ if (slwtChild instanceof StyleTextPropAtom) {
+ StyleTextPropAtom stpa = (StyleTextPropAtom) slwtChild;
+ stpa.setParentTextSize(lastTextLen);
+ showStyleTextPropAtom(stpa);
+ }
}
}
}
}
}
}
-
- ss.close();
}
public static void showStyleTextPropAtom(StyleTextPropAtom stpa) {
System.exit(1);
}
-
// Create the slideshow object, for normal working with
- HSLFSlideShowImpl ss = new HSLFSlideShowImpl(args[0]);
- fileContents = ss.getUnderlyingBytes();
- System.out.println();
-
- // Find any persist ones first
- int pos = 0;
- for(Record r : ss.getRecords()) {
- if(r.getRecordType() == 6001l) {
- // PersistPtrFullBlock
- System.out.println("Found PersistPtrFullBlock at " + pos + " (" + Integer.toHexString(pos) + ")");
- }
- if(r.getRecordType() == 6002l) {
- // PersistPtrIncrementalBlock
- System.out.println("Found PersistPtrIncrementalBlock at " + pos + " (" + Integer.toHexString(pos) + ")");
- PersistPtrHolder pph = (PersistPtrHolder)r;
-
- // Check the sheet offsets
- Map<Integer,Integer> sheetOffsets = pph.getSlideLocationsLookup();
- for(int id : pph.getKnownSlideIDs()) {
- Integer offset = sheetOffsets.get(id);
-
- System.out.println(" Knows about sheet " + id);
- System.out.println(" That sheet lives at " + offset);
-
- Record atPos = findRecordAtPos(offset.intValue());
- System.out.println(" The record at that pos is of type " + atPos.getRecordType());
- System.out.println(" The record at that pos has class " + atPos.getClass().getName());
-
- if(! (atPos instanceof PositionDependentRecord)) {
- System.out.println(" ** The record class isn't position aware! **");
+ try (HSLFSlideShowImpl ss = new HSLFSlideShowImpl(args[0])) {
+ fileContents = ss.getUnderlyingBytes();
+ System.out.println();
+
+ // Find any persist ones first
+ int pos = 0;
+ for (Record r : ss.getRecords()) {
+ if (r.getRecordType() == 6001L) {
+ // PersistPtrFullBlock
+ System.out.println("Found PersistPtrFullBlock at " + pos + " (" + Integer.toHexString(pos) + ")");
+ }
+ if (r.getRecordType() == 6002L) {
+ // PersistPtrIncrementalBlock
+ System.out.println("Found PersistPtrIncrementalBlock at " + pos + " (" + Integer.toHexString(pos) + ")");
+ PersistPtrHolder pph = (PersistPtrHolder) r;
+
+ // Check the sheet offsets
+ Map<Integer, Integer> sheetOffsets = pph.getSlideLocationsLookup();
+ for (int id : pph.getKnownSlideIDs()) {
+ Integer offset = sheetOffsets.get(id);
+
+ System.out.println(" Knows about sheet " + id);
+ System.out.println(" That sheet lives at " + offset);
+
+ Record atPos = findRecordAtPos(offset.intValue());
+ System.out.println(" The record at that pos is of type " + atPos.getRecordType());
+ System.out.println(" The record at that pos has class " + atPos.getClass().getName());
+
+ if (!(atPos instanceof PositionDependentRecord)) {
+ System.out.println(" ** The record class isn't position aware! **");
+ }
}
}
+
+ // Increase the position by the on disk size
+ ByteArrayOutputStream baos = new ByteArrayOutputStream();
+ r.writeOut(baos);
+ pos += baos.size();
}
- // Increase the position by the on disk size
- ByteArrayOutputStream baos = new ByteArrayOutputStream();
- r.writeOut(baos);
- pos += baos.size();
- }
+ System.out.println();
+
+ pos = 0;
+ // Now look for UserEditAtoms
+ for (Record r : ss.getRecords()) {
+ if (r instanceof UserEditAtom) {
+ UserEditAtom uea = (UserEditAtom) r;
+ System.out.println("Found UserEditAtom at " + pos + " (" + Integer.toHexString(pos) + ")");
+ System.out.println(" lastUserEditAtomOffset = " + uea.getLastUserEditAtomOffset());
+ System.out.println(" persistPointersOffset = " + uea.getPersistPointersOffset());
+ System.out.println(" docPersistRef = " + uea.getDocPersistRef());
+ System.out.println(" maxPersistWritten = " + uea.getMaxPersistWritten());
+ }
- System.out.println();
-
- pos = 0;
- // Now look for UserEditAtoms
- for(Record r : ss.getRecords()) {
- if(r instanceof UserEditAtom) {
- UserEditAtom uea = (UserEditAtom)r;
- System.out.println("Found UserEditAtom at " + pos + " (" + Integer.toHexString(pos) + ")");
- System.out.println(" lastUserEditAtomOffset = " + uea.getLastUserEditAtomOffset() );
- System.out.println(" persistPointersOffset = " + uea.getPersistPointersOffset() );
- System.out.println(" docPersistRef = " + uea.getDocPersistRef() );
- System.out.println(" maxPersistWritten = " + uea.getMaxPersistWritten() );
+ // Increase the position by the on disk size
+ ByteArrayOutputStream baos = new ByteArrayOutputStream();
+ r.writeOut(baos);
+ pos += baos.size();
}
- // Increase the position by the on disk size
- ByteArrayOutputStream baos = new ByteArrayOutputStream();
- r.writeOut(baos);
- pos += baos.size();
- }
-
- System.out.println();
+ System.out.println();
- // Query the CurrentUserAtom
- CurrentUserAtom cua = ss.getCurrentUserAtom();
- System.out.println("Checking Current User Atom");
- System.out.println(" Thinks the CurrentEditOffset is " + cua.getCurrentEditOffset());
-
- System.out.println();
+ // Query the CurrentUserAtom
+ CurrentUserAtom cua = ss.getCurrentUserAtom();
+ System.out.println("Checking Current User Atom");
+ System.out.println(" Thinks the CurrentEditOffset is " + cua.getCurrentEditOffset());
- ss.close();
+ System.out.println();
+ }
}
* "reader". It is only a very basic class for now
*/
public final class HSLFSlideShowImpl extends POIDocument implements Closeable {
+ private static final POILogger logger = POILogFactory.getLogger(HSLFSlideShowImpl.class);
+
static final int UNSET_OFFSET = -1;
//arbitrarily selected; may need to increase
private static final int MAX_RECORD_LENGTH = 200_000_000;
- // For logging
- private POILogger logger = POILogFactory.getLogger(this.getClass());
+ private static final String DUAL_STORAGE_NAME = "PP97_DUALSTORAGE";
// Holds metadata on where things are in our document
private CurrentUserAtom currentUser;
public HSLFSlideShowImpl(DirectoryNode dir) throws IOException {
super(handleDualStorage(dir));
- // First up, grab the "Current User" stream
- // We need this before we can detect Encrypted Documents
- readCurrentUserStream();
+ try {
+ // First up, grab the "Current User" stream
+ // We need this before we can detect Encrypted Documents
+ readCurrentUserStream();
+
+ // Next up, grab the data that makes up the
+ // PowerPoint stream
+ readPowerPointStream();
- // Next up, grab the data that makes up the
- // PowerPoint stream
- readPowerPointStream();
+ // Now, build records based on the PowerPoint stream
+ buildRecords();
- // Now, build records based on the PowerPoint stream
- buildRecords();
+ // Look for any other streams
+ readOtherStreams();
+ } catch (RuntimeException | IOException e) {
+ // clean up the filesystem when we cannot read it here to avoid
+ // leaking file handles
+ dir.getFileSystem().close();
- // Look for any other streams
- readOtherStreams();
+ throw e;
+ }
}
private static DirectoryNode handleDualStorage(DirectoryNode dir) throws IOException {
// when there's a dual storage entry, use it, as the outer document can't be read quite probably ...
- String dualName = "PP97_DUALSTORAGE";
- if (!dir.hasEntry(dualName)) {
+ if (!dir.hasEntry(DUAL_STORAGE_NAME)) {
return dir;
}
- dir = (DirectoryNode) dir.getEntry(dualName);
- return dir;
+ return (DirectoryNode) dir.getEntry(DUAL_STORAGE_NAME);
}
/**
public void close() throws IOException {
// only close the filesystem, if we are based on the root node.
// embedded documents/slideshows shouldn't close the parent container
- if (getDirectory().getParent() == null) {
+ if (getDirectory().getParent() == null ||
+ getDirectory().getName().equals(DUAL_STORAGE_NAME)) {
POIFSFileSystem fs = getDirectory().getFileSystem();
if (fs != null) {
fs.close();
}
}
- protected void runFormatTests(String workbookName, CellValue valueGetter) {
+ protected void runFormatTests(String workbookName, CellValue valueGetter) throws IOException {
openWorkbook(workbookName);
tryFormat(row.getRowNum(), expectedText, format, valueGetter, value);
}
}
+
+ workbook.close();
}
/**