Add missing @Overrides, reformat some files, increase coverage slightly,

comments, fix Eclipse warnings and add close() calls in some tests and
in HMEFMessage() to close files during tests correctly.

git-svn-id: https://svn.apache.org/repos/asf/poi/trunk@1602008 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
Dominik Stadler 2014-06-11 20:36:30 +00:00
parent 267d70569a
commit 427d733469
21 changed files with 648 additions and 362 deletions

View File

@ -28,6 +28,7 @@ under the License.
Rainer Klute klute@rainer-klute.de
Bruno Girin brunogirin@gmail.com
Yegor Kozlov yegor at apache.org
Dominik Stadler centic at apache.org
This build was tested with ant 1.6.2 although it will probably work with
other versions. The following jar files should be available on the
@ -40,7 +41,7 @@ under the License.
To build the documentation you will need to install forrest and set
the FORREST_HOME environment variable. Forrest 0.5.1 required.
You currently need JDK 1.6 or newer to build POI.
Since POI 3.11 you will need JDK 1.6 or newer to build POI.
Some people may find the tests hang when run through Ant. If this
happens to you, try giving Ant some more memory when you run it, eg:

View File

@ -114,6 +114,7 @@ public class CustomProperty extends MutableProperty
/**
* @see java.util.AbstractSet#hashCode()
*/
@Override
public int hashCode()
{
return (int) this.getID();

View File

@ -133,6 +133,7 @@ public final class XSSFCell implements Cell {
*
* @return the sheet this cell belongs to
*/
@Override
public XSSFSheet getSheet() {
return getRow().getSheet();
}
@ -142,6 +143,7 @@ public final class XSSFCell implements Cell {
*
* @return the row this cell belongs to
*/
@Override
public XSSFRow getRow() {
return _row;
}
@ -155,6 +157,7 @@ public final class XSSFCell implements Cell {
* @throws IllegalStateException if the cell type returned by {@link #getCellType()}
* is not CELL_TYPE_BOOLEAN, CELL_TYPE_BLANK or CELL_TYPE_FORMULA
*/
@Override
public boolean getBooleanCellValue() {
int cellType = getCellType();
switch(cellType) {
@ -177,6 +180,7 @@ public final class XSSFCell implements Cell {
* precalculated value, for booleans we'll set its value. For other types we
* will change the cell to a boolean cell and set its value.
*/
@Override
public void setCellValue(boolean value) {
_cell.setT(STCellType.B);
_cell.setV(value ? TRUE_AS_STRING : FALSE_AS_STRING);
@ -193,6 +197,7 @@ public final class XSSFCell implements Cell {
* @exception NumberFormatException if the cell value isn't a parsable <code>double</code>.
* @see DataFormatter for turning this number into a string similar to that which Excel would render this number as.
*/
@Override
public double getNumericCellValue() {
int cellType = getCellType();
switch(cellType) {
@ -222,6 +227,7 @@ public final class XSSFCell implements Cell {
* precalculated value, for numerics we'll set its value. For other types we
* will change the cell to a numeric cell and set its value.
*/
@Override
public void setCellValue(double value) {
if(Double.isInfinite(value)) {
// Excel does not support positive/negative infinities,
@ -247,6 +253,7 @@ public final class XSSFCell implements Cell {
* </p>
* @return the value of the cell as a string
*/
@Override
public String getStringCellValue() {
XSSFRichTextString str = getRichStringCellValue();
return str == null ? null : str.getString();
@ -260,6 +267,7 @@ public final class XSSFCell implements Cell {
* </p>
* @return the value of the cell as a XSSFRichTextString
*/
@Override
public XSSFRichTextString getRichStringCellValue() {
int cellType = getCellType();
XSSFRichTextString rt;
@ -316,6 +324,7 @@ public final class XSSFCell implements Cell {
* change the cell to a string cell and set its value.
* If value is null then we will change the cell to a Blank cell.
*/
@Override
public void setCellValue(String str) {
setCellValue(str == null ? null : new XSSFRichTextString(str));
}
@ -328,6 +337,7 @@ public final class XSSFCell implements Cell {
* change the cell to a string cell and set its value.
* If value is null then we will change the cell to a Blank cell.
*/
@Override
public void setCellValue(RichTextString str) {
if(str == null || str.getString() == null){
setCellType(Cell.CELL_TYPE_BLANK);
@ -360,6 +370,7 @@ public final class XSSFCell implements Cell {
* @return a formula for the cell
* @throws IllegalStateException if the cell type returned by {@link #getCellType()} is not CELL_TYPE_FORMULA
*/
@Override
public String getCellFormula() {
int cellType = getCellType();
if(cellType != CELL_TYPE_FORMULA) throw typeMismatch(CELL_TYPE_FORMULA, cellType, false);
@ -417,6 +428,7 @@ public final class XSSFCell implements Cell {
* @throws IllegalStateException if the operation is not allowed, for example,
* when the cell is a part of a multi-cell array formula
*/
@Override
public void setCellFormula(String formula) {
if(isPartOfArrayFormulaGroup()){
notifyArrayFormulaChanging();
@ -454,6 +466,7 @@ public final class XSSFCell implements Cell {
*
* @return zero-based column index of a column in a sheet.
*/
@Override
public int getColumnIndex() {
return this._cellNum;
}
@ -463,6 +476,7 @@ public final class XSSFCell implements Cell {
*
* @return zero-based row index of a row in the sheet that contains this cell
*/
@Override
public int getRowIndex() {
return _row.getRowNum();
}
@ -485,6 +499,7 @@ public final class XSSFCell implements Cell {
*
* @return the cell's style.</code>
*/
@Override
public XSSFCellStyle getCellStyle() {
XSSFCellStyle style = null;
if(_stylesSource.getNumCellStyles() > 0){
@ -501,6 +516,7 @@ public final class XSSFCell implements Cell {
* @param style reference contained in the workbook.
* If the value is null then the style information is removed causing the cell to used the default workbook style.
*/
@Override
public void setCellStyle(CellStyle style) {
if(style == null) {
if(_cell.isSetS()) _cell.unsetS();
@ -524,6 +540,7 @@ public final class XSSFCell implements Cell {
* @see Cell#CELL_TYPE_BOOLEAN
* @see Cell#CELL_TYPE_ERROR
*/
@Override
public int getCellType() {
if (_cell.getF() != null || getSheet().isCellInArrayFormulaContext(this)) {
@ -539,6 +556,7 @@ public final class XSSFCell implements Cell {
* {@link #CELL_TYPE_BOOLEAN}, {@link #CELL_TYPE_ERROR}) depending
* on the cached value of the formula
*/
@Override
public int getCachedFormulaResultType() {
if (_cell.getF() == null) {
throw new IllegalStateException("Only formula cells have cached results");
@ -585,6 +603,7 @@ public final class XSSFCell implements Cell {
* @exception NumberFormatException if the cell value isn't a parsable <code>double</code>.
* @see DataFormatter for formatting this date into a string similar to how excel does.
*/
@Override
public Date getDateCellValue() {
int cellType = getCellType();
if (cellType == CELL_TYPE_BLANK) {
@ -604,6 +623,7 @@ public final class XSSFCell implements Cell {
* precalculated value, for numerics we'll set its value. For other types we
* will change the cell to a numeric cell and set its value.
*/
@Override
public void setCellValue(Date value) {
boolean date1904 = getSheet().getWorkbook().isDate1904();
setCellValue(DateUtil.getExcelDate(value, date1904));
@ -625,6 +645,7 @@ public final class XSSFCell implements Cell {
* precalculated value, for numerics we'll set its value. For othertypes we
* will change the cell to a numeric cell and set its value.
*/
@Override
public void setCellValue(Calendar value) {
boolean date1904 = getSheet().getWorkbook().isDate1904();
setCellValue( DateUtil.getExcelDate(value, date1904 ));
@ -654,6 +675,7 @@ public final class XSSFCell implements Cell {
* @throws IllegalStateException if the cell type returned by {@link #getCellType()} isn't CELL_TYPE_ERROR
* @see FormulaError
*/
@Override
public byte getErrorCellValue() {
String code = getErrorCellString();
if (code == null) {
@ -672,6 +694,7 @@ public final class XSSFCell implements Cell {
* cell and set its value.
* @see FormulaError
*/
@Override
public void setCellErrorValue(byte errorCode) {
FormulaError error = FormulaError.forInt(errorCode);
setCellErrorValue(error);
@ -693,6 +716,7 @@ public final class XSSFCell implements Cell {
/**
* Sets this cell as the active cell for the worksheet.
*/
@Override
public void setAsActiveCell() {
getSheet().setActiveCell(getReference());
}
@ -731,16 +755,17 @@ public final class XSSFCell implements Cell {
* @see #CELL_TYPE_BOOLEAN
* @see #CELL_TYPE_ERROR
*/
@Override
public void setCellType(int cellType) {
int prevType = getCellType();
if(isPartOfArrayFormulaGroup()){
notifyArrayFormulaChanging();
}
if(prevType == CELL_TYPE_FORMULA && cellType != CELL_TYPE_FORMULA) {
getSheet().getWorkbook().onDeleteFormula(this);
}
switch (cellType) {
case CELL_TYPE_BLANK:
setBlank();
@ -873,6 +898,7 @@ public final class XSSFCell implements Cell {
*
* @return the cell comment associated with this cell or <code>null</code>
*/
@Override
public XSSFComment getCellComment() {
return getSheet().getCellComment(_row.getRowNum(), getColumnIndex());
}
@ -883,6 +909,7 @@ public final class XSSFCell implements Cell {
*
* @param comment the XSSFComment associated with this cell
*/
@Override
public void setCellComment(Comment comment) {
if(comment == null) {
removeCellComment();
@ -896,6 +923,7 @@ public final class XSSFCell implements Cell {
/**
* Removes the comment for this cell, if there is one.
*/
@Override
public void removeCellComment() {
XSSFComment comment = getCellComment();
if(comment != null){
@ -911,6 +939,7 @@ public final class XSSFCell implements Cell {
*
* @return hyperlink associated with this cell or <code>null</code> if not found
*/
@Override
public XSSFHyperlink getHyperlink() {
return getSheet().getHyperlink(_row.getRowNum(), _cellNum);
}
@ -920,6 +949,7 @@ public final class XSSFCell implements Cell {
*
* @param hyperlink the hyperlink to associate with this cell
*/
@Override
public void setHyperlink(Hyperlink hyperlink) {
XSSFHyperlink link = (XSSFHyperlink)hyperlink;
@ -1026,6 +1056,7 @@ public final class XSSFCell implements Cell {
throw new IllegalStateException("Unexpected formula result type (" + cellType + ")");
}
@Override
public CellRangeAddress getArrayFormulaRange() {
XSSFCell cell = getSheet().getFirstCellInArrayFormula(this);
if (cell == null) {
@ -1036,6 +1067,7 @@ public final class XSSFCell implements Cell {
return CellRangeAddress.valueOf(formulaRef);
}
@Override
public boolean isPartOfArrayFormulaGroup() {
return getSheet().isCellInArrayFormulaContext(this);
}

File diff suppressed because it is too large Load Diff

View File

@ -227,11 +227,11 @@ public class XSSFWorkbook extends POIXMLDocument implements Workbook, Iterable<X
* // work with the wb object
* ......
* pkg.close(); // gracefully closes the underlying zip file
* </code></pre>
* </code></pre>
*/
public XSSFWorkbook(InputStream is) throws IOException {
super(PackageHelper.open(is));
//build a tree of POIXMLDocumentParts, this workbook being the root
load(XSSFFactory.getInstance());
}
@ -253,7 +253,7 @@ public class XSSFWorkbook extends POIXMLDocument implements Workbook, Iterable<X
* then pass the data to ZipInputStream.
* </li>
* <ol>
* <p>
* <p>
* It should be noted, that (2) uses quite a bit more memory than (1), which
* doesn't need to hold the whole zip file in memory, and can take advantage
* of native methods.
@ -267,9 +267,9 @@ public class XSSFWorkbook extends POIXMLDocument implements Workbook, Iterable<X
* // work with the wb object
* ......
* pkg.close(); // gracefully closes the underlying zip file
* </code></pre>
* </code></pre>
* </p>
*
*
* @param path the file name.
* @deprecated
*/
@ -399,6 +399,7 @@ public class XSSFWorkbook extends POIXMLDocument implements Workbook, Iterable<X
* @see Workbook#PICTURE_TYPE_DIB
* @see #getAllPictures()
*/
@Override
public int addPicture(byte[] pictureData, int format) {
int imageNumber = getAllPictures().size() + 1;
XSSFPictureData img = (XSSFPictureData)createRelationship(XSSFPictureData.RELATIONS[format], XSSFFactory.getInstance(), imageNumber, true);
@ -446,6 +447,7 @@ public class XSSFWorkbook extends POIXMLDocument implements Workbook, Iterable<X
* @throws IllegalArgumentException if the sheet index in invalid
* @throws POIXMLException if there were errors when cloning
*/
@Override
public XSSFSheet cloneSheet(int sheetNum) {
validateSheetIndex(sheetNum);
@ -557,6 +559,7 @@ public class XSSFWorkbook extends POIXMLDocument implements Workbook, Iterable<X
*
* @return the new XSSFCellStyle object
*/
@Override
public XSSFCellStyle createCellStyle() {
return stylesSource.createCellStyle();
}
@ -567,6 +570,7 @@ public class XSSFWorkbook extends POIXMLDocument implements Workbook, Iterable<X
* @return the XSSFDataFormat object
* @see org.apache.poi.ss.usermodel.DataFormat
*/
@Override
public XSSFDataFormat createDataFormat() {
if (formatter == null)
formatter = new XSSFDataFormat(stylesSource);
@ -578,12 +582,14 @@ public class XSSFWorkbook extends POIXMLDocument implements Workbook, Iterable<X
*
* @return new font object
*/
@Override
public XSSFFont createFont() {
XSSFFont font = new XSSFFont();
font.registerTo(stylesSource);
return font;
}
@Override
public XSSFName createName() {
CTDefinedName ctName = CTDefinedName.Factory.newInstance();
ctName.setName("");
@ -598,6 +604,7 @@ public class XSSFWorkbook extends POIXMLDocument implements Workbook, Iterable<X
*
* @return XSSFSheet representing the new sheet.
*/
@Override
public XSSFSheet createSheet() {
String sheetname = "Sheet" + (sheets.size());
int idx = 0;
@ -655,6 +662,7 @@ public class XSSFWorkbook extends POIXMLDocument implements Workbook, Iterable<X
* or workbook already contains a sheet with this name
* @see org.apache.poi.ss.util.WorkbookUtil#createSafeSheetName(String nameProposal)
*/
@Override
public XSSFSheet createSheet(String sheetname) {
if (sheetname == null) {
throw new IllegalArgumentException("sheetName must not be null");
@ -695,6 +703,7 @@ public class XSSFWorkbook extends POIXMLDocument implements Workbook, Iterable<X
/**
* Finds a font that matches the one with the supplied attributes
*/
@Override
public XSSFFont findFont(short boldWeight, short color, short fontHeight, String name, boolean italic, boolean strikeout, short typeOffset, byte underline) {
return stylesSource.findFont(boldWeight, color, fontHeight, name, italic, strikeout, typeOffset, underline);
}
@ -704,6 +713,7 @@ public class XSSFWorkbook extends POIXMLDocument implements Workbook, Iterable<X
* which is currently displayed when the workbook is viewed in Excel.
* 'Selected' sheet(s) is a distinct concept.
*/
@Override
public int getActiveSheetIndex() {
//activeTab (Active Sheet Index) Specifies an unsignedInt
//that contains the index to the active sheet in this book view.
@ -716,6 +726,7 @@ public class XSSFWorkbook extends POIXMLDocument implements Workbook, Iterable<X
* @return the list of pictures (a list of {@link XSSFPictureData} objects.)
* @see #addPicture(byte[], int)
*/
@Override
public List<XSSFPictureData> getAllPictures() {
if(pictures == null){
List<PackagePart> mediaParts = getPackage().getPartsByName(Pattern.compile("/xl/media/.*?"));
@ -733,6 +744,7 @@ public class XSSFWorkbook extends POIXMLDocument implements Workbook, Iterable<X
* @param idx index within the set of styles
* @return XSSFCellStyle object at the index
*/
@Override
public XSSFCellStyle getCellStyleAt(short idx) {
return stylesSource.getStyleAt(idx);
}
@ -743,10 +755,12 @@ public class XSSFWorkbook extends POIXMLDocument implements Workbook, Iterable<X
* @param idx index number
* @return XSSFFont at the index
*/
@Override
public XSSFFont getFontAt(short idx) {
return stylesSource.getFontAt(idx);
}
@Override
public XSSFName getName(String name) {
int nameIndex = getNameIndex(name);
if (nameIndex < 0) {
@ -755,6 +769,7 @@ public class XSSFWorkbook extends POIXMLDocument implements Workbook, Iterable<X
return namedRanges.get(nameIndex);
}
@Override
public XSSFName getNameAt(int nameIndex) {
int nNames = namedRanges.size();
if (nNames < 1) {
@ -775,6 +790,7 @@ public class XSSFWorkbook extends POIXMLDocument implements Workbook, Iterable<X
* @param name named range name
* @return named range index
*/
@Override
public int getNameIndex(String name) {
int i = 0;
for(XSSFName nr : namedRanges) {
@ -791,6 +807,7 @@ public class XSSFWorkbook extends POIXMLDocument implements Workbook, Iterable<X
*
* @return count of cell styles
*/
@Override
public short getNumCellStyles() {
return (short) (stylesSource).getNumCellStyles();
}
@ -800,6 +817,7 @@ public class XSSFWorkbook extends POIXMLDocument implements Workbook, Iterable<X
*
* @return number of fonts
*/
@Override
public short getNumberOfFonts() {
return (short)stylesSource.getFonts().size();
}
@ -809,6 +827,7 @@ public class XSSFWorkbook extends POIXMLDocument implements Workbook, Iterable<X
*
* @return number of named ranges
*/
@Override
public int getNumberOfNames() {
return namedRanges.size();
}
@ -818,6 +837,7 @@ public class XSSFWorkbook extends POIXMLDocument implements Workbook, Iterable<X
*
* @return number of worksheets
*/
@Override
public int getNumberOfSheets() {
return sheets.size();
}
@ -827,6 +847,7 @@ public class XSSFWorkbook extends POIXMLDocument implements Workbook, Iterable<X
* @param sheetIndex Zero-based sheet index (0 Represents the first sheet to keep consistent with java)
* @return String Null if no print area has been defined
*/
@Override
public String getPrintArea(int sheetIndex) {
XSSFName name = getBuiltInName(XSSFName.BUILTIN_PRINT_AREA, sheetIndex);
if (name == null) return null;
@ -841,6 +862,7 @@ public class XSSFWorkbook extends POIXMLDocument implements Workbook, Iterable<X
* @param name of the sheet
* @return XSSFSheet with the name provided or <code>null</code> if it does not exist
*/
@Override
public XSSFSheet getSheet(String name) {
for (XSSFSheet sheet : sheets) {
if (name.equalsIgnoreCase(sheet.getSheetName())) {
@ -858,6 +880,7 @@ public class XSSFWorkbook extends POIXMLDocument implements Workbook, Iterable<X
* @throws IllegalArgumentException if the index is out of range (index
* &lt; 0 || index &gt;= getNumberOfSheets()).
*/
@Override
public XSSFSheet getSheetAt(int index) {
validateSheetIndex(index);
return sheets.get(index);
@ -869,6 +892,7 @@ public class XSSFWorkbook extends POIXMLDocument implements Workbook, Iterable<X
* @param name the sheet name
* @return index of the sheet (0 based) or <tt>-1</tt if not found
*/
@Override
public int getSheetIndex(String name) {
for (int i = 0 ; i < sheets.size() ; ++i) {
XSSFSheet sheet = sheets.get(i);
@ -885,6 +909,7 @@ public class XSSFWorkbook extends POIXMLDocument implements Workbook, Iterable<X
* @param sheet the sheet to look up
* @return index of the sheet (0 based). <tt>-1</tt> if not found
*/
@Override
public int getSheetIndex(Sheet sheet) {
int idx = 0;
for(XSSFSheet sh : sheets){
@ -900,6 +925,7 @@ public class XSSFWorkbook extends POIXMLDocument implements Workbook, Iterable<X
* @param sheetIx Number
* @return Sheet name
*/
@Override
public String getSheetName(int sheetIx) {
validateSheetIndex(sheetIx);
return sheets.get(sheetIx).getSheetName();
@ -914,6 +940,7 @@ public class XSSFWorkbook extends POIXMLDocument implements Workbook, Iterable<X
* }
* </code></pre>
*/
@Override
public Iterator<XSSFSheet> iterator() {
return sheets.iterator();
}
@ -925,10 +952,12 @@ public class XSSFWorkbook extends POIXMLDocument implements Workbook, Iterable<X
return getPackagePart().getContentType().equals(XSSFRelation.MACROS_WORKBOOK.getContentType());
}
@Override
public void removeName(int nameIndex) {
namedRanges.remove(nameIndex);
}
@Override
public void removeName(String name) {
for (int i = 0; i < namedRanges.size(); i++) {
XSSFName nm = namedRanges.get(i);
@ -942,9 +971,9 @@ public class XSSFWorkbook extends POIXMLDocument implements Workbook, Iterable<X
/**
* As {@link #removeName(String)} is not necessarily unique
* As {@link #removeName(String)} is not necessarily unique
* (name + sheet index is unique), this method is more accurate.
*
*
* @param name the name to remove.
*/
void removeName(XSSFName name) {
@ -959,6 +988,7 @@ public class XSSFWorkbook extends POIXMLDocument implements Workbook, Iterable<X
*
* @param sheetIndex 0-based sheet index (0 = First Sheet)
*/
@Override
public void removePrintArea(int sheetIndex) {
int cont = 0;
for (XSSFName name : namedRanges) {
@ -984,6 +1014,7 @@ public class XSSFWorkbook extends POIXMLDocument implements Workbook, Iterable<X
*
* @param index of the sheet (0-based)
*/
@Override
public void removeSheetAt(int index) {
validateSheetIndex(index);
@ -1029,6 +1060,7 @@ public class XSSFWorkbook extends POIXMLDocument implements Workbook, Iterable<X
* The default is to return blank and null cells.
* {@link MissingCellPolicy}
*/
@Override
public MissingCellPolicy getMissingCellPolicy() {
return _missingCellPolicy;
}
@ -1039,6 +1071,7 @@ public class XSSFWorkbook extends POIXMLDocument implements Workbook, Iterable<X
* {@link Row#getCell(int)}}. See
* {@link MissingCellPolicy}
*/
@Override
public void setMissingCellPolicy(MissingCellPolicy missingCellPolicy) {
_missingCellPolicy = missingCellPolicy;
}
@ -1048,6 +1081,7 @@ public class XSSFWorkbook extends POIXMLDocument implements Workbook, Iterable<X
* which is currently displayed when the workbook is viewed in Excel.
* 'Selected' sheet(s) is a distinct concept.
*/
@Override
@SuppressWarnings("deprecation") //YK: getXYZArray() array accessors are deprecated in xmlbeans with JDK 1.5 support
public void setActiveSheet(int index) {
@ -1082,6 +1116,7 @@ public class XSSFWorkbook extends POIXMLDocument implements Workbook, Iterable<X
*
* @return integer that contains the index to the active sheet in this book view.
*/
@Override
public int getFirstVisibleTab() {
CTBookViews bookViews = workbook.getBookViews();
CTBookView bookView = bookViews.getWorkbookViewArray(0);
@ -1093,6 +1128,7 @@ public class XSSFWorkbook extends POIXMLDocument implements Workbook, Iterable<X
*
* @param index integer that contains the index to the active sheet in this book view.
*/
@Override
public void setFirstVisibleTab(int index) {
CTBookViews bookViews = workbook.getBookViews();
CTBookView bookView= bookViews.getWorkbookViewArray(0);
@ -1106,6 +1142,7 @@ public class XSSFWorkbook extends POIXMLDocument implements Workbook, Iterable<X
* @param sheetIndex Zero-based sheet index (0 Represents the first sheet to keep consistent with java)
* @param reference Valid name Reference for the Print Area
*/
@Override
public void setPrintArea(int sheetIndex, String reference) {
XSSFName name = getBuiltInName(XSSFName.BUILTIN_PRINT_AREA, sheetIndex);
if (name == null) {
@ -1135,6 +1172,7 @@ public class XSSFWorkbook extends POIXMLDocument implements Workbook, Iterable<X
* @param startRow Row to begin the printarea
* @param endRow Row to end the printarea
*/
@Override
public void setPrintArea(int sheetIndex, int startColumn, int endColumn, int startRow, int endRow) {
String reference=getReferencePrintArea(getSheetName(sheetIndex), startColumn, endColumn, startRow, endRow);
setPrintArea(sheetIndex, reference);
@ -1162,18 +1200,20 @@ public class XSSFWorkbook extends POIXMLDocument implements Workbook, Iterable<X
* @param endColumn 0 based end of repeating columns.
* @param startRow 0 based start of repeating rows.
* @param endRow 0 based end of repeating rows.
*
*
* @deprecated use {@link XSSFSheet#setRepeatingRows(CellRangeAddress)}
* or {@link XSSFSheet#setRepeatingColumns(CellRangeAddress)}
*/
@Deprecated
@Override
public void setRepeatingRowsAndColumns(int sheetIndex,
int startColumn, int endColumn,
int startRow, int endRow) {
XSSFSheet sheet = getSheetAt(sheetIndex);
CellRangeAddress rows = null;
CellRangeAddress cols = null;
if (startRow != -1) {
rows = new CellRangeAddress(startRow, endRow, -1, -1);
}
@ -1231,6 +1271,7 @@ public class XSSFWorkbook extends POIXMLDocument implements Workbook, Iterable<X
/**
* We only set one sheet as selected for compatibility with HSSF.
*/
@Override
public void setSelectedTab(int index) {
for (int i = 0 ; i < sheets.size() ; ++i) {
XSSFSheet sheet = sheets.get(i);
@ -1248,6 +1289,7 @@ public class XSSFWorkbook extends POIXMLDocument implements Workbook, Iterable<X
* @see #createSheet(String)
* @see org.apache.poi.ss.util.WorkbookUtil#createSafeSheetName(String nameProposal)
*/
@Override
public void setSheetName(int sheetIndex, String sheetname) {
validateSheetIndex(sheetIndex);
@ -1272,6 +1314,7 @@ public class XSSFWorkbook extends POIXMLDocument implements Workbook, Iterable<X
* @param sheetname the name of the sheet to reorder
* @param pos the position that we want to insert the sheet into (0 based)
*/
@Override
public void setSheetOrder(String sheetname, int pos) {
int idx = getSheetIndex(sheetname);
sheets.add(pos, sheets.remove(idx));
@ -1391,6 +1434,7 @@ public class XSSFWorkbook extends POIXMLDocument implements Workbook, Iterable<X
* Returns an object that handles instantiating concrete
* classes of the various instances for XSSF.
*/
@Override
public XSSFCreationHelper getCreationHelper() {
if(_creationHelper == null) _creationHelper = new XSSFCreationHelper(this);
return _creationHelper;
@ -1457,10 +1501,12 @@ public class XSSFWorkbook extends POIXMLDocument implements Workbook, Iterable<X
return embedds;
}
@Override
public boolean isHidden() {
throw new RuntimeException("Not implemented yet");
}
@Override
public void setHidden(boolean hiddenFlag) {
throw new RuntimeException("Not implemented yet");
}
@ -1474,6 +1520,7 @@ public class XSSFWorkbook extends POIXMLDocument implements Workbook, Iterable<X
* @param sheetIx Number
* @return <code>true</code> if sheet is hidden
*/
@Override
public boolean isSheetHidden(int sheetIx) {
validateSheetIndex(sheetIx);
CTSheet ctSheet = sheets.get(sheetIx).sheet;
@ -1489,6 +1536,7 @@ public class XSSFWorkbook extends POIXMLDocument implements Workbook, Iterable<X
* @param sheetIx sheet index to check
* @return <code>true</code> if sheet is very hidden
*/
@Override
public boolean isSheetVeryHidden(int sheetIx) {
validateSheetIndex(sheetIx);
CTSheet ctSheet = sheets.get(sheetIx).sheet;
@ -1509,6 +1557,7 @@ public class XSSFWorkbook extends POIXMLDocument implements Workbook, Iterable<X
* @param hidden whether this sheet is hidden
* @see #setSheetHidden(int, int)
*/
@Override
public void setSheetHidden(int sheetIx, boolean hidden) {
setSheetHidden(sheetIx, hidden ? SHEET_STATE_HIDDEN : SHEET_STATE_VISIBLE);
}
@ -1528,6 +1577,7 @@ public class XSSFWorkbook extends POIXMLDocument implements Workbook, Iterable<X
* <code>Workbook.SHEET_STATE_VERY_HIDDEN</code>.
* @throws IllegalArgumentException if the supplied sheet index or state is invalid
*/
@Override
public void setSheetHidden(int sheetIx, int state) {
validateSheetIndex(sheetIx);
WorkbookUtil.validateSheetState(state);
@ -1584,7 +1634,7 @@ public class XSSFWorkbook extends POIXMLDocument implements Workbook, Iterable<X
* A value true indicates the structure of the workbook is locked. Worksheets in the workbook can't be moved,
* deleted, hidden, unhidden, or renamed, and new worksheets can't be inserted.<br/>
* A value of false indicates the structure of the workbook is not locked.<br/>
*
*
* @return true if structure of workbook is locked
*/
public boolean isStructureLocked() {
@ -1596,7 +1646,7 @@ public class XSSFWorkbook extends POIXMLDocument implements Workbook, Iterable<X
* A value of true indicates the workbook windows are locked. Windows are the same size and position each time the
* workbook is opened.<br/>
* A value of false indicates the workbook windows are not locked.
*
*
* @return true if windows that comprise the workbook are locked
*/
public boolean isWindowsLocked() {
@ -1605,13 +1655,13 @@ public class XSSFWorkbook extends POIXMLDocument implements Workbook, Iterable<X
/**
* Specifies a boolean value that indicates whether the workbook is locked for revisions.
*
*
* @return true if the workbook is locked for revisions.
*/
public boolean isRevisionLocked() {
return workbookProtectionPresent() && workbook.getWorkbookProtection().getLockRevision();
}
/**
* Locks the structure of workbook.
*/
@ -1619,7 +1669,7 @@ public class XSSFWorkbook extends POIXMLDocument implements Workbook, Iterable<X
createProtectionFieldIfNotPresent();
workbook.getWorkbookProtection().setLockStructure(true);
}
/**
* Unlocks the structure of workbook.
*/
@ -1629,21 +1679,21 @@ public class XSSFWorkbook extends POIXMLDocument implements Workbook, Iterable<X
}
/**
* Locks the windows that comprise the workbook.
* Locks the windows that comprise the workbook.
*/
public void lockWindows() {
createProtectionFieldIfNotPresent();
workbook.getWorkbookProtection().setLockWindows(true);
}
/**
* Unlocks the windows that comprise the workbook.
* Unlocks the windows that comprise the workbook.
*/
public void unLockWindows() {
createProtectionFieldIfNotPresent();
workbook.getWorkbookProtection().setLockWindows(false);
}
/**
* Locks the workbook for revisions.
*/
@ -1659,7 +1709,7 @@ public class XSSFWorkbook extends POIXMLDocument implements Workbook, Iterable<X
createProtectionFieldIfNotPresent();
workbook.getWorkbookProtection().setLockRevision(false);
}
private boolean workbookProtectionPresent() {
return workbook.getWorkbookProtection() != null;
}
@ -1691,6 +1741,7 @@ public class XSSFWorkbook extends POIXMLDocument implements Workbook, Iterable<X
*
* @param toopack the toolpack to register
*/
@Override
public void addToolPack(UDFFinder toopack){
_udfFinder.add(toopack);
}
@ -1712,7 +1763,8 @@ public class XSSFWorkbook extends POIXMLDocument implements Workbook, Iterable<X
* workbook values when the workbook is opened
* @since 3.8
*/
public void setForceFormulaRecalculation(boolean value){
@Override
public void setForceFormulaRecalculation(boolean value){
CTWorkbook ctWorkbook = getCTWorkbook();
CTCalcPr calcPr = ctWorkbook.isSetCalcPr() ? ctWorkbook.getCalcPr() : ctWorkbook.addNewCalcPr();
// when set to 0, will tell Excel that it needs to recalculate all formulas
@ -1729,6 +1781,7 @@ public class XSSFWorkbook extends POIXMLDocument implements Workbook, Iterable<X
*
* @since 3.8
*/
@Override
public boolean getForceFormulaRecalculation(){
CTWorkbook ctWorkbook = getCTWorkbook();
CTCalcPr calcPr = ctWorkbook.getCalcPr();

View File

@ -66,6 +66,8 @@ public class TestXWPFBugs {
assertNotNull(text);
assertEquals("This is password protected Word document.", text.trim());
ex.close();
filesystem.close();
}
/**
@ -101,5 +103,7 @@ public class TestXWPFBugs {
// I know ... a stupid typo, maybe next time ...
assertEquals("The is a password protected document.", text.trim());
ex.close();
filesystem.close();
}
}

View File

@ -47,20 +47,24 @@ public final class HMEFMessage {
private List<Attachment> attachments = new ArrayList<Attachment>();
public HMEFMessage(InputStream inp) throws IOException {
// Check the signature matches
int sig = LittleEndian.readInt(inp);
if(sig != HEADER_SIGNATURE) {
throw new IllegalArgumentException(
"TNEF signature not detected in file, " +
"expected " + HEADER_SIGNATURE + " but got " + sig
);
try {
// Check the signature matches
int sig = LittleEndian.readInt(inp);
if(sig != HEADER_SIGNATURE) {
throw new IllegalArgumentException(
"TNEF signature not detected in file, " +
"expected " + HEADER_SIGNATURE + " but got " + sig
);
}
// Read the File ID
fileId = LittleEndian.readUShort(inp);
// Now begin processing the contents
process(inp);
} finally {
inp.close();
}
// Read the File ID
fileId = LittleEndian.readUShort(inp);
// Now begin processing the contents
process(inp);
}
private void process(InputStream inp) throws IOException {

View File

@ -18,6 +18,7 @@
package org.apache.poi.hmef;
import java.io.IOException;
import java.io.InputStream;
import junit.framework.TestCase;
@ -34,13 +35,16 @@ public abstract class HMEFTest extends TestCase {
}
protected void assertContents(String filename, byte[] actual)
throws IOException {
byte[] expected = IOUtils.toByteArray(
_samples.openResourceAsStream("quick-contents/" + filename)
);
assertEquals(expected.length, actual.length);
for(int i=0; i<expected.length; i++) {
assertEquals("Byte " + i + " wrong", expected[i], actual[i]);
InputStream stream = _samples.openResourceAsStream("quick-contents/" + filename);
try {
byte[] expected = IOUtils.toByteArray(stream);
assertEquals(expected.length, actual.length);
for(int i=0; i<expected.length; i++) {
assertEquals("Byte " + i + " wrong", expected[i], actual[i]);
}
} finally {
stream.close();
}
}
}

View File

@ -18,6 +18,7 @@
package org.apache.poi.hmef;
import java.io.ByteArrayInputStream;
import java.io.InputStream;
import junit.framework.TestCase;
@ -157,34 +158,37 @@ public final class TestCompressedRTF extends TestCase {
assertNotNull(attr);
MAPIRtfAttribute rtfAttr = (MAPIRtfAttribute)attr;
byte[] expected = IOUtils.toByteArray(
_samples.openResourceAsStream("quick-contents/message.rtf")
);
CompressedRTF comp = new CompressedRTF();
byte[] data = rtfAttr.getRawData();
byte[] decomp = comp.decompress(new ByteArrayInputStream(data));
// Check the length was as expected
assertEquals(data.length, comp.getCompressedSize() + 16);
assertEquals(expected.length, comp.getDeCompressedSize());
// Will have been padded though
assertEquals(expected.length+2, decomp.length);
byte[] tmp = new byte[expected.length];
System.arraycopy(decomp, 0, tmp, 0, tmp.length);
decomp = tmp;
// By byte
assertEquals(expected.length, decomp.length);
for(int i=0; i<expected.length; i++) {
assertEquals(expected[i], decomp[i]);
InputStream stream = _samples.openResourceAsStream("quick-contents/message.rtf");
try {
byte[] expected = IOUtils.toByteArray(stream);
CompressedRTF comp = new CompressedRTF();
byte[] data = rtfAttr.getRawData();
byte[] decomp = comp.decompress(new ByteArrayInputStream(data));
// Check the length was as expected
assertEquals(data.length, comp.getCompressedSize() + 16);
assertEquals(expected.length, comp.getDeCompressedSize());
// Will have been padded though
assertEquals(expected.length+2, decomp.length);
byte[] tmp = new byte[expected.length];
System.arraycopy(decomp, 0, tmp, 0, tmp.length);
decomp = tmp;
// By byte
assertEquals(expected.length, decomp.length);
for(int i=0; i<expected.length; i++) {
assertEquals(expected[i], decomp[i]);
}
// By String
String expString = new String(expected, "ASCII");
String decompStr = rtfAttr.getDataString();
assertEquals(expString.length(), decompStr.length());
assertEquals(expString, decompStr);
} finally {
stream.close();
}
// By String
String expString = new String(expected, "ASCII");
String decompStr = rtfAttr.getDataString();
assertEquals(expString.length(), decompStr.length());
assertEquals(expString, decompStr);
}
}

View File

@ -18,6 +18,7 @@
package org.apache.poi.hmef.attribute;
import java.io.ByteArrayInputStream;
import java.io.InputStream;
import java.text.DateFormat;
import java.util.Locale;
import java.util.TimeZone;
@ -32,17 +33,25 @@ import org.apache.poi.util.LittleEndian;
public final class TestMAPIAttributes extends TestCase {
private static final POIDataSamples _samples = POIDataSamples.getHMEFInstance();
private HMEFMessage quick;
private InputStream stream;
@Override
protected void setUp() throws Exception {
super.setUp();
quick = new HMEFMessage(
_samples.openResourceAsStream("quick-winmail.dat")
);
stream = _samples.openResourceAsStream("quick-winmail.dat");
quick = new HMEFMessage(stream);
}
/**
protected void tearDown() throws Exception {
stream.close();
super.tearDown();
}
/**
* Test counts
*/
public void testCounts() throws Exception {

View File

@ -91,8 +91,9 @@ public final class TestPublisherTextExtractor extends TestCase {
assertEquals( SAMPLE_TEXT, ext.getText() );
// And with NPOIFS
HPBFDocument docNPOIFS = new HPBFDocument(
new NPOIFSFileSystem(sample)
NPOIFSFileSystem fs = new NPOIFSFileSystem(sample);
HPBFDocument docNPOIFS = new HPBFDocument(
fs
);
ext = new PublisherTextExtractor(docNPOIFS);
assertEquals( SAMPLE_TEXT, ext.getText() );
@ -103,6 +104,7 @@ public final class TestPublisherTextExtractor extends TestCase {
new FileInputStream(simple)
);
assertEquals( SIMPLE_TEXT, ext.getText() );
fs.close();
}
/**

View File

@ -349,7 +349,8 @@ public final class TestExtractor extends POITestCase {
// Open the two filesystems
DirectoryNode[] files = new DirectoryNode[2];
files[0] = (new POIFSFileSystem(slTests.openResourceAsStream("basic_test_ppt_file.ppt"))).getRoot();
files[1] = (new NPOIFSFileSystem(slTests.getFile("basic_test_ppt_file.ppt"))).getRoot();
NPOIFSFileSystem npoifsFileSystem = new NPOIFSFileSystem(slTests.getFile("basic_test_ppt_file.ppt"));
files[1] = npoifsFileSystem.getRoot();
// Open directly
for(DirectoryNode dir : files) {
@ -363,6 +364,8 @@ public final class TestExtractor extends POITestCase {
PowerPointExtractor extractor = new PowerPointExtractor(slideshow);
assertEquals(expectText, extractor.getText());
}
npoifsFileSystem.close();
}
public void testTable() throws Exception{

View File

@ -342,7 +342,8 @@ public final class TestWordExtractor extends TestCase {
// Open the two filesystems
DirectoryNode[] files = new DirectoryNode[2];
files[0] = (new POIFSFileSystem(docTests.openResourceAsStream("test2.doc"))).getRoot();
files[1] = (new NPOIFSFileSystem(docTests.getFile("test2.doc"))).getRoot();
NPOIFSFileSystem npoifsFileSystem = new NPOIFSFileSystem(docTests.getFile("test2.doc"));
files[1] = npoifsFileSystem.getRoot();
// Open directly
for(DirectoryNode dir : files) {
@ -356,6 +357,8 @@ public final class TestWordExtractor extends TestCase {
WordExtractor extractor = new WordExtractor(doc);
assertEquals(p_text1_block, extractor.getText());
}
npoifsFileSystem.close();
}
/**

View File

@ -21,53 +21,51 @@ import java.lang.reflect.AccessibleObject;
import java.lang.reflect.Field;
import junit.framework.TestCase;
import org.apache.poi.hwpf.HWPFDocFixture;
public final class TestFileInformationBlock
extends TestCase
{
private FileInformationBlock _fileInformationBlock = null;
private HWPFDocFixture _hWPFDocFixture;
public final class TestFileInformationBlock extends TestCase {
private FileInformationBlock _fileInformationBlock = null;
private HWPFDocFixture _hWPFDocFixture;
public void testReadWrite()
throws Exception
{
int size = _fileInformationBlock.getSize();
byte[] buf = new byte[size];
public void testReadWrite() throws Exception {
int size = _fileInformationBlock.getSize();
byte[] buf = new byte[size];
_fileInformationBlock.getFibBase().serialize(buf, 0);
_fileInformationBlock.getFibBase().serialize(buf, 0);
FileInformationBlock newFileInformationBlock =
new FileInformationBlock(buf);
FileInformationBlock newFileInformationBlock = new FileInformationBlock(
buf);
Field[] fields = FileInformationBlock.class.getSuperclass().getDeclaredFields();
AccessibleObject.setAccessible(fields, true);
Field[] fields = FileInformationBlock.class.getSuperclass()
.getDeclaredFields();
AccessibleObject.setAccessible(fields, true);
for (int x = 0; x < fields.length; x++)
{
assertEquals(fields[x].get(_fileInformationBlock), fields[x].get(newFileInformationBlock));
for (int x = 0; x < fields.length; x++) {
assertEquals(fields[x].get(_fileInformationBlock),
fields[x].get(newFileInformationBlock));
}
assertNotNull(_fileInformationBlock.toString());
}
}
protected void setUp()
throws Exception
{
super.setUp();
/**@todo verify the constructors*/
_hWPFDocFixture = new HWPFDocFixture(this, HWPFDocFixture.DEFAULT_TEST_FILE);
@Override
protected void setUp() throws Exception {
super.setUp();
/** @todo verify the constructors */
_hWPFDocFixture = new HWPFDocFixture(this,
HWPFDocFixture.DEFAULT_TEST_FILE);
_hWPFDocFixture.setUp();
_fileInformationBlock = _hWPFDocFixture._fib;
}
_hWPFDocFixture.setUp();
_fileInformationBlock = _hWPFDocFixture._fib;
}
protected void tearDown()
throws Exception
{
_fileInformationBlock = null;
_hWPFDocFixture.tearDown();
_hWPFDocFixture = null;
super.tearDown();
}
@Override
protected void tearDown() throws Exception {
_fileInformationBlock = null;
_hWPFDocFixture.tearDown();
_hWPFDocFixture = null;
super.tearDown();
}
}

View File

@ -27,162 +27,162 @@ import org.apache.poi.hwpf.HWPFDocument;
import org.apache.poi.hwpf.HWPFTestDataSamples;
import org.apache.poi.hwpf.model.io.HWPFFileSystem;
@SuppressWarnings("deprecation")
public final class TestTextPieceTable extends TestCase {
private HWPFDocFixture _hWPFDocFixture;
//private String dirname;
private HWPFDocFixture _hWPFDocFixture;
public void testReadWrite()
throws Exception
{
FileInformationBlock fib = _hWPFDocFixture._fib;
byte[] mainStream = _hWPFDocFixture._mainStream;
byte[] tableStream = _hWPFDocFixture._tableStream;
int fcMin = fib.getFibBase().getFcMin();
// private String dirname;
ComplexFileTable cft = new ComplexFileTable(mainStream, tableStream, fib.getFcClx(), fcMin);
public void testReadWrite() throws Exception {
FileInformationBlock fib = _hWPFDocFixture._fib;
byte[] mainStream = _hWPFDocFixture._mainStream;
byte[] tableStream = _hWPFDocFixture._tableStream;
int fcMin = fib.getFibBase().getFcMin();
ComplexFileTable cft = new ComplexFileTable(mainStream, tableStream,
fib.getFcClx(), fcMin);
HWPFFileSystem fileSys = new HWPFFileSystem();
HWPFFileSystem fileSys = new HWPFFileSystem();
cft.writeTo(fileSys);
ByteArrayOutputStream tableOut = fileSys.getStream("1Table");
ByteArrayOutputStream mainOut = fileSys.getStream("WordDocument");
cft.writeTo(fileSys);
ByteArrayOutputStream tableOut = fileSys.getStream("1Table");
ByteArrayOutputStream mainOut = fileSys.getStream("WordDocument");
byte[] newTableStream = tableOut.toByteArray();
byte[] newMainStream = mainOut.toByteArray();
byte[] newTableStream = tableOut.toByteArray();
byte[] newMainStream = mainOut.toByteArray();
ComplexFileTable newCft = new ComplexFileTable(newMainStream, newTableStream, 0,0);
ComplexFileTable newCft = new ComplexFileTable(newMainStream,
newTableStream, 0, 0);
TextPieceTable oldTextPieceTable = cft.getTextPieceTable();
TextPieceTable newTextPieceTable = newCft.getTextPieceTable();
TextPieceTable oldTextPieceTable = cft.getTextPieceTable();
TextPieceTable newTextPieceTable = newCft.getTextPieceTable();
assertEquals(oldTextPieceTable, newTextPieceTable);
}
assertEquals(oldTextPieceTable, newTextPieceTable);
}
/**
* Check that we do the positions correctly when
* working with pure-ascii
*/
public void testAsciiParts() throws Exception {
HWPFDocument doc = HWPFTestDataSamples.openSampleFile("ThreeColHeadFoot.doc");
TextPieceTable tbl = doc.getTextTable();
/**
* Check that we do the positions correctly when working with pure-ascii
*/
public void testAsciiParts() throws Exception {
HWPFDocument doc = HWPFTestDataSamples
.openSampleFile("ThreeColHeadFoot.doc");
TextPieceTable tbl = doc.getTextTable();
// All ascii, so stored in one big lump
assertEquals(1, tbl.getTextPieces().size());
TextPiece tp = tbl.getTextPieces().get(0);
// All ascii, so stored in one big lump
assertEquals(1, tbl.getTextPieces().size());
TextPiece tp = tbl.getTextPieces().get(0);
assertEquals(0, tp.getStart());
assertEquals(339, tp.getEnd());
assertEquals(339, tp.characterLength());
assertEquals(339, tp.bytesLength());
assertTrue(tp.getStringBuilder().toString().startsWith("This is a sample word document"));
assertEquals(0, tp.getStart());
assertEquals(339, tp.getEnd());
assertEquals(339, tp.characterLength());
assertEquals(339, tp.bytesLength());
assertTrue(tp.getStringBuilder().toString()
.startsWith("This is a sample word document"));
// Save and re-load
HWPFDocument docB = saveAndReload(doc);
tbl = docB.getTextTable();
// Save and re-load
HWPFDocument docB = saveAndReload(doc);
tbl = docB.getTextTable();
assertEquals(1, tbl.getTextPieces().size());
tp = tbl.getTextPieces().get(0);
assertEquals(1, tbl.getTextPieces().size());
tp = tbl.getTextPieces().get(0);
assertEquals(0, tp.getStart());
assertEquals(339, tp.getEnd());
assertEquals(339, tp.characterLength());
assertEquals(339, tp.bytesLength());
assertTrue(tp.getStringBuilder().toString()
.startsWith("This is a sample word document"));
}
assertEquals(0, tp.getStart());
assertEquals(339, tp.getEnd());
assertEquals(339, tp.characterLength());
assertEquals(339, tp.bytesLength());
assertTrue(tp.getStringBuilder().toString().startsWith("This is a sample word document"));
}
/**
* Check that we do the positions correctly when working with a mix ascii,
* unicode file
*/
public void testUnicodeParts() throws Exception {
HWPFDocument doc = HWPFTestDataSamples
.openSampleFile("HeaderFooterUnicode.doc");
TextPieceTable tbl = doc.getTextTable();
/**
* Check that we do the positions correctly when
* working with a mix ascii, unicode file
*/
public void testUnicodeParts() throws Exception {
HWPFDocument doc = HWPFTestDataSamples.openSampleFile("HeaderFooterUnicode.doc");
TextPieceTable tbl = doc.getTextTable();
// In three bits, split every 512 bytes
assertEquals(3, tbl.getTextPieces().size());
TextPiece tpA = tbl.getTextPieces().get(0);
TextPiece tpB = tbl.getTextPieces().get(1);
TextPiece tpC = tbl.getTextPieces().get(2);
// In three bits, split every 512 bytes
assertEquals(3, tbl.getTextPieces().size());
TextPiece tpA = (TextPiece)tbl.getTextPieces().get(0);
TextPiece tpB = (TextPiece)tbl.getTextPieces().get(1);
TextPiece tpC = (TextPiece)tbl.getTextPieces().get(2);
assertTrue(tpA.isUnicode());
assertTrue(tpB.isUnicode());
assertTrue(tpC.isUnicode());
assertTrue(tpA.isUnicode());
assertTrue(tpB.isUnicode());
assertTrue(tpC.isUnicode());
assertEquals(256, tpA.characterLength());
assertEquals(256, tpB.characterLength());
assertEquals(19, tpC.characterLength());
assertEquals(256, tpA.characterLength());
assertEquals(256, tpB.characterLength());
assertEquals(19, tpC.characterLength());
assertEquals(512, tpA.bytesLength());
assertEquals(512, tpB.bytesLength());
assertEquals(38, tpC.bytesLength());
assertEquals(512, tpA.bytesLength());
assertEquals(512, tpB.bytesLength());
assertEquals(38, tpC.bytesLength());
assertEquals(0, tpA.getStart());
assertEquals(256, tpA.getEnd());
assertEquals(256, tpB.getStart());
assertEquals(512, tpB.getEnd());
assertEquals(512, tpC.getStart());
assertEquals(531, tpC.getEnd());
assertEquals(0, tpA.getStart());
assertEquals(256, tpA.getEnd());
assertEquals(256, tpB.getStart());
assertEquals(512, tpB.getEnd());
assertEquals(512, tpC.getStart());
assertEquals(531, tpC.getEnd());
// Save and re-load
HWPFDocument docB = saveAndReload(doc);
tbl = docB.getTextTable();
assertEquals(3, tbl.getTextPieces().size());
tpA = tbl.getTextPieces().get(0);
tpB = tbl.getTextPieces().get(1);
tpC = tbl.getTextPieces().get(2);
// Save and re-load
HWPFDocument docB = saveAndReload(doc);
tbl = docB.getTextTable();
assertTrue(tpA.isUnicode());
assertTrue(tpB.isUnicode());
assertTrue(tpC.isUnicode());
assertEquals(3, tbl.getTextPieces().size());
tpA = (TextPiece)tbl.getTextPieces().get(0);
tpB = (TextPiece)tbl.getTextPieces().get(1);
tpC = (TextPiece)tbl.getTextPieces().get(2);
assertEquals(256, tpA.characterLength());
assertEquals(256, tpB.characterLength());
assertEquals(19, tpC.characterLength());
assertTrue(tpA.isUnicode());
assertTrue(tpB.isUnicode());
assertTrue(tpC.isUnicode());
assertEquals(512, tpA.bytesLength());
assertEquals(512, tpB.bytesLength());
assertEquals(38, tpC.bytesLength());
assertEquals(256, tpA.characterLength());
assertEquals(256, tpB.characterLength());
assertEquals(19, tpC.characterLength());
assertEquals(0, tpA.getStart());
assertEquals(256, tpA.getEnd());
assertEquals(256, tpB.getStart());
assertEquals(512, tpB.getEnd());
assertEquals(512, tpC.getStart());
assertEquals(531, tpC.getEnd());
}
assertEquals(512, tpA.bytesLength());
assertEquals(512, tpB.bytesLength());
assertEquals(38, tpC.bytesLength());
protected HWPFDocument saveAndReload(HWPFDocument doc) throws Exception {
ByteArrayOutputStream baos = new ByteArrayOutputStream();
doc.write(baos);
assertEquals(0, tpA.getStart());
assertEquals(256, tpA.getEnd());
assertEquals(256, tpB.getStart());
assertEquals(512, tpB.getEnd());
assertEquals(512, tpC.getStart());
assertEquals(531, tpC.getEnd());
}
return new HWPFDocument(new ByteArrayInputStream(baos.toByteArray()));
}
protected HWPFDocument saveAndReload(HWPFDocument doc) throws Exception {
ByteArrayOutputStream baos = new ByteArrayOutputStream();
doc.write(baos);
@Override
protected void setUp() throws Exception {
super.setUp();
System.setProperty("org.apache.poi.hwpf.preserveTextTable",
Boolean.TRUE.toString());
return new HWPFDocument(
new ByteArrayInputStream(baos.toByteArray())
);
}
_hWPFDocFixture = new HWPFDocFixture(this,
HWPFDocFixture.DEFAULT_TEST_FILE);
_hWPFDocFixture.setUp();
}
protected void setUp()
throws Exception
{
super.setUp();
System.setProperty( "org.apache.poi.hwpf.preserveTextTable", Boolean.TRUE.toString() );
@Override
protected void tearDown() throws Exception {
_hWPFDocFixture.tearDown();
_hWPFDocFixture = null;
_hWPFDocFixture = new HWPFDocFixture(this, HWPFDocFixture.DEFAULT_TEST_FILE);
_hWPFDocFixture.setUp();
}
protected void tearDown()
throws Exception
{
_hWPFDocFixture.tearDown();
_hWPFDocFixture = null;
System.setProperty( "org.apache.poi.hwpf.preserveTextTable", Boolean.FALSE.toString() );
super.tearDown();
}
System.setProperty("org.apache.poi.hwpf.preserveTextTable",
Boolean.FALSE.toString());
super.tearDown();
}
}

View File

@ -396,11 +396,15 @@ public class TestBugs extends TestCase
// document as text file using encoding UTF-8)
InputStream is = POIDataSamples.getDocumentInstance()
.openResourceAsStream( "Bug47742-text.txt" );
byte[] expectedBytes = IOUtils.toByteArray( is );
String expectedText = new String( expectedBytes, "utf-8" )
.substring( 1 ); // strip-off the unicode marker
assertEquals( expectedText, foundText );
try {
byte[] expectedBytes = IOUtils.toByteArray( is );
String expectedText = new String( expectedBytes, "utf-8" )
.substring( 1 ); // strip-off the unicode marker
assertEquals( expectedText, foundText );
} finally {
is.close();
}
}
/**

View File

@ -268,7 +268,7 @@ public class TestWrite
assertNotNull(psa[0]);
assertTrue(psa[0].isSummaryInformation());
final Section s = (Section) (psa[0].getSections().get(0));
final Section s = (psa[0].getSections().get(0));
Object p1 = s.getProperty(PropertyIDMap.PID_AUTHOR);
Object p2 = s.getProperty(PropertyIDMap.PID_TITLE);
assertEquals(AUTHOR, p1);
@ -349,11 +349,11 @@ public class TestWrite
stream.close();
}
assertNotNull(psa[0]);
Section s = (Section) (psa[0].getSections().get(0));
Section s = (psa[0].getSections().get(0));
assertEquals(s.getFormatID(), formatID);
Object p = s.getProperty(2);
assertEquals(SECTION1, p);
s = (Section) (psa[0].getSections().get(1));
s = (psa[0].getSections().get(1));
p = s.getProperty(2);
assertEquals(SECTION2, p);
}
@ -584,7 +584,7 @@ public class TestWrite
PropertySet psr = new PropertySet(bytes);
assertTrue(psr.isSummaryInformation());
Section sr = (Section) psr.getSections().get(0);
Section sr = psr.getSections().get(0);
String title = (String) sr.getProperty(PropertyIDMap.PID_TITLE);
assertEquals(TITLE, title);
}

View File

@ -131,7 +131,7 @@ final class Util {
final String[] poiFiles)
throws FileNotFoundException, IOException
{
final List files = new ArrayList();
final List<POIFile> files = new ArrayList<POIFile>();
POIFSReader r = new POIFSReader();
POIFSReaderListener pfl = new POIFSReaderListener()
{
@ -170,7 +170,7 @@ final class Util {
r.read(new FileInputStream(poiFs));
POIFile[] result = new POIFile[files.size()];
for (int i = 0; i < result.length; i++)
result[i] = (POIFile) files.get(i);
result[i] = files.get(i);
return result;
}
@ -195,7 +195,7 @@ final class Util {
public static POIFile[] readPropertySets(final File poiFs)
throws FileNotFoundException, IOException
{
final List files = new ArrayList(7);
final List<POIFile> files = new ArrayList<POIFile>(7);
final POIFSReader r = new POIFSReader();
POIFSReaderListener pfl = new POIFSReaderListener()
{

View File

@ -111,6 +111,8 @@ public final class TestNPOIFSFileSystem {
for(NPOIFSFileSystem fs : new NPOIFSFileSystem[] {fsA,fsB}) {
assertEquals(512, fs.getBigBlockSize());
}
fsA.close();
fsB.close();
// Now with a simple 4096 block file
fsA = new NPOIFSFileSystem(_inst.getFile("BlockSize4096.zvi"));
@ -118,6 +120,8 @@ public final class TestNPOIFSFileSystem {
for(NPOIFSFileSystem fs : new NPOIFSFileSystem[] {fsA,fsB}) {
assertEquals(4096, fs.getBigBlockSize());
}
fsA.close();
fsB.close();
}
@Test
@ -186,6 +190,8 @@ public final class TestNPOIFSFileSystem {
assertEquals(i+1, ministore.getNextBlock(i));
}
assertEquals(POIFSConstants.END_OF_CHAIN, ministore.getNextBlock(50));
fs.close();
}
// Now with a simple 4096 block file
@ -252,6 +258,8 @@ public final class TestNPOIFSFileSystem {
assertEquals(i+1, ministore.getNextBlock(i));
}
assertEquals(POIFSConstants.END_OF_CHAIN, ministore.getNextBlock(50));
fs.close();
}
}
@ -295,6 +303,8 @@ public final class TestNPOIFSFileSystem {
for(int i=100; i<fs.getBigBlockSizeDetails().getBATEntriesPerBlock(); i++) {
assertEquals(POIFSConstants.UNUSED_BLOCK, fs.getNextBlock(i));
}
fs.close();
}
// Quick check on 4096 byte blocks too
@ -311,6 +321,8 @@ public final class TestNPOIFSFileSystem {
assertEquals(i+1, fs.getNextBlock(i));
}
assertEquals(POIFSConstants.END_OF_CHAIN, fs.getNextBlock(11));
fs.close();
}
}
@ -348,6 +360,8 @@ public final class TestNPOIFSFileSystem {
assertEquals((byte)0x00, b.get());
assertEquals((byte)0x00, b.get());
assertEquals((byte)0x00, b.get());
fs.close();
}
// Quick check on 4096 byte blocks too
@ -380,6 +394,8 @@ public final class TestNPOIFSFileSystem {
assertEquals((byte)0x00, b.get());
assertEquals((byte)0x00, b.get());
assertEquals((byte)0x00, b.get());
fs.close();
}
}
@ -591,6 +607,8 @@ public final class TestNPOIFSFileSystem {
// Look inside another
DirectoryEntry imageD = (DirectoryEntry)image;
assertEquals(7, imageD.getEntryCount());
fs.close();
}
}
@ -635,6 +653,8 @@ public final class TestNPOIFSFileSystem {
ps = PropertySetFactory.create(inp);
DocumentSummaryInformation dinf = (DocumentSummaryInformation)ps;
assertEquals(131333, dinf.getOSVersion());
fs.close();
}
}

View File

@ -28,7 +28,6 @@ import org.apache.poi.poifs.common.POIFSConstants;
/**
* Tests for the Mini Store in the NIO POIFS
*/
@SuppressWarnings("resource")
public final class TestNPOIFSMiniStore extends TestCase {
private static final POIDataSamples _inst = POIDataSamples.getPOIFSInstance();
@ -103,6 +102,8 @@ public final class TestNPOIFSMiniStore extends TestCase {
for(int i=181; i<fs.getBigBlockSizeDetails().getBATEntriesPerBlock(); i++) {
assertEquals(POIFSConstants.UNUSED_BLOCK, ministore.getNextBlock(i));
}
fs.close();
}
}
@ -168,6 +169,8 @@ public final class TestNPOIFSMiniStore extends TestCase {
assertEquals((byte)0, b.get());
assertEquals((byte)0, b.get());
}
fs.close();
}
}
@ -198,6 +201,8 @@ public final class TestNPOIFSMiniStore extends TestCase {
// Allocate it, then ask again
ministore.setNextBlock(181, POIFSConstants.END_OF_CHAIN);
assertEquals(182, ministore.getFreeBlock());
fs.close();
}
/**
@ -240,6 +245,8 @@ public final class TestNPOIFSMiniStore extends TestCase {
assertEquals(POIFSConstants.END_OF_CHAIN, ministore.getNextBlock(255)); // 2nd SBAT
assertEquals(POIFSConstants.UNUSED_BLOCK, ministore.getNextBlock(256)); // 3rd SBAT
assertEquals(POIFSConstants.UNUSED_BLOCK, ministore.getNextBlock(257)); // 3rd SBAT
fs.close();
}
/**
@ -322,5 +329,7 @@ public final class TestNPOIFSMiniStore extends TestCase {
for(int i=193; i<256; i++) {
assertEquals(POIFSConstants.UNUSED_BLOCK, ministore.getNextBlock(i));
}
fs.close();
}
}

View File

@ -62,6 +62,8 @@ public final class TestNPOIFSStream extends TestCase {
assertEquals((byte)0x00, b.get());
assertEquals((byte)0x00, b.get());
assertEquals((byte)0x00, b.get());
fs.close();
}
/**
@ -103,6 +105,8 @@ public final class TestNPOIFSStream extends TestCase {
assertEquals((byte)0x00, b98.get());
assertEquals((byte)0x00, b98.get());
assertEquals((byte)0x00, b98.get());
fs.close();
}
/**
@ -157,6 +161,8 @@ public final class TestNPOIFSStream extends TestCase {
assertEquals((byte)0x01, b22.get());
assertEquals((byte)0x02, b22.get());
assertEquals((byte)0x00, b22.get());
fs.close();
}
/**
@ -211,6 +217,8 @@ public final class TestNPOIFSStream extends TestCase {
assertEquals((byte)0x00, b2.get());
assertEquals((byte)0x46, b2.get());
assertEquals((byte)0x00, b2.get());
fs.close();
}
/**
@ -249,6 +257,8 @@ public final class TestNPOIFSStream extends TestCase {
// Good, it was detected
}
assertEquals(true, i.hasNext());
fs.close();
}
/**
@ -304,6 +314,8 @@ public final class TestNPOIFSStream extends TestCase {
assertEquals((byte)0x00, b180.get());
assertEquals((byte)0x00, b180.get());
assertEquals((byte)0x80, b180.get());
fs.close();
}
/**
@ -334,6 +346,8 @@ public final class TestNPOIFSStream extends TestCase {
byte exp = (byte)(i%256);
assertEquals(exp, data[i]);
}
fs.close();
}
/**
@ -373,6 +387,8 @@ public final class TestNPOIFSStream extends TestCase {
byte exp = (byte)(i%256);
assertEquals(exp, data[i]);
}
fs.close();
}
/**
@ -417,6 +433,8 @@ public final class TestNPOIFSStream extends TestCase {
count++;
}
assertEquals(3, count);
fs.close();
}
/**
@ -507,6 +525,8 @@ public final class TestNPOIFSStream extends TestCase {
assertEquals(POIFSConstants.UNUSED_BLOCK, fs.getNextBlock(102));
assertEquals(POIFSConstants.UNUSED_BLOCK, fs.getNextBlock(103));
assertEquals(POIFSConstants.UNUSED_BLOCK, fs.getNextBlock(104));
fs.close();
}
/**
@ -547,6 +567,8 @@ public final class TestNPOIFSStream extends TestCase {
assertEquals(130, fs.getNextBlock(129));
assertEquals(POIFSConstants.END_OF_CHAIN, fs.getNextBlock(130));
assertEquals(POIFSConstants.UNUSED_BLOCK, fs.getNextBlock(131));
fs.close();
}
/**
@ -600,6 +622,8 @@ public final class TestNPOIFSStream extends TestCase {
count++;
}
assertEquals(5, count);
fs.close();
}
/**
@ -790,6 +814,8 @@ public final class TestNPOIFSStream extends TestCase {
assertEquals((byte)0x42, b183.get(1));
assertEquals((byte)0x81, b184.get(0));
assertEquals((byte)0x82, b184.get(1));
fs.close();
}
/**
@ -823,6 +849,8 @@ public final class TestNPOIFSStream extends TestCase {
stream.updateContents(data);
fail("Loop should have been detected but wasn't!");
} catch(IllegalStateException e) {}
fs.close();
}
/**
@ -889,6 +917,8 @@ public final class TestNPOIFSStream extends TestCase {
}
assertEquals(false, it.hasNext());
fs.close();
}
/**
@ -1079,5 +1109,7 @@ public final class TestNPOIFSStream extends TestCase {
normal = (DocumentEntry)fs.getRoot().getEntry("Normal");
assertEquals(4096, normal.getSize());
assertEquals(4096, ((DocumentNode)normal).getProperty().getSize());
fs.close();
}
}