mirror of https://github.com/apache/poi.git
Close file-handles for slideshows also when construction fails or when dual-storage is used
Also avoid file-leak reports in some tests git-svn-id: https://svn.apache.org/repos/asf/poi/trunk@1854192 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
parent
98b620889b
commit
6a93b3a9ed
|
@ -40,7 +40,7 @@ import org.junit.Test;
|
|||
public class TestDetectAsOOXML {
|
||||
@Test
|
||||
public void testOpensProperly() throws IOException, InvalidFormatException {
|
||||
OPCPackage.open(HSSFTestDataSamples.openSampleFileStream("sample.xlsx"));
|
||||
OPCPackage.open(HSSFTestDataSamples.openSampleFileStream("sample.xlsx")).close();
|
||||
}
|
||||
|
||||
@Test
|
||||
|
|
|
@ -67,5 +67,7 @@ public class TestEmbedded extends TestCase
|
|||
byte[] b = IOUtils.toByteArray(pp.getInputStream());
|
||||
assertTrue(b.length > 0);
|
||||
}
|
||||
|
||||
doc.close();
|
||||
}
|
||||
}
|
||||
|
|
|
@ -81,15 +81,10 @@ public final class TestListParts extends TestCase {
|
|||
/**
|
||||
* 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());
|
||||
|
@ -100,5 +95,7 @@ public final class TestListParts extends TestCase {
|
|||
assertNotNull(values.get(partName));
|
||||
assertEquals(expectedValues.get(partName), values.get(partName));
|
||||
}
|
||||
|
||||
p.close();
|
||||
}
|
||||
}
|
||||
|
|
|
@ -30,7 +30,6 @@ import junit.framework.TestCase;
|
|||
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 {
|
||||
|
@ -51,18 +50,19 @@ 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());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -72,39 +72,40 @@ public class TestRelationships extends TestCase {
|
|||
*/
|
||||
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"));
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -113,31 +114,32 @@ public class TestRelationships extends TestCase {
|
|||
*/
|
||||
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);
|
||||
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());
|
||||
// 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());
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
|
@ -217,74 +219,73 @@ public class TestRelationships extends TestCase {
|
|||
}
|
||||
|
||||
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");
|
||||
ByteArrayOutputStream baos = new ByteArrayOutputStream();
|
||||
OPCPackage pkg = OPCPackage.create(baos);
|
||||
|
||||
// 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/",
|
||||
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;
|
||||
|
||||
|
@ -371,7 +372,8 @@ public class TestRelationships extends TestCase {
|
|||
|
||||
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());
|
||||
|
|
|
@ -119,17 +119,18 @@ public final class TestOPCComplianceCoreProperties {
|
|||
|
||||
// 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) {
|
||||
|
|
|
@ -20,6 +20,7 @@ import static org.junit.Assert.assertEquals;
|
|||
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;
|
||||
|
@ -27,6 +28,7 @@ import java.util.regex.Pattern;
|
|||
|
||||
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;
|
||||
|
@ -58,7 +60,7 @@ public class TestCellFormatPart extends CellFormatTestBase {
|
|||
}
|
||||
|
||||
@Test
|
||||
public void testGeneralFormat() {
|
||||
public void testGeneralFormat() throws IOException {
|
||||
runFormatTests("GeneralFormatTests.xlsx", new CellValue() {
|
||||
@Override
|
||||
public Object getValue(Cell cell) {
|
||||
|
@ -75,7 +77,7 @@ public class TestCellFormatPart extends CellFormatTestBase {
|
|||
}
|
||||
|
||||
@Test
|
||||
public void testNumberFormat() {
|
||||
public void testNumberFormat() throws IOException {
|
||||
runFormatTests("NumberFormatTests.xlsx", new CellValue() {
|
||||
@Override
|
||||
public Object getValue(Cell cell) {
|
||||
|
@ -85,7 +87,7 @@ public class TestCellFormatPart extends CellFormatTestBase {
|
|||
}
|
||||
|
||||
@Test
|
||||
public void testNumberApproxFormat() {
|
||||
public void testNumberApproxFormat() throws IOException {
|
||||
runFormatTests("NumberFormatApproxTests.xlsx", new CellValue() {
|
||||
@Override
|
||||
public Object getValue(Cell cell) {
|
||||
|
@ -106,7 +108,7 @@ public class TestCellFormatPart extends CellFormatTestBase {
|
|||
}
|
||||
|
||||
@Test
|
||||
public void testDateFormat() {
|
||||
public void testDateFormat() throws IOException {
|
||||
TimeZone tz = LocaleUtil.getUserTimeZone();
|
||||
LocaleUtil.setUserTimeZone(TimeZone.getTimeZone("CET"));
|
||||
try {
|
||||
|
@ -122,7 +124,7 @@ public class TestCellFormatPart extends CellFormatTestBase {
|
|||
}
|
||||
|
||||
@Test
|
||||
public void testElapsedFormat() {
|
||||
public void testElapsedFormat() throws IOException {
|
||||
runFormatTests("ElapsedFormatTests.xlsx", new CellValue() {
|
||||
@Override
|
||||
public Object getValue(Cell cell) {
|
||||
|
@ -132,22 +134,20 @@ public class TestCellFormatPart extends CellFormatTestBase {
|
|||
}
|
||||
|
||||
@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) {
|
||||
|
|
|
@ -28,6 +28,8 @@ import org.apache.poi.ss.usermodel.Workbook;
|
|||
import org.apache.poi.xssf.XSSFTestDataSamples;
|
||||
import org.junit.Test;
|
||||
|
||||
import java.io.IOException;
|
||||
|
||||
/**
|
||||
*
|
||||
*/
|
||||
|
@ -37,14 +39,15 @@ public class TestSumifsXSSF {
|
|||
* handle null cell predicate
|
||||
*/
|
||||
@Test
|
||||
public void testBug60858() {
|
||||
Workbook wb = XSSFTestDataSamples.openSampleWorkbook("bug60858.xlsx");
|
||||
FormulaEvaluator fe = wb.getCreationHelper().createFormulaEvaluator();
|
||||
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);
|
||||
Sheet sheet = wb.getSheetAt(0);
|
||||
Cell cell = sheet.getRow(1).getCell(5);
|
||||
fe.evaluate(cell);
|
||||
assertEquals(0.0, cell.getNumericCellValue(), 0.0000000000000001);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -26,9 +26,12 @@ import org.apache.poi.xssf.XSSFTestDataSamples;
|
|||
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();
|
||||
|
@ -44,6 +47,11 @@ public class TestXSSFRangeCopier extends TestRangeCopier {
|
|||
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);
|
||||
|
|
|
@ -33,6 +33,7 @@ import org.apache.poi.xslf.usermodel.XSLFRelation;
|
|||
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;
|
||||
|
@ -50,6 +51,11 @@ public class TestXSLFSlideShow {
|
|||
pack = OPCPackage.open(slTests.openResourceAsStream("sample.pptx"));
|
||||
}
|
||||
|
||||
@After
|
||||
public void tearDown() throws IOException {
|
||||
pack.close();
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testContainsMainContentType() throws Exception {
|
||||
boolean found = false;
|
||||
|
|
|
@ -16,21 +16,34 @@
|
|||
==================================================================== */
|
||||
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;
|
||||
|
||||
public class TestSheetProtection extends TestCase {
|
||||
import java.io.IOException;
|
||||
|
||||
import static org.junit.Assert.assertFalse;
|
||||
import static org.junit.Assert.assertTrue;
|
||||
|
||||
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());
|
||||
|
@ -48,27 +61,30 @@ public class TestSheetProtection extends TestCase {
|
|||
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());
|
||||
|
@ -77,8 +93,9 @@ public class TestSheetProtection extends TestCase {
|
|||
sheet.lockAutoFilter(false);
|
||||
assertFalse(sheet.isAutoFilterLocked());
|
||||
}
|
||||
|
||||
public void testWriteDeleteColumns() throws Exception {
|
||||
|
||||
@Test
|
||||
public void testWriteDeleteColumns() {
|
||||
assertFalse(sheet.isDeleteColumnsLocked());
|
||||
sheet.lockDeleteColumns(true);
|
||||
assertFalse(sheet.isDeleteColumnsLocked());
|
||||
|
@ -87,8 +104,9 @@ public class TestSheetProtection extends TestCase {
|
|||
sheet.lockDeleteColumns(false);
|
||||
assertFalse(sheet.isDeleteColumnsLocked());
|
||||
}
|
||||
|
||||
public void testWriteDeleteRows() throws Exception {
|
||||
|
||||
@Test
|
||||
public void testWriteDeleteRows() {
|
||||
assertFalse(sheet.isDeleteRowsLocked());
|
||||
sheet.lockDeleteRows(true);
|
||||
assertFalse(sheet.isDeleteRowsLocked());
|
||||
|
@ -97,8 +115,9 @@ public class TestSheetProtection extends TestCase {
|
|||
sheet.lockDeleteRows(false);
|
||||
assertFalse(sheet.isDeleteRowsLocked());
|
||||
}
|
||||
|
||||
public void testWriteFormatCells() throws Exception {
|
||||
|
||||
@Test
|
||||
public void testWriteFormatCells() {
|
||||
assertFalse(sheet.isFormatCellsLocked());
|
||||
sheet.lockFormatCells(true);
|
||||
assertFalse(sheet.isFormatCellsLocked());
|
||||
|
@ -107,8 +126,9 @@ public class TestSheetProtection extends TestCase {
|
|||
sheet.lockFormatCells(false);
|
||||
assertFalse(sheet.isFormatCellsLocked());
|
||||
}
|
||||
|
||||
public void testWriteFormatColumns() throws Exception {
|
||||
|
||||
@Test
|
||||
public void testWriteFormatColumns() {
|
||||
assertFalse(sheet.isFormatColumnsLocked());
|
||||
sheet.lockFormatColumns(true);
|
||||
assertFalse(sheet.isFormatColumnsLocked());
|
||||
|
@ -117,8 +137,9 @@ public class TestSheetProtection extends TestCase {
|
|||
sheet.lockFormatColumns(false);
|
||||
assertFalse(sheet.isFormatColumnsLocked());
|
||||
}
|
||||
|
||||
public void testWriteFormatRows() throws Exception {
|
||||
|
||||
@Test
|
||||
public void testWriteFormatRows() {
|
||||
assertFalse(sheet.isFormatRowsLocked());
|
||||
sheet.lockFormatRows(true);
|
||||
assertFalse(sheet.isFormatRowsLocked());
|
||||
|
@ -127,8 +148,9 @@ public class TestSheetProtection extends TestCase {
|
|||
sheet.lockFormatRows(false);
|
||||
assertFalse(sheet.isFormatRowsLocked());
|
||||
}
|
||||
|
||||
public void testWriteInsertColumns() throws Exception {
|
||||
|
||||
@Test
|
||||
public void testWriteInsertColumns() {
|
||||
assertFalse(sheet.isInsertColumnsLocked());
|
||||
sheet.lockInsertColumns(true);
|
||||
assertFalse(sheet.isInsertColumnsLocked());
|
||||
|
@ -137,8 +159,9 @@ public class TestSheetProtection extends TestCase {
|
|||
sheet.lockInsertColumns(false);
|
||||
assertFalse(sheet.isInsertColumnsLocked());
|
||||
}
|
||||
|
||||
public void testWriteInsertHyperlinks() throws Exception {
|
||||
|
||||
@Test
|
||||
public void testWriteInsertHyperlinks() {
|
||||
assertFalse(sheet.isInsertHyperlinksLocked());
|
||||
sheet.lockInsertHyperlinks(true);
|
||||
assertFalse(sheet.isInsertHyperlinksLocked());
|
||||
|
@ -147,8 +170,9 @@ public class TestSheetProtection extends TestCase {
|
|||
sheet.lockInsertHyperlinks(false);
|
||||
assertFalse(sheet.isInsertHyperlinksLocked());
|
||||
}
|
||||
|
||||
public void testWriteInsertRows() throws Exception {
|
||||
|
||||
@Test
|
||||
public void testWriteInsertRows() {
|
||||
assertFalse(sheet.isInsertRowsLocked());
|
||||
sheet.lockInsertRows(true);
|
||||
assertFalse(sheet.isInsertRowsLocked());
|
||||
|
@ -157,8 +181,9 @@ public class TestSheetProtection extends TestCase {
|
|||
sheet.lockInsertRows(false);
|
||||
assertFalse(sheet.isInsertRowsLocked());
|
||||
}
|
||||
|
||||
public void testWritePivotTables() throws Exception {
|
||||
|
||||
@Test
|
||||
public void testWritePivotTables() {
|
||||
assertFalse(sheet.isPivotTablesLocked());
|
||||
sheet.lockPivotTables(true);
|
||||
assertFalse(sheet.isPivotTablesLocked());
|
||||
|
@ -167,8 +192,9 @@ public class TestSheetProtection extends TestCase {
|
|||
sheet.lockPivotTables(false);
|
||||
assertFalse(sheet.isPivotTablesLocked());
|
||||
}
|
||||
|
||||
public void testWriteSort() throws Exception {
|
||||
|
||||
@Test
|
||||
public void testWriteSort() {
|
||||
assertFalse(sheet.isSortLocked());
|
||||
sheet.lockSort(true);
|
||||
assertFalse(sheet.isSortLocked());
|
||||
|
@ -177,8 +203,9 @@ public class TestSheetProtection extends TestCase {
|
|||
sheet.lockSort(false);
|
||||
assertFalse(sheet.isSortLocked());
|
||||
}
|
||||
|
||||
public void testWriteObjects() throws Exception {
|
||||
|
||||
@Test
|
||||
public void testWriteObjects() {
|
||||
assertFalse(sheet.isObjectsLocked());
|
||||
sheet.lockObjects(true);
|
||||
assertFalse(sheet.isObjectsLocked());
|
||||
|
@ -187,8 +214,9 @@ public class TestSheetProtection extends TestCase {
|
|||
sheet.lockObjects(false);
|
||||
assertFalse(sheet.isObjectsLocked());
|
||||
}
|
||||
|
||||
public void testWriteScenarios() throws Exception {
|
||||
|
||||
@Test
|
||||
public void testWriteScenarios() {
|
||||
assertFalse(sheet.isScenariosLocked());
|
||||
sheet.lockScenarios(true);
|
||||
assertFalse(sheet.isScenariosLocked());
|
||||
|
@ -197,8 +225,9 @@ public class TestSheetProtection extends TestCase {
|
|||
sheet.lockScenarios(false);
|
||||
assertFalse(sheet.isScenariosLocked());
|
||||
}
|
||||
|
||||
public void testWriteSelectLockedCells() throws Exception {
|
||||
|
||||
@Test
|
||||
public void testWriteSelectLockedCells() {
|
||||
assertFalse(sheet.isSelectLockedCellsLocked());
|
||||
sheet.lockSelectLockedCells(true);
|
||||
assertFalse(sheet.isSelectLockedCellsLocked());
|
||||
|
@ -207,8 +236,9 @@ public class TestSheetProtection extends TestCase {
|
|||
sheet.lockSelectLockedCells(false);
|
||||
assertFalse(sheet.isSelectLockedCellsLocked());
|
||||
}
|
||||
|
||||
public void testWriteSelectUnlockedCells() throws Exception {
|
||||
|
||||
@Test
|
||||
public void testWriteSelectUnlockedCells() {
|
||||
assertFalse(sheet.isSelectUnlockedCellsLocked());
|
||||
sheet.lockSelectUnlockedCells(true);
|
||||
assertFalse(sheet.isSelectUnlockedCellsLocked());
|
||||
|
@ -218,43 +248,46 @@ public class TestSheetProtection extends TestCase {
|
|||
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());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -42,151 +42,162 @@ import org.apache.poi.xssf.usermodel.XSSFCell;
|
|||
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());
|
||||
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
|
||||
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));
|
||||
|
||||
// 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));
|
||||
// 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());
|
||||
try (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());
|
||||
try (XSSFWorkbook 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());
|
||||
try (XSSFWorkbook 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_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
|
||||
|
@ -194,43 +205,43 @@ public class TestWorkbookProtection {
|
|||
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();
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -28,29 +28,24 @@ import org.apache.poi.openxml4j.opc.PackagePart;
|
|||
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
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
|
|
@ -30,25 +30,21 @@ import org.apache.poi.xssf.eventusermodel.XSSFReader;
|
|||
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());
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
|
|
@ -39,47 +39,47 @@ public final class TestReadOnlySharedStringsTable extends TestCase {
|
|||
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());
|
||||
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));
|
||||
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.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);
|
||||
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());
|
||||
try (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());
|
||||
ReadOnlySharedStringsTable rtbl = new ReadOnlySharedStringsTable(parts.get(0), true);
|
||||
List<String> 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 \u30CB\u30DB\u30F3", 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));
|
||||
//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 {
|
||||
|
@ -90,8 +90,9 @@ public final class TestReadOnlySharedStringsTable extends TestCase {
|
|||
}
|
||||
|
||||
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 {
|
||||
|
@ -100,5 +101,4 @@ public final class TestReadOnlySharedStringsTable extends TestCase {
|
|||
assertEquals(0, sst.getUniqueCount());
|
||||
assertNull(sst.getItems()); // same state it's left in if fed a package which has no SST part.
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -120,40 +120,41 @@ public class TestXSSFBReader {
|
|||
|
||||
@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();
|
||||
// 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());
|
||||
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
|
||||
|
|
|
@ -51,72 +51,76 @@ public final class TestXSSFReader {
|
|||
|
||||
@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"));
|
||||
try (OPCPackage pkg = OPCPackage.open(_ssTests.openResourceAsStream("SampleSS.xlsx"))) {
|
||||
|
||||
XSSFReader r = new XSSFReader(pkg);
|
||||
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());
|
||||
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"));
|
||||
try (OPCPackage pkg = OPCPackage.open(_ssTests.openResourceAsStream("SampleSS.xlsx"))) {
|
||||
|
||||
XSSFReader r = new XSSFReader(pkg);
|
||||
byte[] data = new byte[4096];
|
||||
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);
|
||||
// By r:id
|
||||
assertNotNull(r.getSheet("rId2"));
|
||||
int read = IOUtils.readFully(r.getSheet("rId2"), data);
|
||||
assertEquals(974, read);
|
||||
|
||||
// All
|
||||
Iterator<InputStream> it = r.getSheetsData();
|
||||
// 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();
|
||||
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);
|
||||
assertTrue(read > 400);
|
||||
assertTrue(read < 1500);
|
||||
}
|
||||
assertEquals(3, count);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -125,82 +129,82 @@ public final class TestXSSFReader {
|
|||
*/
|
||||
@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();
|
||||
try (OPCPackage pkg = XSSFTestDataSamples.openSamplePackage("comments.xlsx")) {
|
||||
XSSFReader r = new XSSFReader(pkg);
|
||||
XSSFReader.SheetIterator it = (XSSFReader.SheetIterator) r.getSheetsData();
|
||||
|
||||
if(count == 1) {
|
||||
assertNotNull(it.getSheetComments());
|
||||
CommentsTable ct = it.getSheetComments();
|
||||
assertEquals(1, ct.getNumberOfAuthors());
|
||||
assertEquals(3, ct.getNumberOfComments());
|
||||
} else {
|
||||
assertNull(it.getSheetComments());
|
||||
}
|
||||
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();
|
||||
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");
|
||||
String text = getShapesString(it);
|
||||
assertContains(text, "Line 1");
|
||||
assertContains(text, "Line 2");
|
||||
assertContains(text, "Line 3");
|
||||
}
|
||||
}
|
||||
|
||||
private String getShapesString(XSSFReader.SheetIterator it) {
|
||||
|
@ -222,25 +226,26 @@ public final class TestXSSFReader {
|
|||
|
||||
@Test
|
||||
public void testBug57914() throws Exception {
|
||||
OPCPackage pkg = XSSFTestDataSamples.openSamplePackage("57914.xlsx");
|
||||
final XSSFReader r;
|
||||
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;
|
||||
// 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();
|
||||
|
||||
String text = getShapesString(it);
|
||||
assertContains(text, "Line 1");
|
||||
assertContains(text, "Line 2");
|
||||
assertContains(text, "Line 3");
|
||||
}
|
||||
|
||||
XSSFReader.SheetIterator it = (XSSFReader.SheetIterator) r.getSheetsData();
|
||||
|
||||
String text = getShapesString(it);
|
||||
assertContains(text, "Line 1");
|
||||
assertContains(text, "Line 2");
|
||||
assertContains(text, "Line 3");
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -249,21 +254,20 @@ public final class TestXSSFReader {
|
|||
*/
|
||||
@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);
|
||||
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();
|
||||
assertEquals(true, iter.hasNext());
|
||||
iter.next();
|
||||
XSSFReader.SheetIterator iter = (XSSFReader.SheetIterator) reader.getSheetsData();
|
||||
assertTrue(iter.hasNext());
|
||||
iter.next();
|
||||
|
||||
assertEquals(false, iter.hasNext());
|
||||
assertEquals("Orders", iter.getSheetName());
|
||||
|
||||
pkg.close();
|
||||
assertFalse(iter.hasNext());
|
||||
assertEquals("Orders", iter.getSheetName());
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -272,18 +276,17 @@ public final class TestXSSFReader {
|
|||
*/
|
||||
@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);
|
||||
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());
|
||||
|
||||
pkg.close();
|
||||
XSSFReader.SheetIterator iter = (XSSFReader.SheetIterator) reader.getSheetsData();
|
||||
assertNotNull(iter.next());
|
||||
assertFalse(iter.hasNext());
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -300,18 +303,18 @@ public final class TestXSSFReader {
|
|||
*/
|
||||
@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
|
||||
|
|
|
@ -17,8 +17,10 @@
|
|||
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;
|
||||
|
@ -104,23 +106,23 @@ public class TestXWPFRun {
|
|||
|
||||
// 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
|
||||
|
@ -129,7 +131,7 @@ public class TestXWPFRun {
|
|||
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"/>,
|
||||
|
@ -143,7 +145,7 @@ public class TestXWPFRun {
|
|||
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());
|
||||
|
@ -155,7 +157,7 @@ public class TestXWPFRun {
|
|||
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());
|
||||
|
@ -297,17 +299,17 @@ public class TestXWPFRun {
|
|||
|
||||
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
|
||||
|
@ -317,11 +319,11 @@ public class TestXWPFRun {
|
|||
|
||||
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
|
||||
|
@ -331,10 +333,10 @@ public class TestXWPFRun {
|
|||
|
||||
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
|
||||
|
@ -344,75 +346,75 @@ public class TestXWPFRun {
|
|||
|
||||
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();
|
||||
}
|
||||
|
@ -643,7 +645,7 @@ public class TestXWPFRun {
|
|||
}
|
||||
|
||||
@Test
|
||||
public void testSetters() throws IOException {
|
||||
public void testSetters() {
|
||||
XWPFDocument document = new XWPFDocument();
|
||||
final XWPFRun run = document.createParagraph().createRun();
|
||||
|
||||
|
@ -679,12 +681,12 @@ public class TestXWPFRun {
|
|||
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();
|
||||
}
|
||||
|
@ -693,11 +695,11 @@ public class TestXWPFRun {
|
|||
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();
|
||||
}
|
||||
|
||||
|
@ -727,7 +729,6 @@ public class TestXWPFRun {
|
|||
assertEquals(STVerticalAlignRun.BASELINE, rpr.getVertAlign().getVal());
|
||||
}
|
||||
|
||||
|
||||
@Test
|
||||
public void testSetGetEmphasisMark() throws IOException {
|
||||
XWPFDocument document = new XWPFDocument();
|
||||
|
@ -780,7 +781,9 @@ public class TestXWPFRun {
|
|||
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();
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -77,19 +77,19 @@ public final class SlideShowDumper {
|
|||
filename = args[1];
|
||||
}
|
||||
|
||||
POIFSFileSystem poifs = new POIFSFileSystem(new File(filename));
|
||||
SlideShowDumper foo = new SlideShowDumper(poifs, System.out);
|
||||
poifs.close();
|
||||
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);
|
||||
if(args.length > 1) {
|
||||
if(args[0].equalsIgnoreCase("-escher")) {
|
||||
foo.setDDFEscher(true);
|
||||
} else {
|
||||
foo.setBasicEscher(true);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
foo.printDump();
|
||||
foo.printDump();
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
|
@ -41,38 +41,36 @@ public final class TextStyleListing {
|
|||
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) {
|
||||
|
|
|
@ -43,79 +43,77 @@ public final class UserEditAndPersistListing {
|
|||
System.exit(1);
|
||||
}
|
||||
|
||||
|
||||
// Create the slideshow object, for normal working with
|
||||
HSLFSlideShowImpl ss = new HSLFSlideShowImpl(args[0]);
|
||||
fileContents = ss.getUnderlyingBytes();
|
||||
System.out.println();
|
||||
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;
|
||||
// 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);
|
||||
// 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);
|
||||
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());
|
||||
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! **");
|
||||
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();
|
||||
|
||||
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());
|
||||
}
|
||||
|
||||
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();
|
||||
|
||||
|
||||
// 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();
|
||||
}
|
||||
|
||||
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();
|
||||
|
||||
ss.close();
|
||||
}
|
||||
|
||||
|
||||
|
|
|
@ -66,13 +66,14 @@ import org.apache.poi.util.POILogger;
|
|||
* "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;
|
||||
|
@ -136,29 +137,35 @@ public final class HSLFSlideShowImpl extends POIDocument implements Closeable {
|
|||
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();
|
||||
// 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();
|
||||
|
||||
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);
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -834,7 +841,8 @@ public final class HSLFSlideShowImpl extends POIDocument implements Closeable {
|
|||
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();
|
||||
|
|
|
@ -96,7 +96,7 @@ public class CellFormatTestBase {
|
|||
}
|
||||
}
|
||||
|
||||
protected void runFormatTests(String workbookName, CellValue valueGetter) {
|
||||
protected void runFormatTests(String workbookName, CellValue valueGetter) throws IOException {
|
||||
|
||||
openWorkbook(workbookName);
|
||||
|
||||
|
@ -127,6 +127,8 @@ public class CellFormatTestBase {
|
|||
tryFormat(row.getRowNum(), expectedText, format, valueGetter, value);
|
||||
}
|
||||
}
|
||||
|
||||
workbook.close();
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
Loading…
Reference in New Issue