extra tests for Zip package parts backed by temp files

git-svn-id: https://svn.apache.org/repos/asf/poi/trunk@1894313 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
PJ Fanning 2021-10-17 10:24:03 +00:00
parent 0042a47172
commit b20897a996
4 changed files with 59 additions and 35 deletions

View File

@ -62,7 +62,7 @@ public final class EncryptedTempFilePackagePart extends PackagePart {
*/
public EncryptedTempFilePackagePart(OPCPackage pack, PackagePartName partName,
String contentType) throws InvalidFormatException, IOException {
this(pack, partName, contentType, false);
this(pack, partName, contentType, true);
}
/**

View File

@ -57,7 +57,7 @@ public final class MemoryPackagePart extends PackagePart {
*/
public MemoryPackagePart(OPCPackage pack, PackagePartName partName,
String contentType) throws InvalidFormatException {
super(pack, partName, contentType);
this(pack, partName, contentType, true);
}
/**

View File

@ -61,7 +61,7 @@ public final class TempFilePackagePart extends PackagePart {
*/
public TempFilePackagePart(OPCPackage pack, PackagePartName partName,
String contentType) throws InvalidFormatException, IOException {
this(pack, partName, contentType, false);
this(pack, partName, contentType, true);
}
/**

View File

@ -25,6 +25,7 @@ import static org.junit.jupiter.api.Assertions.assertSame;
import java.io.IOException;
import java.util.List;
import org.apache.poi.openxml4j.opc.ZipPackage;
import org.apache.poi.ss.usermodel.BaseTestPicture;
import org.apache.poi.ss.usermodel.ClientAnchor.AnchorType;
import org.apache.poi.ss.usermodel.Drawing;
@ -105,50 +106,73 @@ public final class TestXSSFPicture extends BaseTestPicture {
}
/**
* same image refrerred by mulitple sheets
* same image referred to by multiple sheets
*/
@Test
void multiRelationShips() throws IOException {
try (XSSFWorkbook wb1 = new XSSFWorkbook()) {
byte[] pic1Data = "test jpeg data".getBytes(LocaleUtil.CHARSET_1252);
byte[] pic2Data = "test png data".getBytes(LocaleUtil.CHARSET_1252);
void multiRelationships() throws IOException {
multiRelationships(false, false);
}
List<XSSFPictureData> pictures = wb1.getAllPictures();
assertEquals(0, pictures.size());
@Test
void multiRelationshipsWithTempFileParts() throws IOException {
multiRelationships(true, false);
}
int pic1 = wb1.addPicture(pic1Data, XSSFWorkbook.PICTURE_TYPE_JPEG);
int pic2 = wb1.addPicture(pic2Data, XSSFWorkbook.PICTURE_TYPE_PNG);
@Test
void multiRelationshipsWithEncryptedTempFileParts() throws IOException {
multiRelationships(true, true);
}
XSSFSheet sheet1 = wb1.createSheet();
XSSFDrawing drawing1 = sheet1.createDrawingPatriarch();
XSSFPicture shape1 = drawing1.createPicture(new XSSFClientAnchor(), pic1);
XSSFPicture shape2 = drawing1.createPicture(new XSSFClientAnchor(), pic2);
private void multiRelationships(boolean tempFileParts, boolean encrypt) throws IOException {
final boolean originalTempFileSetting = ZipPackage.useTempFilePackageParts();
final boolean originalEncryptSetting = ZipPackage.encryptTempFilePackageParts();
try {
ZipPackage.setUseTempFilePackageParts(tempFileParts);
ZipPackage.setEncryptTempFilePackageParts(encrypt);
try (XSSFWorkbook wb1 = new XSSFWorkbook()) {
byte[] pic1Data = "test jpeg data".getBytes(LocaleUtil.CHARSET_1252);
byte[] pic2Data = "test png data".getBytes(LocaleUtil.CHARSET_1252);
XSSFSheet sheet2 = wb1.createSheet();
XSSFDrawing drawing2 = sheet2.createDrawingPatriarch();
XSSFPicture shape3 = drawing2.createPicture(new XSSFClientAnchor(), pic2);
XSSFPicture shape4 = drawing2.createPicture(new XSSFClientAnchor(), pic1);
List<XSSFPictureData> pictures = wb1.getAllPictures();
assertEquals(0, pictures.size());
assertEquals(2, pictures.size());
int pic1 = wb1.addPicture(pic1Data, XSSFWorkbook.PICTURE_TYPE_JPEG);
int pic2 = wb1.addPicture(pic2Data, XSSFWorkbook.PICTURE_TYPE_PNG);
XSSFSheet sheet1 = wb1.createSheet();
XSSFDrawing drawing1 = sheet1.createDrawingPatriarch();
XSSFPicture shape1 = drawing1.createPicture(new XSSFClientAnchor(), pic1);
XSSFPicture shape2 = drawing1.createPicture(new XSSFClientAnchor(), pic2);
XSSFSheet sheet2 = wb1.createSheet();
XSSFDrawing drawing2 = sheet2.createDrawingPatriarch();
XSSFPicture shape3 = drawing2.createPicture(new XSSFClientAnchor(), pic2);
XSSFPicture shape4 = drawing2.createPicture(new XSSFClientAnchor(), pic1);
try (XSSFWorkbook wb2 = XSSFTestDataSamples.writeOutAndReadBack(wb1)) {
pictures = wb2.getAllPictures();
assertEquals(2, pictures.size());
sheet1 = wb2.getSheetAt(0);
drawing1 = sheet1.createDrawingPatriarch();
XSSFPicture shape11 = (XSSFPicture) drawing1.getShapes().get(0);
assertArrayEquals(shape1.getPictureData().getData(), shape11.getPictureData().getData());
XSSFPicture shape22 = (XSSFPicture) drawing1.getShapes().get(1);
assertArrayEquals(shape2.getPictureData().getData(), shape22.getPictureData().getData());
try (XSSFWorkbook wb2 = XSSFTestDataSamples.writeOutAndReadBack(wb1)) {
pictures = wb2.getAllPictures();
assertEquals(2, pictures.size());
sheet2 = wb2.getSheetAt(1);
drawing2 = sheet2.createDrawingPatriarch();
XSSFPicture shape33 = (XSSFPicture) drawing2.getShapes().get(0);
assertArrayEquals(shape3.getPictureData().getData(), shape33.getPictureData().getData());
XSSFPicture shape44 = (XSSFPicture) drawing2.getShapes().get(1);
assertArrayEquals(shape4.getPictureData().getData(), shape44.getPictureData().getData());
sheet1 = wb2.getSheetAt(0);
drawing1 = sheet1.createDrawingPatriarch();
XSSFPicture shape11 = (XSSFPicture) drawing1.getShapes().get(0);
assertArrayEquals(shape1.getPictureData().getData(), shape11.getPictureData().getData());
XSSFPicture shape22 = (XSSFPicture) drawing1.getShapes().get(1);
assertArrayEquals(shape2.getPictureData().getData(), shape22.getPictureData().getData());
sheet2 = wb2.getSheetAt(1);
drawing2 = sheet2.createDrawingPatriarch();
XSSFPicture shape33 = (XSSFPicture) drawing2.getShapes().get(0);
assertArrayEquals(shape3.getPictureData().getData(), shape33.getPictureData().getData());
XSSFPicture shape44 = (XSSFPicture) drawing2.getShapes().get(1);
assertArrayEquals(shape4.getPictureData().getData(), shape44.getPictureData().getData());
}
}
} finally {
ZipPackage.setUseTempFilePackageParts(originalTempFileSetting);
ZipPackage.setEncryptTempFilePackageParts(originalEncryptSetting);
}
}
}