mirror of https://github.com/apache/poi.git
Add some simple coverage of HSLF-Dev-Tools
git-svn-id: https://svn.apache.org/repos/asf/poi/trunk@1849765 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
parent
5b62dcd379
commit
c218c3cbc4
|
@ -562,7 +562,7 @@ public final class IOUtils {
|
|||
|
||||
public static byte[] safelyAllocate(long length, int maxLength) {
|
||||
if (length < 0L) {
|
||||
throw new RecordFormatException("Can't allocate an array of length < 0");
|
||||
throw new RecordFormatException("Can't allocate an array of length < 0, but had " + length + " and " + maxLength);
|
||||
}
|
||||
if (length > (long)Integer.MAX_VALUE) {
|
||||
throw new RecordFormatException("Can't allocate an array > "+Integer.MAX_VALUE);
|
||||
|
|
|
@ -39,43 +39,44 @@ public final class PPDrawingTextListing {
|
|||
System.exit(1);
|
||||
}
|
||||
|
||||
HSLFSlideShowImpl ss = new HSLFSlideShowImpl(args[0]);
|
||||
try (HSLFSlideShowImpl ss = new HSLFSlideShowImpl(args[0])) {
|
||||
|
||||
// Find PPDrawings at any second level position
|
||||
Record[] records = ss.getRecords();
|
||||
for(int i=0; i<records.length; i++) {
|
||||
Record[] children = records[i].getChildRecords();
|
||||
if(children != null && children.length != 0) {
|
||||
for(int j=0; j<children.length; j++) {
|
||||
if(children[j] instanceof PPDrawing) {
|
||||
System.out.println("Found PPDrawing at " + j + " in top level record " + i + " (" + records[i].getRecordType() + ")" );
|
||||
// Find PPDrawings at any second level position
|
||||
Record[] records = ss.getRecords();
|
||||
for (int i = 0; i < records.length; i++) {
|
||||
Record[] children = records[i].getChildRecords();
|
||||
if (children != null && children.length != 0) {
|
||||
for (int j = 0; j < children.length; j++) {
|
||||
if (children[j] instanceof PPDrawing) {
|
||||
System.out.println("Found PPDrawing at " + j + " in top level record " + i + " (" + records[i].getRecordType() + ")");
|
||||
|
||||
// Look for EscherTextboxWrapper's
|
||||
PPDrawing ppd = (PPDrawing)children[j];
|
||||
EscherTextboxWrapper[] wrappers = ppd.getTextboxWrappers();
|
||||
System.out.println(" Has " + wrappers.length + " textbox wrappers within");
|
||||
// Look for EscherTextboxWrapper's
|
||||
PPDrawing ppd = (PPDrawing) children[j];
|
||||
EscherTextboxWrapper[] wrappers = ppd.getTextboxWrappers();
|
||||
System.out.println(" Has " + wrappers.length + " textbox wrappers within");
|
||||
|
||||
// Loop over the wrappers, showing what they contain
|
||||
for(int k=0; k<wrappers.length; k++) {
|
||||
EscherTextboxWrapper tbw = wrappers[k];
|
||||
System.out.println(" " + k + " has " + tbw.getChildRecords().length + " PPT atoms within");
|
||||
// Loop over the wrappers, showing what they contain
|
||||
for (int k = 0; k < wrappers.length; k++) {
|
||||
EscherTextboxWrapper tbw = wrappers[k];
|
||||
System.out.println(" " + k + " has " + tbw.getChildRecords().length + " PPT atoms within");
|
||||
|
||||
// Loop over the records, printing the text
|
||||
Record[] pptatoms = tbw.getChildRecords();
|
||||
for(int l=0; l<pptatoms.length; l++) {
|
||||
String text = null;
|
||||
if(pptatoms[l] instanceof TextBytesAtom) {
|
||||
TextBytesAtom tba = (TextBytesAtom)pptatoms[l];
|
||||
text = tba.getText();
|
||||
}
|
||||
if(pptatoms[l] instanceof TextCharsAtom) {
|
||||
TextCharsAtom tca = (TextCharsAtom)pptatoms[l];
|
||||
text = tca.getText();
|
||||
}
|
||||
// Loop over the records, printing the text
|
||||
Record[] pptatoms = tbw.getChildRecords();
|
||||
for (Record pptatom : pptatoms) {
|
||||
String text = null;
|
||||
if (pptatom instanceof TextBytesAtom) {
|
||||
TextBytesAtom tba = (TextBytesAtom) pptatom;
|
||||
text = tba.getText();
|
||||
}
|
||||
if (pptatom instanceof TextCharsAtom) {
|
||||
TextCharsAtom tca = (TextCharsAtom) pptatom;
|
||||
text = tca.getText();
|
||||
}
|
||||
|
||||
if(text != null) {
|
||||
text = text.replace('\r','\n');
|
||||
System.out.println(" ''" + text + "''");
|
||||
if (text != null) {
|
||||
text = text.replace('\r', '\n');
|
||||
System.out.println(" ''" + text + "''");
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -83,7 +84,5 @@ public final class PPDrawingTextListing {
|
|||
}
|
||||
}
|
||||
}
|
||||
|
||||
ss.close();
|
||||
}
|
||||
}
|
||||
|
|
|
@ -54,12 +54,9 @@ public final class PPTXMLDump {
|
|||
private boolean hexHeader = true;
|
||||
|
||||
public PPTXMLDump(File ppt) throws IOException {
|
||||
POIFSFileSystem fs = new POIFSFileSystem(ppt, true);
|
||||
try {
|
||||
try (POIFSFileSystem fs = new POIFSFileSystem(ppt, true)) {
|
||||
docstream = readEntry(fs, HSLFSlideShow.POWERPOINT_DOCUMENT);
|
||||
pictstream = readEntry(fs, PICTURES_ENTRY);
|
||||
} finally {
|
||||
fs.close();
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -69,20 +66,17 @@ public final class PPTXMLDump {
|
|||
if (!dn.hasEntry(entry)) {
|
||||
return null;
|
||||
}
|
||||
InputStream is = dn.createDocumentInputStream(entry);
|
||||
try {
|
||||
try (InputStream is = dn.createDocumentInputStream(entry)) {
|
||||
ByteArrayOutputStream bos = new ByteArrayOutputStream();
|
||||
IOUtils.copy(is, bos);
|
||||
return bos.toByteArray();
|
||||
} finally {
|
||||
is.close();
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Dump the structure of the supplied PPT file into XML
|
||||
* @param outWriter <code>Writer</code> to write out
|
||||
* @throws java.io.IOException
|
||||
* @throws java.io.IOException If writing to the writer fails
|
||||
*/
|
||||
public void dump(Writer outWriter) throws IOException {
|
||||
this.out = outWriter;
|
||||
|
@ -98,7 +92,9 @@ public final class PPTXMLDump {
|
|||
//dump the structure of the powerpoint document
|
||||
write(out, "<PowerPointDocument>" + CR, padding);
|
||||
padding++;
|
||||
dump(docstream, 0, docstream.length, padding);
|
||||
if(docstream != null) {
|
||||
dump(docstream, 0, docstream.length, padding);
|
||||
}
|
||||
padding--;
|
||||
write(out, "</PowerPointDocument>" + CR, padding);
|
||||
padding--;
|
||||
|
@ -111,7 +107,7 @@ public final class PPTXMLDump {
|
|||
* @param offset offset from the beginning of the document
|
||||
* @param length of the document
|
||||
* @param padding used for formatting results
|
||||
* @throws java.io.IOException
|
||||
* @throws java.io.IOException If writing out information fails
|
||||
*/
|
||||
public void dump(byte[] data, int offset, int length, int padding) throws IOException {
|
||||
int pos = offset;
|
||||
|
@ -158,16 +154,24 @@ public final class PPTXMLDump {
|
|||
* Dumps the Pictures OLE stream into XML.
|
||||
*
|
||||
* @param data from the Pictures OLE data stream
|
||||
* @param padding
|
||||
* @throws java.io.IOException
|
||||
* @param padding How many leading blanks to add in the output
|
||||
* @throws java.io.IOException If writing out information fails
|
||||
*/
|
||||
public void dumpPictures(byte[] data, int padding) throws IOException {
|
||||
int pos = 0;
|
||||
while (pos < data.length) {
|
||||
byte[] header = new byte[PICT_HEADER_SIZE];
|
||||
|
||||
if(data.length - pos < header.length) {
|
||||
// corrupt file, cannot read header
|
||||
return;
|
||||
}
|
||||
System.arraycopy(data, pos, header, 0, header.length);
|
||||
int size = LittleEndian.getInt(header, 4) - 17;
|
||||
if(size < 0) {
|
||||
// corrupt file, negative image size
|
||||
return;
|
||||
}
|
||||
byte[] pictdata = IOUtils.safelyAllocate(size, MAX_RECORD_LENGTH);
|
||||
System.arraycopy(data, pos + PICT_HEADER_SIZE, pictdata, 0, pictdata.length);
|
||||
pos += PICT_HEADER_SIZE + size;
|
||||
|
@ -184,7 +188,6 @@ public final class PPTXMLDump {
|
|||
padding--;
|
||||
write(out, "</picture>" + CR, padding);
|
||||
padding--;
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -272,5 +275,4 @@ public final class PPTXMLDump {
|
|||
(byte) '4', (byte) '5', (byte) '6', (byte) '7',
|
||||
(byte) '8', (byte) '9', (byte) 'A', (byte) 'B',
|
||||
(byte) 'C', (byte) 'D', (byte) 'E', (byte) 'F'};
|
||||
|
||||
}
|
||||
|
|
|
@ -41,7 +41,7 @@ public final class SlideAndNotesAtomListing {
|
|||
}
|
||||
|
||||
HSLFSlideShowImpl ss = new HSLFSlideShowImpl(args[0]);
|
||||
System.out.println("");
|
||||
System.out.println();
|
||||
|
||||
// Find either Slides or Notes
|
||||
Record[] records = ss.getRecords();
|
||||
|
@ -55,14 +55,14 @@ public final class SlideAndNotesAtomListing {
|
|||
System.out.println("Found Slide at " + i);
|
||||
System.out.println(" Slide's master ID is " + sa.getMasterID());
|
||||
System.out.println(" Slide's notes ID is " + sa.getNotesID());
|
||||
System.out.println("");
|
||||
System.out.println();
|
||||
}
|
||||
if(r instanceof Notes) {
|
||||
Notes n = (Notes)r;
|
||||
NotesAtom na = n.getNotesAtom();
|
||||
System.out.println("Found Notes at " + i);
|
||||
System.out.println(" Notes ID is " + na.getSlideID());
|
||||
System.out.println("");
|
||||
System.out.println();
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -61,23 +61,23 @@ public final class SlideIdListing {
|
|||
|
||||
// Grab any records that interest us
|
||||
Document document = null;
|
||||
for(int i=0; i<latestRecords.length; i++) {
|
||||
if(latestRecords[i] instanceof Document) {
|
||||
document = (Document)latestRecords[i];
|
||||
for (Record latestRecord : latestRecords) {
|
||||
if (latestRecord instanceof Document) {
|
||||
document = (Document) latestRecord;
|
||||
}
|
||||
}
|
||||
|
||||
System.out.println("");
|
||||
System.out.println();
|
||||
|
||||
|
||||
// Look for SlidePersistAtoms, and report what they have to
|
||||
// say about possible slide IDs
|
||||
SlideListWithText[] slwts = document.getSlideListWithTexts();
|
||||
for(int i=0; i<slwts.length; i++) {
|
||||
Record[] cr = slwts[i].getChildRecords();
|
||||
for(int j=0; j<cr.length; j++) {
|
||||
if(cr[j] instanceof SlidePersistAtom) {
|
||||
SlidePersistAtom spa = (SlidePersistAtom)cr[j];
|
||||
for (SlideListWithText slwt : slwts) {
|
||||
Record[] cr = slwt.getChildRecords();
|
||||
for (Record record : cr) {
|
||||
if (record instanceof SlidePersistAtom) {
|
||||
SlidePersistAtom spa = (SlidePersistAtom) record;
|
||||
System.out.println("SlidePersistAtom knows about slide:");
|
||||
System.out.println("\t" + spa.getRefID());
|
||||
System.out.println("\t" + spa.getSlideIdentifier());
|
||||
|
@ -85,7 +85,7 @@ public final class SlideIdListing {
|
|||
}
|
||||
}
|
||||
|
||||
System.out.println("");
|
||||
System.out.println();
|
||||
|
||||
// Look for latest core records that are slides or notes
|
||||
for(int i=0; i<latestRecords.length; i++) {
|
||||
|
@ -100,7 +100,7 @@ public final class SlideIdListing {
|
|||
System.out.println("\tNotes ID is " + sa.getNotesID());
|
||||
}
|
||||
}
|
||||
System.out.println("");
|
||||
System.out.println();
|
||||
for(int i=0; i<latestRecords.length; i++) {
|
||||
if(latestRecords[i] instanceof Notes) {
|
||||
Notes n = (Notes)latestRecords[i];
|
||||
|
@ -113,27 +113,24 @@ public final class SlideIdListing {
|
|||
}
|
||||
}
|
||||
|
||||
System.out.println("");
|
||||
System.out.println();
|
||||
|
||||
// Find any persist ones first
|
||||
int pos = 0;
|
||||
for(int i=0; i<records.length; i++) {
|
||||
Record r = records[i];
|
||||
|
||||
if(r.getRecordType() == 6001l) {
|
||||
for (Record r : records) {
|
||||
if (r.getRecordType() == 6001L) {
|
||||
// PersistPtrFullBlock
|
||||
System.out.println("Found PersistPtrFullBlock at " + pos + " (" + Integer.toHexString(pos) + ")");
|
||||
}
|
||||
if(r.getRecordType() == 6002l) {
|
||||
if (r.getRecordType() == 6002L) {
|
||||
// PersistPtrIncrementalBlock
|
||||
System.out.println("Found PersistPtrIncrementalBlock at " + pos + " (" + Integer.toHexString(pos) + ")");
|
||||
PersistPtrHolder pph = (PersistPtrHolder)r;
|
||||
PersistPtrHolder pph = (PersistPtrHolder) r;
|
||||
|
||||
// Check the sheet offsets
|
||||
int[] sheetIDs = pph.getKnownSlideIDs();
|
||||
Map<Integer,Integer> sheetOffsets = pph.getSlideLocationsLookup();
|
||||
for(int j=0; j<sheetIDs.length; j++) {
|
||||
Integer id = sheetIDs[j];
|
||||
Map<Integer, Integer> sheetOffsets = pph.getSlideLocationsLookup();
|
||||
for (Integer id : sheetIDs) {
|
||||
Integer offset = sheetOffsets.get(id);
|
||||
|
||||
System.out.println(" Knows about sheet " + id);
|
||||
|
@ -143,7 +140,7 @@ public final class SlideIdListing {
|
|||
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)) {
|
||||
if (!(atPos instanceof PositionDependentRecord)) {
|
||||
System.out.println(" ** The record class isn't position aware! **");
|
||||
}
|
||||
}
|
||||
|
@ -157,7 +154,7 @@ public final class SlideIdListing {
|
|||
|
||||
ss.close();
|
||||
|
||||
System.out.println("");
|
||||
System.out.println();
|
||||
}
|
||||
|
||||
|
||||
|
|
|
@ -56,7 +56,6 @@ public final class SlideShowRecordDumper {
|
|||
* dump of what it contains
|
||||
*/
|
||||
public static void main(String[] args) throws IOException {
|
||||
String filename = "";
|
||||
boolean verbose = false;
|
||||
boolean escher = false;
|
||||
|
||||
|
@ -81,12 +80,14 @@ public final class SlideShowRecordDumper {
|
|||
return;
|
||||
}
|
||||
|
||||
filename = args[ndx];
|
||||
String filename = args[ndx];
|
||||
|
||||
SlideShowRecordDumper foo = new SlideShowRecordDumper(System.out,
|
||||
filename, verbose, escher);
|
||||
|
||||
foo.printDump();
|
||||
|
||||
foo.doc.close();
|
||||
}
|
||||
|
||||
public static void printUsage() {
|
||||
|
@ -118,11 +119,11 @@ public final class SlideShowRecordDumper {
|
|||
}
|
||||
|
||||
public String makeHex(int number, int padding) {
|
||||
String hex = Integer.toHexString(number).toUpperCase(Locale.ROOT);
|
||||
StringBuilder hex = new StringBuilder(Integer.toHexString(number).toUpperCase(Locale.ROOT));
|
||||
while (hex.length() < padding) {
|
||||
hex = "0" + hex;
|
||||
hex.insert(0, "0");
|
||||
}
|
||||
return hex;
|
||||
return hex.toString();
|
||||
}
|
||||
|
||||
public String reverseHex(String s) {
|
||||
|
@ -186,7 +187,7 @@ public final class SlideShowRecordDumper {
|
|||
for (Record child : etw.getChildRecords()) {
|
||||
if (child instanceof StyleTextPropAtom) {
|
||||
// need preceding Text[Chars|Bytes]Atom to initialize the data structure
|
||||
String text = null;
|
||||
String text;
|
||||
if (prevChild instanceof TextCharsAtom) {
|
||||
text = ((TextCharsAtom)prevChild).getText();
|
||||
} else if (prevChild instanceof TextBytesAtom) {
|
||||
|
@ -227,8 +228,7 @@ public final class SlideShowRecordDumper {
|
|||
public void walkTree(int depth, int pos, Record[] records, int indent) throws IOException {
|
||||
String ind = tabs.substring(0, indent);
|
||||
|
||||
for (int i = 0; i < records.length; i++) {
|
||||
Record r = records[i];
|
||||
for (Record r : records) {
|
||||
if (r == null) {
|
||||
ps.println(ind + "At position " + pos + " (" + makeHex(pos, 6) + "):");
|
||||
ps.println(ind + "Warning! Null record found.");
|
||||
|
@ -242,49 +242,49 @@ public final class SlideShowRecordDumper {
|
|||
String hexType = makeHex((int) r.getRecordType(), 4);
|
||||
String rHexType = reverseHex(hexType);
|
||||
|
||||
// Grab the hslf.record type
|
||||
Class<? extends Record> c = r.getClass();
|
||||
String cname = c.toString();
|
||||
if(cname.startsWith("class ")) {
|
||||
cname = cname.substring(6);
|
||||
}
|
||||
if(cname.startsWith("org.apache.poi.hslf.record.")) {
|
||||
cname = cname.substring(27);
|
||||
}
|
||||
// Grab the hslf.record type
|
||||
Class<? extends Record> c = r.getClass();
|
||||
String cname = c.toString();
|
||||
if (cname.startsWith("class ")) {
|
||||
cname = cname.substring(6);
|
||||
}
|
||||
if (cname.startsWith("org.apache.poi.hslf.record.")) {
|
||||
cname = cname.substring(27);
|
||||
}
|
||||
|
||||
// Display the record
|
||||
ps.println(ind + "At position " + pos + " (" + makeHex(pos,6) + "):");
|
||||
ps.println(ind + " Record is of type " + cname);
|
||||
ps.println(ind + " Type is " + r.getRecordType() + " (" + hexType + " -> " + rHexType + " )");
|
||||
ps.println(ind + " Len is " + (len-8) + " (" + makeHex((len-8),8) + "), on disk len is " + len );
|
||||
// Display the record
|
||||
ps.println(ind + "At position " + pos + " (" + makeHex(pos, 6) + "):");
|
||||
ps.println(ind + " Record is of type " + cname);
|
||||
ps.println(ind + " Type is " + r.getRecordType() + " (" + hexType + " -> " + rHexType + " )");
|
||||
ps.println(ind + " Len is " + (len - 8) + " (" + makeHex((len - 8), 8) + "), on disk len is " + len);
|
||||
|
||||
// print additional information for drawings and atoms
|
||||
if (optEscher && cname.equals("PPDrawing")) {
|
||||
DefaultEscherRecordFactory factory = new HSLFEscherRecordFactory();
|
||||
// print additional information for drawings and atoms
|
||||
if (optEscher && cname.equals("PPDrawing")) {
|
||||
DefaultEscherRecordFactory factory = new HSLFEscherRecordFactory();
|
||||
|
||||
ByteArrayOutputStream baos = new ByteArrayOutputStream();
|
||||
r.writeOut(baos);
|
||||
byte[] b = baos.toByteArray();
|
||||
ByteArrayOutputStream baos = new ByteArrayOutputStream();
|
||||
r.writeOut(baos);
|
||||
byte[] b = baos.toByteArray();
|
||||
|
||||
EscherRecord er = factory.createRecord(b, 0);
|
||||
er.fillFields(b, 0, factory);
|
||||
EscherRecord er = factory.createRecord(b, 0);
|
||||
er.fillFields(b, 0, factory);
|
||||
|
||||
printEscherRecord( er, indent+1 );
|
||||
printEscherRecord(er, indent + 1);
|
||||
|
||||
} else if(optVerbose && r.getChildRecords() == null) {
|
||||
String recData = getPrintableRecordContents(r);
|
||||
ps.println(ind + recData );
|
||||
}
|
||||
} else if (optVerbose && r.getChildRecords() == null) {
|
||||
String recData = getPrintableRecordContents(r);
|
||||
ps.println(ind + recData);
|
||||
}
|
||||
|
||||
ps.println();
|
||||
ps.println();
|
||||
|
||||
// If it has children, show them
|
||||
if(r.getChildRecords() != null) {
|
||||
walkTree((depth+3),pos+8,r.getChildRecords(), indent+1);
|
||||
}
|
||||
// If it has children, show them
|
||||
if (r.getChildRecords() != null) {
|
||||
walkTree((depth + 3), pos + 8, r.getChildRecords(), indent + 1);
|
||||
}
|
||||
|
||||
// Wind on the position marker
|
||||
pos += len;
|
||||
}
|
||||
// Wind on the position marker
|
||||
pos += len;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -45,25 +45,24 @@ public final class TextStyleListing {
|
|||
|
||||
// Find the documents, and then their SLWT
|
||||
Record[] records = ss.getRecords();
|
||||
for(int i=0; i<records.length; i++) {
|
||||
if(records[i].getRecordType() == 1000l) {
|
||||
Record docRecord = records[i];
|
||||
Record[] docChildren = docRecord.getChildRecords();
|
||||
for(int j=0; j<docChildren.length; j++) {
|
||||
if(docChildren[j] instanceof SlideListWithText) {
|
||||
Record[] slwtChildren = docChildren[j].getChildRecords();
|
||||
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(int k=0; k<slwtChildren.length; k++) {
|
||||
if(slwtChildren[k] instanceof TextCharsAtom) {
|
||||
lastTextLen = ((TextCharsAtom)slwtChildren[k]).getText().length();
|
||||
for (Record slwtChild : slwtChildren) {
|
||||
if (slwtChild instanceof TextCharsAtom) {
|
||||
lastTextLen = ((TextCharsAtom) slwtChild).getText().length();
|
||||
}
|
||||
if(slwtChildren[k] instanceof TextBytesAtom) {
|
||||
lastTextLen = ((TextBytesAtom)slwtChildren[k]).getText().length();
|
||||
if (slwtChild instanceof TextBytesAtom) {
|
||||
lastTextLen = ((TextBytesAtom) slwtChild).getText().length();
|
||||
}
|
||||
|
||||
if(slwtChildren[k] instanceof StyleTextPropAtom) {
|
||||
StyleTextPropAtom stpa = (StyleTextPropAtom)slwtChildren[k];
|
||||
if (slwtChild instanceof StyleTextPropAtom) {
|
||||
StyleTextPropAtom stpa = (StyleTextPropAtom) slwtChild;
|
||||
stpa.setParentTextSize(lastTextLen);
|
||||
showStyleTextPropAtom(stpa);
|
||||
}
|
||||
|
|
|
@ -47,7 +47,7 @@ public final class UserEditAndPersistListing {
|
|||
// Create the slideshow object, for normal working with
|
||||
HSLFSlideShowImpl ss = new HSLFSlideShowImpl(args[0]);
|
||||
fileContents = ss.getUnderlyingBytes();
|
||||
System.out.println("");
|
||||
System.out.println();
|
||||
|
||||
// Find any persist ones first
|
||||
int pos = 0;
|
||||
|
@ -85,7 +85,7 @@ public final class UserEditAndPersistListing {
|
|||
pos += baos.size();
|
||||
}
|
||||
|
||||
System.out.println("");
|
||||
System.out.println();
|
||||
|
||||
pos = 0;
|
||||
// Now look for UserEditAtoms
|
||||
|
@ -105,7 +105,7 @@ public final class UserEditAndPersistListing {
|
|||
pos += baos.size();
|
||||
}
|
||||
|
||||
System.out.println("");
|
||||
System.out.println();
|
||||
|
||||
|
||||
// Query the CurrentUserAtom
|
||||
|
@ -113,7 +113,7 @@ public final class UserEditAndPersistListing {
|
|||
System.out.println("Checking Current User Atom");
|
||||
System.out.println(" Thinks the CurrentEditOffset is " + cua.getCurrentEditOffset());
|
||||
|
||||
System.out.println("");
|
||||
System.out.println();
|
||||
|
||||
ss.close();
|
||||
}
|
||||
|
|
|
@ -0,0 +1,139 @@
|
|||
/* ====================================================================
|
||||
Licensed to the Apache Software Foundation (ASF) under one or more
|
||||
contributor license agreements. See the NOTICE file distributed with
|
||||
this work for additional information regarding copyright ownership.
|
||||
The ASF licenses this file to You under the Apache License, Version 2.0
|
||||
(the "License"); you may not use this file except in compliance with
|
||||
the License. You may obtain a copy of the License at
|
||||
|
||||
http://www.apache.org/licenses/LICENSE-2.0
|
||||
|
||||
Unless required by applicable law or agreed to in writing, software
|
||||
distributed under the License is distributed on an "AS IS" BASIS,
|
||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
See the License for the specific language governing permissions and
|
||||
limitations under the License.
|
||||
==================================================================== */
|
||||
package org.apache.poi.hslf.dev;
|
||||
|
||||
import org.apache.poi.POIDataSamples;
|
||||
import org.apache.poi.hslf.exceptions.EncryptedPowerPointFileException;
|
||||
import org.apache.poi.hslf.exceptions.OldPowerPointFormatException;
|
||||
import org.apache.poi.util.IOUtils;
|
||||
import org.apache.poi.util.LocaleUtil;
|
||||
import org.apache.poi.util.NullOutputStream;
|
||||
import org.junit.After;
|
||||
import org.junit.Before;
|
||||
import org.junit.Rule;
|
||||
import org.junit.Test;
|
||||
import org.junit.rules.ExpectedException;
|
||||
import org.junit.runner.RunWith;
|
||||
import org.junit.runners.Parameterized;
|
||||
|
||||
import java.io.File;
|
||||
import java.io.OutputStream;
|
||||
import java.io.PrintStream;
|
||||
import java.io.UnsupportedEncodingException;
|
||||
import java.util.ArrayList;
|
||||
import java.util.HashMap;
|
||||
import java.util.HashSet;
|
||||
import java.util.List;
|
||||
import java.util.Locale;
|
||||
import java.util.Map;
|
||||
import java.util.Set;
|
||||
|
||||
import static org.junit.Assert.assertNotNull;
|
||||
|
||||
@RunWith(Parameterized.class)
|
||||
public abstract class BasePPTIteratingTest {
|
||||
protected static final OutputStream NULL_OUTPUT_STREAM = new NullOutputStream();
|
||||
|
||||
protected static final Set<String> OLD_FILES = new HashSet<>();
|
||||
static {
|
||||
OLD_FILES.add("PPT95.ppt");
|
||||
OLD_FILES.add("pp40only.ppt");
|
||||
}
|
||||
|
||||
protected static final Set<String> ENCRYPTED_FILES = new HashSet<>();
|
||||
static {
|
||||
ENCRYPTED_FILES.add("cryptoapi-proc2356.ppt");
|
||||
ENCRYPTED_FILES.add("Password_Protected-np-hello.ppt");
|
||||
ENCRYPTED_FILES.add("Password_Protected-56-hello.ppt");
|
||||
ENCRYPTED_FILES.add("Password_Protected-hello.ppt");
|
||||
}
|
||||
|
||||
@Rule
|
||||
public ExpectedException thrown = ExpectedException.none();
|
||||
|
||||
protected static final Map<String,Class<? extends Throwable>> EXCLUDED =
|
||||
new HashMap<>();
|
||||
|
||||
@Parameterized.Parameters(name="{index}: {0}")
|
||||
public static Iterable<Object[]> files() {
|
||||
String dataDirName = System.getProperty(POIDataSamples.TEST_PROPERTY);
|
||||
if(dataDirName == null) {
|
||||
dataDirName = "test-data";
|
||||
}
|
||||
|
||||
List<Object[]> files = new ArrayList<>();
|
||||
findFile(files, dataDirName + "/slideshow");
|
||||
|
||||
return files;
|
||||
}
|
||||
|
||||
private final PrintStream save = System.out;
|
||||
|
||||
@Before
|
||||
public void setUpBase() throws UnsupportedEncodingException {
|
||||
// set a higher max allocation limit as some test-files require more
|
||||
IOUtils.setByteArrayMaxOverride(5*1024*1024);
|
||||
|
||||
// redirect standard out during the test to avoid spamming the console with output
|
||||
System.setOut(new PrintStream(NULL_OUTPUT_STREAM, true, LocaleUtil.CHARSET_1252.name()));
|
||||
}
|
||||
|
||||
@After
|
||||
public void tearDownBase() {
|
||||
System.setOut(save);
|
||||
|
||||
// reset
|
||||
IOUtils.setByteArrayMaxOverride(-1);
|
||||
}
|
||||
|
||||
private static void findFile(List<Object[]> list, String dir) {
|
||||
String[] files = new File(dir).list((arg0, arg1) -> arg1.toLowerCase(Locale.ROOT).endsWith(".ppt"));
|
||||
|
||||
assertNotNull("Did not find any ppt files in directory " + dir, files);
|
||||
|
||||
for(String file : files) {
|
||||
list.add(new Object[] { new File(dir, file) });
|
||||
}
|
||||
}
|
||||
|
||||
@Parameterized.Parameter
|
||||
public File file;
|
||||
|
||||
@Test
|
||||
public void testAllFiles() throws Exception {
|
||||
String fileName = file.getName();
|
||||
if (EXCLUDED.containsKey(fileName)) {
|
||||
thrown.expect(EXCLUDED.get(fileName));
|
||||
}
|
||||
|
||||
try {
|
||||
runOneFile(file);
|
||||
} catch (OldPowerPointFormatException e) {
|
||||
// expected for some files
|
||||
if(!OLD_FILES.contains(file.getName())) {
|
||||
throw e;
|
||||
}
|
||||
} catch (EncryptedPowerPointFileException e) {
|
||||
// expected for some files
|
||||
if(!ENCRYPTED_FILES.contains(file.getName())) {
|
||||
throw e;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
abstract void runOneFile(File pFile) throws Exception;
|
||||
}
|
|
@ -0,0 +1,44 @@
|
|||
/* ====================================================================
|
||||
Licensed to the Apache Software Foundation (ASF) under one or more
|
||||
contributor license agreements. See the NOTICE file distributed with
|
||||
this work for additional information regarding copyright ownership.
|
||||
The ASF licenses this file to You under the Apache License, Version 2.0
|
||||
(the "License"); you may not use this file except in compliance with
|
||||
the License. You may obtain a copy of the License at
|
||||
|
||||
http://www.apache.org/licenses/LICENSE-2.0
|
||||
|
||||
Unless required by applicable law or agreed to in writing, software
|
||||
distributed under the License is distributed on an "AS IS" BASIS,
|
||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
See the License for the specific language governing permissions and
|
||||
limitations under the License.
|
||||
==================================================================== */
|
||||
package org.apache.poi.hslf.dev;
|
||||
|
||||
import org.apache.poi.EmptyFileException;
|
||||
import org.junit.Test;
|
||||
|
||||
import java.io.File;
|
||||
import java.io.IOException;
|
||||
|
||||
import static org.junit.Assert.fail;
|
||||
|
||||
public class TestPPDrawingTextListing extends BasePPTIteratingTest {
|
||||
@Test
|
||||
public void testMain() throws IOException {
|
||||
// calls System.exit(): PPDrawingTextListing.main(new String[0]);
|
||||
|
||||
try {
|
||||
PPDrawingTextListing.main(new String[]{"invalidfile"});
|
||||
fail("Should catch exception here");
|
||||
} catch (EmptyFileException e) {
|
||||
// expected here
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
void runOneFile(File pFile) throws Exception {
|
||||
PPDrawingTextListing.main(new String[]{pFile.getAbsolutePath()});
|
||||
}
|
||||
}
|
|
@ -0,0 +1,49 @@
|
|||
/* ====================================================================
|
||||
Licensed to the Apache Software Foundation (ASF) under one or more
|
||||
contributor license agreements. See the NOTICE file distributed with
|
||||
this work for additional information regarding copyright ownership.
|
||||
The ASF licenses this file to You under the Apache License, Version 2.0
|
||||
(the "License"); you may not use this file except in compliance with
|
||||
the License. You may obtain a copy of the License at
|
||||
|
||||
http://www.apache.org/licenses/LICENSE-2.0
|
||||
|
||||
Unless required by applicable law or agreed to in writing, software
|
||||
distributed under the License is distributed on an "AS IS" BASIS,
|
||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
See the License for the specific language governing permissions and
|
||||
limitations under the License.
|
||||
==================================================================== */
|
||||
package org.apache.poi.hslf.dev;
|
||||
|
||||
import org.apache.poi.EmptyFileException;
|
||||
import org.apache.poi.hslf.HSLFTestDataSamples;
|
||||
import org.junit.Test;
|
||||
|
||||
import java.io.File;
|
||||
|
||||
import static org.junit.Assert.fail;
|
||||
|
||||
public class TestPPTXMLDump extends BasePPTIteratingTest {
|
||||
@Test
|
||||
public void testMain() throws Exception {
|
||||
PPTXMLDump.main(new String[0]);
|
||||
|
||||
PPTXMLDump.main(new String[]{
|
||||
HSLFTestDataSamples.getSampleFile("slide_master.ppt").getAbsolutePath(),
|
||||
HSLFTestDataSamples.getSampleFile("pictures.ppt").getAbsolutePath()
|
||||
});
|
||||
|
||||
try {
|
||||
PPTXMLDump.main(new String[]{"invalidfile"});
|
||||
fail("Should catch exception here");
|
||||
} catch (EmptyFileException e) {
|
||||
// expected here
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
void runOneFile(File pFile) throws Exception {
|
||||
PPTXMLDump.main(new String[]{pFile.getAbsolutePath()});
|
||||
}
|
||||
}
|
|
@ -0,0 +1,43 @@
|
|||
/* ====================================================================
|
||||
Licensed to the Apache Software Foundation (ASF) under one or more
|
||||
contributor license agreements. See the NOTICE file distributed with
|
||||
this work for additional information regarding copyright ownership.
|
||||
The ASF licenses this file to You under the Apache License, Version 2.0
|
||||
(the "License"); you may not use this file except in compliance with
|
||||
the License. You may obtain a copy of the License at
|
||||
|
||||
http://www.apache.org/licenses/LICENSE-2.0
|
||||
|
||||
Unless required by applicable law or agreed to in writing, software
|
||||
distributed under the License is distributed on an "AS IS" BASIS,
|
||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
See the License for the specific language governing permissions and
|
||||
limitations under the License.
|
||||
==================================================================== */
|
||||
package org.apache.poi.hslf.dev;
|
||||
|
||||
import org.apache.poi.EmptyFileException;
|
||||
import org.junit.Test;
|
||||
|
||||
import java.io.File;
|
||||
import java.io.IOException;
|
||||
|
||||
import static org.junit.Assert.fail;
|
||||
|
||||
public class TestSLWTListing extends BasePPTIteratingTest {
|
||||
@Test
|
||||
public void testMain() throws IOException {
|
||||
// calls System.exit(): SLWTListing.main(new String[0]);
|
||||
try {
|
||||
SLWTListing.main(new String[]{"invalidfile"});
|
||||
fail("Should catch exception here");
|
||||
} catch (EmptyFileException e) {
|
||||
// expected here
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
void runOneFile(File pFile) throws Exception {
|
||||
SLWTListing.main(new String[]{pFile.getAbsolutePath()});
|
||||
}
|
||||
}
|
|
@ -0,0 +1,44 @@
|
|||
/* ====================================================================
|
||||
Licensed to the Apache Software Foundation (ASF) under one or more
|
||||
contributor license agreements. See the NOTICE file distributed with
|
||||
this work for additional information regarding copyright ownership.
|
||||
The ASF licenses this file to You under the Apache License, Version 2.0
|
||||
(the "License"); you may not use this file except in compliance with
|
||||
the License. You may obtain a copy of the License at
|
||||
|
||||
http://www.apache.org/licenses/LICENSE-2.0
|
||||
|
||||
Unless required by applicable law or agreed to in writing, software
|
||||
distributed under the License is distributed on an "AS IS" BASIS,
|
||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
See the License for the specific language governing permissions and
|
||||
limitations under the License.
|
||||
==================================================================== */
|
||||
package org.apache.poi.hslf.dev;
|
||||
|
||||
import org.apache.poi.EmptyFileException;
|
||||
import org.junit.Test;
|
||||
|
||||
import java.io.File;
|
||||
import java.io.IOException;
|
||||
|
||||
import static org.junit.Assert.fail;
|
||||
|
||||
public class TestSLWTTextListing extends BasePPTIteratingTest {
|
||||
@Test
|
||||
public void testMain() throws IOException {
|
||||
// calls System.exit(): SLWTTextListing.main(new String[0]);
|
||||
|
||||
try {
|
||||
SLWTTextListing.main(new String[]{"invalidfile"});
|
||||
fail("Should catch exception here");
|
||||
} catch (EmptyFileException e) {
|
||||
// expected here
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
void runOneFile(File pFile) throws Exception {
|
||||
SLWTTextListing.main(new String[]{pFile.getAbsolutePath()});
|
||||
}
|
||||
}
|
|
@ -0,0 +1,48 @@
|
|||
/* ====================================================================
|
||||
Licensed to the Apache Software Foundation (ASF) under one or more
|
||||
contributor license agreements. See the NOTICE file distributed with
|
||||
this work for additional information regarding copyright ownership.
|
||||
The ASF licenses this file to You under the Apache License, Version 2.0
|
||||
(the "License"); you may not use this file except in compliance with
|
||||
the License. You may obtain a copy of the License at
|
||||
|
||||
http://www.apache.org/licenses/LICENSE-2.0
|
||||
|
||||
Unless required by applicable law or agreed to in writing, software
|
||||
distributed under the License is distributed on an "AS IS" BASIS,
|
||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
See the License for the specific language governing permissions and
|
||||
limitations under the License.
|
||||
==================================================================== */
|
||||
package org.apache.poi.hslf.dev;
|
||||
|
||||
import org.apache.poi.EmptyFileException;
|
||||
import org.apache.poi.hslf.HSLFTestDataSamples;
|
||||
import org.junit.Test;
|
||||
|
||||
import java.io.File;
|
||||
import java.io.IOException;
|
||||
|
||||
import static org.junit.Assert.fail;
|
||||
|
||||
public class TestSlideAndNotesAtomListing extends BasePPTIteratingTest {
|
||||
@Test
|
||||
public void testMain() throws IOException {
|
||||
// calls System.exit(): SlideAndNotesAtomListing.main(new String[0]);
|
||||
SlideAndNotesAtomListing.main(new String[] {
|
||||
HSLFTestDataSamples.getSampleFile("slide_master.ppt").getAbsolutePath()
|
||||
});
|
||||
|
||||
try {
|
||||
SlideAndNotesAtomListing.main(new String[]{"invalidfile"});
|
||||
fail("Should catch exception here");
|
||||
} catch (EmptyFileException e) {
|
||||
// expected here
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
void runOneFile(File pFile) throws Exception {
|
||||
SlideAndNotesAtomListing.main(new String[]{pFile.getAbsolutePath()});
|
||||
}
|
||||
}
|
|
@ -0,0 +1,48 @@
|
|||
/* ====================================================================
|
||||
Licensed to the Apache Software Foundation (ASF) under one or more
|
||||
contributor license agreements. See the NOTICE file distributed with
|
||||
this work for additional information regarding copyright ownership.
|
||||
The ASF licenses this file to You under the Apache License, Version 2.0
|
||||
(the "License"); you may not use this file except in compliance with
|
||||
the License. You may obtain a copy of the License at
|
||||
|
||||
http://www.apache.org/licenses/LICENSE-2.0
|
||||
|
||||
Unless required by applicable law or agreed to in writing, software
|
||||
distributed under the License is distributed on an "AS IS" BASIS,
|
||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
See the License for the specific language governing permissions and
|
||||
limitations under the License.
|
||||
==================================================================== */
|
||||
package org.apache.poi.hslf.dev;
|
||||
|
||||
import org.apache.poi.EmptyFileException;
|
||||
import org.apache.poi.hslf.HSLFTestDataSamples;
|
||||
import org.junit.Test;
|
||||
|
||||
import java.io.File;
|
||||
import java.io.IOException;
|
||||
|
||||
import static org.junit.Assert.fail;
|
||||
|
||||
public class TestSlideIdListing extends BasePPTIteratingTest {
|
||||
@Test
|
||||
public void testMain() throws IOException {
|
||||
// calls System.exit(): SlideIdListing.main(new String[0]);
|
||||
SlideIdListing.main(new String[] {
|
||||
HSLFTestDataSamples.getSampleFile("slide_master.ppt").getAbsolutePath()
|
||||
});
|
||||
|
||||
try {
|
||||
SlideIdListing.main(new String[]{"invalidfile"});
|
||||
fail("Should catch exception here");
|
||||
} catch (EmptyFileException e) {
|
||||
// expected here
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
void runOneFile(File pFile) throws Exception {
|
||||
SlideIdListing.main(new String[]{pFile.getAbsolutePath()});
|
||||
}
|
||||
}
|
|
@ -0,0 +1,79 @@
|
|||
/* ====================================================================
|
||||
Licensed to the Apache Software Foundation (ASF) under one or more
|
||||
contributor license agreements. See the NOTICE file distributed with
|
||||
this work for additional information regarding copyright ownership.
|
||||
The ASF licenses this file to You under the Apache License, Version 2.0
|
||||
(the "License"); you may not use this file except in compliance with
|
||||
the License. You may obtain a copy of the License at
|
||||
|
||||
http://www.apache.org/licenses/LICENSE-2.0
|
||||
|
||||
Unless required by applicable law or agreed to in writing, software
|
||||
distributed under the License is distributed on an "AS IS" BASIS,
|
||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
See the License for the specific language governing permissions and
|
||||
limitations under the License.
|
||||
==================================================================== */
|
||||
package org.apache.poi.hslf.dev;
|
||||
|
||||
import org.apache.poi.EmptyFileException;
|
||||
import org.apache.poi.hslf.HSLFTestDataSamples;
|
||||
import org.apache.poi.util.IOUtils;
|
||||
import org.junit.Test;
|
||||
|
||||
import java.io.File;
|
||||
import java.io.FileNotFoundException;
|
||||
import java.io.IOException;
|
||||
import java.util.HashSet;
|
||||
import java.util.Set;
|
||||
|
||||
import static org.junit.Assert.fail;
|
||||
|
||||
public class TestSlideShowDumper extends BasePPTIteratingTest {
|
||||
private static final Set<String> FAILING = new HashSet<>();
|
||||
static {
|
||||
FAILING.add("cryptoapi-proc2356.ppt");
|
||||
FAILING.add("41384.ppt");
|
||||
FAILING.add("bug56240.ppt");
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testMain() throws IOException {
|
||||
SlideShowDumper.main(new String[0]);
|
||||
|
||||
// SlideShowDumper calls IOUtils.toByteArray(is), which would fail if a different size is defined
|
||||
IOUtils.setByteArrayMaxOverride(-1);
|
||||
|
||||
SlideShowDumper.main(new String[] {
|
||||
HSLFTestDataSamples.getSampleFile("slide_master.ppt").getAbsolutePath(),
|
||||
HSLFTestDataSamples.getSampleFile("pictures.ppt").getAbsolutePath()
|
||||
});
|
||||
|
||||
try {
|
||||
SlideShowDumper.main(new String[]{"invalidfile"});
|
||||
fail("Should catch exception here");
|
||||
} catch (EmptyFileException e) {
|
||||
// expected here
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
void runOneFile(File pFile) throws Exception {
|
||||
try {
|
||||
// SlideShowDumper calls IOUtils.toByteArray(is), which would fail if a different size is defined
|
||||
IOUtils.setByteArrayMaxOverride(-1);
|
||||
|
||||
SlideShowDumper.main(new String[]{pFile.getAbsolutePath()});
|
||||
} catch (ArrayIndexOutOfBoundsException e) {
|
||||
// some corrupted documents currently can cause this excpetion
|
||||
if (!FAILING.contains(pFile.getName()) && !ENCRYPTED_FILES.contains(pFile.getName())) {
|
||||
throw e;
|
||||
}
|
||||
} catch (FileNotFoundException e) {
|
||||
// some old files are not detected correctly
|
||||
if(!OLD_FILES.contains(pFile.getName())) {
|
||||
throw e;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
|
@ -0,0 +1,59 @@
|
|||
/* ====================================================================
|
||||
Licensed to the Apache Software Foundation (ASF) under one or more
|
||||
contributor license agreements. See the NOTICE file distributed with
|
||||
this work for additional information regarding copyright ownership.
|
||||
The ASF licenses this file to You under the Apache License, Version 2.0
|
||||
(the "License"); you may not use this file except in compliance with
|
||||
the License. You may obtain a copy of the License at
|
||||
|
||||
http://www.apache.org/licenses/LICENSE-2.0
|
||||
|
||||
Unless required by applicable law or agreed to in writing, software
|
||||
distributed under the License is distributed on an "AS IS" BASIS,
|
||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
See the License for the specific language governing permissions and
|
||||
limitations under the License.
|
||||
==================================================================== */
|
||||
package org.apache.poi.hslf.dev;
|
||||
|
||||
import org.apache.poi.EmptyFileException;
|
||||
import org.apache.poi.hslf.HSLFTestDataSamples;
|
||||
import org.junit.Test;
|
||||
|
||||
import java.io.File;
|
||||
import java.io.IOException;
|
||||
|
||||
import static org.junit.Assert.fail;
|
||||
|
||||
public class TestSlideShowRecordDumper extends BasePPTIteratingTest {
|
||||
@Test
|
||||
public void testMain() throws IOException {
|
||||
SlideShowRecordDumper.main(new String[0]);
|
||||
|
||||
SlideShowRecordDumper.main(new String[] {
|
||||
HSLFTestDataSamples.getSampleFile("slide_master.ppt").getAbsolutePath(),
|
||||
});
|
||||
|
||||
SlideShowRecordDumper.main(new String[] {
|
||||
"-escher",
|
||||
HSLFTestDataSamples.getSampleFile("slide_master.ppt").getAbsolutePath(),
|
||||
});
|
||||
|
||||
SlideShowRecordDumper.main(new String[] {
|
||||
"-verbose",
|
||||
HSLFTestDataSamples.getSampleFile("pictures.ppt").getAbsolutePath()
|
||||
});
|
||||
|
||||
try {
|
||||
SlideShowRecordDumper.main(new String[]{"invalidfile"});
|
||||
fail("Should catch exception here");
|
||||
} catch (EmptyFileException e) {
|
||||
// expected here
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
void runOneFile(File pFile) throws Exception {
|
||||
SlideShowRecordDumper.main(new String[]{pFile.getAbsolutePath()});
|
||||
}
|
||||
}
|
|
@ -0,0 +1,57 @@
|
|||
/* ====================================================================
|
||||
Licensed to the Apache Software Foundation (ASF) under one or more
|
||||
contributor license agreements. See the NOTICE file distributed with
|
||||
this work for additional information regarding copyright ownership.
|
||||
The ASF licenses this file to You under the Apache License, Version 2.0
|
||||
(the "License"); you may not use this file except in compliance with
|
||||
the License. You may obtain a copy of the License at
|
||||
|
||||
http://www.apache.org/licenses/LICENSE-2.0
|
||||
|
||||
Unless required by applicable law or agreed to in writing, software
|
||||
distributed under the License is distributed on an "AS IS" BASIS,
|
||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
See the License for the specific language governing permissions and
|
||||
limitations under the License.
|
||||
==================================================================== */
|
||||
package org.apache.poi.hslf.dev;
|
||||
|
||||
import org.apache.poi.EmptyFileException;
|
||||
import org.junit.Test;
|
||||
|
||||
import java.io.File;
|
||||
import java.io.IOException;
|
||||
import java.util.HashSet;
|
||||
import java.util.Set;
|
||||
|
||||
import static org.junit.Assert.fail;
|
||||
|
||||
public class TestTextStyleListing extends BasePPTIteratingTest {
|
||||
private static Set<String> FAILING = new HashSet<>();
|
||||
static {
|
||||
FAILING.add("empty_textbox.ppt");
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testMain() throws IOException {
|
||||
// calls System.exit(): TextStyleListing.main(new String[0]);
|
||||
try {
|
||||
TextStyleListing.main(new String[]{"invalidfile"});
|
||||
fail("Should catch exception here");
|
||||
} catch (EmptyFileException e) {
|
||||
// expected here
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
void runOneFile(File pFile) throws Exception {
|
||||
try {
|
||||
TextStyleListing.main(new String[]{pFile.getAbsolutePath()});
|
||||
} catch (ArrayIndexOutOfBoundsException e) {
|
||||
// some corrupted documents currently can cause this excpetion
|
||||
if (!FAILING.contains(pFile.getName())) {
|
||||
throw e;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
|
@ -0,0 +1,44 @@
|
|||
/* ====================================================================
|
||||
Licensed to the Apache Software Foundation (ASF) under one or more
|
||||
contributor license agreements. See the NOTICE file distributed with
|
||||
this work for additional information regarding copyright ownership.
|
||||
The ASF licenses this file to You under the Apache License, Version 2.0
|
||||
(the "License"); you may not use this file except in compliance with
|
||||
the License. You may obtain a copy of the License at
|
||||
|
||||
http://www.apache.org/licenses/LICENSE-2.0
|
||||
|
||||
Unless required by applicable law or agreed to in writing, software
|
||||
distributed under the License is distributed on an "AS IS" BASIS,
|
||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
See the License for the specific language governing permissions and
|
||||
limitations under the License.
|
||||
==================================================================== */
|
||||
package org.apache.poi.hslf.dev;
|
||||
|
||||
import org.apache.poi.EmptyFileException;
|
||||
import org.junit.Test;
|
||||
|
||||
import java.io.File;
|
||||
import java.io.IOException;
|
||||
|
||||
import static org.junit.Assert.fail;
|
||||
|
||||
public class TestUserEditAndPersistListing extends BasePPTIteratingTest {
|
||||
@Test
|
||||
public void testMain() throws IOException {
|
||||
// calls System.exit(): UserEditAndPersistListing.main(new String[0]);
|
||||
|
||||
try {
|
||||
UserEditAndPersistListing.main(new String[]{"invalidfile"});
|
||||
fail("Should catch exception here");
|
||||
} catch (EmptyFileException e) {
|
||||
// expected here
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
void runOneFile(File pFile) throws Exception {
|
||||
UserEditAndPersistListing.main(new String[]{pFile.getAbsolutePath()});
|
||||
}
|
||||
}
|
|
@ -52,7 +52,7 @@ public class TestEscherDump {
|
|||
|
||||
@Test
|
||||
public void testWithData() throws Exception {
|
||||
new EscherDump().dumpOld(8, new ByteArrayInputStream(new byte[] { 00, 00, 00, 00, 00, 00, 00, 00 }), nullPS);
|
||||
new EscherDump().dumpOld(8, new ByteArrayInputStream(new byte[] {0, 0, 0, 0, 0, 0, 0, 0}), nullPS);
|
||||
}
|
||||
|
||||
@Test
|
||||
|
@ -63,14 +63,11 @@ public class TestEscherDump {
|
|||
//new EscherDump().dumpOld(data.length, new ByteArrayInputStream(data), System.out);
|
||||
|
||||
data = new byte[2586114];
|
||||
InputStream stream = HSSFTestDataSamples.openSampleFileStream("44593.xls");
|
||||
try {
|
||||
try (InputStream stream = HSSFTestDataSamples.openSampleFileStream("44593.xls")) {
|
||||
int bytes = IOUtils.readFully(stream, data);
|
||||
assertTrue(bytes != -1);
|
||||
//new EscherDump().dump(bytes, data, System.out);
|
||||
//new EscherDump().dumpOld(bytes, new ByteArrayInputStream(data), System.out);
|
||||
} finally {
|
||||
stream.close();
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -20,7 +20,6 @@ import static org.junit.Assert.assertNotNull;
|
|||
|
||||
import java.io.File;
|
||||
import java.io.FileInputStream;
|
||||
import java.io.FilenameFilter;
|
||||
import java.io.OutputStream;
|
||||
import java.util.ArrayList;
|
||||
import java.util.HashMap;
|
||||
|
@ -29,7 +28,6 @@ import java.util.Locale;
|
|||
import java.util.Map;
|
||||
|
||||
import org.apache.poi.POIDataSamples;
|
||||
import org.apache.poi.hssf.record.crypto.Biff8EncryptionKey;
|
||||
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
|
||||
import org.apache.poi.util.NullOutputStream;
|
||||
import org.junit.Rule;
|
||||
|
@ -71,12 +69,7 @@ public abstract class BaseXLSIteratingTest {
|
|||
}
|
||||
|
||||
private static void findFile(List<Object[]> list, String dir) {
|
||||
String[] files = new File(dir).list(new FilenameFilter() {
|
||||
@Override
|
||||
public boolean accept(File arg0, String arg1) {
|
||||
return arg1.toLowerCase(Locale.ROOT).endsWith(".xls");
|
||||
}
|
||||
});
|
||||
String[] files = new File(dir).list((arg0, arg1) -> arg1.toLowerCase(Locale.ROOT).endsWith(".xls"));
|
||||
|
||||
assertNotNull("Did not find any xls files in directory " + dir, files);
|
||||
|
||||
|
@ -99,17 +92,9 @@ public abstract class BaseXLSIteratingTest {
|
|||
runOneFile(file);
|
||||
} catch (Exception e) {
|
||||
// try to read it in HSSFWorkbook to quickly fail if we cannot read the file there at all and thus probably should use EXCLUDED instead
|
||||
FileInputStream stream = new FileInputStream(file);
|
||||
HSSFWorkbook wb = null;
|
||||
try {
|
||||
wb = new HSSFWorkbook(stream);
|
||||
assertNotNull(wb);
|
||||
} finally {
|
||||
if (wb != null) {
|
||||
wb.close();
|
||||
}
|
||||
stream.close();
|
||||
}
|
||||
try (FileInputStream stream = new FileInputStream(file); HSSFWorkbook wb = new HSSFWorkbook(stream)) {
|
||||
assertNotNull(wb);
|
||||
}
|
||||
|
||||
throw e;
|
||||
}
|
||||
|
|
|
@ -43,7 +43,6 @@ public class TestBiffDrawingToXml extends BaseXLSIteratingTest {
|
|||
EXCLUDED.put("testEXCEL_5.xls", OldExcelFormatException.class); // Biff 5 / Excel 5
|
||||
EXCLUDED.put("60284.xls", OldExcelFormatException.class); // Biff 5 / Excel 5
|
||||
EXCLUDED.put("testEXCEL_95.xls", OldExcelFormatException.class); // Biff 5 / Excel 95
|
||||
EXCLUDED.put("60284.xls", OldExcelFormatException.class); // Biff 5 / Excel 95
|
||||
EXCLUDED.put("43493.xls", RecordInputStream.LeftoverDataException.class); // HSSFWorkbook cannot open it as well
|
||||
EXCLUDED.put("44958_1.xls", RecordInputStream.LeftoverDataException.class);
|
||||
EXCLUDED.put("61300.xls", RecordFormatException.class);
|
||||
|
@ -55,12 +54,9 @@ public class TestBiffDrawingToXml extends BaseXLSIteratingTest {
|
|||
try {
|
||||
//System.setOut(new PrintStream(TestBiffViewer.NULL_OUTPUT_STREAM));
|
||||
// use a NullOutputStream to not write the bytes anywhere for best runtime
|
||||
InputStream wb = new FileInputStream(pFile);
|
||||
try {
|
||||
BiffDrawingToXml.writeToFile(NULL_OUTPUT_STREAM, wb, false, new String[] {});
|
||||
} finally {
|
||||
wb.close();
|
||||
}
|
||||
try (InputStream wb = new FileInputStream(pFile)) {
|
||||
BiffDrawingToXml.writeToFile(NULL_OUTPUT_STREAM, wb, false, new String[]{});
|
||||
}
|
||||
} finally {
|
||||
System.setOut(save);
|
||||
}
|
||||
|
|
|
@ -43,7 +43,6 @@ public class TestEFBiffViewer extends BaseXLSIteratingTest {
|
|||
EXCLUDED.put("testEXCEL_5.xls", OldExcelFormatException.class); // Biff 5 / Excel 5
|
||||
EXCLUDED.put("60284.xls", OldExcelFormatException.class); // Biff 5 / Excel 5
|
||||
EXCLUDED.put("testEXCEL_95.xls", OldExcelFormatException.class); // Biff 5 / Excel 95
|
||||
EXCLUDED.put("60284.xls", OldExcelFormatException.class); // Biff 5 / Excel 95
|
||||
EXCLUDED.put("43493.xls", RecordInputStream.LeftoverDataException.class); // HSSFWorkbook cannot open it as well
|
||||
EXCLUDED.put("44958_1.xls", RecordInputStream.LeftoverDataException.class);
|
||||
EXCLUDED.put("XRefCalc.xls", RuntimeException.class); // "Buffer overrun"
|
||||
|
|
|
@ -44,7 +44,6 @@ public class TestFormulaViewer extends BaseXLSIteratingTest {
|
|||
EXCLUDED.put("testEXCEL_5.xls", OldExcelFormatException.class); // Biff 5 / Excel 5
|
||||
EXCLUDED.put("60284.xls", OldExcelFormatException.class); // Biff 5 / Excel 5
|
||||
EXCLUDED.put("testEXCEL_95.xls", OldExcelFormatException.class); // Biff 5 / Excel 95
|
||||
EXCLUDED.put("60284.xls", OldExcelFormatException.class); // Biff 5 / Excel 95
|
||||
EXCLUDED.put("43493.xls", RecordInputStream.LeftoverDataException.class); // HSSFWorkbook cannot open it as well
|
||||
EXCLUDED.put("44958_1.xls", RecordInputStream.LeftoverDataException.class);
|
||||
EXCLUDED.put("61300.xls", RecordFormatException.class);
|
||||
|
|
|
@ -47,7 +47,6 @@ public class TestReSave extends BaseXLSIteratingTest {
|
|||
EXCLUDED.put("testEXCEL_5.xls", OldExcelFormatException.class); // Biff 5 / Excel 5
|
||||
EXCLUDED.put("60284.xls", OldExcelFormatException.class); // Biff 5 / Excel 5
|
||||
EXCLUDED.put("testEXCEL_95.xls", OldExcelFormatException.class); // Biff 5 / Excel 95
|
||||
EXCLUDED.put("60284.xls", OldExcelFormatException.class); // Biff 5 / Excel 95
|
||||
EXCLUDED.put("43493.xls", RecordInputStream.LeftoverDataException.class); // HSSFWorkbook cannot open it as well
|
||||
EXCLUDED.put("44958_1.xls", RecordInputStream.LeftoverDataException.class);
|
||||
EXCLUDED.put("XRefCalc.xls", RuntimeException.class); // "Buffer overrun"
|
||||
|
@ -79,7 +78,6 @@ public class TestReSave extends BaseXLSIteratingTest {
|
|||
// clean up the re-saved file
|
||||
assertTrue(!reSavedFile.exists() || reSavedFile.delete());
|
||||
}
|
||||
|
||||
} finally {
|
||||
System.setOut(save);
|
||||
}
|
||||
|
|
|
@ -37,7 +37,6 @@ public class TestRecordLister extends BaseXLSIteratingTest {
|
|||
EXCLUDED.put("testEXCEL_5.xls", OldExcelFormatException.class); // Biff 5 / Excel 5
|
||||
EXCLUDED.put("60284.xls", OldExcelFormatException.class); // Biff 5 / Excel 5
|
||||
EXCLUDED.put("testEXCEL_95.xls", OldExcelFormatException.class); // Biff 5 / Excel 95
|
||||
EXCLUDED.put("60284.xls", OldExcelFormatException.class); // Biff 5 / Excel 95
|
||||
EXCLUDED.put("61300.xls", RecordFormatException.class);
|
||||
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue