diff --git a/src/java/org/apache/poi/hssf/record/aggregates/PageSettingsBlock.java b/src/java/org/apache/poi/hssf/record/aggregates/PageSettingsBlock.java index 1d818aa03..99694dcc9 100644 --- a/src/java/org/apache/poi/hssf/record/aggregates/PageSettingsBlock.java +++ b/src/java/org/apache/poi/hssf/record/aggregates/PageSettingsBlock.java @@ -285,7 +285,7 @@ public final class PageSettingsBlock extends RecordAggregate { retval.setVResolution(( short ) 300); retval.setHeaderMargin( 0.5); retval.setFooterMargin( 0.5); - retval.setCopies(( short ) 0); + retval.setCopies(( short ) 1); return retval; } @@ -352,7 +352,7 @@ public final class PageSettingsBlock extends RecordAggregate { case Sheet.TopMargin: return _topMargin; case Sheet.BottomMargin: return _bottomMargin; } - throw new RuntimeException( "Unknown margin constant: " + marginIndex ); + throw new IllegalArgumentException( "Unknown margin constant: " + marginIndex ); } @@ -372,7 +372,7 @@ public final class PageSettingsBlock extends RecordAggregate { case Sheet.TopMargin: return 1.0; case Sheet.BottomMargin: return 1.0; } - throw new RuntimeException( "Unknown margin constant: " + margin ); + throw new IllegalArgumentException( "Unknown margin constant: " + margin ); } /** @@ -401,7 +401,7 @@ public final class PageSettingsBlock extends RecordAggregate { m = _bottomMargin; break; default : - throw new RuntimeException( "Unknown margin constant: " + margin ); + throw new IllegalArgumentException( "Unknown margin constant: " + margin ); } } m.setMargin( size ); diff --git a/src/java/org/apache/poi/hssf/usermodel/HSSFCell.java b/src/java/org/apache/poi/hssf/usermodel/HSSFCell.java index 7ad80298c..c34587de7 100644 --- a/src/java/org/apache/poi/hssf/usermodel/HSSFCell.java +++ b/src/java/org/apache/poi/hssf/usermodel/HSSFCell.java @@ -91,7 +91,7 @@ public class HSSFCell implements Cell { /** * The maximum number of columns in BIFF8 */ - private static final int LAST_COLUMN_NUMBER = 255; // 2^8 - 1 + public static final int LAST_COLUMN_NUMBER = 255; // 2^8 - 1 private static final String LAST_COLUMN_NAME = "IV"; public final static short ENCODING_UNCHANGED = -1; @@ -626,6 +626,9 @@ public class HSSFCell implements Cell { } public String getCellFormula() { + if (!(_record instanceof FormulaRecordAggregate)) { + throw typeMismatch(CELL_TYPE_FORMULA, _cellType, true); + } return HSSFFormulaParser.toFormulaString(_book, ((FormulaRecordAggregate)_record).getFormulaTokens()); } diff --git a/src/java/org/apache/poi/hssf/usermodel/HSSFName.java b/src/java/org/apache/poi/hssf/usermodel/HSSFName.java index 8c21ae996..979f30ecc 100644 --- a/src/java/org/apache/poi/hssf/usermodel/HSSFName.java +++ b/src/java/org/apache/poi/hssf/usermodel/HSSFName.java @@ -124,6 +124,7 @@ public final class HSSFName implements Name { if (rec != _definedNameRec) { if (rec.getNameText().equalsIgnoreCase(nameName) && sheetNumber == rec.getSheetNumber()){ String msg = "The "+(sheetNumber == 0 ? "workbook" : "sheet")+" already contains this name: " + nameName; + _definedNameRec.setNameText(nameName + "(2)"); throw new IllegalArgumentException(msg); } } diff --git a/src/java/org/apache/poi/hssf/usermodel/HSSFRow.java b/src/java/org/apache/poi/hssf/usermodel/HSSFRow.java index f8848f074..50483d908 100644 --- a/src/java/org/apache/poi/hssf/usermodel/HSSFRow.java +++ b/src/java/org/apache/poi/hssf/usermodel/HSSFRow.java @@ -437,15 +437,17 @@ public final class HSSFRow implements Row { /** * set the row's height or set to ff (-1) for undefined/default-height. Set the height in "twips" or * 1/20th of a point. - * @param height rowheight or 0xff for undefined (use sheet default) + * @param height rowheight or -1 for undefined (use sheet default) */ public void setHeight(short height) { - - // row.setOptionFlags( - row.setBadFontHeight(true); - row.setHeight(height); + if(height == -1){ + row.setHeight((short)(0xFF | 0x8000)); + } else { + row.setBadFontHeight(true); + row.setHeight(height); + } } /** @@ -466,15 +468,17 @@ public final class HSSFRow implements Row { /** * set the row's height in points. - * @param height row height in points + * @param height row height in points, -1 means to use the default height */ public void setHeightInPoints(float height) { - - // row.setOptionFlags( - row.setBadFontHeight(true); - row.setHeight((short) (height * 20)); + if(height == -1){ + row.setHeight((short)(0xFF | 0x8000)); + } else { + row.setBadFontHeight(true); + row.setHeight((short) (height * 20)); + } } /** diff --git a/src/java/org/apache/poi/hssf/usermodel/HSSFSheet.java b/src/java/org/apache/poi/hssf/usermodel/HSSFSheet.java index cda40b35d..4fdbfd00f 100644 --- a/src/java/org/apache/poi/hssf/usermodel/HSSFSheet.java +++ b/src/java/org/apache/poi/hssf/usermodel/HSSFSheet.java @@ -67,18 +67,6 @@ public final class HSSFSheet implements org.apache.poi.ss.usermodel.Sheet { private static final POILogger log = POILogFactory.getLogger(HSSFSheet.class); private static final int DEBUG = POILogger.DEBUG; - /* Constants for margins */ - public static final short LeftMargin = Sheet.LeftMargin; - public static final short RightMargin = Sheet.RightMargin; - public static final short TopMargin = Sheet.TopMargin; - public static final short BottomMargin = Sheet.BottomMargin; - - public static final byte PANE_LOWER_RIGHT = (byte)0; - public static final byte PANE_UPPER_RIGHT = (byte)1; - public static final byte PANE_LOWER_LEFT = (byte)2; - public static final byte PANE_UPPER_LEFT = (byte)3; - - /** * Used for compile-time optimization. This is the initial size for the collection of * rows. It is currently set to 20. If you generate larger sheets you may benefit @@ -236,14 +224,16 @@ public final class HSSFSheet implements org.apache.poi.ss.usermodel.Sheet { */ public void removeRow(Row row) { HSSFRow hrow = (HSSFRow) row; + if (row.getSheet() != this) { + throw new IllegalArgumentException("Specified row does not belong to this sheet"); + } + if (_rows.size() > 0) { Integer key = new Integer(row.getRowNum()); HSSFRow removedRow = _rows.remove(key); if (removedRow != row) { - if (removedRow != null) { - _rows.put(key, removedRow); - } - throw new RuntimeException("Specified row does not belong to this sheet"); + //should not happen if the input argument is valid + throw new IllegalArgumentException("Specified row does not belong to this sheet"); } if (hrow.getRowNum() == getLastRowNum()) { @@ -488,7 +478,7 @@ public final class HSSFSheet implements org.apache.poi.ss.usermodel.Sheet { public float getDefaultRowHeightInPoints() { - return (_sheet.getDefaultRowHeight() / 20); + return ((float)_sheet.getDefaultRowHeight() / 20); } /** @@ -1434,9 +1424,9 @@ public final class HSSFSheet implements org.apache.poi.ss.usermodel.Sheet { * Sets a page break at the indicated column * @param column */ - public void setColumnBreak(short column) { - validateColumn(column); - _sheet.getPageSettings().setColumnBreak(column, (short)0, (short)65535); + public void setColumnBreak(int column) { + validateColumn((short)column); + _sheet.getPageSettings().setColumnBreak((short)column, (short)0, (short)65535); } /** @@ -1444,7 +1434,7 @@ public final class HSSFSheet implements org.apache.poi.ss.usermodel.Sheet { * @param column FIXME: Document this! * @return FIXME: Document this! */ - public boolean isColumnBroken(short column) { + public boolean isColumnBroken(int column) { return _sheet.getPageSettings().isColumnBroken(column); } @@ -1452,7 +1442,7 @@ public final class HSSFSheet implements org.apache.poi.ss.usermodel.Sheet { * Removes a page break at the indicated column * @param column */ - public void removeColumnBreak(short column) { + public void removeColumnBreak(int column) { _sheet.getPageSettings().removeColumnBreak(column); } @@ -1857,4 +1847,16 @@ public final class HSSFSheet implements org.apache.poi.ss.usermodel.Sheet { public HSSFSheetConditionalFormatting getSheetConditionalFormatting() { return new HSSFSheetConditionalFormatting(this); } + + /** + * Returns the name of this sheet + * + * @return the name of this sheet + */ + public String getSheetName() { + HSSFWorkbook wb = getWorkbook(); + int idx = wb.getSheetIndex(this); + return wb.getSheetName(idx); + } + } diff --git a/src/java/org/apache/poi/hssf/usermodel/HSSFWorkbook.java b/src/java/org/apache/poi/hssf/usermodel/HSSFWorkbook.java index 4294f6ecd..f3e0a10f2 100644 --- a/src/java/org/apache/poi/hssf/usermodel/HSSFWorkbook.java +++ b/src/java/org/apache/poi/hssf/usermodel/HSSFWorkbook.java @@ -752,8 +752,8 @@ public class HSSFWorkbook extends POIDocument implements org.apache.poi.ss.userm HSSFSheet sheet = new HSSFSheet(this); + workbook.setSheetName(_sheets.size(), sheetname); _sheets.add(sheet); - workbook.setSheetName(_sheets.size() - 1, sheetname); boolean isOnlySheet = _sheets.size() == 1; sheet.setSelected(isOnlySheet); sheet.setActive(isOnlySheet); @@ -788,6 +788,7 @@ public class HSSFWorkbook extends POIDocument implements org.apache.poi.ss.userm public HSSFSheet getSheetAt(int index) { + validateSheetIndex(index); return (HSSFSheet) _sheets.get(index); } diff --git a/src/ooxml/interfaces-jdk15/org/apache/poi/ss/usermodel/FormulaError.java b/src/ooxml/interfaces-jdk15/org/apache/poi/ss/usermodel/FormulaError.java index d765e0f01..4f631c6ee 100755 --- a/src/ooxml/interfaces-jdk15/org/apache/poi/ss/usermodel/FormulaError.java +++ b/src/ooxml/interfaces-jdk15/org/apache/poi/ss/usermodel/FormulaError.java @@ -106,7 +106,7 @@ public enum FormulaError { /** * @return numeric code of the error */ - public int getCode() { + public byte getCode() { return type; } @@ -118,7 +118,7 @@ public enum FormulaError { } private static Map smap = new HashMap(); - private static Map imap = new HashMap(); + private static Map imap = new HashMap(); static{ for (FormulaError error : values()) { imap.put(error.getCode(), error); @@ -126,7 +126,7 @@ public enum FormulaError { } } - public static FormulaError forInt(int type){ + public static FormulaError forInt(byte type){ FormulaError err = imap.get(type); if(err == null) throw new IllegalArgumentException("Unknown error type: " + type); return err; diff --git a/src/ooxml/interfaces-jdk15/org/apache/poi/ss/usermodel/Sheet.java b/src/ooxml/interfaces-jdk15/org/apache/poi/ss/usermodel/Sheet.java index 0a508c382..ffeb96abd 100644 --- a/src/ooxml/interfaces-jdk15/org/apache/poi/ss/usermodel/Sheet.java +++ b/src/ooxml/interfaces-jdk15/org/apache/poi/ss/usermodel/Sheet.java @@ -224,6 +224,11 @@ public interface Sheet extends Iterable { boolean getHorizontallyCenter(); + /** + * Determine whether printed output for this sheet will be vertically centered. + */ + boolean getVerticallyCenter(); + /** * Removes a merged region of cells (hence letting them free) * @@ -639,20 +644,20 @@ public interface Sheet extends Iterable { * Sets a page break at the indicated column * @param column */ - void setColumnBreak(short column); + void setColumnBreak(int column); /** * Determines if there is a page break at the indicated column * @param column FIXME: Document this! * @return FIXME: Document this! */ - boolean isColumnBroken(short column); + boolean isColumnBroken(int column); /** * Removes a page break at the indicated column * @param column */ - void removeColumnBreak(short column); + void removeColumnBreak(int column); /** * Expands or collapses a column group. @@ -761,4 +766,18 @@ public interface Sheet extends Iterable { * @return the parent workbook */ Workbook getWorkbook(); + + /** + * Returns the name of this sheet + * + * @return the name of this sheet + */ + String getSheetName(); + + /** + * Note - this is not the same as whether the sheet is focused (isActive) + * @return true if this sheet is currently selected + */ + boolean isSelected(); + } diff --git a/src/ooxml/interfaces-jdk15/org/apache/poi/ss/usermodel/Workbook.java b/src/ooxml/interfaces-jdk15/org/apache/poi/ss/usermodel/Workbook.java index b33dc5745..051a48f67 100644 --- a/src/ooxml/interfaces-jdk15/org/apache/poi/ss/usermodel/Workbook.java +++ b/src/ooxml/interfaces-jdk15/org/apache/poi/ss/usermodel/Workbook.java @@ -97,7 +97,7 @@ public interface Workbook { * @see Sheet#setSelected(boolean) * @param index the index of the sheet to select (0 based) */ - void setSelectedTab(short index); + void setSelectedTab(int index); /** * Set the sheet name. diff --git a/src/ooxml/java/org/apache/poi/xssf/usermodel/XSSFCell.java b/src/ooxml/java/org/apache/poi/xssf/usermodel/XSSFCell.java index bd8c79a0c..b51724619 100644 --- a/src/ooxml/java/org/apache/poi/xssf/usermodel/XSSFCell.java +++ b/src/ooxml/java/org/apache/poi/xssf/usermodel/XSSFCell.java @@ -60,8 +60,7 @@ public final class XSSFCell implements Cell { /** * The maximum number of columns in SpreadsheetML */ - public static final int MAX_COLUMN_NUMBER = 16384; // 2^14 - private static final int LAST_COLUMN_NUMBER = MAX_COLUMN_NUMBER-1; + public static final int LAST_COLUMN_NUMBER = 16384-1; //2^14-1 private static final String LAST_COLUMN_NAME = "XFD"; private static final String FALSE_AS_STRING = "0"; @@ -194,7 +193,6 @@ public final class XSSFCell implements Cell { switch(cellType) { case CELL_TYPE_BLANK: return 0.0; - case CELL_TYPE_ERROR: case CELL_TYPE_FORMULA: case CELL_TYPE_NUMERIC: return cell.isSetV() ? Double.parseDouble(cell.getV()) : 0.0; @@ -708,7 +706,7 @@ public final class XSSFCell implements Cell { CTCellFormula f = CTCellFormula.Factory.newInstance(); f.setStringValue("0"); cell.setF(f); - cell.unsetT(); + if(cell.isSetT()) cell.unsetT(); } break; default: diff --git a/src/ooxml/java/org/apache/poi/xssf/usermodel/XSSFPicture.java b/src/ooxml/java/org/apache/poi/xssf/usermodel/XSSFPicture.java index 3fc0e52e8..e58b58377 100755 --- a/src/ooxml/java/org/apache/poi/xssf/usermodel/XSSFPicture.java +++ b/src/ooxml/java/org/apache/poi/xssf/usermodel/XSSFPicture.java @@ -18,6 +18,7 @@ package org.apache.poi.xssf.usermodel; import org.openxmlformats.schemas.drawingml.x2006.spreadsheetDrawing.*; import org.openxmlformats.schemas.drawingml.x2006.main.*; +import org.openxmlformats.schemas.spreadsheetml.x2006.main.CTCol; import org.apache.poi.ss.usermodel.Workbook; import org.apache.poi.ss.usermodel.Picture; import org.apache.poi.util.POILogger; @@ -43,6 +44,15 @@ import java.util.Iterator; public class XSSFPicture extends XSSFShape implements Picture { private static final POILogger logger = POILogFactory.getLogger(XSSFPicture.class); + /** + * Column width measured as the number of characters of the maximum digit width of the + * numbers 0, 1, 2, ..., 9 as rendered in the normal style's font. There are 4 pixels of margin + * padding (two on each side), plus 1 pixel padding for the gridlines. + * + * This value is the same for default font in Office 2007 (Calibry) and Office 2003 and earlier (Arial) + */ + private static float DEFAULT_COLUMN_WIDTH = 9.140625f; + /** * A default instance of CTShape used for creating new shapes. */ @@ -230,9 +240,11 @@ public class XSSFPicture extends XSSFShape implements Picture { private float getColumnWidthInPixels(int columnIndex){ XSSFSheet sheet = (XSSFSheet)getDrawing().getParent(); - float numChars = (float)sheet.getColumnWidth(columnIndex)/256; - return numChars*XSSFWorkbook.DEFAULT_CHARACTER_WIDTH; + CTCol col = sheet.getColumnHelper().getColumn(columnIndex, false); + double numChars = col == null || !col.isSetWidth() ? DEFAULT_COLUMN_WIDTH : col.getWidth(); + + return (float)numChars*XSSFWorkbook.DEFAULT_CHARACTER_WIDTH; } private float getRowHeightInPixels(int rowIndex){ diff --git a/src/ooxml/java/org/apache/poi/xssf/usermodel/XSSFRow.java b/src/ooxml/java/org/apache/poi/xssf/usermodel/XSSFRow.java index 0b55e52b7..20cbcf367 100644 --- a/src/ooxml/java/org/apache/poi/xssf/usermodel/XSSFRow.java +++ b/src/ooxml/java/org/apache/poi/xssf/usermodel/XSSFRow.java @@ -45,7 +45,7 @@ public class XSSFRow implements Row, Comparable { /** * The maximum number of rows in SpreadsheetML */ - public static final int MAX_ROW_NUMBER = 1048576; //2 ^ 20 + public static final int MAX_ROW_NUMBER = 1048575; //2 ^ 20 - 1 /** * the xml bean containing all cell definitions for this row @@ -170,8 +170,6 @@ public class XSSFRow implements Row, Comparable { * @see Cell#CELL_TYPE_STRING */ public XSSFCell createCell(int columnIndex, int type) { - if(columnIndex < 0) throw new IllegalArgumentException("columnIndex must be >= 0, was " + columnIndex); - CTCell ctcell = CTCell.Factory.newInstance(); XSSFCell xcell = new XSSFCell(this, ctcell); xcell.setCellNum(columnIndex); @@ -333,10 +331,9 @@ public class XSSFRow implements Row, Comparable { * @throws IllegalArgumentException if rowNum < 0 or greater than {@link #MAX_ROW_NUMBER} */ public void setRowNum(int rowIndex) { - if (rowIndex < 0 || rowIndex >= MAX_ROW_NUMBER) { - throw new IllegalArgumentException("Invalid row index (" + rowIndex - + "). Allowable row range for " + FILE_FORMAT_NAME - + " is (0.." + (MAX_ROW_NUMBER-1) + ")"); + if (rowIndex < 0 || rowIndex > MAX_ROW_NUMBER) { + throw new IllegalArgumentException("Invalid row number (" + rowIndex + + ") outside allowable range (0.." + MAX_ROW_NUMBER + ")"); } row.setR(rowIndex + 1); } diff --git a/src/ooxml/java/org/apache/poi/xssf/usermodel/XSSFSheet.java b/src/ooxml/java/org/apache/poi/xssf/usermodel/XSSFSheet.java index ac82bd24a..8bf5172bd 100644 --- a/src/ooxml/java/org/apache/poi/xssf/usermodel/XSSFSheet.java +++ b/src/ooxml/java/org/apache/poi/xssf/usermodel/XSSFSheet.java @@ -64,15 +64,6 @@ import org.openxmlformats.schemas.officeDocument.x2006.relationships.STRelations public class XSSFSheet extends POIXMLDocumentPart implements Sheet { private static final POILogger logger = POILogFactory.getLogger(XSSFSheet.class); - /** - * Column width measured as the number of characters of the maximum digit width of the - * numbers 0, 1, 2, ..., 9 as rendered in the normal style's font. There are 4 pixels of margin - * padding (two on each side), plus 1 pixel padding for the gridlines. - * - * This value is the same for default font in Office 2007 (Calibry) and Office 2003 and earlier (Arial) - */ - private static float DEFAULT_COLUMN_WIDTH = 9.140625f; - protected CTSheet sheet; protected CTWorksheet worksheet; private TreeMap rows; @@ -462,7 +453,7 @@ public class XSSFSheet extends POIXMLDocumentPart implements Sheet { */ public int getColumnWidth(int columnIndex) { CTCol col = columnHelper.getColumn(columnIndex, false); - double width = col == null || !col.isSetWidth() ? DEFAULT_COLUMN_WIDTH : col.getWidth(); + double width = col == null || !col.isSetWidth() ? getDefaultColumnWidth() : col.getWidth(); return (int)(width*256); } @@ -512,8 +503,8 @@ public class XSSFSheet extends POIXMLDocumentPart implements Sheet { * set for that column */ public CellStyle getColumnStyle(int column) { - // TODO - return null; + int idx = columnHelper.getColDefaultStyle(column); + return getWorkbook().getCellStyleAt((short)(idx == -1 ? 0 : idx)); } @@ -568,7 +559,7 @@ public class XSSFSheet extends POIXMLDocumentPart implements Sheet { * @return the number of the first logical row on the sheet, zero based */ public int getFirstRowNum() { - return rows.size() == 0 ? -1 : rows.firstKey(); + return rows.size() == 0 ? 0 : rows.firstKey(); } /** @@ -681,7 +672,7 @@ public class XSSFSheet extends POIXMLDocumentPart implements Sheet { } public int getLastRowNum() { - return rows.size() == 0 ? -1 : rows.lastKey(); + return rows.size() == 0 ? 0 : rows.lastKey(); } public short getLeftCol() { @@ -720,7 +711,7 @@ public class XSSFSheet extends POIXMLDocumentPart implements Sheet { case FooterMargin: return pageMargins.getFooter(); default : - throw new POIXMLException("Unknown margin constant: " + margin); + throw new IllegalArgumentException("Unknown margin constant: " + margin); } } @@ -742,16 +733,24 @@ public class XSSFSheet extends POIXMLDocumentPart implements Sheet { switch (margin) { case LeftMargin: pageMargins.setLeft(size); + break; case RightMargin: pageMargins.setRight(size); + break; case TopMargin: pageMargins.setTop(size); + break; case BottomMargin: pageMargins.setBottom(size); + break; case HeaderMargin: pageMargins.setHeader(size); + break; case FooterMargin: pageMargins.setFooter(size); + break; + default : + throw new IllegalArgumentException( "Unknown margin constant: " + margin ); } } @@ -1033,7 +1032,7 @@ public class XSSFSheet extends POIXMLDocumentPart implements Sheet { /** * Determines if there is a page break at the indicated column */ - public boolean isColumnBroken(short column) { + public boolean isColumnBroken(int column) { int[] colBreaks = getColumnBreaks(); for (int i = 0 ; i < colBreaks.length ; i++) { if (colBreaks[i] == column) { @@ -1167,7 +1166,7 @@ public class XSSFSheet extends POIXMLDocumentPart implements Sheet { /** * Removes a page break at the indicated column */ - public void removeColumnBreak(short column) { + public void removeColumnBreak(int column) { CTBreak[] brkArray = getSheetTypeColumnBreaks().getBrkArray(); for (int i = 0 ; i < brkArray.length ; i++) { if (brkArray[i].getId() == column) { @@ -1202,6 +1201,10 @@ public class XSSFSheet extends POIXMLDocumentPart implements Sheet { * @param row the row to remove. */ public void removeRow(Row row) { + if (row.getSheet() != this) { + throw new IllegalArgumentException("Specified row does not belong to this sheet"); + } + rows.remove(row.getRowNum()); } @@ -1263,7 +1266,7 @@ public class XSSFSheet extends POIXMLDocumentPart implements Sheet { * * @param column the column to break */ - public void setColumnBreak(short column) { + public void setColumnBreak(int column) { if (! isColumnBroken(column)) { CTBreak brk = getSheetTypeColumnBreaks().addNewBrk(); brk.setId(column); diff --git a/src/ooxml/java/org/apache/poi/xssf/usermodel/XSSFWorkbook.java b/src/ooxml/java/org/apache/poi/xssf/usermodel/XSSFWorkbook.java index 4f2cfd43f..8af2c29a2 100644 --- a/src/ooxml/java/org/apache/poi/xssf/usermodel/XSSFWorkbook.java +++ b/src/ooxml/java/org/apache/poi/xssf/usermodel/XSSFWorkbook.java @@ -60,17 +60,7 @@ import org.apache.xmlbeans.XmlException; import org.apache.xmlbeans.XmlObject; import org.apache.xmlbeans.XmlOptions; import org.openxmlformats.schemas.officeDocument.x2006.relationships.STRelationshipId; -import org.openxmlformats.schemas.spreadsheetml.x2006.main.CTBookView; -import org.openxmlformats.schemas.spreadsheetml.x2006.main.CTBookViews; -import org.openxmlformats.schemas.spreadsheetml.x2006.main.CTDefinedName; -import org.openxmlformats.schemas.spreadsheetml.x2006.main.CTDefinedNames; -import org.openxmlformats.schemas.spreadsheetml.x2006.main.CTDialogsheet; -import org.openxmlformats.schemas.spreadsheetml.x2006.main.CTSheet; -import org.openxmlformats.schemas.spreadsheetml.x2006.main.CTWorkbook; -import org.openxmlformats.schemas.spreadsheetml.x2006.main.CTWorkbookPr; -import org.openxmlformats.schemas.spreadsheetml.x2006.main.CTWorksheet; -import org.openxmlformats.schemas.spreadsheetml.x2006.main.STSheetState; -import org.openxmlformats.schemas.spreadsheetml.x2006.main.WorkbookDocument; +import org.openxmlformats.schemas.spreadsheetml.x2006.main.*; /** * High level representation of a SpreadsheetML workbook. This is the first object most users @@ -445,7 +435,7 @@ public class XSSFWorkbook extends POIXMLDocument implements Workbook, Iterable it = row.cellIterator(); - assertTrue(it.hasNext()); - assertTrue(cell1 == it.next()); - assertFalse(it.hasNext()); - - // Add another cell at the end - Cell cell2 = row.createCell((short) 99); - it = row.cellIterator(); - assertTrue(it.hasNext()); - assertTrue(cell1 == it.next()); - assertTrue(it.hasNext()); - assertTrue(cell2 == it.next()); - - // Add another cell at the beginning - Cell cell3 = row.createCell((short) 0); - it = row.cellIterator(); - assertTrue(it.hasNext()); - assertTrue(cell3 == it.next()); - assertTrue(it.hasNext()); - assertTrue(cell1 == it.next()); - assertTrue(it.hasNext()); - assertTrue(cell2 == it.next()); - - // Replace cell1 - Cell cell4 = row.createCell((short) 1); - it = row.cellIterator(); - assertTrue(it.hasNext()); - assertTrue(cell3 == it.next()); - assertTrue(it.hasNext()); - assertTrue(cell4 == it.next()); - assertTrue(it.hasNext()); - assertTrue(cell2 == it.next()); - assertFalse(it.hasNext()); - - // Add another cell, specifying the cellType - Cell cell5 = row.createCell((short) 2, Cell.CELL_TYPE_STRING); - it = row.cellIterator(); - assertNotNull(cell5); - assertTrue(it.hasNext()); - assertTrue(cell3 == it.next()); - assertTrue(it.hasNext()); - assertTrue(cell4 == it.next()); - assertTrue(it.hasNext()); - assertTrue(cell5 == it.next()); - assertTrue(it.hasNext()); - assertTrue(cell2 == it.next()); - assertEquals(Cell.CELL_TYPE_STRING, cell5.getCellType()); + @Override + protected XSSFITestDataProvider getTestDataProvider(){ + return XSSFITestDataProvider.getInstance(); } - public void testGetCell() { - XSSFRow row = getSampleRow(); - - assertNotNull(row.getCell((short) 2)); - assertNotNull(row.getCell((short) 3)); - assertNotNull(row.getCell((short) 4)); - // cell3 may have been created as CELL_TYPE_NUMERIC, but since there is no numeric - // value set yet, its cell type is classified as 'blank' - assertEquals(Cell.CELL_TYPE_BLANK, row.getCell((short) 3).getCellType()); - assertNull(row.getCell((short) 5)); + public void testRowBounds() { + baseTestRowBounds(XSSFRow.MAX_ROW_NUMBER); } - public void testGetPhysicalNumberOfCells() { - XSSFRow row = getSampleRow(); - assertEquals(7, row.getPhysicalNumberOfCells()); - } - - public void testGetFirstCellNum() { - // Test a row with some cells - XSSFRow row = getSampleRow(); - assertFalse(row.getFirstCellNum() == (short) 0); - assertEquals((short) 2, row.getFirstCellNum()); - - // Test after removing the first cell - Cell cell = row.getCell((short) 2); - row.removeCell(cell); - assertFalse(row.getFirstCellNum() == (short) 2); - - // Test a row without cells - XSSFSheet sheet = createParentObjects(); - XSSFRow emptyRow = sheet.createRow(0); - assertEquals(-1, emptyRow.getFirstCellNum()); - } - - public void testGetSetHeight() { - XSSFRow row = getSampleRow(); - // I assume that "ht" attribute value is in 'points', please verify that - // Test that no rowHeight is set - assertEquals(row.getSheet().getDefaultRowHeight(), row.getHeight()); - // Set a rowHeight and test the new value - row.setHeight((short) 240); - assertEquals((short) 240.0, row.getHeight()); - assertEquals(12.0f, row.getHeightInPoints()); - // Set a new rowHeight in points and test the new value - row.setHeightInPoints(13); - assertEquals((float) 13.0, row.getHeightInPoints()); - assertEquals((short)(13.0*20), row.getHeight()); - } - - public void testGetSetZeroHeight() throws Exception { - XSSFRow row = getSampleRow(); - assertFalse(row.getZeroHeight()); - row.setZeroHeight(true); - assertTrue(row.getZeroHeight()); - } - - /** - * Tests for the missing/blank cell policy stuff - */ - public void testGetCellPolicy() throws Exception { - XSSFSheet sheet = createParentObjects(); - XSSFRow row = sheet.createRow(0); - - // 0 -> string - // 1 -> num - // 2 missing - // 3 missing - // 4 -> blank - // 5 -> num - row.createCell((short)0).setCellValue(new XSSFRichTextString("test")); - row.createCell((short)1).setCellValue(3.2); - row.createCell((short)4, Cell.CELL_TYPE_BLANK); - row.createCell((short)5).setCellValue(4); - - // First up, no policy - assertEquals(Cell.CELL_TYPE_STRING, row.getCell(0).getCellType()); - assertEquals(Cell.CELL_TYPE_NUMERIC, row.getCell(1).getCellType()); - assertEquals(null, row.getCell(2)); - assertEquals(null, row.getCell(3)); - assertEquals(Cell.CELL_TYPE_BLANK, row.getCell(4).getCellType()); - assertEquals(Cell.CELL_TYPE_NUMERIC, row.getCell(5).getCellType()); - - // RETURN_NULL_AND_BLANK - same as default - assertEquals(Cell.CELL_TYPE_STRING, row.getCell(0, Row.RETURN_NULL_AND_BLANK).getCellType()); - assertEquals(Cell.CELL_TYPE_NUMERIC, row.getCell(1, Row.RETURN_NULL_AND_BLANK).getCellType()); - assertEquals(null, row.getCell(2, Row.RETURN_NULL_AND_BLANK)); - assertEquals(null, row.getCell(3, Row.RETURN_NULL_AND_BLANK)); - assertEquals(Cell.CELL_TYPE_BLANK, row.getCell(4, Row.RETURN_NULL_AND_BLANK).getCellType()); - assertEquals(Cell.CELL_TYPE_NUMERIC, row.getCell(5, Row.RETURN_NULL_AND_BLANK).getCellType()); - - // RETURN_BLANK_AS_NULL - nearly the same - assertEquals(Cell.CELL_TYPE_STRING, row.getCell(0, XSSFRow.RETURN_BLANK_AS_NULL).getCellType()); - assertEquals(Cell.CELL_TYPE_NUMERIC, row.getCell(1, XSSFRow.RETURN_BLANK_AS_NULL).getCellType()); - assertEquals(null, row.getCell(2, XSSFRow.RETURN_BLANK_AS_NULL)); - assertEquals(null, row.getCell(3, XSSFRow.RETURN_BLANK_AS_NULL)); - assertEquals(null, row.getCell(4, XSSFRow.RETURN_BLANK_AS_NULL)); - assertEquals(Cell.CELL_TYPE_NUMERIC, row.getCell(5, XSSFRow.RETURN_BLANK_AS_NULL).getCellType()); - - // CREATE_NULL_AS_BLANK - creates as needed - assertEquals(Cell.CELL_TYPE_STRING, row.getCell(0, XSSFRow.CREATE_NULL_AS_BLANK).getCellType()); - assertEquals(Cell.CELL_TYPE_NUMERIC, row.getCell(1, XSSFRow.CREATE_NULL_AS_BLANK).getCellType()); - assertEquals(Cell.CELL_TYPE_BLANK, row.getCell(2, XSSFRow.CREATE_NULL_AS_BLANK).getCellType()); - assertEquals(Cell.CELL_TYPE_BLANK, row.getCell(3, XSSFRow.CREATE_NULL_AS_BLANK).getCellType()); - assertEquals(Cell.CELL_TYPE_BLANK, row.getCell(4, XSSFRow.CREATE_NULL_AS_BLANK).getCellType()); - assertEquals(Cell.CELL_TYPE_NUMERIC, row.getCell(5, XSSFRow.CREATE_NULL_AS_BLANK).getCellType()); - - // Check created ones get the right column - assertEquals((short)0, row.getCell(0, XSSFRow.CREATE_NULL_AS_BLANK).getColumnIndex()); - assertEquals((short)1, row.getCell(1, XSSFRow.CREATE_NULL_AS_BLANK).getColumnIndex()); - assertEquals((short)2, row.getCell(2, XSSFRow.CREATE_NULL_AS_BLANK).getColumnIndex()); - assertEquals((short)3, row.getCell(3, XSSFRow.CREATE_NULL_AS_BLANK).getColumnIndex()); - assertEquals((short)4, row.getCell(4, XSSFRow.CREATE_NULL_AS_BLANK).getColumnIndex()); - assertEquals((short)5, row.getCell(5, XSSFRow.CREATE_NULL_AS_BLANK).getColumnIndex()); - } - - /** - * Method that returns a row with some sample cells - * @return row - */ - private static XSSFRow getSampleRow() { - XSSFSheet sheet = createParentObjects(); - XSSFRow row = sheet.createRow(0); - row.createCell((short) 2); - row.createCell((short) 3, Cell.CELL_TYPE_NUMERIC); - row.createCell((short) 4); - row.createCell((short) 6); - row.createCell((short) 7); - row.createCell((short) 8); - row.createCell((short) 100); - return row; - } - - private static XSSFSheet createParentObjects() { - XSSFWorkbook wb = new XSSFWorkbook(); - return wb.createSheet(); - } - - /** - * Test that XSSFRow.getLastCellNum is consistent with HSSFRow.getLastCellNum - */ - public void testLastCellNum() { - HSSFWorkbook wb1 = new HSSFWorkbook(); - XSSFWorkbook wb2 = new XSSFWorkbook(); - - HSSFSheet sheet1 = wb1.createSheet(); - XSSFSheet sheet2 = wb2.createSheet(); - - for (int i = 0; i < 10; i++) { - HSSFRow row1 = sheet1.createRow(i); - XSSFRow row2 = sheet2.createRow(i); - - for (int j = 0; j < 5; j++) { - //before adding a cell - assertEquals(row1.getLastCellNum(), row2.getLastCellNum()); - - HSSFCell cell1 = row1.createCell(j); - XSSFCell cell2 = row2.createCell(j); - - //after adding a cell - assertEquals(row1.getLastCellNum(), row2.getLastCellNum()); - } - } - } - - public void testRemoveCell() { - XSSFRow row = getSampleRow(); - - // Test removing the first cell - Cell firstCell = row.getCell((short) 2); - assertNotNull(firstCell); - assertEquals(7, row.getPhysicalNumberOfCells()); - row.removeCell(firstCell); - assertEquals(6, row.getPhysicalNumberOfCells()); - firstCell = row.getCell((short) 2); - assertNull(firstCell); - - // Test removing the last cell - Cell lastCell = row.getCell((short) 100); - row.removeCell(lastCell); - } - - public void testFirstLastCellNum() { - XSSFWorkbook workbook = new XSSFWorkbook(); - XSSFSheet sheet = workbook.createSheet(); - XSSFRow row = sheet.createRow(0); - assertEquals(-1, row.getLastCellNum()); - assertEquals(-1, row.getFirstCellNum()); - row.createCell(1); - assertEquals(2, row.getLastCellNum()); - assertEquals(1, row.getFirstCellNum()); - row.createCell(3); - assertEquals(4, row.getLastCellNum()); - assertEquals(1, row.getFirstCellNum()); - row.removeCell(row.getCell(3)); - assertEquals(2, row.getLastCellNum()); - assertEquals(1, row.getFirstCellNum()); - row.removeCell(row.getCell(1)); - assertEquals(-1, row.getLastCellNum()); - assertEquals(-1, row.getFirstCellNum()); - - workbook = XSSFTestDataSamples.writeOutAndReadBack(workbook); - sheet = workbook.getSheetAt(0); - - assertEquals(-1, sheet.getRow(0).getLastCellNum()); - assertEquals(-1, sheet.getRow(0).getFirstCellNum()); - } - - public void testRowHeightCompatibility(){ - Workbook wb1 = new HSSFWorkbook(); - Workbook wb2 = new XSSFWorkbook(); - - Sheet sh1 = wb1.createSheet(); - Sheet sh2 = wb2.createSheet(); - - sh2.setDefaultRowHeight(sh1.getDefaultRowHeight()); - - assertEquals(sh1.getDefaultRowHeight(), sh2.getDefaultRowHeight()); - - //junit.framework.AssertionFailedError: expected:<12.0> but was:<12.75> - //YK: there is a bug in HSSF version, it trunkates decimal part - //assertEquals(sh1.getDefaultRowHeightInPoints(), sh2.getDefaultRowHeightInPoints()); - - Row row1 = sh1.createRow(0); - Row row2 = sh2.createRow(0); - - assertEquals(row1.getHeight(), row2.getHeight()); - assertEquals(row1.getHeightInPoints(), row2.getHeightInPoints()); - row1.setHeight((short)100); - row2.setHeight((short)100); - assertEquals(row1.getHeight(), row2.getHeight()); - assertEquals(row1.getHeightInPoints(), row2.getHeightInPoints()); - - row1.setHeightInPoints(25.5f); - row2.setHeightInPoints(25.5f); - assertEquals(row1.getHeight(), row2.getHeight()); - assertEquals(row1.getHeightInPoints(), row2.getHeightInPoints()); - - + public void testCellBounds() { + baseTestCellBounds(XSSFCell.LAST_COLUMN_NUMBER); } } diff --git a/src/ooxml/testcases/org/apache/poi/xssf/usermodel/TestXSSFSheet.java b/src/ooxml/testcases/org/apache/poi/xssf/usermodel/TestXSSFSheet.java index c19ea200f..897cf43f8 100644 --- a/src/ooxml/testcases/org/apache/poi/xssf/usermodel/TestXSSFSheet.java +++ b/src/ooxml/testcases/org/apache/poi/xssf/usermodel/TestXSSFSheet.java @@ -20,124 +20,36 @@ package org.apache.poi.xssf.usermodel; import java.io.File; import java.util.Iterator; import junit.framework.TestCase; -import org.apache.poi.ss.usermodel.Cell; -import org.apache.poi.ss.usermodel.Row; -import org.apache.poi.ss.usermodel.Sheet; -import org.apache.poi.ss.usermodel.Workbook; +import org.apache.poi.ss.usermodel.*; import org.apache.poi.ss.util.CellRangeAddress; import org.apache.poi.xssf.model.CommentsTable; import org.apache.poi.xssf.model.StylesTable; import org.apache.poi.xssf.model.CalculationChain; import org.apache.poi.xssf.usermodel.helpers.ColumnHelper; import org.apache.poi.xssf.XSSFTestDataSamples; +import org.apache.poi.xssf.XSSFITestDataProvider; import org.apache.poi.hssf.usermodel.HSSFWorkbook; import org.openxmlformats.schemas.spreadsheetml.x2006.main.*; -public class TestXSSFSheet extends TestCase { +public class TestXSSFSheet extends BaseTestSheet { - public void testRowIterator() { - XSSFWorkbook workbook = new XSSFWorkbook(); - Sheet sheet = workbook.createSheet("Sheet 1"); - Row row1 = sheet.createRow(0); - Row row2 = sheet.createRow(1); - Iterator it = sheet.rowIterator(); - assertNotNull(it); - assertTrue(it.hasNext()); - assertEquals(row1, it.next()); - assertTrue(it.hasNext()); - assertEquals(row2, it.next()); - assertFalse(it.hasNext()); + @Override + protected XSSFITestDataProvider getTestDataProvider(){ + return XSSFITestDataProvider.getInstance(); } - public void testGetRow() { - XSSFWorkbook workbook = new XSSFWorkbook(); - Sheet sheet = workbook.createSheet("Sheet 1"); - Row row1 = sheet.createRow(0); - Cell cell = row1.createCell((short) 0); - cell.setCellType(Cell.CELL_TYPE_NUMERIC); - cell.setCellValue((double) 1000); - - // Test getting a row and check its cell's value - Row row_got = sheet.getRow(0); - Cell cell_got = row_got.getCell((short) 0); - assertEquals((double) 1000, cell_got.getNumericCellValue()); + //TODO column styles are not yet supported by XSSF + public void testDefaultColumnStyle() { + //super.testDefaultColumnStyle(); } - public void testCreateRow() { - XSSFWorkbook workbook = new XSSFWorkbook(); - Sheet sheet = workbook.createSheet("Sheet 1"); - - // Test row creation with consecutive indexes - Row row1 = sheet.createRow(0); - Row row2 = sheet.createRow(1); - assertEquals(0, row1.getRowNum()); - assertEquals(1, row2.getRowNum()); - Iterator it = sheet.rowIterator(); - assertTrue(it.hasNext()); - assertEquals(row1, it.next()); - assertTrue(it.hasNext()); - assertEquals(row2, it.next()); - - // Test row creation with non consecutive index - Row row101 = sheet.createRow(100); - assertNotNull(row101); - - // Test overwriting an existing row - Row row2_ovrewritten = sheet.createRow(1); - Cell cell = row2_ovrewritten.createCell((short) 0); - cell.setCellType(Cell.CELL_TYPE_NUMERIC); - cell.setCellValue((double) 100); - Iterator it2 = sheet.rowIterator(); - assertTrue(it2.hasNext()); - assertEquals(row1, it2.next()); - assertTrue(it2.hasNext()); - Row row2_overwritten_copy = it2.next(); - assertEquals(row2_ovrewritten, row2_overwritten_copy); - assertEquals(row2_overwritten_copy.getCell((short) 0).getNumericCellValue(), (double) 100); - } - - public void testRemoveRow() { - XSSFWorkbook workbook = new XSSFWorkbook(); - Sheet sheet = workbook.createSheet("Sheet 1"); - Row row1 = sheet.createRow(1); - Row row2 = sheet.createRow(2); - assertNotNull(sheet.getRow(1)); - sheet.removeRow(row2); - assertNull(sheet.getRow(0)); - assertNull(sheet.getRow(2)); - assertNotNull(sheet.getRow(1)); - } - - public void testGetSetDefaultRowHeight() { - XSSFWorkbook workbook = new XSSFWorkbook(); - Sheet sheet = workbook.createSheet("Sheet 1"); - // Test that default height set by the constructor - assertEquals((short) 300, sheet.getDefaultRowHeight()); - assertEquals((float) 15, sheet.getDefaultRowHeightInPoints()); - // Set a new default row height in twips and test getting the value in points - sheet.setDefaultRowHeight((short) 360); - assertEquals((float) 18, sheet.getDefaultRowHeightInPoints()); - // Test that defaultRowHeight is a truncated short: E.G. 360inPoints -> 18; 361inPoints -> 18 - sheet.setDefaultRowHeight((short) 361); - assertEquals((float)361/20, sheet.getDefaultRowHeightInPoints()); - // Set a new default row height in points and test getting the value in twips - sheet.setDefaultRowHeightInPoints((short) 17); - assertEquals((short) 340, sheet.getDefaultRowHeight()); - } - - public void testGetSetDefaultColumnWidth() { - XSSFWorkbook workbook = new XSSFWorkbook(); - Sheet sheet = workbook.createSheet("Sheet 1"); - // Test that default column width set by the constructor - assertEquals((short) 8, sheet.getDefaultColumnWidth()); - // Set a new default column width and get its value - sheet.setDefaultColumnWidth((short) 14); - assertEquals((short) 14, sheet.getDefaultColumnWidth()); + public void testTestGetSetMargin() { + baseTestGetSetMargin(new double[]{0.7, 0.7, 0.75, 0.75, 0.3, 0.3}); } public void testGetFirstLastRowNum() { - XSSFWorkbook workbook = new XSSFWorkbook(); + Workbook workbook = getTestDataProvider().createWorkbook(); Sheet sheet = workbook.createSheet("Sheet 1"); Row row10 = sheet.createRow(9); Row row1 = sheet.createRow(0); @@ -146,149 +58,8 @@ public class TestXSSFSheet extends TestCase { assertEquals(9, sheet.getLastRowNum()); } - public void testGetPhysicalNumberOfRows() { - XSSFWorkbook workbook = new XSSFWorkbook(); - Sheet sheet = workbook.createSheet("Sheet 1"); - Row row10 = sheet.createRow(9); - Row row1 = sheet.createRow(0); - Row row2 = sheet.createRow(1); - assertEquals(3, sheet.getPhysicalNumberOfRows()); - } - - public void testGetSetRowBreaks() { - XSSFWorkbook workbook = new XSSFWorkbook(); - Sheet sheet = workbook.createSheet("Sheet 1"); - assertEquals(0, sheet.getRowBreaks().length); - sheet.setRowBreak(1); - sheet.setRowBreak(15); - assertNotNull(sheet.getRowBreaks()); - assertEquals(1, sheet.getRowBreaks()[0]); - assertEquals(15, sheet.getRowBreaks()[1]); - sheet.setRowBreak(1); - assertEquals(2, sheet.getRowBreaks().length); - } - - public void testRemoveRowBreak() { - XSSFWorkbook workbook = new XSSFWorkbook(); - Sheet sheet = workbook.createSheet("Sheet 1"); - sheet.setRowBreak(1); - assertEquals(1, sheet.getRowBreaks().length); - sheet.setRowBreak(2); - assertEquals(2, sheet.getRowBreaks().length); - sheet.removeRowBreak(1); - assertEquals(1, sheet.getRowBreaks().length); - } - - public void testMaxColumnWidth() { - XSSFWorkbook workbook = new XSSFWorkbook(); - Sheet sheet = workbook.createSheet("Sheet 1"); - sheet.setColumnWidth(0, 255*256); //the limit - try { - sheet.setColumnWidth(0, 256*256); //the limit - fail("expected exception"); - } catch (Exception e){ - ; - } - } - - public void testGetSetColumnBreaks() { - XSSFWorkbook workbook = new XSSFWorkbook(); - Sheet sheet = workbook.createSheet("Sheet 1"); - assertEquals(0, sheet.getColumnBreaks().length); - sheet.setColumnBreak((short) 11); - assertNotNull(sheet.getColumnBreaks()); - assertEquals(11, sheet.getColumnBreaks()[0]); - sheet.setColumnBreak((short) 11223); - assertEquals(2, sheet.getColumnBreaks().length); - } - - public void testRemoveColumnBreak() { - XSSFWorkbook workbook = new XSSFWorkbook(); - Sheet sheet = workbook.createSheet("Sheet 1"); - assertEquals(0, sheet.getColumnBreaks().length); - sheet.setColumnBreak((short) 11); - assertNotNull(sheet.getColumnBreaks()); - sheet.setColumnBreak((short) 12); - assertEquals(2, sheet.getColumnBreaks().length); - sheet.removeColumnBreak((short) 11); - assertEquals(1, sheet.getColumnBreaks().length); - sheet.removeColumnBreak((short) 15); - assertEquals(1, sheet.getColumnBreaks().length); - } - - public void testIsRowColumnBroken() { - XSSFWorkbook workbook = new XSSFWorkbook(); - Sheet sheet = workbook.createSheet("Sheet 1"); - assertFalse(sheet.isRowBroken(0)); - sheet.setRowBreak(3); - assertTrue(sheet.isRowBroken(3)); - assertFalse(sheet.isColumnBroken((short) 0)); - sheet.setColumnBreak((short) 3); - assertTrue(sheet.isColumnBroken((short) 3)); - } - - public void testGetSetAutoBreaks() { - XSSFWorkbook workbook = new XSSFWorkbook(); - Sheet sheet = workbook.createSheet("Sheet 1"); - assertTrue(sheet.getAutobreaks()); - sheet.setAutobreaks(false); - assertFalse(sheet.getAutobreaks()); - } - - public void testIsSetFitToPage() { - XSSFWorkbook workbook = new XSSFWorkbook(); - Sheet sheet = workbook.createSheet("Sheet 1"); - assertFalse(sheet.getFitToPage()); - sheet.setFitToPage(true); - assertTrue(sheet.getFitToPage()); - sheet.setFitToPage(false); - assertFalse(sheet.getFitToPage()); - } - - public void testGetSetMargin() { - XSSFWorkbook workbook = new XSSFWorkbook(); - Sheet sheet = workbook.createSheet("Sheet 1"); - assertEquals(0.7, sheet.getMargin((short) 0)); - sheet.setMargin((short) 0, 10); - assertEquals((double) 10, sheet.getMargin((short) 0)); - assertEquals((double) 10, sheet.getMargin((short) 1)); - assertEquals((double) 10, sheet.getMargin((short) 2)); - assertEquals((double) 10, sheet.getMargin((short) 3)); - assertEquals((double) 10, sheet.getMargin((short) 4)); - assertEquals((double) 10, sheet.getMargin((short) 5)); - sheet.setMargin((short) 1, 11); - assertEquals((double) 11, sheet.getMargin((short) 1)); - assertEquals((double) 11, sheet.getMargin((short) 2)); - assertEquals((double) 11, sheet.getMargin((short) 3)); - assertEquals((double) 11, sheet.getMargin((short) 4)); - assertEquals((double) 11, sheet.getMargin((short) 5)); - sheet.setMargin((short) 2, 12); - assertEquals((double) 12, sheet.getMargin((short) 2)); - assertEquals((double) 12, sheet.getMargin((short) 3)); - assertEquals((double) 12, sheet.getMargin((short) 4)); - assertEquals((double) 12, sheet.getMargin((short) 5)); - sheet.setMargin((short) 3, 13); - assertEquals((double) 13, sheet.getMargin((short) 3)); - assertEquals((double) 13, sheet.getMargin((short) 4)); - assertEquals((double) 13, sheet.getMargin((short) 5)); - sheet.setMargin((short) 4, 14); - assertEquals((double) 14, sheet.getMargin((short) 4)); - assertEquals((double) 14, sheet.getMargin((short) 5)); - sheet.setMargin((short) 5, 15); - assertEquals((double) 15, sheet.getMargin((short) 5)); - - // Test that nothing happens if another margin constant is given (E.G. 65) - sheet.setMargin((short) 65, 15); - assertEquals((double) 10, sheet.getMargin((short) 0)); - assertEquals((double) 11, sheet.getMargin((short) 1)); - assertEquals((double) 12, sheet.getMargin((short) 2)); - assertEquals((double) 13, sheet.getMargin((short) 3)); - assertEquals((double) 14, sheet.getMargin((short) 4)); - assertEquals((double) 15, sheet.getMargin((short) 5)); - } - public void testGetFooter() { - XSSFWorkbook workbook = new XSSFWorkbook(); + XSSFWorkbook workbook = getTestDataProvider().createWorkbook(); XSSFSheet sheet = workbook.createSheet("Sheet 1"); assertNotNull(sheet.getFooter()); sheet.getFooter().setCenter("test center footer"); @@ -364,7 +135,7 @@ public class TestXSSFSheet extends TestCase { } public void testGetAllHeadersFooters() { - XSSFWorkbook workbook = new XSSFWorkbook(); + XSSFWorkbook workbook = getTestDataProvider().createWorkbook(); XSSFSheet sheet = workbook.createSheet("Sheet 1"); assertNotNull(sheet.getOddFooter()); assertNotNull(sheet.getEvenFooter()); @@ -402,50 +173,8 @@ public class TestXSSFSheet extends TestCase { assertEquals("odd header center", sheet.getHeader().getCenter()); } - public void testGetSetColumnWidth() { - XSSFWorkbook workbook = new XSSFWorkbook(); - XSSFSheet sheet = workbook.createSheet("Sheet 1"); - sheet.setColumnWidth(1, 22*256); - assertEquals(22*256, sheet.getColumnWidth(1)); - - // Now check the low level stuff, and check that's all - // been set correctly - XSSFSheet xs = sheet; - CTWorksheet cts = xs.getCTWorksheet(); - - CTCols[] cols_s = cts.getColsArray(); - assertEquals(1, cols_s.length); - CTCols cols = cols_s[0]; - assertEquals(1, cols.sizeOfColArray()); - CTCol col = cols.getColArray(0); - - // XML is 1 based, POI is 0 based - assertEquals(2, col.getMin()); - assertEquals(2, col.getMax()); - assertEquals(22.0, col.getWidth()); - - - // Now set another - sheet.setColumnWidth(3, 33*256); - - cols_s = cts.getColsArray(); - assertEquals(1, cols_s.length); - cols = cols_s[0]; - assertEquals(2, cols.sizeOfColArray()); - - col = cols.getColArray(0); - assertEquals(2, col.getMin()); // POI 1 - assertEquals(2, col.getMax()); - assertEquals(22.0, col.getWidth()); - - col = cols.getColArray(1); - assertEquals(4, col.getMin()); // POI 3 - assertEquals(4, col.getMax()); - assertEquals(33.0, col.getWidth()); - } - public void testGetSetColumnHidden() { - XSSFWorkbook workbook = new XSSFWorkbook(); + Workbook workbook = getTestDataProvider().createWorkbook(); Sheet sheet = workbook.createSheet("Sheet 1"); sheet.setColumnHidden((short) 2, true); assertTrue(sheet.isColumnHidden((short) 2)); @@ -463,185 +192,6 @@ public class TestXSSFSheet extends TestCase { assertTrue(col.getBestFit()); } - public void testGetSetHorizontallyCentered() { - XSSFWorkbook workbook = new XSSFWorkbook(); - XSSFSheet sheet = workbook.createSheet("Sheet 1"); - assertFalse(sheet.getHorizontallyCenter()); - sheet.setHorizontallyCenter(true); - assertTrue(sheet.getHorizontallyCenter()); - sheet.setHorizontallyCenter(false); - assertFalse(sheet.getHorizontallyCenter()); - } - - public void testGetSetVerticallyCentered() { - XSSFWorkbook workbook = new XSSFWorkbook(); - XSSFSheet sheet = workbook.createSheet("Sheet 1"); - assertFalse(sheet.getVerticallyCenter()); - sheet.setVerticallyCenter(true); - assertTrue(sheet.getVerticallyCenter()); - sheet.setVerticallyCenter(false); - assertFalse(sheet.getVerticallyCenter()); - } - - public void testIsSetPrintGridlines() { - XSSFWorkbook workbook = new XSSFWorkbook(); - XSSFSheet sheet = workbook.createSheet("Sheet 1"); - assertFalse(sheet.isPrintGridlines()); - sheet.setPrintGridlines(true); - assertTrue(sheet.isPrintGridlines()); - } - - public void testIsSetDisplayFormulas() { - XSSFWorkbook workbook = new XSSFWorkbook(); - XSSFSheet sheet = workbook.createSheet("Sheet 1"); - assertFalse(sheet.isDisplayFormulas()); - sheet.setDisplayFormulas(true); - assertTrue(sheet.isDisplayFormulas()); - } - - public void testIsSetDisplayGridLines() { - XSSFWorkbook workbook = new XSSFWorkbook(); - XSSFSheet sheet = workbook.createSheet("Sheet 1"); - assertTrue(sheet.isDisplayGridlines()); - sheet.setDisplayGridlines(false); - assertFalse(sheet.isDisplayGridlines()); - } - - public void testIsSetDisplayGuts() { - XSSFWorkbook workbook = new XSSFWorkbook(); - XSSFSheet sheet = workbook.createSheet("Sheet 1"); - assertTrue(sheet.getDisplayGuts()); - sheet.setDisplayGuts(false); - assertFalse(sheet.getDisplayGuts()); - } - - public void testIsSetDisplayRowColHeadings() { - XSSFWorkbook workbook = new XSSFWorkbook(); - XSSFSheet sheet = workbook.createSheet("Sheet 1"); - assertTrue(sheet.isDisplayRowColHeadings()); - sheet.setDisplayRowColHeadings(false); - assertFalse(sheet.isDisplayRowColHeadings()); - } - - public void testGetScenarioProtect() { - XSSFWorkbook workbook = new XSSFWorkbook(); - XSSFSheet sheet = workbook.createSheet("Sheet 1"); - assertFalse(sheet.getScenarioProtect()); - } - /* - public void testTopRowLeftCol() { - XSSFWorkbook workbook = new XSSFWorkbook(); - XSSFSheet sheet = workbook.createSheet("Sheet 1"); - sheet.showInPane((short)1, (short)1); - assertEquals((short) 1, sheet.getTopRow()); - assertEquals((short) 1, sheet.getLeftCol()); - sheet.showInPane((short)2, (short)26); - assertEquals((short) 2, sheet.getTopRow()); - assertEquals((short) 26, sheet.getLeftCol()); - } - */ - public void testShiftRows() { - XSSFWorkbook workbook = new XSSFWorkbook(); - - XSSFSheet sheet = createSheet(workbook, "Sheet 1"); - sheet.shiftRows(1, 2, 4, true, false); - assertEquals((short) 1, sheet.getRow(5).getHeight()); - assertEquals((short) 2, sheet.getRow(6).getHeight()); - assertNull(sheet.getRow(1)); - assertNull(sheet.getRow(2)); - assertEquals(8, sheet.getPhysicalNumberOfRows()); - - XSSFSheet sheet2 = createSheet(workbook, "Sheet 2"); - sheet2.shiftRows(1, 5, 3, true, false); - assertEquals((short) 1, sheet2.getRow(4).getHeight()); - assertEquals((short) 2, sheet2.getRow(5).getHeight()); - assertEquals((short) 3, sheet2.getRow(6).getHeight()); - assertEquals((short) 4, sheet2.getRow(7).getHeight()); - assertEquals((short) 5, sheet2.getRow(8).getHeight()); - assertNull(sheet2.getRow(1)); - assertNull(sheet2.getRow(2)); - assertNull(sheet2.getRow(3)); - assertEquals(7, sheet2.getPhysicalNumberOfRows()); - - XSSFSheet sheet3 = createSheet(workbook, "Sheet 3"); - sheet3.shiftRows(5, 7, -3, true, false); - assertEquals(5, sheet3.getRow(2).getHeight()); - assertEquals(6, sheet3.getRow(3).getHeight()); - assertEquals(7, sheet3.getRow(4).getHeight()); - assertNull(sheet3.getRow(5)); - assertNull(sheet3.getRow(6)); - assertNull(sheet3.getRow(7)); - assertEquals(7, sheet3.getPhysicalNumberOfRows()); - - XSSFSheet sheet4 = createSheet(workbook, "Sheet 4"); - sheet4.shiftRows(5, 7, -2, true, false); - assertEquals(5, sheet4.getRow(3).getHeight()); - assertEquals(6, sheet4.getRow(4).getHeight()); - assertEquals(7, sheet4.getRow(5).getHeight()); - assertNull(sheet4.getRow(6)); - assertNull(sheet4.getRow(7)); - assertEquals(8, sheet4.getPhysicalNumberOfRows()); - - // Test without copying rowHeight - XSSFSheet sheet5 = createSheet(workbook, "Sheet 5"); - sheet5.shiftRows(5, 7, -2, false, false); - assertEquals(sheet5.getDefaultRowHeight(), sheet5.getRow(3).getHeight()); - assertEquals(sheet5.getDefaultRowHeight(), sheet5.getRow(4).getHeight()); - assertEquals(sheet5.getDefaultRowHeight(), sheet5.getRow(5).getHeight()); - assertNull(sheet5.getRow(6)); - assertNull(sheet5.getRow(7)); - assertEquals(8, sheet5.getPhysicalNumberOfRows()); - - // Test without copying rowHeight and resetting to default height - XSSFSheet sheet6 = createSheet(workbook, "Sheet 6"); - sheet6.setDefaultRowHeight((short) 200); - sheet6.shiftRows(5, 7, -2, false, true); - assertEquals(200, sheet6.getRow(3).getHeight()); - assertEquals(200, sheet6.getRow(4).getHeight()); - assertEquals(200, sheet6.getRow(5).getHeight()); - assertNull(sheet6.getRow(6)); - assertNull(sheet6.getRow(7)); - assertEquals(8, sheet6.getPhysicalNumberOfRows()); - } - - /** - * When shifting rows, update formulas on that sheet to point to the new location of those rows - * (see bugzilla 46536) - */ - public void testShiftRows_46536() { - XSSFWorkbook wb = XSSFTestDataSamples.openSampleWorkbook("46536.xlsx"); - CalculationChain calcChain = wb.getCalculationChain(); - int numItems = calcChain.getCTCalcChain().getCArray().length; - assertEquals(3, numItems); - - XSSFSheet sheet = wb.getSheet("Test"); - XSSFRow row2 = sheet.getRow(1); - XSSFCell cell_A2 = row2.getCell(0); - assertEquals("A2", cell_A2.getReference()); - - XSSFRow row3 = sheet.getRow(2); - XSSFCell cell_B3 = row3.getCell(1); - assertEquals("B3", cell_B3.getReference()); - - XSSFCell cell_E2 = row2.getCell(4); - CTCellFormula f = cell_E2.getCTCell().getF(); - assertEquals("B2+C2+D2", f.getStringValue()); - assertEquals("E2:E3", f.getRef()); - - sheet.shiftRows(1, sheet.getLastRowNum(), 3, false, true); - - assertEquals(4, row2.getRowNum()); - assertEquals(5, row3.getRowNum()); - assertEquals("A5", cell_A2.getReference()); - assertEquals("B6", cell_B3.getReference()); - - assertEquals("B5+C5+D5", f.getStringValue()); - assertEquals("E5:E6", f.getRef()); - - numItems = calcChain.getCTCalcChain().getCArray().length; - assertEquals(1, numItems); - - } public void testGetCellComment() { XSSFWorkbook workbook = new XSSFWorkbook(); @@ -758,31 +308,7 @@ public class TestXSSFSheet extends TestCase { } - private XSSFSheet createSheet(XSSFWorkbook workbook, String name) { - XSSFSheet sheet = workbook.createSheet(name); - Row row0 = sheet.createRow(0); - row0.setHeight((short) 1); - Row row1 = sheet.createRow(1); - row1.setHeight((short) 1); - Row row2 = sheet.createRow(2); - row2.setHeight((short) 2); - Row row3 = sheet.createRow(3); - row3.setHeight((short) 3); - Row row4 = sheet.createRow(4); - row4.setHeight((short) 4); - Row row5 = sheet.createRow(5); - row5.setHeight((short) 5); - Row row6 = sheet.createRow(6); - row6.setHeight((short) 6); - Row row7 = sheet.createRow(7); - row7.setHeight((short) 7); - Row row8 = sheet.createRow(8); - row8.setHeight((short) 8); - Row row9 = sheet.createRow(9); - row9.setHeight((short) 9); - return sheet; - } - + public void testGroupUngroupColumn() { @@ -881,77 +407,49 @@ public class TestXSSFSheet extends TestCase { } } - public void testOutlineProperties() { - XSSFWorkbook wb = new XSSFWorkbook(); - - XSSFSheet sheet = wb.createSheet(); - - assertTrue(sheet.getRowSumsBelow()); - assertTrue(sheet.getRowSumsRight()); - - sheet.setRowSumsBelow(false); - sheet.setRowSumsRight(false); - - assertFalse(sheet.getRowSumsBelow()); - assertFalse(sheet.getRowSumsRight()); - } - - - public void testSetColumnGroupCollapsed(){ - - } - - - public void testColumnWidthCompatibility() { - Workbook wb1 = new HSSFWorkbook(); - Workbook wb2 = new XSSFWorkbook(); - - Sheet sh1 = wb1.createSheet(); - Sheet sh2 = wb2.createSheet(); - - assertEquals(sh1.getDefaultColumnWidth(), sh2.getDefaultColumnWidth()); - - //if column width is not set, HSSF returns a wrong value which does not take into account - //margins and borders, it is always less than the actual column width - assertEquals(2048, sh1.getColumnWidth(0)); - assertEquals(2340, sh2.getColumnWidth(0)); - - sh1.setDefaultColumnWidth(1000); - sh2.setDefaultColumnWidth(1000); - assertEquals(1000, sh2.getDefaultColumnWidth()); - assertEquals(sh1.getDefaultColumnWidth(), sh2.getDefaultColumnWidth()); - - sh1.setColumnWidth(0, 500); - sh2.setColumnWidth(0, 500); - assertEquals(500, sh2.getColumnWidth(0)); - assertEquals(sh1.getColumnWidth(0), sh2.getColumnWidth(0)); - } - /** - * Tests the display of gridlines, formulas, and rowcolheadings. - * @author Shawn Laubach (slaubach at apache dot org) + * Get / Set column width and check the actual values of the underlying XML beans */ - public void testDisplayOptions() { - Workbook wb = new XSSFWorkbook(); - Sheet sheet = wb.createSheet(); + public void testColumnWidth_lowlevel() { + XSSFWorkbook workbook = new XSSFWorkbook(); + XSSFSheet sheet = workbook.createSheet("Sheet 1"); + sheet.setColumnWidth(1, 22*256); + assertEquals(22*256, sheet.getColumnWidth(1)); - assertEquals(sheet.isDisplayGridlines(), true); - assertEquals(sheet.isDisplayRowColHeadings(), true); - assertEquals(sheet.isDisplayFormulas(), false); - assertEquals(sheet.isDisplayZeros(), true); + // Now check the low level stuff, and check that's all + // been set correctly + XSSFSheet xs = sheet; + CTWorksheet cts = xs.getCTWorksheet(); - sheet.setDisplayGridlines(false); - sheet.setDisplayRowColHeadings(false); - sheet.setDisplayFormulas(true); - sheet.setDisplayZeros(false); + CTCols[] cols_s = cts.getColsArray(); + assertEquals(1, cols_s.length); + CTCols cols = cols_s[0]; + assertEquals(1, cols.sizeOfColArray()); + CTCol col = cols.getColArray(0); - wb = XSSFTestDataSamples.writeOutAndReadBack(wb); - sheet = wb.getSheetAt(0); + // XML is 1 based, POI is 0 based + assertEquals(2, col.getMin()); + assertEquals(2, col.getMax()); + assertEquals(22.0, col.getWidth()); - assertEquals(sheet.isDisplayGridlines(), false); - assertEquals(sheet.isDisplayRowColHeadings(), false); - assertEquals(sheet.isDisplayFormulas(), true); - assertEquals(sheet.isDisplayZeros(), false); + + // Now set another + sheet.setColumnWidth(3, 33*256); + + cols_s = cts.getColsArray(); + assertEquals(1, cols_s.length); + cols = cols_s[0]; + assertEquals(2, cols.sizeOfColArray()); + + col = cols.getColArray(0); + assertEquals(2, col.getMin()); // POI 1 + assertEquals(2, col.getMax()); + assertEquals(22.0, col.getWidth()); + + col = cols.getColArray(1); + assertEquals(4, col.getMin()); // POI 3 + assertEquals(4, col.getMax()); + assertEquals(33.0, col.getWidth()); } } diff --git a/src/ooxml/testcases/org/apache/poi/xssf/usermodel/TestXSSFWorkbook.java b/src/ooxml/testcases/org/apache/poi/xssf/usermodel/TestXSSFWorkbook.java index 73c181bd2..40d16925a 100644 --- a/src/ooxml/testcases/org/apache/poi/xssf/usermodel/TestXSSFWorkbook.java +++ b/src/ooxml/testcases/org/apache/poi/xssf/usermodel/TestXSSFWorkbook.java @@ -27,6 +27,7 @@ import org.apache.poi.hssf.HSSFTestDataSamples; import org.apache.poi.ss.usermodel.*; import org.apache.poi.ss.util.CellRangeAddress; import org.apache.poi.xssf.XSSFTestDataSamples; +import org.apache.poi.xssf.XSSFITestDataProvider; import org.apache.poi.xssf.model.StylesTable; import org.apache.poi.openxml4j.opc.ContentTypes; import org.apache.poi.openxml4j.opc.OPCPackage; @@ -35,139 +36,14 @@ import org.apache.poi.openxml4j.opc.PackagingURIHelper; import org.openxmlformats.schemas.spreadsheetml.x2006.main.CTSheet; import org.openxmlformats.schemas.spreadsheetml.x2006.main.CTWorkbook; -public final class TestXSSFWorkbook extends TestCase { - - @Override - protected void setUp() { - // Use system out logger - System.setProperty( - "org.apache.poi.util.POILogger", - "org.apache.poi.util.SystemOutLogger" - ); - } - - public void testGetSetActiveSheet(){ - XSSFWorkbook workbook = new XSSFWorkbook(); - assertEquals(0, workbook.getActiveSheetIndex()); - - workbook.createSheet("sheet1"); - workbook.createSheet("sheet2"); - workbook.createSheet("sheet3"); - // set second sheet - workbook.setActiveSheet(1); - // test if second sheet is set up - assertEquals(1, workbook.getActiveSheetIndex()); - } - - public void testGetSheetIndex() { - XSSFWorkbook workbook = new XSSFWorkbook(); - Sheet sheet1 = workbook.createSheet("sheet1"); - Sheet sheet2 = workbook.createSheet("sheet2"); - assertEquals(0, workbook.getSheetIndex(sheet1)); - assertEquals(0, workbook.getSheetIndex("sheet1")); - assertEquals(1, workbook.getSheetIndex(sheet2)); - assertEquals(1, workbook.getSheetIndex("sheet2")); - assertEquals(-1, workbook.getSheetIndex("noSheet")); - } - - public void testSetSheetOrder() { - XSSFWorkbook workbook = new XSSFWorkbook(); - Sheet sheet1 = workbook.createSheet("sheet1"); - Sheet sheet2 = workbook.createSheet("sheet2"); - assertSame(sheet1, workbook.getSheetAt(0)); - assertSame(sheet2, workbook.getSheetAt(1)); - workbook.setSheetOrder("sheet2", 0); - assertSame(sheet2, workbook.getSheetAt(0)); - assertSame(sheet1, workbook.getSheetAt(1)); - // Test reordering of CTSheets - CTWorkbook ctwb = workbook.getCTWorkbook(); - CTSheet[] ctsheets = ctwb.getSheets().getSheetArray(); - assertEquals("sheet2", ctsheets[0].getName()); - assertEquals("sheet1", ctsheets[1].getName()); - - // Borderline case: only one sheet - workbook = new XSSFWorkbook(); - sheet1 = workbook.createSheet("sheet1"); - assertSame(sheet1, workbook.getSheetAt(0)); - workbook.setSheetOrder("sheet1", 0); - assertSame(sheet1, workbook.getSheetAt(0)); - } - - public void testSetSheetName() { - XSSFWorkbook workbook = new XSSFWorkbook(); - workbook.createSheet("sheet1"); - assertEquals("sheet1", workbook.getSheetName(0)); - workbook.setSheetName(0, "sheet2"); - assertEquals("sheet2", workbook.getSheetName(0)); - } - - public void testCloneSheet() { - XSSFWorkbook book = new XSSFWorkbook(); - XSSFSheet sheet = book.createSheet("TEST"); - sheet.createRow(0).createCell(0).setCellValue("Test"); - sheet.createRow(1).createCell(0).setCellValue(36.6); - sheet.addMergedRegion(new CellRangeAddress(0, 1, 0, 2)); - sheet.addMergedRegion(new CellRangeAddress(1, 2, 0, 2)); - assertTrue(sheet.isSelected()); - - XSSFSheet clonedSheet = book.cloneSheet(0); - assertEquals("TEST (2)", clonedSheet.getSheetName()); - assertEquals(2, clonedSheet.getPhysicalNumberOfRows()); - assertEquals(2, clonedSheet.getNumMergedRegions()); - assertFalse(clonedSheet.isSelected()); - - //cloned sheet is a deep copy, adding rows in the original does not affect the clone - sheet.createRow(2).createCell(0).setCellValue(1); - sheet.addMergedRegion(new CellRangeAddress(0, 2, 0, 2)); - assertEquals(2, clonedSheet.getPhysicalNumberOfRows()); - assertEquals(2, clonedSheet.getPhysicalNumberOfRows()); - - clonedSheet.createRow(2).createCell(0).setCellValue(1); - clonedSheet.addMergedRegion(new CellRangeAddress(0, 2, 0, 2)); - assertEquals(3, clonedSheet.getPhysicalNumberOfRows()); - assertEquals(3, clonedSheet.getPhysicalNumberOfRows()); +public final class TestXSSFWorkbook extends BaseTestWorkbook { + @Override + protected XSSFITestDataProvider getTestDataProvider(){ + return XSSFITestDataProvider.getInstance(); } - - public void testGetSheetByName() { - XSSFWorkbook workbook = new XSSFWorkbook(); - Sheet sheet1 = workbook.createSheet("sheet1"); - Sheet sheet2 = workbook.createSheet("sheet2"); - assertSame(sheet1, workbook.getSheet("sheet1")); - assertSame(sheet2, workbook.getSheet("sheet2")); - assertNull(workbook.getSheet("nosheet")); - } - - public void testRemoveSheetAt() { - XSSFWorkbook workbook = new XSSFWorkbook(); - workbook.createSheet("sheet1"); - workbook.createSheet("sheet2"); - workbook.createSheet("sheet3"); - workbook.removeSheetAt(1); - assertEquals(2, workbook.getNumberOfSheets()); - assertEquals("sheet3", workbook.getSheetName(1)); - workbook.removeSheetAt(0); - assertEquals(1, workbook.getNumberOfSheets()); - assertEquals("sheet3", workbook.getSheetName(0)); - workbook.removeSheetAt(0); - assertEquals(0, workbook.getNumberOfSheets()); - } - public void testPrintArea(){ - Workbook workbook = new XSSFWorkbook(); - Sheet sheet = workbook.createSheet("Test Print Area"); - String sheetName = workbook.getSheetName(0); - - // String reference = sheetName+"!$A$1:$B$1"; - // workbook.setPrintArea(0, reference); - workbook.setPrintArea(0,1,5,4,9); - - String retrievedPrintArea = workbook.getPrintArea(0); - //assertNotNull("Print Area not defined for first sheet", retrievedPrintArea); - assertEquals("'"+sheetName+"'!$B$5:$F$10", retrievedPrintArea); -} - public void testRepeatingRowsAndColums() { // First test that setting RR&C for same sheet more than once only creates a // single Print_Titles built-in record @@ -205,24 +81,9 @@ public final class TestXSSFWorkbook extends TestCase { assertEquals(XSSFName.BUILTIN_PRINT_TITLE, nr2.getNameName()); assertEquals("'SecondSheet'!$B:$C,'SecondSheet'!$1:$1", nr2.getRefersToFormula()); - nwb.setRepeatingRowsAndColumns(1, -1, -1, -1, -1); - } - - /** - * Tests that we can save a new document - */ - public void testSaveNew() { - XSSFWorkbook workbook = new XSSFWorkbook(); - workbook.createSheet("sheet1"); - workbook.createSheet("sheet2"); - workbook.createSheet("sheet3"); - - XSSFTestDataSamples.writeOutAndReadBack(workbook); - } - /** * Tests that we can save, and then re-load a new document */ @@ -242,8 +103,8 @@ public final class TestXSSFWorkbook extends TestCase { assertEquals(1, workbook.getSheetAt(0).getLastRowNum()); assertEquals(0, workbook.getSheetAt(1).getFirstRowNum()); assertEquals(0, workbook.getSheetAt(1).getLastRowNum()); - assertEquals(-1, workbook.getSheetAt(2).getFirstRowNum()); - assertEquals(-1, workbook.getSheetAt(2).getLastRowNum()); + assertEquals(0, workbook.getSheetAt(2).getFirstRowNum()); + assertEquals(0, workbook.getSheetAt(2).getLastRowNum()); File file = File.createTempFile("poi-", ".xlsx"); OutputStream out = new FileOutputStream(file); @@ -278,8 +139,8 @@ public final class TestXSSFWorkbook extends TestCase { assertEquals(1, workbook.getSheetAt(0).getLastRowNum()); assertEquals(0, workbook.getSheetAt(1).getFirstRowNum()); assertEquals(0, workbook.getSheetAt(1).getLastRowNum()); - assertEquals(-1, workbook.getSheetAt(2).getFirstRowNum()); - assertEquals(-1, workbook.getSheetAt(2).getLastRowNum()); + assertEquals(0, workbook.getSheetAt(2).getFirstRowNum()); + assertEquals(0, workbook.getSheetAt(2).getLastRowNum()); sheet1 = workbook.getSheetAt(0); assertEquals(1.2, sheet1.getRow(0).getCell(0).getNumericCellValue(), 0.0001); @@ -379,13 +240,6 @@ public final class TestXSSFWorkbook extends TestCase { assertNotSame(2, i); } - public void testGetDisplayedTab(){ - XSSFWorkbook workbook = new XSSFWorkbook(); - short i = (short) workbook.getFirstVisibleTab(); - //get default diplayedTab - assertEquals(0, i); - } - public void testSetDisplayedTab(){ XSSFWorkbook workbook = new XSSFWorkbook(); workbook.setFirstVisibleTab(1); @@ -395,8 +249,8 @@ public final class TestXSSFWorkbook extends TestCase { //1 is the default tab assertEquals(1, i); } - - + + public void testLoadSave() { XSSFWorkbook workbook = XSSFTestDataSamples.openSampleWorkbook("Formatting.xlsx"); assertEquals(3, workbook.getNumberOfSheets()); @@ -458,94 +312,4 @@ public final class TestXSSFWorkbook extends TestCase { assertEquals(1, st.getBorders().size()); } - public void testNamedRanges() { - // First up, a new file - XSSFWorkbook workbook = new XSSFWorkbook(); - assertEquals(0, workbook.getNumberOfNames()); - - Name nameA = workbook.createName(); - nameA.setRefersToFormula("A2"); - nameA.setNameName("ForA2"); - - XSSFName nameB = workbook.createName(); - nameB.setRefersToFormula("B3"); - nameB.setNameName("ForB3"); - nameB.setComment("B3 Comment"); - - // Save and re-load - workbook = XSSFTestDataSamples.writeOutAndReadBack(workbook); - - assertEquals(2, workbook.getNumberOfNames()); - assertEquals("A2", workbook.getNameAt(0).getRefersToFormula()); - assertEquals("ForA2", workbook.getNameAt(0).getNameName()); - assertNull(workbook.getNameAt(0).getComment()); - - assertEquals("B3", workbook.getNameAt(1).getRefersToFormula()); - assertEquals("ForB3", workbook.getNameAt(1).getNameName()); - assertEquals("B3 Comment", workbook.getNameAt(1).getComment()); - - assertEquals("ForA2", workbook.getNameAt(0).getNameName()); - assertEquals(1, workbook.getNameIndex("ForB3")); - assertEquals(-1, workbook.getNameIndex("ForB3!!")); - - - // Now, an existing file with named ranges - workbook = XSSFTestDataSamples.openSampleWorkbook("WithVariousData.xlsx"); - - assertEquals(2, workbook.getNumberOfNames()); - assertEquals("Sheet1!$A$2:$A$7", workbook.getNameAt(0).getRefersToFormula()); - assertEquals("AllANumbers", workbook.getNameAt(0).getNameName()); - assertEquals("All the numbers in A", workbook.getNameAt(0).getComment()); - - assertEquals("Sheet1!$B$2:$B$7", workbook.getNameAt(1).getRefersToFormula()); - assertEquals("AllBStrings", workbook.getNameAt(1).getNameName()); - assertEquals("All the strings in B", workbook.getNameAt(1).getComment()); - - // Tweak, save, and re-check - workbook.getNameAt(1).setNameName("BStringsFun"); - - workbook = XSSFTestDataSamples.writeOutAndReadBack(workbook); - - assertEquals(2, workbook.getNumberOfNames()); - assertEquals("Sheet1!$A$2:$A$7", workbook.getNameAt(0).getRefersToFormula()); - assertEquals("AllANumbers", workbook.getNameAt(0).getNameName()); - assertEquals("All the numbers in A", workbook.getNameAt(0).getComment()); - - assertEquals("Sheet1!$B$2:$B$7", workbook.getNameAt(1).getRefersToFormula()); - assertEquals("BStringsFun", workbook.getNameAt(1).getNameName()); - assertEquals("All the strings in B", workbook.getNameAt(1).getComment()); - } - - public void testDuplicateNames() { - - XSSFWorkbook wb = new XSSFWorkbook(); - wb.createSheet("Sheet1"); - wb.createSheet(); - wb.createSheet("name1"); - try { - wb.createSheet("name1"); - fail(); - } catch (IllegalArgumentException e) { - assertEquals("The workbook already contains a sheet of this name", e.getMessage()); - } - - wb.createSheet(); - - try { - wb.setSheetName(3, "name1"); - fail(); - } catch (IllegalArgumentException e) { - assertEquals("The workbook already contains a sheet of this name", e.getMessage()); - } - - try { - wb.setSheetName(3, "Sheet1"); - fail(); - } catch (IllegalArgumentException e) { - assertEquals("The workbook already contains a sheet of this name", e.getMessage()); - } - - wb.setSheetName(3, "name2"); - wb.setSheetName(3, "Sheet3"); - } } diff --git a/src/testcases/org/apache/poi/hssf/usermodel/AllUserModelTests.java b/src/testcases/org/apache/poi/hssf/usermodel/AllUserModelTests.java index 72d420cb4..5effed4b5 100755 --- a/src/testcases/org/apache/poi/hssf/usermodel/AllUserModelTests.java +++ b/src/testcases/org/apache/poi/hssf/usermodel/AllUserModelTests.java @@ -57,8 +57,6 @@ public class AllUserModelTests { result.addTestSuite(TestHSSFRichTextString.class); result.addTestSuite(TestHSSFRow.class); result.addTestSuite(TestHSSFSheet.class); - result.addTestSuite(TestHSSFSheetOrder.class); - result.addTestSuite(TestHSSFSheetSetOrder.class); result.addTestSuite(TestHSSFTextbox.class); result.addTestSuite(TestHSSFWorkbook.class); result.addTestSuite(TestLinkTable.class); diff --git a/src/testcases/org/apache/poi/hssf/usermodel/TestBugs.java b/src/testcases/org/apache/poi/hssf/usermodel/TestBugs.java index af1ec26aa..c3b0fe2c9 100644 --- a/src/testcases/org/apache/poi/hssf/usermodel/TestBugs.java +++ b/src/testcases/org/apache/poi/hssf/usermodel/TestBugs.java @@ -624,27 +624,6 @@ public final class TestBugs extends TestCase { } } - /** - * Bug 40296: HSSFCell.setCellFormula throws - * ClassCastException if cell is created using HSSFRow.createCell(short column, int type) - */ - public void test40296() { - HSSFWorkbook wb = new HSSFWorkbook(); - - HSSFWorkbook workBook = new HSSFWorkbook(); - HSSFSheet workSheet = workBook.createSheet("Sheet1"); - HSSFCell cell; - HSSFRow row = workSheet.createRow(0); - cell = row.createCell(0, HSSFCell.CELL_TYPE_NUMERIC); - cell.setCellValue(1.0); - cell = row.createCell(1, HSSFCell.CELL_TYPE_NUMERIC); - cell.setCellValue(2.0); - cell = row.createCell(2, HSSFCell.CELL_TYPE_FORMULA); - cell.setCellFormula("SUM(A1:B1)"); - - writeOutAndReadBack(wb); - } - /** * Test bug 38266: NPE when adding a row break * diff --git a/src/testcases/org/apache/poi/hssf/usermodel/TestHSSFCell.java b/src/testcases/org/apache/poi/hssf/usermodel/TestHSSFCell.java index e00c04236..2e9577221 100644 --- a/src/testcases/org/apache/poi/hssf/usermodel/TestHSSFCell.java +++ b/src/testcases/org/apache/poi/hssf/usermodel/TestHSSFCell.java @@ -44,21 +44,6 @@ public final class TestHSSFCell extends BaseTestCell { return HSSFITestDataProvider.getInstance(); } - public void testSetValues() { - baseTestSetValues(); - } - - /** - * test that Boolean and Error types (BoolErrRecord) are supported properly. - */ - public void testBoolErr() { - baseTestBoolErr(); - } - - public void testSetFormulaValue() { - baseTestSetFormulaValue(); - } - /** * Checks that the recognition of files using 1904 date windowing * is working properly. Conversion of the date is also an issue, @@ -168,13 +153,6 @@ public final class TestHSSFCell extends BaseTestCell { 3, s.getActiveCellRow()); } - /** - * test that Cell Styles being applied to formulas remain intact - */ - public void testFormulaStyle() { - baseTestFormulaStyle(); - } - /** * Test reading hyperlinks */ @@ -219,13 +197,8 @@ public final class TestHSSFCell extends BaseTestCell { assertEquals(1, link2.getFirstColumn()); } - /**tests the toString() method of HSSFCell*/ - public void testToString() { - baseTestToString(); - } - public void testSetStringInFormulaCell_bug44606() { - HSSFWorkbook wb = new HSSFWorkbook(); + HSSFWorkbook wb = getTestDataProvider().createWorkbook(); HSSFCell cell = wb.createSheet("Sheet1").createRow(0).createCell(0); cell.setCellFormula("B1&C1"); try { diff --git a/src/testcases/org/apache/poi/hssf/usermodel/TestHSSFClientAnchor.java b/src/testcases/org/apache/poi/hssf/usermodel/TestHSSFClientAnchor.java index 655f78edd..5de4fc787 100644 --- a/src/testcases/org/apache/poi/hssf/usermodel/TestHSSFClientAnchor.java +++ b/src/testcases/org/apache/poi/hssf/usermodel/TestHSSFClientAnchor.java @@ -35,7 +35,7 @@ public class TestHSSFClientAnchor extends TestCase HSSFSheet sheet = wb.createSheet("test"); HSSFClientAnchor a = new HSSFClientAnchor(0,0,1023,255,(short)0,0,(short)0,0); float p = a.getAnchorHeightInPoints(sheet); - assertEquals(11.953,p,0.001); + assertEquals(12.7,p,0.001); sheet.createRow(0).setHeightInPoints(14); a = new HSSFClientAnchor(0,0,1023,255,(short)0,0,(short)0,0); @@ -57,7 +57,7 @@ public class TestHSSFClientAnchor extends TestCase sheet.createRow(0).setHeightInPoints(12); a = new HSSFClientAnchor(0,127,1023,127,(short)0,0,(short)0,1); p = a.getAnchorHeightInPoints(sheet); - assertEquals(12.0,p,0.001); + assertEquals(12.372,p,0.001); } @@ -96,7 +96,7 @@ public class TestHSSFClientAnchor extends TestCase new HSSFClientAnchor( 0 , 128 , 0 , 128 ,(short)0, 1,(short)1, 3), new HSSFClientAnchor( 0 , 0 , 0 , 128 ,(short)0, 1,(short)1, 3), }; - float[] ref = {24.0f, 18.0f, 24.0f, 30.0f}; + float[] ref = {25.5f, 19.125f, 25.5f, 31.875f}; for (int i = 0; i < anchor.length; i++) { float height = anchor[i].getAnchorHeightInPoints(sheet); assertEquals(ref[i], height, 0); diff --git a/src/testcases/org/apache/poi/hssf/usermodel/TestHSSFSheetSetOrder.java b/src/testcases/org/apache/poi/hssf/usermodel/TestHSSFName.java old mode 100644 new mode 100755 similarity index 50% rename from src/testcases/org/apache/poi/hssf/usermodel/TestHSSFSheetSetOrder.java rename to src/testcases/org/apache/poi/hssf/usermodel/TestHSSFName.java index 974011c28..56bd25b34 --- a/src/testcases/org/apache/poi/hssf/usermodel/TestHSSFSheetSetOrder.java +++ b/src/testcases/org/apache/poi/hssf/usermodel/TestHSSFName.java @@ -1,4 +1,3 @@ - /* ==================================================================== Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE file distributed with @@ -15,52 +14,35 @@ See the License for the specific language governing permissions and limitations under the License. ==================================================================== */ - package org.apache.poi.hssf.usermodel; -import junit.framework.TestCase; +import java.util.Date; +import java.util.GregorianCalendar; +import junit.framework.AssertionFailedError; +import org.apache.poi.hssf.HSSFITestDataProvider; import org.apache.poi.hssf.model.Sheet; +import org.apache.poi.hssf.record.DBCellRecord; +import org.apache.poi.hssf.record.FormulaRecord; +import org.apache.poi.hssf.record.Record; +import org.apache.poi.hssf.record.StringRecord; +import org.apache.poi.ss.usermodel.ErrorConstants; +import org.apache.poi.ss.usermodel.BaseTestCell; +import org.apache.poi.ss.usermodel.BaseTestNamedRange; /** -* Tests HSSFWorkbook method setSheetOrder() -* -* -* @author Ruel Loehr (loehr1 at us.ibm.com) -*/ - -public class TestHSSFSheetSetOrder - extends TestCase -{ - public TestHSSFSheetSetOrder(String s) - { - super(s); - } - - /** - * Test the sheet set order method - */ - - public void testBackupRecord() - throws Exception - { - HSSFWorkbook wb = new HSSFWorkbook(); - - for (int i=0; i < 10; i++) - { - HSSFSheet s = wb.createSheet("Sheet " +i); - Sheet sheet = s.getSheet(); - } - - wb.getWorkbook().setSheetOrder("Sheet 6", 0); - wb.getWorkbook().setSheetOrder("Sheet 3", 7); - wb.getWorkbook().setSheetOrder("Sheet 1", 9); - - - } - - -} + * Tests various functionality having to do with {@link org.apache.poi.hssf.usermodel.HSSFCell}. For instance support for + * particular datatypes, etc. + * @author Andrew C. Oliver (andy at superlinksoftware dot com) + * @author Dan Sherman (dsherman at isisph.com) + * @author Alex Jacoby (ajacoby at gmail.com) + */ +public final class TestHSSFName extends BaseTestNamedRange { + @Override + protected HSSFITestDataProvider getTestDataProvider(){ + return HSSFITestDataProvider.getInstance(); + } +} \ No newline at end of file diff --git a/src/testcases/org/apache/poi/hssf/usermodel/TestHSSFRow.java b/src/testcases/org/apache/poi/hssf/usermodel/TestHSSFRow.java index 444eef108..1b63f9f23 100644 --- a/src/testcases/org/apache/poi/hssf/usermodel/TestHSSFRow.java +++ b/src/testcases/org/apache/poi/hssf/usermodel/TestHSSFRow.java @@ -21,36 +21,31 @@ import junit.framework.AssertionFailedError; import junit.framework.TestCase; import org.apache.poi.hssf.HSSFTestDataSamples; +import org.apache.poi.hssf.HSSFITestDataProvider; import org.apache.poi.hssf.record.BlankRecord; import org.apache.poi.hssf.record.RowRecord; +import org.apache.poi.ss.usermodel.BaseTestRow; /** * Test HSSFRow is okay. * * @author Glen Stampoultzis (glens at apache.org) */ -public final class TestHSSFRow extends TestCase { +public final class TestHSSFRow extends BaseTestRow { - public void testLastAndFirstColumns() { - HSSFWorkbook workbook = new HSSFWorkbook(); - HSSFSheet sheet = workbook.createSheet(); - HSSFRow row = sheet.createRow(0); - assertEquals(-1, row.getFirstCellNum()); - assertEquals(-1, row.getLastCellNum()); - - row.createCell(2); - assertEquals(2, row.getFirstCellNum()); - assertEquals(3, row.getLastCellNum()); - - row.createCell(1); - assertEquals(1, row.getFirstCellNum()); - assertEquals(3, row.getLastCellNum()); - - // check the exact case reported in 'bug' 43901 - notice that the cellNum is '0' based - row.createCell(3); - assertEquals(1, row.getFirstCellNum()); - assertEquals(4, row.getLastCellNum()); + @Override + protected HSSFITestDataProvider getTestDataProvider(){ + return HSSFITestDataProvider.getInstance(); } + + public void testRowBounds() { + baseTestRowBounds(RowRecord.MAX_ROW_NUMBER); + } + + public void testCellBounds() { + baseTestCellBounds(HSSFCell.LAST_COLUMN_NUMBER); + } + public void testLastAndFirstColumns_bug46654() { int ROW_IX = 10; int COL_IX = 3; @@ -78,67 +73,6 @@ public final class TestHSSFRow extends TestCase { assertEquals(-1, row.getLastCellNum()); } - /** - * Make sure that there is no cross-talk between rows especially with getFirstCellNum and getLastCellNum - * This test was added in response to bug report 44987. - */ - public void testBoundsInMultipleRows() { - HSSFWorkbook workbook = new HSSFWorkbook(); - HSSFSheet sheet = workbook.createSheet(); - HSSFRow rowA = sheet.createRow(0); - - rowA.createCell(10); - rowA.createCell(5); - assertEquals(5, rowA.getFirstCellNum()); - assertEquals(11, rowA.getLastCellNum()); - - HSSFRow rowB = sheet.createRow(1); - rowB.createCell(15); - rowB.createCell(30); - assertEquals(15, rowB.getFirstCellNum()); - assertEquals(31, rowB.getLastCellNum()); - - assertEquals(5, rowA.getFirstCellNum()); - assertEquals(11, rowA.getLastCellNum()); - rowA.createCell(50); - assertEquals(51, rowA.getLastCellNum()); - - assertEquals(31, rowB.getLastCellNum()); - } - - public void testRemoveCell() { - HSSFWorkbook workbook = new HSSFWorkbook(); - HSSFSheet sheet = workbook.createSheet(); - HSSFRow row = sheet.createRow(0); - assertEquals(-1, row.getLastCellNum()); - assertEquals(-1, row.getFirstCellNum()); - row.createCell(1); - assertEquals(2, row.getLastCellNum()); - assertEquals(1, row.getFirstCellNum()); - row.createCell(3); - assertEquals(4, row.getLastCellNum()); - assertEquals(1, row.getFirstCellNum()); - row.removeCell(row.getCell(3)); - assertEquals(2, row.getLastCellNum()); - assertEquals(1, row.getFirstCellNum()); - row.removeCell(row.getCell(1)); - assertEquals(-1, row.getLastCellNum()); - assertEquals(-1, row.getFirstCellNum()); - - // all cells on this row have been removed - // so check the row record actually writes it out as 0's - byte[] data = new byte[100]; - row.getRowRecord().serialize(0, data); - assertEquals(0, data[6]); - assertEquals(0, data[8]); - - workbook = HSSFTestDataSamples.writeOutAndReadBack(workbook); - sheet = workbook.getSheetAt(0); - - assertEquals(-1, sheet.getRow(0).getLastCellNum()); - assertEquals(-1, sheet.getRow(0).getFirstCellNum()); - } - public void testMoveCell() { HSSFWorkbook workbook = new HSSFWorkbook(); HSSFSheet sheet = workbook.createSheet(); @@ -184,149 +118,4 @@ public final class TestHSSFRow extends TestCase { assertEquals(2, row.getFirstCellNum()); assertEquals(6, row.getLastCellNum()); } - - public void testRowBounds() { - HSSFWorkbook workbook = new HSSFWorkbook(); - HSSFSheet sheet = workbook.createSheet(); - //Test low row bound - sheet.createRow(0); - //Test low row bound exception - try { - sheet.createRow(-1); - fail("IndexOutOfBoundsException should have been thrown"); - } catch (IllegalArgumentException e) { - // expected during successful test - assertEquals("Invalid row number (-1) outside allowable range (0..65535)", e.getMessage()); - } - - //Test high row bound - sheet.createRow(65535); - //Test high row bound exception - try { - sheet.createRow(65536); - fail("IndexOutOfBoundsException should have been thrown"); - } catch (IllegalArgumentException e) { - // expected during successful test - assertEquals("Invalid row number (65536) outside allowable range (0..65535)", e.getMessage()); - } - } - - /** - * Prior to patch 43901, POI was producing files with the wrong last-column - * number on the row - */ - public void testLastCellNumIsCorrectAfterAddCell_bug43901(){ - HSSFWorkbook book = new HSSFWorkbook(); - HSSFSheet sheet = book.createSheet("test"); - HSSFRow row = sheet.createRow(0); - - // New row has last col -1 - assertEquals(-1, row.getLastCellNum()); - if(row.getLastCellNum() == 0) { - fail("Identified bug 43901"); - } - - // Create two cells, will return one higher - // than that for the last number - row.createCell(0); - assertEquals(1, row.getLastCellNum()); - row.createCell(255); - assertEquals(256, row.getLastCellNum()); - } - - /** - * Tests for the missing/blank cell policy stuff - */ - public void testGetCellPolicy() { - HSSFWorkbook book = new HSSFWorkbook(); - HSSFSheet sheet = book.createSheet("test"); - HSSFRow row = sheet.createRow(0); - - // 0 -> string - // 1 -> num - // 2 missing - // 3 missing - // 4 -> blank - // 5 -> num - row.createCell(0).setCellValue(new HSSFRichTextString("test")); - row.createCell(1).setCellValue(3.2); - row.createCell(4, HSSFCell.CELL_TYPE_BLANK); - row.createCell(5).setCellValue(4); - - // First up, no policy given, uses default - assertEquals(HSSFCell.CELL_TYPE_STRING, row.getCell(0).getCellType()); - assertEquals(HSSFCell.CELL_TYPE_NUMERIC, row.getCell(1).getCellType()); - assertEquals(null, row.getCell(2)); - assertEquals(null, row.getCell(3)); - assertEquals(HSSFCell.CELL_TYPE_BLANK, row.getCell(4).getCellType()); - assertEquals(HSSFCell.CELL_TYPE_NUMERIC, row.getCell(5).getCellType()); - - // RETURN_NULL_AND_BLANK - same as default - assertEquals(HSSFCell.CELL_TYPE_STRING, row.getCell(0, HSSFRow.RETURN_NULL_AND_BLANK).getCellType()); - assertEquals(HSSFCell.CELL_TYPE_NUMERIC, row.getCell(1, HSSFRow.RETURN_NULL_AND_BLANK).getCellType()); - assertEquals(null, row.getCell(2, HSSFRow.RETURN_NULL_AND_BLANK)); - assertEquals(null, row.getCell(3, HSSFRow.RETURN_NULL_AND_BLANK)); - assertEquals(HSSFCell.CELL_TYPE_BLANK, row.getCell(4, HSSFRow.RETURN_NULL_AND_BLANK).getCellType()); - assertEquals(HSSFCell.CELL_TYPE_NUMERIC, row.getCell(5, HSSFRow.RETURN_NULL_AND_BLANK).getCellType()); - - // RETURN_BLANK_AS_NULL - nearly the same - assertEquals(HSSFCell.CELL_TYPE_STRING, row.getCell(0, HSSFRow.RETURN_BLANK_AS_NULL).getCellType()); - assertEquals(HSSFCell.CELL_TYPE_NUMERIC, row.getCell(1, HSSFRow.RETURN_BLANK_AS_NULL).getCellType()); - assertEquals(null, row.getCell(2, HSSFRow.RETURN_BLANK_AS_NULL)); - assertEquals(null, row.getCell(3, HSSFRow.RETURN_BLANK_AS_NULL)); - assertEquals(null, row.getCell(4, HSSFRow.RETURN_BLANK_AS_NULL)); - assertEquals(HSSFCell.CELL_TYPE_NUMERIC, row.getCell(5, HSSFRow.RETURN_BLANK_AS_NULL).getCellType()); - - // CREATE_NULL_AS_BLANK - creates as needed - assertEquals(HSSFCell.CELL_TYPE_STRING, row.getCell(0, HSSFRow.CREATE_NULL_AS_BLANK).getCellType()); - assertEquals(HSSFCell.CELL_TYPE_NUMERIC, row.getCell(1, HSSFRow.CREATE_NULL_AS_BLANK).getCellType()); - assertEquals(HSSFCell.CELL_TYPE_BLANK, row.getCell(2, HSSFRow.CREATE_NULL_AS_BLANK).getCellType()); - assertEquals(HSSFCell.CELL_TYPE_BLANK, row.getCell(3, HSSFRow.CREATE_NULL_AS_BLANK).getCellType()); - assertEquals(HSSFCell.CELL_TYPE_BLANK, row.getCell(4, HSSFRow.CREATE_NULL_AS_BLANK).getCellType()); - assertEquals(HSSFCell.CELL_TYPE_NUMERIC, row.getCell(5, HSSFRow.CREATE_NULL_AS_BLANK).getCellType()); - - // Check created ones get the right column - assertEquals(0, row.getCell(0, HSSFRow.CREATE_NULL_AS_BLANK).getColumnIndex()); - assertEquals(1, row.getCell(1, HSSFRow.CREATE_NULL_AS_BLANK).getColumnIndex()); - assertEquals(2, row.getCell(2, HSSFRow.CREATE_NULL_AS_BLANK).getColumnIndex()); - assertEquals(3, row.getCell(3, HSSFRow.CREATE_NULL_AS_BLANK).getColumnIndex()); - assertEquals(4, row.getCell(4, HSSFRow.CREATE_NULL_AS_BLANK).getColumnIndex()); - assertEquals(5, row.getCell(5, HSSFRow.CREATE_NULL_AS_BLANK).getColumnIndex()); - - - // Now change the cell policy on the workbook, check - // that that is now used if no policy given - book.setMissingCellPolicy(HSSFRow.RETURN_BLANK_AS_NULL); - - assertEquals(HSSFCell.CELL_TYPE_STRING, row.getCell(0).getCellType()); - assertEquals(HSSFCell.CELL_TYPE_NUMERIC, row.getCell(1).getCellType()); - assertEquals(null, row.getCell(2)); - assertEquals(null, row.getCell(3)); - assertEquals(null, row.getCell(4)); - assertEquals(HSSFCell.CELL_TYPE_NUMERIC, row.getCell(5).getCellType()); - } - - public void testRowHeight() { - HSSFWorkbook workbook = new HSSFWorkbook(); - HSSFSheet sheet = workbook.createSheet(); - HSSFRow row1 = sheet.createRow(0); - - assertEquals(0xFF, row1.getHeight()); - assertEquals(sheet.getDefaultRowHeight(), row1.getHeight()); - - HSSFRow row2 = sheet.createRow(1); - row2.setHeight((short)400); - - assertEquals(400, row2.getHeight()); - - workbook = HSSFTestDataSamples.writeOutAndReadBack(workbook); - sheet = workbook.getSheetAt(0); - - row1 = sheet.getRow(0); - assertEquals(0xFF, row1.getHeight()); - assertEquals(sheet.getDefaultRowHeight(), row1.getHeight()); - - row2 = sheet.getRow(1); - assertEquals(400, row2.getHeight()); - } } diff --git a/src/testcases/org/apache/poi/hssf/usermodel/TestHSSFSheet.java b/src/testcases/org/apache/poi/hssf/usermodel/TestHSSFSheet.java index 446034ebf..65f2f7689 100644 --- a/src/testcases/org/apache/poi/hssf/usermodel/TestHSSFSheet.java +++ b/src/testcases/org/apache/poi/hssf/usermodel/TestHSSFSheet.java @@ -27,11 +27,13 @@ import junit.framework.AssertionFailedError; import junit.framework.TestCase; import org.apache.poi.hssf.HSSFTestDataSamples; +import org.apache.poi.hssf.HSSFITestDataProvider; import org.apache.poi.hssf.model.Sheet; import org.apache.poi.hssf.model.DrawingManager2; import org.apache.poi.hssf.record.*; import org.apache.poi.ss.util.Region; import org.apache.poi.ss.util.CellRangeAddress; +import org.apache.poi.ss.usermodel.BaseTestSheet; import org.apache.poi.ddf.EscherDgRecord; /** @@ -41,10 +43,15 @@ import org.apache.poi.ddf.EscherDgRecord; * @author Glen Stampoultzis (glens at apache.org) * @author Andrew C. Oliver (acoliver apache org) */ -public final class TestHSSFSheet extends TestCase { +public final class TestHSSFSheet extends BaseTestSheet { - private static HSSFWorkbook openSample(String sampleFileName) { - return HSSFTestDataSamples.openSampleWorkbook(sampleFileName); + @Override + protected HSSFITestDataProvider getTestDataProvider(){ + return HSSFITestDataProvider.getInstance(); + } + + public void testTestGetSetMargin() { + baseTestGetSetMargin(new double[]{0.75, 0.75, 1.0, 1.0, 0.3, 0.3}); } /** @@ -140,138 +147,11 @@ public final class TestHSSFSheet extends TestCase { assertEquals(true, s.getRowSumsRight()); } - public void testReadBooleans() { - HSSFWorkbook workbook = new HSSFWorkbook(); - HSSFSheet sheet = workbook.createSheet("Test boolean"); - HSSFRow row = sheet.createRow(2); - HSSFCell cell = row.createCell(9); - cell.setCellValue(true); - cell = row.createCell(11); - cell.setCellValue(true); - - workbook = HSSFTestDataSamples.writeOutAndReadBack(workbook); - - sheet = workbook.getSheetAt(0); - row = sheet.getRow(2); - assertNotNull(row); - assertEquals(2, row.getPhysicalNumberOfCells()); - } - - public void testRemoveRow() { - HSSFWorkbook workbook = new HSSFWorkbook(); - HSSFSheet sheet = workbook.createSheet("Test boolean"); - HSSFRow row = sheet.createRow(2); - sheet.removeRow(row); - } - - public void testRemoveZeroRow() { - HSSFWorkbook workbook = new HSSFWorkbook(); - HSSFSheet sheet = workbook.createSheet("Sheet1"); - HSSFRow row = sheet.createRow(0); - try { - sheet.removeRow(row); - } catch (IllegalArgumentException e) { - if (e.getMessage().equals("Invalid row number (-1) outside allowable range (0..65535)")) { - throw new AssertionFailedError("Identified bug 45367"); - } - throw e; - } - } - - public void testCloneSheet() { - HSSFWorkbook workbook = new HSSFWorkbook(); - HSSFSheet sheet = workbook.createSheet("Test Clone"); - HSSFRow row = sheet.createRow(0); - HSSFCell cell = row.createCell(0); - HSSFCell cell2 = row.createCell(1); - cell.setCellValue(new HSSFRichTextString("clone_test")); - cell2.setCellFormula("sin(1)"); - - HSSFSheet clonedSheet = workbook.cloneSheet(0); - HSSFRow clonedRow = clonedSheet.getRow(0); - - //Check for a good clone - assertEquals(clonedRow.getCell(0).getRichStringCellValue().getString(), "clone_test"); - - //Check that the cells are not somehow linked - cell.setCellValue(new HSSFRichTextString("Difference Check")); - cell2.setCellFormula("cos(2)"); - if ("Difference Check".equals(clonedRow.getCell(0).getRichStringCellValue().getString())) { - fail("string cell not properly cloned"); - } - if ("COS(2)".equals(clonedRow.getCell(1).getCellFormula())) { - fail("formula cell not properly cloned"); - } - assertEquals(clonedRow.getCell(0).getRichStringCellValue().getString(), "clone_test"); - assertEquals(clonedRow.getCell(1).getCellFormula(), "SIN(1)"); - } - - /** tests that the sheet name for multiple clones of the same sheet is unique - * BUG 37416 - */ - public void testCloneSheetMultipleTimes() { - HSSFWorkbook workbook = new HSSFWorkbook(); - HSSFSheet sheet = workbook.createSheet("Test Clone"); - HSSFRow row = sheet.createRow(0); - HSSFCell cell = row.createCell(0); - cell.setCellValue(new HSSFRichTextString("clone_test")); - //Clone the sheet multiple times - workbook.cloneSheet(0); - workbook.cloneSheet(0); - - assertNotNull(workbook.getSheet("Test Clone")); - assertNotNull(workbook.getSheet("Test Clone (2)")); - assertEquals("Test Clone (3)", workbook.getSheetName(2)); - assertNotNull(workbook.getSheet("Test Clone (3)")); - - workbook.removeSheetAt(0); - workbook.removeSheetAt(0); - workbook.removeSheetAt(0); - workbook.createSheet("abc ( 123)"); - workbook.cloneSheet(0); - assertEquals("abc (124)", workbook.getSheetName(1)); - } - - /** - * Setting landscape and portrait stuff on new sheets - */ - public void testPrintSetupLandscapeNew() throws Exception { - HSSFWorkbook workbook = new HSSFWorkbook(); - HSSFSheet sheetL = workbook.createSheet("LandscapeS"); - HSSFSheet sheetP = workbook.createSheet("LandscapeP"); - - // Check two aspects of the print setup - assertFalse(sheetL.getPrintSetup().getLandscape()); - assertFalse(sheetP.getPrintSetup().getLandscape()); - assertEquals(0, sheetL.getPrintSetup().getCopies()); - assertEquals(0, sheetP.getPrintSetup().getCopies()); - - // Change one on each - sheetL.getPrintSetup().setLandscape(true); - sheetP.getPrintSetup().setCopies((short)3); - - // Check taken - assertTrue(sheetL.getPrintSetup().getLandscape()); - assertFalse(sheetP.getPrintSetup().getLandscape()); - assertEquals(0, sheetL.getPrintSetup().getCopies()); - assertEquals(3, sheetP.getPrintSetup().getCopies()); - - // Save and re-load, and check still there - ByteArrayOutputStream baos = new ByteArrayOutputStream(); - workbook.write(baos); - workbook = new HSSFWorkbook(new ByteArrayInputStream(baos.toByteArray())); - - assertTrue(sheetL.getPrintSetup().getLandscape()); - assertFalse(sheetP.getPrintSetup().getLandscape()); - assertEquals(0, sheetL.getPrintSetup().getCopies()); - assertEquals(3, sheetP.getPrintSetup().getCopies()); - } - /** * Setting landscape and portrait stuff on existing sheets */ public void testPrintSetupLandscapeExisting() { - HSSFWorkbook workbook = openSample("SimpleWithPageBreaks.xls"); + HSSFWorkbook workbook = getTestDataProvider().openSampleWorkbook("SimpleWithPageBreaks.xls"); assertEquals(3, workbook.getNumberOfSheets()); @@ -352,7 +232,7 @@ public final class TestHSSFSheet extends TestCase { } public void testGroupRowsExisting() { - HSSFWorkbook workbook = openSample("NoGutsRecords.xls"); + HSSFWorkbook workbook = getTestDataProvider().openSampleWorkbook("NoGutsRecords.xls"); HSSFSheet s = workbook.getSheetAt(0); HSSFRow r1 = s.getRow(0); @@ -403,8 +283,8 @@ public final class TestHSSFSheet extends TestCase { } public void testGetDrawings() { - HSSFWorkbook wb1c = openSample("WithChart.xls"); - HSSFWorkbook wb2c = openSample("WithTwoCharts.xls"); + HSSFWorkbook wb1c = getTestDataProvider().openSampleWorkbook("WithChart.xls"); + HSSFWorkbook wb2c = getTestDataProvider().openSampleWorkbook("WithTwoCharts.xls"); // 1 chart sheet -> data on 1st, chart on 2nd assertNotNull(wb1c.getSheetAt(0).getDrawingPatriarch()); @@ -476,94 +356,12 @@ public final class TestHSSFSheet extends TestCase { * When removing one merged region, it would break * */ - public void testRemoveMerged() { - HSSFWorkbook wb = new HSSFWorkbook(); - HSSFSheet sheet = wb.createSheet(); - CellRangeAddress region = new CellRangeAddress(0, 1, 0, 1); - sheet.addMergedRegion(region); - region = new CellRangeAddress(1, 2, 0, 1); - sheet.addMergedRegion(region); - - sheet.removeMergedRegion(0); - - region = sheet.getMergedRegion(0); - assertEquals("Left over region should be starting at row 1", 1, region.getFirstRow()); - - sheet.removeMergedRegion(0); - - assertEquals("there should be no merged regions left!", 0, sheet.getNumMergedRegions()); - - //an, add, remove, get(0) would null pointer - sheet.addMergedRegion(region); - assertEquals("there should now be one merged region!", 1, sheet.getNumMergedRegions()); - sheet.removeMergedRegion(0); - assertEquals("there should now be zero merged regions!", 0, sheet.getNumMergedRegions()); - //add it again! - region.setLastRow(4); - - sheet.addMergedRegion(region); - assertEquals("there should now be one merged region!", 1, sheet.getNumMergedRegions()); - - //should exist now! - assertTrue("there isn't more than one merged region in there", 1 <= sheet.getNumMergedRegions()); - region = sheet.getMergedRegion(0); - assertEquals("the merged row to doesnt match the one we put in ", 4, region.getLastRow()); - } - - public void testShiftMerged() { - HSSFWorkbook wb = new HSSFWorkbook(); - HSSFSheet sheet = wb.createSheet(); - HSSFRow row = sheet.createRow(0); - HSSFCell cell = row.createCell(0); - cell.setCellValue(new HSSFRichTextString("first row, first cell")); - - row = sheet.createRow(1); - cell = row.createCell(1); - cell.setCellValue(new HSSFRichTextString("second row, second cell")); - - CellRangeAddress region = new CellRangeAddress(1, 1, 0, 1); - sheet.addMergedRegion(region); - - sheet.shiftRows(1, 1, 1); - - region = sheet.getMergedRegion(0); - assertEquals("Merged region not moved over to row 2", 2, region.getFirstRow()); - } - - /** - * Tests the display of gridlines, formulas, and rowcolheadings. - * @author Shawn Laubach (slaubach at apache dot org) - */ - public void testDisplayOptions() { - HSSFWorkbook wb = new HSSFWorkbook(); - HSSFSheet sheet = wb.createSheet(); - - assertEquals(sheet.isDisplayGridlines(), true); - assertEquals(sheet.isDisplayRowColHeadings(), true); - assertEquals(sheet.isDisplayFormulas(), false); - assertEquals(sheet.isDisplayZeros(), true); - - sheet.setDisplayGridlines(false); - sheet.setDisplayRowColHeadings(false); - sheet.setDisplayFormulas(true); - sheet.setDisplayZeros(false); - - wb = HSSFTestDataSamples.writeOutAndReadBack(wb); - sheet = wb.getSheetAt(0); - - assertEquals(sheet.isDisplayGridlines(), false); - assertEquals(sheet.isDisplayRowColHeadings(), false); - assertEquals(sheet.isDisplayFormulas(), true); - assertEquals(sheet.isDisplayZeros(), false); - } - - /** * Make sure the excel file loads work * */ public void testPageBreakFiles() { - HSSFWorkbook wb = openSample("SimpleWithPageBreaks.xls"); + HSSFWorkbook wb = getTestDataProvider().openSampleWorkbook("SimpleWithPageBreaks.xls"); HSSFSheet sheet = wb.getSheetAt(0); assertNotNull(sheet); @@ -591,7 +389,7 @@ public final class TestHSSFSheet extends TestCase { } public void testDBCSName () { - HSSFWorkbook wb = openSample("DBCSSheetName.xls"); + HSSFWorkbook wb = getTestDataProvider().openSampleWorkbook("DBCSSheetName.xls"); wb.getSheetAt(1); assertEquals ("DBCS Sheet Name 2", wb.getSheetName(1),"\u090f\u0915" ); assertEquals("DBCS Sheet Name 1", wb.getSheetName(0),"\u091c\u093e"); @@ -603,7 +401,7 @@ public final class TestHSSFSheet extends TestCase { * of the sheet when it is first opened. */ public void testTopRow() { - HSSFWorkbook wb = openSample("SimpleWithPageBreaks.xls"); + HSSFWorkbook wb = getTestDataProvider().openSampleWorkbook("SimpleWithPageBreaks.xls"); HSSFSheet sheet = wb.getSheetAt(0); assertNotNull(sheet); @@ -630,18 +428,6 @@ public final class TestHSSFSheet extends TestCase { assertEquals("formula", r.getCell(1).getCellFormula(), "A1*2"); } - /** test that new default column styles get applied */ - public void testDefaultColumnStyle() { - HSSFWorkbook wb = new HSSFWorkbook(); - HSSFCellStyle style = wb.createCellStyle(); - HSSFSheet s = wb.createSheet(); - s.setDefaultColumnStyle((short) 0, style); - HSSFRow r = s.createRow(0); - HSSFCell c = r.createCell(0); - assertEquals("style should match", style.getIndex(), c.getCellStyle().getIndex()); - } - - /** * */ @@ -656,7 +442,7 @@ public final class TestHSSFSheet extends TestCase { workbook = HSSFTestDataSamples.writeOutAndReadBack(workbook); //try adding empty rows in an existing worksheet - workbook = openSample("Simple.xls"); + workbook = getTestDataProvider().openSampleWorkbook("Simple.xls"); sheet = workbook.getSheetAt(0); for (int i = 3; i < 10; i++) sheet.createRow(i); @@ -665,7 +451,7 @@ public final class TestHSSFSheet extends TestCase { } public void testAutoSizeColumn() { - HSSFWorkbook wb = openSample("43902.xls"); + HSSFWorkbook wb = getTestDataProvider().openSampleWorkbook("43902.xls"); String sheetName = "my sheet"; HSSFSheet sheet = wb.getSheet(sheetName); @@ -709,7 +495,7 @@ public final class TestHSSFSheet extends TestCase { * Setting ForceFormulaRecalculation on sheets */ public void testForceRecalculation() throws Exception { - HSSFWorkbook workbook = openSample("UncalcedRecord.xls"); + HSSFWorkbook workbook = getTestDataProvider().openSampleWorkbook("UncalcedRecord.xls"); HSSFSheet sheet = workbook.getSheetAt(0); HSSFSheet sheet2 = workbook.getSheetAt(0); @@ -778,7 +564,7 @@ public final class TestHSSFSheet extends TestCase { public void testColumnWidth() { //check we can correctly read column widths from a reference workbook - HSSFWorkbook wb = openSample("colwidth.xls"); + HSSFWorkbook wb = getTestDataProvider().openSampleWorkbook("colwidth.xls"); //reference values int[] ref = {365, 548, 731, 914, 1097, 1280, 1462, 1645, 1828, 2011, 2194, 2377, 2560, 2742, 2925, 3108, 3291, 3474, 3657}; @@ -950,4 +736,5 @@ public final class TestHSSFSheet extends TestCase { assertFalse(cs.getFont(wbComplex).getItalic()); assertEquals(HSSFFont.BOLDWEIGHT_BOLD, cs.getFont(wbComplex).getBoldweight()); } + } diff --git a/src/testcases/org/apache/poi/hssf/usermodel/TestHSSFSheetOrder.java b/src/testcases/org/apache/poi/hssf/usermodel/TestHSSFSheetOrder.java deleted file mode 100644 index 450a4e829..000000000 --- a/src/testcases/org/apache/poi/hssf/usermodel/TestHSSFSheetOrder.java +++ /dev/null @@ -1,113 +0,0 @@ - -/* ==================================================================== - 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.hssf.usermodel; - -import java.io.ByteArrayInputStream; -import java.io.ByteArrayOutputStream; - -import junit.framework.TestCase; - -import org.apache.poi.hssf.model.Sheet; - -/** - * Tests HSSFWorkbook method setSheetOrder() - * - * - * @author Ruel Loehr (loehr1 at us.ibm.com) - */ - -public class TestHSSFSheetOrder - extends TestCase -{ - public TestHSSFSheetOrder(String s) - { - super(s); - } - - /** - * Test the sheet set order method - */ - - public void testBackupRecord() - throws Exception - { - HSSFWorkbook wb = new HSSFWorkbook(); - - for (int i=0; i < 10; i++) - { - HSSFSheet s = wb.createSheet("Sheet " + i); - Sheet sheet = s.getSheet(); - } - - // Check the initial order - assertEquals(0, wb.getSheetIndex("Sheet 0")); - assertEquals(1, wb.getSheetIndex("Sheet 1")); - assertEquals(2, wb.getSheetIndex("Sheet 2")); - assertEquals(3, wb.getSheetIndex("Sheet 3")); - assertEquals(4, wb.getSheetIndex("Sheet 4")); - assertEquals(5, wb.getSheetIndex("Sheet 5")); - assertEquals(6, wb.getSheetIndex("Sheet 6")); - assertEquals(7, wb.getSheetIndex("Sheet 7")); - assertEquals(8, wb.getSheetIndex("Sheet 8")); - assertEquals(9, wb.getSheetIndex("Sheet 9")); - - // Change - wb.getWorkbook().setSheetOrder("Sheet 6", 0); - wb.getWorkbook().setSheetOrder("Sheet 3", 7); - wb.getWorkbook().setSheetOrder("Sheet 1", 9); - - // Check they're currently right - assertEquals(0, wb.getSheetIndex("Sheet 6")); - assertEquals(1, wb.getSheetIndex("Sheet 0")); - assertEquals(2, wb.getSheetIndex("Sheet 2")); - assertEquals(3, wb.getSheetIndex("Sheet 4")); - assertEquals(4, wb.getSheetIndex("Sheet 5")); - assertEquals(5, wb.getSheetIndex("Sheet 7")); - assertEquals(6, wb.getSheetIndex("Sheet 3")); - assertEquals(7, wb.getSheetIndex("Sheet 8")); - assertEquals(8, wb.getSheetIndex("Sheet 9")); - assertEquals(9, wb.getSheetIndex("Sheet 1")); - - // Read it in and see if it is correct. - ByteArrayOutputStream baos = new ByteArrayOutputStream(); - wb.write(baos); - ByteArrayInputStream bais = new ByteArrayInputStream(baos.toByteArray()); - HSSFWorkbook wbr = new HSSFWorkbook(bais); - - assertEquals(0, wbr.getSheetIndex("Sheet 6")); - assertEquals(1, wbr.getSheetIndex("Sheet 0")); - assertEquals(2, wbr.getSheetIndex("Sheet 2")); - assertEquals(3, wbr.getSheetIndex("Sheet 4")); - assertEquals(4, wbr.getSheetIndex("Sheet 5")); - assertEquals(5, wbr.getSheetIndex("Sheet 7")); - assertEquals(6, wbr.getSheetIndex("Sheet 3")); - assertEquals(7, wbr.getSheetIndex("Sheet 8")); - assertEquals(8, wbr.getSheetIndex("Sheet 9")); - assertEquals(9, wbr.getSheetIndex("Sheet 1")); - - // Now get the index by the sheet, not the name - for(int i=0; i<10; i++) { - HSSFSheet s = wbr.getSheetAt(i); - assertEquals(i, wbr.getSheetIndex(s)); - } - } -} - - diff --git a/src/testcases/org/apache/poi/hssf/usermodel/TestHSSFWorkbook.java b/src/testcases/org/apache/poi/hssf/usermodel/TestHSSFWorkbook.java index 692ca86b2..880f3ecf2 100644 --- a/src/testcases/org/apache/poi/hssf/usermodel/TestHSSFWorkbook.java +++ b/src/testcases/org/apache/poi/hssf/usermodel/TestHSSFWorkbook.java @@ -26,6 +26,7 @@ import junit.framework.AssertionFailedError; import junit.framework.TestCase; import org.apache.poi.hssf.HSSFTestDataSamples; +import org.apache.poi.hssf.HSSFITestDataProvider; import org.apache.poi.hssf.model.HSSFFormulaParser; import org.apache.poi.hssf.model.Sheet; import org.apache.poi.hssf.record.NameRecord; @@ -36,12 +37,15 @@ import org.apache.poi.hssf.record.WindowOneRecord; import org.apache.poi.hssf.record.formula.Area3DPtg; import org.apache.poi.util.LittleEndian; import org.apache.poi.util.TempFile; +import org.apache.poi.ss.usermodel.BaseTestWorkbook; + /** * Tests for {@link HSSFWorkbook} */ -public final class TestHSSFWorkbook extends TestCase { - private static HSSFWorkbook openSample(String sampleFileName) { - return HSSFTestDataSamples.openSampleWorkbook(sampleFileName); +public final class TestHSSFWorkbook extends BaseTestWorkbook { + @Override + protected HSSFITestDataProvider getTestDataProvider(){ + return HSSFITestDataProvider.getInstance(); } public void testSetRepeatingRowsAndColumns() { @@ -72,44 +76,6 @@ public final class TestHSSFWorkbook extends TestCase { } } - public void testDuplicateNames() { - HSSFWorkbook b = new HSSFWorkbook( ); - b.createSheet("Sheet1"); - b.createSheet(); - b.createSheet("name1"); - try { - b.createSheet("name1"); - fail(); - } catch (IllegalArgumentException pass) { - // expected during successful test - } - b.createSheet(); - try { - b.setSheetName(3, "name1"); - fail(); - } catch (IllegalArgumentException pass) { - // expected during successful test - } - - try { - b.setSheetName(3, "name1"); - fail(); - } catch (IllegalArgumentException pass) { - // expected during successful test - } - - b.setSheetName( 3, "name2" ); - b.setSheetName( 3, "name2" ); - b.setSheetName( 3, "name2" ); - - HSSFWorkbook c = new HSSFWorkbook( ); - c.createSheet("Sheet1"); - c.createSheet("Sheet2"); - c.createSheet("Sheet3"); - c.createSheet("Sheet4"); - - } - public void testWindowOneDefaults() { HSSFWorkbook b = new HSSFWorkbook( ); try { @@ -147,17 +113,6 @@ public final class TestHSSFWorkbook extends TestCase { assertEquals(false, w1.getHidden()); } - public void testSheetSelection() { - HSSFWorkbook b = new HSSFWorkbook(); - b.createSheet("Sheet One"); - b.createSheet("Sheet Two"); - b.setActiveSheet(1); - b.setSelectedTab(1); - b.setFirstVisibleTab(1); - assertEquals(1, b.getActiveSheetIndex()); - assertEquals(1, b.getFirstVisibleTab()); - } - public void testSheetClone() { // First up, try a simple file HSSFWorkbook b = new HSSFWorkbook(); @@ -170,7 +125,7 @@ public final class TestHSSFWorkbook extends TestCase { assertEquals(3, b.getNumberOfSheets()); // Now try a problem one with drawing records in it - b = openSample("SheetWithDrawing.xls"); + b = getTestDataProvider().openSampleWorkbook("SheetWithDrawing.xls"); assertEquals(1, b.getNumberOfSheets()); b.cloneSheet(0); assertEquals(2, b.getNumberOfSheets()); @@ -181,7 +136,7 @@ public final class TestHSSFWorkbook extends TestCase { HSSFSheet s; // Single chart, two sheets - b = openSample("44010-SingleChart.xls"); + b = getTestDataProvider().openSampleWorkbook("44010-SingleChart.xls"); assertEquals(2, b.getNumberOfSheets()); assertEquals("Graph2", b.getSheetName(1)); s = b.getSheetAt(1); @@ -197,7 +152,7 @@ public final class TestHSSFWorkbook extends TestCase { // We've now called getDrawingPatriarch() so // everything will be all screwy // So, start again - b = openSample("44010-SingleChart.xls"); + b = getTestDataProvider().openSampleWorkbook("44010-SingleChart.xls"); b = writeRead(b); assertEquals(2, b.getNumberOfSheets()); @@ -207,7 +162,7 @@ public final class TestHSSFWorkbook extends TestCase { // Two charts, three sheets - b = openSample("44010-TwoCharts.xls"); + b = getTestDataProvider().openSampleWorkbook("44010-TwoCharts.xls"); assertEquals(3, b.getNumberOfSheets()); s = b.getSheetAt(1); @@ -227,7 +182,7 @@ public final class TestHSSFWorkbook extends TestCase { // We've now called getDrawingPatriarch() so // everything will be all screwy // So, start again - b = openSample("44010-TwoCharts.xls"); + b = getTestDataProvider().openSampleWorkbook("44010-TwoCharts.xls"); b = writeRead(b); assertEquals(3, b.getNumberOfSheets()); @@ -434,7 +389,7 @@ public final class TestHSSFWorkbook extends TestCase { * that point to deleted sheets */ public void testNamesToDeleteSheets() { - HSSFWorkbook b = openSample("30978-deleted.xls"); + HSSFWorkbook b = getTestDataProvider().openSampleWorkbook("30978-deleted.xls"); assertEquals(3, b.getNumberOfNames()); // Sheet 2 is deleted diff --git a/src/testcases/org/apache/poi/hssf/usermodel/TestWorkbook.java b/src/testcases/org/apache/poi/hssf/usermodel/TestWorkbook.java index cfcb3670e..786838122 100644 --- a/src/testcases/org/apache/poi/hssf/usermodel/TestWorkbook.java +++ b/src/testcases/org/apache/poi/hssf/usermodel/TestWorkbook.java @@ -546,29 +546,4 @@ public final class TestWorkbook extends TestCase { assertTrue("file exists",file.exists()); } - public void testParentReferences(){ - HSSFWorkbook workbook = new HSSFWorkbook(); - HSSFSheet sheet = workbook.createSheet(); - assertSame(workbook, sheet.getWorkbook()); - - HSSFRow row = sheet.createRow(0); - assertSame(sheet, row.getSheet()); - - HSSFCell cell = row.createCell(1); - assertSame(sheet, cell.getSheet()); - assertSame(row, cell.getRow()); - - workbook = HSSFTestDataSamples.writeOutAndReadBack(workbook); - sheet = workbook.getSheetAt(0); - assertSame(workbook, sheet.getWorkbook()); - - row = sheet.getRow(0); - assertSame(sheet, row.getSheet()); - - cell = row.getCell(1); - assertSame(sheet, cell.getSheet()); - assertSame(row, cell.getRow()); - - - } } diff --git a/src/testcases/org/apache/poi/ss/usermodel/BaseTestCell.java b/src/testcases/org/apache/poi/ss/usermodel/BaseTestCell.java index 9d7c78fb0..c5259feef 100755 --- a/src/testcases/org/apache/poi/ss/usermodel/BaseTestCell.java +++ b/src/testcases/org/apache/poi/ss/usermodel/BaseTestCell.java @@ -21,9 +21,12 @@ import junit.framework.TestCase; import junit.framework.AssertionFailedError; import org.apache.poi.ss.ITestDataProvider; +import java.util.Date; +import java.util.Calendar; + /** - * Common superclass for testing {@link org.apache.poi.xssf.usermodel.XSSFCell} and - * {@link org.apache.poi.hssf.usermodel.HSSFCell} + * Common superclass for testing implementatiosn of + * {@link org.apache.poi.ss.usermodel.Cell} */ public abstract class BaseTestCell extends TestCase { @@ -32,7 +35,7 @@ public abstract class BaseTestCell extends TestCase { */ protected abstract ITestDataProvider getTestDataProvider(); - public void baseTestSetValues() { + public void testSetValues() { Workbook book = getTestDataProvider().createWorkbook(); Sheet sheet = book.createSheet("test"); Row row = sheet.createRow(0); @@ -43,24 +46,87 @@ public abstract class BaseTestCell extends TestCase { cell.setCellValue(1.2); assertEquals(1.2, cell.getNumericCellValue(), 0.0001); assertEquals(Cell.CELL_TYPE_NUMERIC, cell.getCellType()); + assertProhibitedValueAccess(cell, Cell.CELL_TYPE_BOOLEAN, Cell.CELL_TYPE_STRING, + Cell.CELL_TYPE_FORMULA, Cell.CELL_TYPE_ERROR); cell.setCellValue(false); assertEquals(false, cell.getBooleanCellValue()); assertEquals(Cell.CELL_TYPE_BOOLEAN, cell.getCellType()); + cell.setCellValue(true); + assertEquals(true, cell.getBooleanCellValue()); + assertProhibitedValueAccess(cell, Cell.CELL_TYPE_NUMERIC, Cell.CELL_TYPE_STRING, + Cell.CELL_TYPE_FORMULA, Cell.CELL_TYPE_ERROR); cell.setCellValue(factory.createRichTextString("Foo")); assertEquals("Foo", cell.getRichStringCellValue().getString()); + assertEquals("Foo", cell.getStringCellValue()); assertEquals(Cell.CELL_TYPE_STRING, cell.getCellType()); + assertProhibitedValueAccess(cell, Cell.CELL_TYPE_NUMERIC, Cell.CELL_TYPE_BOOLEAN, + Cell.CELL_TYPE_FORMULA, Cell.CELL_TYPE_ERROR); - cell.setCellValue(factory.createRichTextString("345")); + cell.setCellValue("345"); assertEquals("345", cell.getRichStringCellValue().getString()); + assertEquals("345", cell.getStringCellValue()); assertEquals(Cell.CELL_TYPE_STRING, cell.getCellType()); + assertProhibitedValueAccess(cell, Cell.CELL_TYPE_NUMERIC, Cell.CELL_TYPE_BOOLEAN, + Cell.CELL_TYPE_FORMULA, Cell.CELL_TYPE_ERROR); + + Calendar c = Calendar.getInstance(); + c.setTimeInMillis(123456789); + cell.setCellValue(c.getTime()); + assertEquals(c.getTime().getTime(), cell.getDateCellValue().getTime()); + assertEquals(Cell.CELL_TYPE_NUMERIC, cell.getCellType()); + assertProhibitedValueAccess(cell, Cell.CELL_TYPE_BOOLEAN, Cell.CELL_TYPE_STRING, + Cell.CELL_TYPE_FORMULA, Cell.CELL_TYPE_ERROR); + + cell.setCellValue(c); + assertEquals(c.getTime().getTime(), cell.getDateCellValue().getTime()); + assertEquals(Cell.CELL_TYPE_NUMERIC, cell.getCellType()); + assertProhibitedValueAccess(cell, Cell.CELL_TYPE_BOOLEAN, Cell.CELL_TYPE_STRING, + Cell.CELL_TYPE_FORMULA, Cell.CELL_TYPE_ERROR); + + cell.setCellErrorValue(FormulaError.NA.getCode()); + assertEquals(FormulaError.NA.getCode(), cell.getErrorCellValue()); + assertEquals(Cell.CELL_TYPE_ERROR, cell.getCellType()); + assertProhibitedValueAccess(cell, Cell.CELL_TYPE_NUMERIC, Cell.CELL_TYPE_BOOLEAN, + Cell.CELL_TYPE_FORMULA, Cell.CELL_TYPE_STRING); + } + + private void assertProhibitedValueAccess(Cell cell, int ... types){ + for(int type : types){ + try { + switch (type) { + case Cell.CELL_TYPE_NUMERIC: + cell.getNumericCellValue(); + fail(); + break; + case Cell.CELL_TYPE_STRING: + cell.getStringCellValue(); + fail(); + break; + case Cell.CELL_TYPE_BOOLEAN: + cell.getBooleanCellValue(); + fail(); + break; + case Cell.CELL_TYPE_FORMULA: + cell.getCellFormula(); + fail(); + break; + case Cell.CELL_TYPE_ERROR: + cell.getErrorCellValue(); + fail(); + break; + } + } catch (IllegalStateException e){ + ; + } + } } /** * test that Boolean and Error types (BoolErrRecord) are supported properly. */ - public void baseTestBoolErr() { + public void testBoolErr() { Workbook wb = getTestDataProvider().createWorkbook(); Sheet s = wb.createSheet("testSheet1"); @@ -101,7 +167,7 @@ public abstract class BaseTestCell extends TestCase { /** * test that Cell Styles being applied to formulas remain intact */ - public void baseTestFormulaStyle() { + public void testFormulaStyle() { Workbook wb = getTestDataProvider().createWorkbook(); Sheet s = wb.createSheet("testSheet1"); @@ -142,7 +208,7 @@ public abstract class BaseTestCell extends TestCase { } /**tests the toString() method of HSSFCell*/ - public void baseTestToString() { + public void testToString() { Workbook wb = getTestDataProvider().createWorkbook(); Row r = wb.createSheet("Sheet1").createRow(0); CreationHelper factory = wb.getCreationHelper(); @@ -173,7 +239,7 @@ public abstract class BaseTestCell extends TestCase { /** * Test that setting cached formula result keeps the cell type */ - public void baseTestSetFormulaValue() { + public void testSetFormulaValue() { Workbook wb = getTestDataProvider().createWorkbook(); Sheet s = wb.createSheet(); Row r = s.createRow(0); @@ -274,4 +340,46 @@ public abstract class BaseTestCell extends TestCase { assertEquals(true, cell.getBooleanCellValue()); } + /** + * Bug 40296: HSSFCell.setCellFormula throws + * ClassCastException if cell is created using HSSFRow.createCell(short column, int type) + */ + public void test40296() { + Workbook wb = getTestDataProvider().createWorkbook(); + Sheet workSheet = wb.createSheet("Sheet1"); + Cell cell; + Row row = workSheet.createRow(0); + + cell = row.createCell(0, Cell.CELL_TYPE_NUMERIC); + cell.setCellValue(1.0); + assertEquals(Cell.CELL_TYPE_NUMERIC, cell.getCellType()); + assertEquals(1.0, cell.getNumericCellValue()); + + cell = row.createCell(1, Cell.CELL_TYPE_NUMERIC); + cell.setCellValue(2.0); + assertEquals(Cell.CELL_TYPE_NUMERIC, cell.getCellType()); + assertEquals(2.0, cell.getNumericCellValue()); + + cell = row.createCell(2, Cell.CELL_TYPE_FORMULA); + cell.setCellFormula("SUM(A1:B1)"); + assertEquals(Cell.CELL_TYPE_FORMULA, cell.getCellType()); + assertEquals("SUM(A1:B1)", cell.getCellFormula()); + + //serialize and check again + wb = getTestDataProvider().writeOutAndReadBack(wb); + row = wb.getSheetAt(0).getRow(0); + cell = row.getCell(0); + assertEquals(Cell.CELL_TYPE_NUMERIC, cell.getCellType()); + assertEquals(1.0, cell.getNumericCellValue()); + + cell = row.getCell(1); + assertEquals(Cell.CELL_TYPE_NUMERIC, cell.getCellType()); + assertEquals(2.0, cell.getNumericCellValue()); + + cell = row.getCell(2); + assertEquals(Cell.CELL_TYPE_FORMULA, cell.getCellType()); + assertEquals("SUM(A1:B1)", cell.getCellFormula()); + } + + } \ No newline at end of file diff --git a/src/testcases/org/apache/poi/ss/usermodel/BaseTestDataFormat.java b/src/testcases/org/apache/poi/ss/usermodel/BaseTestDataFormat.java index a65c73a05..bfaed8d37 100755 --- a/src/testcases/org/apache/poi/ss/usermodel/BaseTestDataFormat.java +++ b/src/testcases/org/apache/poi/ss/usermodel/BaseTestDataFormat.java @@ -23,7 +23,7 @@ import junit.framework.TestCase; import org.apache.poi.ss.ITestDataProvider; /** - * Tests for {@link org.apache.poi.xssf.usermodel.XSSFDataFormat} + * Tests of implementation of {@link DataFormat} * */ public abstract class BaseTestDataFormat extends TestCase { diff --git a/src/testcases/org/apache/poi/ss/usermodel/BaseTestNamedRange.java b/src/testcases/org/apache/poi/ss/usermodel/BaseTestNamedRange.java new file mode 100755 index 000000000..36df11b2e --- /dev/null +++ b/src/testcases/org/apache/poi/ss/usermodel/BaseTestNamedRange.java @@ -0,0 +1,173 @@ +/* ==================================================================== + 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.ss.usermodel; + +import junit.framework.TestCase; +import org.apache.poi.ss.ITestDataProvider; + +/** + * Tests of implementation of {@link org.apache.poi.ss.usermodel.Name} + * + */ +public abstract class BaseTestNamedRange extends TestCase { + + /** + * @return an object that provides test data in HSSF / XSSF specific way + */ + protected abstract ITestDataProvider getTestDataProvider(); + + public void testCreate(){ + // Create a new workbook + Workbook wb = getTestDataProvider().createWorkbook(); + Sheet sheet1 = wb.createSheet("Test1"); + Sheet sheet2 = wb.createSheet("Testing Named Ranges"); + + Name name1 = wb.createName(); + name1.setNameName("testOne"); + + //setting a duplicate name should throw IllegalArgumentException + Name name2 = wb.createName(); + try { + name2.setNameName("testOne"); + fail("expected exception"); + } catch (IllegalArgumentException e){ + assertEquals("The workbook already contains this name: testOne", e.getMessage()); + } + //the check for duplicates is case-insensitive + try { + name2.setNameName("TESTone"); + fail("expected exception"); + } catch (IllegalArgumentException e){ + assertEquals("The workbook already contains this name: TESTone", e.getMessage()); + } + + name2.setNameName("testTwo"); + + String ref1 = "Test1!$A$1:$B$1"; + name1.setRefersToFormula(ref1); + assertEquals(ref1, name1.getRefersToFormula()); + assertEquals("Test1", name1.getSheetName()); + + String ref2 = "'Testing Named Ranges'!$A$1:$B$1"; + name1.setRefersToFormula(ref2); + assertEquals("'Testing Named Ranges'!$A$1:$B$1", name1.getRefersToFormula()); + assertEquals("Testing Named Ranges", name1.getSheetName()); + + assertEquals(-1, name1.getSheetIndex()); + name1.setSheetIndex(-1); + assertEquals(-1, name1.getSheetIndex()); + try { + name1.setSheetIndex(2); + fail("should throw IllegalArgumentException"); + } catch(IllegalArgumentException e){ + assertEquals("Sheet index (2) is out of range (0..1)", e.getMessage()); + } + + name1.setSheetIndex(1); + assertEquals(1, name1.getSheetIndex()); + + //-1 means the name applies to the entire workbook + name1.setSheetIndex(-1); + assertEquals(-1, name1.getSheetIndex()); + } + + public void testUnicodeNamedRange() { + Workbook workBook = getTestDataProvider().createWorkbook(); + workBook.createSheet("Test"); + Name name = workBook.createName(); + name.setNameName("\u03B1"); + name.setRefersToFormula("Test!$D$3:$E$8"); + + + Workbook workBook2 = getTestDataProvider().writeOutAndReadBack(workBook); + Name name2 = workBook2.getNameAt(0); + + assertEquals("\u03B1", name2.getNameName()); + assertEquals("Test!$D$3:$E$8", name2.getRefersToFormula()); + } + + public void testAddRemove() { + Workbook wb = getTestDataProvider().createWorkbook(); + assertEquals(0, wb.getNumberOfNames()); + Name name1 = wb.createName(); + name1.setNameName("name1"); + assertEquals(1, wb.getNumberOfNames()); + + Name name2 = wb.createName(); + name2.setNameName("name2"); + assertEquals(2, wb.getNumberOfNames()); + + Name name3 = wb.createName(); + name3.setNameName("name3"); + assertEquals(3, wb.getNumberOfNames()); + + wb.removeName("name2"); + assertEquals(2, wb.getNumberOfNames()); + + wb.removeName(0); + assertEquals(1, wb.getNumberOfNames()); + } + + public void testScope() { + Workbook wb = getTestDataProvider().createWorkbook(); + wb.createSheet(); + wb.createSheet(); + + Name name; + + name = wb.createName(); + name.setNameName("aaa"); + name = wb.createName(); + try { + name.setNameName("aaa"); + fail("Expected exception"); + } catch(Exception e){ + assertEquals("The workbook already contains this name: aaa", e.getMessage()); + } + + name = wb.createName(); + name.setSheetIndex(0); + name.setNameName("aaa"); + name = wb.createName(); + name.setSheetIndex(0); + try { + name.setNameName("aaa"); + fail("Expected exception"); + } catch(Exception e){ + assertEquals("The sheet already contains this name: aaa", e.getMessage()); + } + + name = wb.createName(); + name.setSheetIndex(1); + name.setNameName("aaa"); + name = wb.createName(); + name.setSheetIndex(1); + try { + name.setNameName("aaa"); + fail("Expected exception"); + } catch(Exception e){ + assertEquals("The sheet already contains this name: aaa", e.getMessage()); + } + + int cnt = 0; + for (int i = 0; i < wb.getNumberOfNames(); i++) { + if("aaa".equals(wb.getNameAt(i).getNameName())) cnt++; + } + assertEquals(3, cnt); + } +} \ No newline at end of file diff --git a/src/testcases/org/apache/poi/ss/usermodel/BaseTestRow.java b/src/testcases/org/apache/poi/ss/usermodel/BaseTestRow.java new file mode 100755 index 000000000..5aee7a18e --- /dev/null +++ b/src/testcases/org/apache/poi/ss/usermodel/BaseTestRow.java @@ -0,0 +1,376 @@ +/* ==================================================================== + 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.ss.usermodel; + +import junit.framework.TestCase; +import org.apache.poi.ss.ITestDataProvider; + +import java.util.Iterator; + +/** + * A base class for testing implementations of + * {@link org.apache.poi.ss.usermodel.Row} + */ +public abstract class BaseTestRow extends TestCase { + + /** + * @return an object that provides test data in / XSSF specific way + */ + protected abstract ITestDataProvider getTestDataProvider(); + + + public void testLastAndFirstColumns() { + Workbook workbook = getTestDataProvider().createWorkbook(); + Sheet sheet = workbook.createSheet(); + Row row = sheet.createRow(0); + assertEquals(-1, row.getFirstCellNum()); + assertEquals(-1, row.getLastCellNum()); + + row.createCell(2); + assertEquals(2, row.getFirstCellNum()); + assertEquals(3, row.getLastCellNum()); + + row.createCell(1); + assertEquals(1, row.getFirstCellNum()); + assertEquals(3, row.getLastCellNum()); + + // check the exact case reported in 'bug' 43901 - notice that the cellNum is '0' based + row.createCell(3); + assertEquals(1, row.getFirstCellNum()); + assertEquals(4, row.getLastCellNum()); + } + + /** + * Make sure that there is no cross-talk between rows especially with getFirstCellNum and getLastCellNum + * This test was added in response to bug report 44987. + */ + public void testBoundsInMultipleRows() { + Workbook workbook = getTestDataProvider().createWorkbook(); + Sheet sheet = workbook.createSheet(); + Row rowA = sheet.createRow(0); + + rowA.createCell(10); + rowA.createCell(5); + assertEquals(5, rowA.getFirstCellNum()); + assertEquals(11, rowA.getLastCellNum()); + + Row rowB = sheet.createRow(1); + rowB.createCell(15); + rowB.createCell(30); + assertEquals(15, rowB.getFirstCellNum()); + assertEquals(31, rowB.getLastCellNum()); + + assertEquals(5, rowA.getFirstCellNum()); + assertEquals(11, rowA.getLastCellNum()); + rowA.createCell(50); + assertEquals(51, rowA.getLastCellNum()); + + assertEquals(31, rowB.getLastCellNum()); + } + + public void testRemoveCell() { + Workbook workbook = getTestDataProvider().createWorkbook(); + Sheet sheet = workbook.createSheet(); + Row row = sheet.createRow(0); + + assertEquals(0, row.getPhysicalNumberOfCells()); + assertEquals(-1, row.getLastCellNum()); + assertEquals(-1, row.getFirstCellNum()); + + row.createCell(1); + assertEquals(2, row.getLastCellNum()); + assertEquals(1, row.getFirstCellNum()); + assertEquals(1, row.getPhysicalNumberOfCells()); + row.createCell(3); + assertEquals(4, row.getLastCellNum()); + assertEquals(1, row.getFirstCellNum()); + assertEquals(2, row.getPhysicalNumberOfCells()); + row.removeCell(row.getCell(3)); + assertEquals(2, row.getLastCellNum()); + assertEquals(1, row.getFirstCellNum()); + assertEquals(1, row.getPhysicalNumberOfCells()); + row.removeCell(row.getCell(1)); + assertEquals(-1, row.getLastCellNum()); + assertEquals(-1, row.getFirstCellNum()); + assertEquals(0, row.getPhysicalNumberOfCells()); + + workbook = getTestDataProvider().writeOutAndReadBack(workbook); + sheet = workbook.getSheetAt(0); + row = sheet.getRow(0); + assertEquals(-1, row.getLastCellNum()); + assertEquals(-1, row.getFirstCellNum()); + assertEquals(0, row.getPhysicalNumberOfCells()); + } + + public void baseTestRowBounds(int maxRowNum) { + Workbook workbook = getTestDataProvider().createWorkbook(); + Sheet sheet = workbook.createSheet(); + //Test low row bound + sheet.createRow(0); + //Test low row bound exception + try { + sheet.createRow(-1); + fail("expected exception"); + } catch (IllegalArgumentException e) { + // expected during successful test + assertTrue(e.getMessage().startsWith("Invalid row number (-1)")); + } + + //Test high row bound + sheet.createRow(maxRowNum); + //Test high row bound exception + try { + sheet.createRow(maxRowNum + 1); + fail("expected exception"); + } catch (IllegalArgumentException e) { + // expected during successful test + assertEquals("Invalid row number ("+(maxRowNum + 1)+") outside allowable range (0.."+maxRowNum+")", e.getMessage()); + } + } + + public void baseTestCellBounds(int maxCellNum) { + Workbook workbook = getTestDataProvider().createWorkbook(); + Sheet sheet = workbook.createSheet(); + + Row row = sheet.createRow(0); + //Test low cell bound + try { + Cell cell = row.createCell(-1); + fail("expected exception"); + } catch (IllegalArgumentException e) { + // expected during successful test + assertTrue(e.getMessage().startsWith("Invalid column index (-1)")); + } + + row.createCell(maxCellNum); + + //Test high cell bound + try { + Cell cell = row.createCell(maxCellNum + 1); + fail("expected exception"); + } catch (IllegalArgumentException e) { + // expected during successful test + assertTrue(e.getMessage().startsWith("Invalid column index ("+(maxCellNum+1)+")")); + } + } + + /** + * Prior to patch 43901, POI was producing files with the wrong last-column + * number on the row + */ + public void testLastCellNumIsCorrectAfterAddCell_bug43901(){ + Workbook workbook = getTestDataProvider().createWorkbook(); + Sheet sheet = workbook.createSheet("test"); + Row row = sheet.createRow(0); + + // New row has last col -1 + assertEquals(-1, row.getLastCellNum()); + if(row.getLastCellNum() == 0) { + fail("Identified bug 43901"); + } + + // Create two cells, will return one higher + // than that for the last number + row.createCell(0); + assertEquals(1, row.getLastCellNum()); + row.createCell(255); + assertEquals(256, row.getLastCellNum()); + } + + /** + * Tests for the missing/blank cell policy stuff + */ + public void testGetCellPolicy() { + Workbook workbook = getTestDataProvider().createWorkbook(); + Sheet sheet = workbook.createSheet("test"); + Row row = sheet.createRow(0); + + // 0 -> string + // 1 -> num + // 2 missing + // 3 missing + // 4 -> blank + // 5 -> num + row.createCell(0).setCellValue("test"); + row.createCell(1).setCellValue(3.2); + row.createCell(4, Cell.CELL_TYPE_BLANK); + row.createCell(5).setCellValue(4); + + // First up, no policy given, uses default + assertEquals(Cell.CELL_TYPE_STRING, row.getCell(0).getCellType()); + assertEquals(Cell.CELL_TYPE_NUMERIC, row.getCell(1).getCellType()); + assertEquals(null, row.getCell(2)); + assertEquals(null, row.getCell(3)); + assertEquals(Cell.CELL_TYPE_BLANK, row.getCell(4).getCellType()); + assertEquals(Cell.CELL_TYPE_NUMERIC, row.getCell(5).getCellType()); + + // RETURN_NULL_AND_BLANK - same as default + assertEquals(Cell.CELL_TYPE_STRING, row.getCell(0, Row.RETURN_NULL_AND_BLANK).getCellType()); + assertEquals(Cell.CELL_TYPE_NUMERIC, row.getCell(1, Row.RETURN_NULL_AND_BLANK).getCellType()); + assertEquals(null, row.getCell(2, Row.RETURN_NULL_AND_BLANK)); + assertEquals(null, row.getCell(3, Row.RETURN_NULL_AND_BLANK)); + assertEquals(Cell.CELL_TYPE_BLANK, row.getCell(4, Row.RETURN_NULL_AND_BLANK).getCellType()); + assertEquals(Cell.CELL_TYPE_NUMERIC, row.getCell(5, Row.RETURN_NULL_AND_BLANK).getCellType()); + + // RETURN_BLANK_AS_NULL - nearly the same + assertEquals(Cell.CELL_TYPE_STRING, row.getCell(0, Row.RETURN_BLANK_AS_NULL).getCellType()); + assertEquals(Cell.CELL_TYPE_NUMERIC, row.getCell(1, Row.RETURN_BLANK_AS_NULL).getCellType()); + assertEquals(null, row.getCell(2, Row.RETURN_BLANK_AS_NULL)); + assertEquals(null, row.getCell(3, Row.RETURN_BLANK_AS_NULL)); + assertEquals(null, row.getCell(4, Row.RETURN_BLANK_AS_NULL)); + assertEquals(Cell.CELL_TYPE_NUMERIC, row.getCell(5, Row.RETURN_BLANK_AS_NULL).getCellType()); + + // CREATE_NULL_AS_BLANK - creates as needed + assertEquals(Cell.CELL_TYPE_STRING, row.getCell(0, Row.CREATE_NULL_AS_BLANK).getCellType()); + assertEquals(Cell.CELL_TYPE_NUMERIC, row.getCell(1, Row.CREATE_NULL_AS_BLANK).getCellType()); + assertEquals(Cell.CELL_TYPE_BLANK, row.getCell(2, Row.CREATE_NULL_AS_BLANK).getCellType()); + assertEquals(Cell.CELL_TYPE_BLANK, row.getCell(3, Row.CREATE_NULL_AS_BLANK).getCellType()); + assertEquals(Cell.CELL_TYPE_BLANK, row.getCell(4, Row.CREATE_NULL_AS_BLANK).getCellType()); + assertEquals(Cell.CELL_TYPE_NUMERIC, row.getCell(5, Row.CREATE_NULL_AS_BLANK).getCellType()); + + // Check created ones get the right column + assertEquals(0, row.getCell(0, Row.CREATE_NULL_AS_BLANK).getColumnIndex()); + assertEquals(1, row.getCell(1, Row.CREATE_NULL_AS_BLANK).getColumnIndex()); + assertEquals(2, row.getCell(2, Row.CREATE_NULL_AS_BLANK).getColumnIndex()); + assertEquals(3, row.getCell(3, Row.CREATE_NULL_AS_BLANK).getColumnIndex()); + assertEquals(4, row.getCell(4, Row.CREATE_NULL_AS_BLANK).getColumnIndex()); + assertEquals(5, row.getCell(5, Row.CREATE_NULL_AS_BLANK).getColumnIndex()); + + + // Now change the cell policy on the workbook, check + // that that is now used if no policy given + workbook.setMissingCellPolicy(Row.RETURN_BLANK_AS_NULL); + + assertEquals(Cell.CELL_TYPE_STRING, row.getCell(0).getCellType()); + assertEquals(Cell.CELL_TYPE_NUMERIC, row.getCell(1).getCellType()); + assertEquals(null, row.getCell(2)); + assertEquals(null, row.getCell(3)); + assertEquals(null, row.getCell(4)); + assertEquals(Cell.CELL_TYPE_NUMERIC, row.getCell(5).getCellType()); + } + + public void testRowHeight() { + Workbook workbook = getTestDataProvider().createWorkbook(); + Sheet sheet = workbook.createSheet(); + Row row1 = sheet.createRow(0); + + assertEquals(sheet.getDefaultRowHeight(), row1.getHeight()); + + sheet.setDefaultRowHeightInPoints(20); + row1.setHeight((short)-1); //reset the row height + assertEquals(20.0f, row1.getHeightInPoints()); + assertEquals(20*20, row1.getHeight()); + + Row row2 = sheet.createRow(1); + row2.setHeight((short)310); + assertEquals(310, row2.getHeight()); + assertEquals((float)310/20, row2.getHeightInPoints()); + + Row row3 = sheet.createRow(2); + row3.setHeightInPoints(25.5f); + assertEquals((short)(25.5f*20), row3.getHeight()); + assertEquals(25.5f, row3.getHeightInPoints()); + + Row row4 = sheet.createRow(3); + assertFalse(row4.getZeroHeight()); + row4.setZeroHeight(true); + assertTrue(row4.getZeroHeight()); + + workbook = getTestDataProvider().writeOutAndReadBack(workbook); + sheet = workbook.getSheetAt(0); + + row1 = sheet.getRow(0); + row2 = sheet.getRow(1); + row3 = sheet.getRow(2); + row4 = sheet.getRow(3); + assertEquals(20.0f, row1.getHeightInPoints()); + assertEquals(20*20, row1.getHeight()); + + assertEquals(310, row2.getHeight()); + assertEquals((float)310/20, row2.getHeightInPoints()); + + assertEquals((short)(25.5f*20), row3.getHeight()); + assertEquals(25.5f, row3.getHeightInPoints()); + + assertFalse(row1.getZeroHeight()); + assertFalse(row2.getZeroHeight()); + assertFalse(row3.getZeroHeight()); + assertTrue(row4.getZeroHeight()); + } + + /** + * Test adding cells to a row in various places and see if we can find them again. + */ + public void testCellIterator() { + Workbook wb = getTestDataProvider().createWorkbook(); + Sheet sheet = wb.createSheet(); + Row row = sheet.createRow(0); + + // One cell at the beginning + Cell cell1 = row.createCell(1); + Iterator it = row.cellIterator(); + assertTrue(it.hasNext()); + assertTrue(cell1 == it.next()); + assertFalse(it.hasNext()); + + // Add another cell at the end + Cell cell2 = row.createCell(99); + it = row.cellIterator(); + assertTrue(it.hasNext()); + assertTrue(cell1 == it.next()); + assertTrue(it.hasNext()); + assertTrue(cell2 == it.next()); + + // Add another cell at the beginning + Cell cell3 = row.createCell(0); + it = row.cellIterator(); + assertTrue(it.hasNext()); + assertTrue(cell3 == it.next()); + assertTrue(it.hasNext()); + assertTrue(cell1 == it.next()); + assertTrue(it.hasNext()); + assertTrue(cell2 == it.next()); + + // Replace cell1 + Cell cell4 = row.createCell(1); + it = row.cellIterator(); + assertTrue(it.hasNext()); + assertTrue(cell3 == it.next()); + assertTrue(it.hasNext()); + assertTrue(cell4 == it.next()); + assertTrue(it.hasNext()); + assertTrue(cell2 == it.next()); + assertFalse(it.hasNext()); + + // Add another cell, specifying the cellType + Cell cell5 = row.createCell(2, Cell.CELL_TYPE_STRING); + it = row.cellIterator(); + assertNotNull(cell5); + assertTrue(it.hasNext()); + assertTrue(cell3 == it.next()); + assertTrue(it.hasNext()); + assertTrue(cell4 == it.next()); + assertTrue(it.hasNext()); + assertTrue(cell5 == it.next()); + assertTrue(it.hasNext()); + assertTrue(cell2 == it.next()); + assertEquals(Cell.CELL_TYPE_STRING, cell5.getCellType()); + } + + +} \ No newline at end of file diff --git a/src/testcases/org/apache/poi/ss/usermodel/BaseTestSheet.java b/src/testcases/org/apache/poi/ss/usermodel/BaseTestSheet.java new file mode 100755 index 000000000..e2e70b4f4 --- /dev/null +++ b/src/testcases/org/apache/poi/ss/usermodel/BaseTestSheet.java @@ -0,0 +1,565 @@ +/* ==================================================================== + 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.ss.usermodel; + +import junit.framework.TestCase; +import org.apache.poi.ss.ITestDataProvider; +import org.apache.poi.ss.util.CellRangeAddress; + +import java.util.Iterator; + +/** + * Common superclass for testing {@link org.apache.poi.xssf.usermodel.XSSFCell} and + * {@link org.apache.poi.hssf.usermodel.HSSFCell} + */ +public abstract class BaseTestSheet extends TestCase { + + /** + * @return an object that provides test data in HSSF / XSSF specific way + */ + protected abstract ITestDataProvider getTestDataProvider(); + + public void testCreateRow() { + Workbook workbook = getTestDataProvider().createWorkbook(); + Sheet sheet = workbook.createSheet(); + assertEquals(0, sheet.getPhysicalNumberOfRows()); + + //Test that we get null for undefined rownumber + assertNull(sheet.getRow(1)); + + // Test row creation with consecutive indexes + Row row1 = sheet.createRow(0); + Row row2 = sheet.createRow(1); + assertEquals(0, row1.getRowNum()); + assertEquals(1, row2.getRowNum()); + Iterator it = sheet.rowIterator(); + assertTrue(it.hasNext()); + assertSame(row1, it.next()); + assertTrue(it.hasNext()); + assertSame(row2, it.next()); + assertEquals(1, sheet.getLastRowNum()); + + // Test row creation with non consecutive index + Row row101 = sheet.createRow(100); + assertNotNull(row101); + assertEquals(100, sheet.getLastRowNum()); + assertEquals(3, sheet.getPhysicalNumberOfRows()); + + // Test overwriting an existing row + Row row2_ovrewritten = sheet.createRow(1); + Cell cell = row2_ovrewritten.createCell(0); + cell.setCellValue(100); + Iterator it2 = sheet.rowIterator(); + assertTrue(it2.hasNext()); + assertSame(row1, it2.next()); + assertTrue(it2.hasNext()); + Row row2_ovrewritten_ref = it2.next(); + assertSame(row2_ovrewritten, row2_ovrewritten_ref); + assertEquals(100.0, row2_ovrewritten_ref.getCell(0).getNumericCellValue()); + } + + + public void testRemoveRow() { + Workbook workbook = getTestDataProvider().createWorkbook(); + Sheet sheet1 = workbook.createSheet(); + assertEquals(0, sheet1.getPhysicalNumberOfRows()); + + Row row0 = sheet1.createRow(0); + assertEquals(1, sheet1.getPhysicalNumberOfRows()); + sheet1.removeRow(row0); + assertEquals(0, sheet1.getPhysicalNumberOfRows()); + + Row row1 = sheet1.createRow(1); + Row row2 = sheet1.createRow(2); + assertEquals(2, sheet1.getPhysicalNumberOfRows()); + + assertNotNull(sheet1.getRow(1)); + assertNotNull(sheet1.getRow(2)); + sheet1.removeRow(row2); + assertNotNull(sheet1.getRow(1)); + assertNull(sheet1.getRow(2)); + + Row row3 = sheet1.createRow(3); + Sheet sheet2 = workbook.createSheet(); + try { + sheet2.removeRow(row3); + fail("Expected exception"); + } catch (IllegalArgumentException e){ + assertEquals("Specified row does not belong to this sheet", e.getMessage()); + } + } + + public void testCloneSheet() { + Workbook workbook = getTestDataProvider().createWorkbook(); + CreationHelper factory = workbook.getCreationHelper(); + Sheet sheet = workbook.createSheet("Test Clone"); + Row row = sheet.createRow(0); + Cell cell = row.createCell(0); + Cell cell2 = row.createCell(1); + cell.setCellValue(factory.createRichTextString("clone_test")); + cell2.setCellFormula("SIN(1)"); + + Sheet clonedSheet = workbook.cloneSheet(0); + Row clonedRow = clonedSheet.getRow(0); + + //Check for a good clone + assertEquals(clonedRow.getCell(0).getRichStringCellValue().getString(), "clone_test"); + + //Check that the cells are not somehow linked + cell.setCellValue(factory.createRichTextString("Difference Check")); + cell2.setCellFormula("cos(2)"); + if ("Difference Check".equals(clonedRow.getCell(0).getRichStringCellValue().getString())) { + fail("string cell not properly cloned"); + } + if ("COS(2)".equals(clonedRow.getCell(1).getCellFormula())) { + fail("formula cell not properly cloned"); + } + assertEquals(clonedRow.getCell(0).getRichStringCellValue().getString(), "clone_test"); + assertEquals(clonedRow.getCell(1).getCellFormula(), "SIN(1)"); + } + + /** tests that the sheet name for multiple clones of the same sheet is unique + * BUG 37416 + */ + public void testCloneSheetMultipleTimes() { + Workbook workbook = getTestDataProvider().createWorkbook(); + CreationHelper factory = workbook.getCreationHelper(); + Sheet sheet = workbook.createSheet("Test Clone"); + Row row = sheet.createRow(0); + Cell cell = row.createCell(0); + cell.setCellValue(factory.createRichTextString("clone_test")); + //Clone the sheet multiple times + workbook.cloneSheet(0); + workbook.cloneSheet(0); + + assertNotNull(workbook.getSheet("Test Clone")); + assertNotNull(workbook.getSheet("Test Clone (2)")); + assertEquals("Test Clone (3)", workbook.getSheetName(2)); + assertNotNull(workbook.getSheet("Test Clone (3)")); + + workbook.removeSheetAt(0); + workbook.removeSheetAt(0); + workbook.removeSheetAt(0); + workbook.createSheet("abc ( 123)"); + workbook.cloneSheet(0); + assertEquals("abc (124)", workbook.getSheetName(1)); + } + + /** + * Setting landscape and portrait stuff on new sheets + */ + public void testPrintSetupLandscapeNew() throws Exception { + Workbook workbook = getTestDataProvider().createWorkbook(); + Sheet sheetL = workbook.createSheet("LandscapeS"); + Sheet sheetP = workbook.createSheet("LandscapeP"); + + // Check two aspects of the print setup + assertFalse(sheetL.getPrintSetup().getLandscape()); + assertFalse(sheetP.getPrintSetup().getLandscape()); + assertEquals(1, sheetL.getPrintSetup().getCopies()); + assertEquals(1, sheetP.getPrintSetup().getCopies()); + + // Change one on each + sheetL.getPrintSetup().setLandscape(true); + sheetP.getPrintSetup().setCopies((short)3); + + // Check taken + assertTrue(sheetL.getPrintSetup().getLandscape()); + assertFalse(sheetP.getPrintSetup().getLandscape()); + assertEquals(1, sheetL.getPrintSetup().getCopies()); + assertEquals(3, sheetP.getPrintSetup().getCopies()); + + // Save and re-load, and check still there + workbook = getTestDataProvider().writeOutAndReadBack(workbook); + sheetL = workbook.getSheet("LandscapeS"); + sheetP = workbook.getSheet("LandscapeP"); + + assertTrue(sheetL.getPrintSetup().getLandscape()); + assertFalse(sheetP.getPrintSetup().getLandscape()); + assertEquals(1, sheetL.getPrintSetup().getCopies()); + assertEquals(3, sheetP.getPrintSetup().getCopies()); + } + + /** + * When removing one merged region, it would break + * + */ + public void testRemoveMerged() { + Workbook wb = getTestDataProvider().createWorkbook(); + Sheet sheet = wb.createSheet(); + CellRangeAddress region = new CellRangeAddress(0, 1, 0, 1); + sheet.addMergedRegion(region); + region = new CellRangeAddress(1, 2, 0, 1); + sheet.addMergedRegion(region); + + sheet.removeMergedRegion(0); + + region = sheet.getMergedRegion(0); + assertEquals("Left over region should be starting at row 1", 1, region.getFirstRow()); + + sheet.removeMergedRegion(0); + + assertEquals("there should be no merged regions left!", 0, sheet.getNumMergedRegions()); + + //an, add, remove, get(0) would null pointer + sheet.addMergedRegion(region); + assertEquals("there should now be one merged region!", 1, sheet.getNumMergedRegions()); + sheet.removeMergedRegion(0); + assertEquals("there should now be zero merged regions!", 0, sheet.getNumMergedRegions()); + //add it again! + region.setLastRow(4); + + sheet.addMergedRegion(region); + assertEquals("there should now be one merged region!", 1, sheet.getNumMergedRegions()); + + //should exist now! + assertTrue("there isn't more than one merged region in there", 1 <= sheet.getNumMergedRegions()); + region = sheet.getMergedRegion(0); + assertEquals("the merged row to doesnt match the one we put in ", 4, region.getLastRow()); + } + + public void testShiftMerged() { + Workbook wb = getTestDataProvider().createWorkbook(); + CreationHelper factory = wb.getCreationHelper(); + Sheet sheet = wb.createSheet(); + Row row = sheet.createRow(0); + Cell cell = row.createCell(0); + cell.setCellValue(factory.createRichTextString("first row, first cell")); + + row = sheet.createRow(1); + cell = row.createCell(1); + cell.setCellValue(factory.createRichTextString("second row, second cell")); + + CellRangeAddress region = new CellRangeAddress(1, 1, 0, 1); + sheet.addMergedRegion(region); + + sheet.shiftRows(1, 1, 1); + + region = sheet.getMergedRegion(0); + assertEquals("Merged region not moved over to row 2", 2, region.getFirstRow()); + } + + /** + * Tests the display of gridlines, formulas, and rowcolheadings. + * @author Shawn Laubach (slaubach at apache dot org) + */ + public void testDisplayOptions() { + Workbook wb = getTestDataProvider().createWorkbook(); + Sheet sheet = wb.createSheet(); + + assertEquals(sheet.isDisplayGridlines(), true); + assertEquals(sheet.isDisplayRowColHeadings(), true); + assertEquals(sheet.isDisplayFormulas(), false); + assertEquals(sheet.isDisplayZeros(), true); + + sheet.setDisplayGridlines(false); + sheet.setDisplayRowColHeadings(false); + sheet.setDisplayFormulas(true); + sheet.setDisplayZeros(false); + + wb = getTestDataProvider().writeOutAndReadBack(wb); + sheet = wb.getSheetAt(0); + + assertEquals(sheet.isDisplayGridlines(), false); + assertEquals(sheet.isDisplayRowColHeadings(), false); + assertEquals(sheet.isDisplayFormulas(), true); + assertEquals(sheet.isDisplayZeros(), false); + } + + public void testColumnWidth() { + Workbook wb = getTestDataProvider().createWorkbook(); + Sheet sheet = wb.createSheet(); + + //default column width measured in characters + sheet.setDefaultColumnWidth(10); + assertEquals(10, sheet.getDefaultColumnWidth()); + //columns A-C have default width + assertEquals(256*10, sheet.getColumnWidth(0)); + assertEquals(256*10, sheet.getColumnWidth(1)); + assertEquals(256*10, sheet.getColumnWidth(2)); + + //set custom width for D-F + for (char i = 'D'; i <= 'F'; i++) { + //Sheet#setColumnWidth accepts the width in units of 1/256th of a character width + int w = 256*12; + sheet.setColumnWidth(i, w); + assertEquals(w, sheet.getColumnWidth(i)); + } + //reset the default column width, columns A-C change, D-F still have custom width + sheet.setDefaultColumnWidth(20); + assertEquals(20, sheet.getDefaultColumnWidth()); + assertEquals(256*20, sheet.getColumnWidth(0)); + assertEquals(256*20, sheet.getColumnWidth(1)); + assertEquals(256*20, sheet.getColumnWidth(2)); + for (char i = 'D'; i <= 'F'; i++) { + int w = 256*12; + assertEquals(w, sheet.getColumnWidth(i)); + } + + // check for 16-bit signed/unsigned error: + sheet.setColumnWidth(10, 40000); + assertEquals(40000, sheet.getColumnWidth(10)); + + //The maximum column width for an individual cell is 255 characters + try { + sheet.setColumnWidth(9, 256*256); + fail("expected exception"); + } catch(IllegalArgumentException e){ + assertEquals("The maximum column width for an individual cell is 255 characters.", e.getMessage()); + } + + //serialize and read again + wb = getTestDataProvider().writeOutAndReadBack(wb); + + sheet = wb.getSheetAt(0); + assertEquals(20, sheet.getDefaultColumnWidth()); + //columns A-C have default width + assertEquals(256*20, sheet.getColumnWidth(0)); + assertEquals(256*20, sheet.getColumnWidth(1)); + assertEquals(256*20, sheet.getColumnWidth(2)); + //columns D-F have custom width + for (char i = 'D'; i <= 'F'; i++) { + short w = (256*12); + assertEquals(w, sheet.getColumnWidth(i)); + } + assertEquals(40000, sheet.getColumnWidth(10)); + } + + public void testDefaultRowHeight() { + Workbook workbook = getTestDataProvider().createWorkbook(); + Sheet sheet = workbook.createSheet(); + sheet.setDefaultRowHeightInPoints(15); + assertEquals((short) 300, sheet.getDefaultRowHeight()); + assertEquals((float) 15, sheet.getDefaultRowHeightInPoints()); + + // Set a new default row height in twips and test getting the value in points + sheet.setDefaultRowHeight((short) 360); + assertEquals(18.0f, sheet.getDefaultRowHeightInPoints()); + assertEquals((short) 360, sheet.getDefaultRowHeight()); + + // Test that defaultRowHeight is a truncated short: E.G. 360inPoints -> 18; 361inPoints -> 18 + sheet.setDefaultRowHeight((short) 361); + assertEquals((float)361/20, sheet.getDefaultRowHeightInPoints()); + assertEquals((short) 361, sheet.getDefaultRowHeight()); + + // Set a new default row height in points and test getting the value in twips + sheet.setDefaultRowHeightInPoints(17.5f); + assertEquals(17.5f, sheet.getDefaultRowHeightInPoints()); + assertEquals((short)(17.5f*20), sheet.getDefaultRowHeight()); + } + + /** cell with formula becomes null on cloning a sheet*/ + public void test35084() { + Workbook wb = getTestDataProvider().createWorkbook(); + Sheet s = wb.createSheet("Sheet1"); + Row r = s.createRow(0); + r.createCell(0).setCellValue(1); + r.createCell(1).setCellFormula("A1*2"); + Sheet s1 = wb.cloneSheet(0); + r = s1.getRow(0); + assertEquals("double", r.getCell(0).getNumericCellValue(), 1, 0); // sanity check + assertNotNull(r.getCell(1)); + assertEquals("formula", r.getCell(1).getCellFormula(), "A1*2"); + } + + /** test that new default column styles get applied */ + public void testDefaultColumnStyle() { + Workbook wb = getTestDataProvider().createWorkbook(); + CellStyle style = wb.createCellStyle(); + Sheet sheet = wb.createSheet(); + sheet.setDefaultColumnStyle(0, style); + assertNotNull(sheet.getColumnStyle(0)); + assertEquals(style.getIndex(), sheet.getColumnStyle(0).getIndex()); + + Row row = sheet.createRow(0); + Cell cell = row.createCell(0); + CellStyle style2 = cell.getCellStyle(); + assertNotNull(style2); + assertEquals("style should match", style.getIndex(), style2.getIndex()); + } + + public void testOutlineProperties() { + Workbook wb = getTestDataProvider().createWorkbook(); + + Sheet sheet = wb.createSheet(); + + //TODO defaults are different in HSSF and XSSF + //assertTrue(sheet.getRowSumsBelow()); + //assertTrue(sheet.getRowSumsRight()); + + sheet.setRowSumsBelow(false); + sheet.setRowSumsRight(false); + + assertFalse(sheet.getRowSumsBelow()); + assertFalse(sheet.getRowSumsRight()); + + sheet.setRowSumsBelow(true); + sheet.setRowSumsRight(true); + + assertTrue(sheet.getRowSumsBelow()); + assertTrue(sheet.getRowSumsRight()); + + wb = getTestDataProvider().writeOutAndReadBack(wb); + sheet = wb.getSheetAt(0); + assertTrue(sheet.getRowSumsBelow()); + assertTrue(sheet.getRowSumsRight()); + } + + /** + * Test basic display properties + */ + public void testSheetProperties() { + Workbook wb = getTestDataProvider().createWorkbook(); + Sheet sheet = wb.createSheet(); + + assertFalse(sheet.getHorizontallyCenter()); + sheet.setHorizontallyCenter(true); + assertTrue(sheet.getHorizontallyCenter()); + sheet.setHorizontallyCenter(false); + assertFalse(sheet.getHorizontallyCenter()); + + assertFalse(sheet.getVerticallyCenter()); + sheet.setVerticallyCenter(true); + assertTrue(sheet.getVerticallyCenter()); + sheet.setVerticallyCenter(false); + assertFalse(sheet.getVerticallyCenter()); + + assertFalse(sheet.isPrintGridlines()); + sheet.setPrintGridlines(true); + assertTrue(sheet.isPrintGridlines()); + + assertFalse(sheet.isDisplayFormulas()); + sheet.setDisplayFormulas(true); + assertTrue(sheet.isDisplayFormulas()); + + assertTrue(sheet.isDisplayGridlines()); + sheet.setDisplayGridlines(false); + assertFalse(sheet.isDisplayGridlines()); + + //TODO: default "guts" is different in HSSF and XSSF + //assertTrue(sheet.getDisplayGuts()); + sheet.setDisplayGuts(false); + assertFalse(sheet.getDisplayGuts()); + + assertTrue(sheet.isDisplayRowColHeadings()); + sheet.setDisplayRowColHeadings(false); + assertFalse(sheet.isDisplayRowColHeadings()); + + //TODO: default "autobreaks" is different in HSSF and XSSF + //assertTrue(sheet.getAutobreaks()); + sheet.setAutobreaks(false); + assertFalse(sheet.getAutobreaks()); + + assertFalse(sheet.getScenarioProtect()); + + //TODO: default "fit-to-page" is different in HSSF and XSSF + //assertFalse(sheet.getFitToPage()); + sheet.setFitToPage(true); + assertTrue(sheet.getFitToPage()); + sheet.setFitToPage(false); + assertFalse(sheet.getFitToPage()); + } + + public void baseTestGetSetMargin(double[] defaultMargins) { + double marginLeft = defaultMargins[0]; + double marginRight = defaultMargins[1]; + double marginTop = defaultMargins[2]; + double marginBottom = defaultMargins[3]; + double marginHeader = defaultMargins[4]; + double marginFooter = defaultMargins[5]; + + Workbook workbook = getTestDataProvider().createWorkbook(); + Sheet sheet = workbook.createSheet("Sheet 1"); + assertEquals(marginLeft, sheet.getMargin(Sheet.LeftMargin)); + sheet.setMargin(Sheet.LeftMargin, 10.0); + //left margin is custom, all others are default + assertEquals(10.0, sheet.getMargin(Sheet.LeftMargin)); + assertEquals(marginRight, sheet.getMargin(Sheet.RightMargin)); + assertEquals(marginTop, sheet.getMargin(Sheet.TopMargin)); + assertEquals(marginBottom, sheet.getMargin(Sheet.BottomMargin)); + sheet.setMargin(Sheet.RightMargin, 11.0); + assertEquals(11.0, sheet.getMargin(Sheet.RightMargin)); + sheet.setMargin(Sheet.TopMargin, 12.0); + assertEquals(12.0, sheet.getMargin(Sheet.TopMargin)); + sheet.setMargin(Sheet.BottomMargin, 13.0); + assertEquals(13.0, sheet.getMargin(Sheet.BottomMargin)); + + // incorrect margin constant + try { + sheet.setMargin((short) 65, 15); + fail("Expected exception"); + } catch (IllegalArgumentException e){ + assertEquals("Unknown margin constant: 65", e.getMessage()); + } + } + + public void testRowBreaks() { + Workbook workbook = getTestDataProvider().createWorkbook(); + Sheet sheet = workbook.createSheet(); + //Sheet#getRowBreaks() returns an empty array if no row breaks are defined + assertNotNull(sheet.getRowBreaks()); + assertEquals(0, sheet.getRowBreaks().length); + + sheet.setRowBreak(1); + assertEquals(1, sheet.getRowBreaks().length); + sheet.setRowBreak(15); + assertEquals(2, sheet.getRowBreaks().length); + assertEquals(1, sheet.getRowBreaks()[0]); + assertEquals(15, sheet.getRowBreaks()[1]); + sheet.setRowBreak(1); + assertEquals(2, sheet.getRowBreaks().length); + assertTrue(sheet.isRowBroken(1)); + assertTrue(sheet.isRowBroken(15)); + + //now remove the created breaks + sheet.removeRowBreak(1); + assertEquals(1, sheet.getRowBreaks().length); + sheet.removeRowBreak(15); + assertEquals(0, sheet.getRowBreaks().length); + + assertFalse(sheet.isRowBroken(1)); + assertFalse(sheet.isRowBroken(15)); + } + + public void testColumnBreaks() { + Workbook workbook = getTestDataProvider().createWorkbook(); + Sheet sheet = workbook.createSheet(); + assertNotNull(sheet.getColumnBreaks()); + assertEquals(0, sheet.getColumnBreaks().length); + + assertFalse(sheet.isColumnBroken(0)); + + sheet.setColumnBreak(11); + assertNotNull(sheet.getColumnBreaks()); + assertEquals(11, sheet.getColumnBreaks()[0]); + sheet.setColumnBreak(12); + assertEquals(2, sheet.getColumnBreaks().length); + assertTrue(sheet.isColumnBroken(11)); + assertTrue(sheet.isColumnBroken(12)); + + sheet.removeColumnBreak((short) 11); + assertEquals(1, sheet.getColumnBreaks().length); + sheet.removeColumnBreak((short) 15); //remove non-existing + assertEquals(1, sheet.getColumnBreaks().length); + sheet.removeColumnBreak((short) 12); + assertEquals(0, sheet.getColumnBreaks().length); + + assertFalse(sheet.isColumnBroken(11)); + assertFalse(sheet.isColumnBroken(12)); + } +} \ No newline at end of file diff --git a/src/testcases/org/apache/poi/ss/usermodel/BaseTestWorkbook.java b/src/testcases/org/apache/poi/ss/usermodel/BaseTestWorkbook.java new file mode 100755 index 000000000..eafda064d --- /dev/null +++ b/src/testcases/org/apache/poi/ss/usermodel/BaseTestWorkbook.java @@ -0,0 +1,276 @@ +package org.apache.poi.ss.usermodel; + +import junit.framework.TestCase; +import junit.framework.AssertionFailedError; +import org.apache.poi.ss.ITestDataProvider; +import org.apache.poi.ss.util.CellRangeAddress; + +/** + * @author Yegor Kozlov + */ +public abstract class BaseTestWorkbook extends TestCase { + + protected abstract ITestDataProvider getTestDataProvider(); + + public void testCreateSheet() { + Workbook wb = getTestDataProvider().createWorkbook(); + assertEquals(0, wb.getNumberOfSheets()); + + //getting a sheet by invalid index or non-existing name + assertNull(wb.getSheet("Sheet1")); + try { + wb.getSheetAt(0); + fail("should have thrown exceptiuon due to invalid sheet index"); + } catch (IllegalArgumentException e) { + // expected during successful test + ; + } + + Sheet sheet0 = wb.createSheet(); + Sheet sheet1 = wb.createSheet(); + assertEquals("Sheet0", sheet0.getSheetName()); + assertEquals("Sheet1", sheet1.getSheetName()); + assertEquals(2, wb.getNumberOfSheets()); + + //fetching sheets by name is case-insensitive + Sheet originalSheet = wb.createSheet("Sheet3"); + Sheet fetchedSheet = wb.getSheet("sheet3"); + if (fetchedSheet == null) { + throw new AssertionFailedError("Identified bug 44892"); + } + assertEquals("Sheet3", fetchedSheet.getSheetName()); + assertEquals(3, wb.getNumberOfSheets()); + assertSame(originalSheet, fetchedSheet); + try { + wb.createSheet("sHeeT3"); + fail("should have thrown exceptiuon due to duplicate sheet name"); + } catch (IllegalArgumentException e) { + // expected during successful test + assertEquals("The workbook already contains a sheet of this name", e.getMessage()); + } + + //names cannot be blank or contain any of /\*?[] + String[] invalidNames = {"", "Sheet/", "Sheet\\", + "Sheet?", "Sheet*", "Sheet[", "Sheet]"}; + for (String sheetName : invalidNames) { + try { + wb.createSheet(sheetName); + fail("should have thrown exceptiuon due to invalid sheet name: " + sheetName); + } catch (IllegalArgumentException e) { + // expected during successful test + ; + } + } + //still have 3 sheets + assertEquals(3, wb.getNumberOfSheets()); + + //change the name of the 3rd sheet + wb.setSheetName(2, "I changed!"); + + //try to assign an invalid name to the 2nd sheet + try { + wb.setSheetName(1, "[I'm invalid]"); + fail("should have thrown exceptiuon due to invalid sheet name"); + } catch (IllegalArgumentException e) { + ; // expected during successful test + } + + //check + assertEquals(0, wb.getSheetIndex("sheet0")); + assertEquals(1, wb.getSheetIndex("sheet1")); + assertEquals(2, wb.getSheetIndex("I changed!")); + + assertSame(sheet0, wb.getSheet("sheet0")); + assertSame(sheet1, wb.getSheet("sheet1")); + assertSame(originalSheet, wb.getSheet("I changed!")); + assertNull(wb.getSheet("unknown")); + + //serialize and read again + wb = getTestDataProvider().writeOutAndReadBack(wb); + assertEquals(3, wb.getNumberOfSheets()); + assertEquals(0, wb.getSheetIndex("sheet0")); + assertEquals(1, wb.getSheetIndex("sheet1")); + assertEquals(2, wb.getSheetIndex("I changed!")); + + } + + public void testRemoveSheetAt() { + Workbook workbook = getTestDataProvider().createWorkbook(); + workbook.createSheet("sheet1"); + workbook.createSheet("sheet2"); + workbook.createSheet("sheet3"); + assertEquals(3, workbook.getNumberOfSheets()); + workbook.removeSheetAt(1); + assertEquals(2, workbook.getNumberOfSheets()); + assertEquals("sheet3", workbook.getSheetName(1)); + workbook.removeSheetAt(0); + assertEquals(1, workbook.getNumberOfSheets()); + assertEquals("sheet3", workbook.getSheetName(0)); + workbook.removeSheetAt(0); + assertEquals(0, workbook.getNumberOfSheets()); + } + + public void testDefaultValues() { + Workbook b = getTestDataProvider().createWorkbook(); + assertEquals(0, b.getActiveSheetIndex()); + assertEquals(0, b.getFirstVisibleTab()); + assertEquals(0, b.getNumberOfNames()); + assertEquals(0, b.getNumberOfSheets()); + } + + + public void testSheetSelection() { + Workbook b = getTestDataProvider().createWorkbook(); + b.createSheet("Sheet One"); + b.createSheet("Sheet Two"); + b.setActiveSheet(1); + b.setSelectedTab(1); + b.setFirstVisibleTab(1); + assertEquals(1, b.getActiveSheetIndex()); + assertEquals(1, b.getFirstVisibleTab()); + } + + public void testPrintArea() { + Workbook workbook = getTestDataProvider().createWorkbook(); + Sheet sheet1 = workbook.createSheet("Test Print Area"); + String sheetName1 = sheet1.getSheetName(); + + // workbook.setPrintArea(0, reference); + workbook.setPrintArea(0, 1, 5, 4, 9); + String retrievedPrintArea = workbook.getPrintArea(0); + assertEquals("'" + sheetName1 + "'!$B$5:$F$10", retrievedPrintArea); + + String reference = "$A$1:$B$1"; + workbook.setPrintArea(0, reference); + retrievedPrintArea = workbook.getPrintArea(0); + assertEquals("'" + sheetName1 + "'!" + reference, retrievedPrintArea); + + workbook.removePrintArea(0); + assertNull(workbook.getPrintArea(0)); + } + + public void testGetSetActiveSheet(){ + Workbook workbook = getTestDataProvider().createWorkbook(); + assertEquals(0, workbook.getActiveSheetIndex()); + + workbook.createSheet("sheet1"); + workbook.createSheet("sheet2"); + workbook.createSheet("sheet3"); + // set second sheet + workbook.setActiveSheet(1); + // test if second sheet is set up + assertEquals(1, workbook.getActiveSheetIndex()); + + workbook.setActiveSheet(0); + // test if second sheet is set up + assertEquals(0, workbook.getActiveSheetIndex()); + } + + public void testSetSheetOrder() { + Workbook wb = getTestDataProvider().createWorkbook(); + + for (int i=0; i < 10; i++) { + Sheet sh = wb.createSheet("Sheet " + i); + } + + // Check the initial order + assertEquals(0, wb.getSheetIndex("Sheet 0")); + assertEquals(1, wb.getSheetIndex("Sheet 1")); + assertEquals(2, wb.getSheetIndex("Sheet 2")); + assertEquals(3, wb.getSheetIndex("Sheet 3")); + assertEquals(4, wb.getSheetIndex("Sheet 4")); + assertEquals(5, wb.getSheetIndex("Sheet 5")); + assertEquals(6, wb.getSheetIndex("Sheet 6")); + assertEquals(7, wb.getSheetIndex("Sheet 7")); + assertEquals(8, wb.getSheetIndex("Sheet 8")); + assertEquals(9, wb.getSheetIndex("Sheet 9")); + + // Change + wb.setSheetOrder("Sheet 6", 0); + wb.setSheetOrder("Sheet 3", 7); + wb.setSheetOrder("Sheet 1", 9); + + // Check they're currently right + assertEquals(0, wb.getSheetIndex("Sheet 6")); + assertEquals(1, wb.getSheetIndex("Sheet 0")); + assertEquals(2, wb.getSheetIndex("Sheet 2")); + assertEquals(3, wb.getSheetIndex("Sheet 4")); + assertEquals(4, wb.getSheetIndex("Sheet 5")); + assertEquals(5, wb.getSheetIndex("Sheet 7")); + assertEquals(6, wb.getSheetIndex("Sheet 3")); + assertEquals(7, wb.getSheetIndex("Sheet 8")); + assertEquals(8, wb.getSheetIndex("Sheet 9")); + assertEquals(9, wb.getSheetIndex("Sheet 1")); + + Workbook wbr = getTestDataProvider().writeOutAndReadBack(wb); + + assertEquals(0, wbr.getSheetIndex("Sheet 6")); + assertEquals(1, wbr.getSheetIndex("Sheet 0")); + assertEquals(2, wbr.getSheetIndex("Sheet 2")); + assertEquals(3, wbr.getSheetIndex("Sheet 4")); + assertEquals(4, wbr.getSheetIndex("Sheet 5")); + assertEquals(5, wbr.getSheetIndex("Sheet 7")); + assertEquals(6, wbr.getSheetIndex("Sheet 3")); + assertEquals(7, wbr.getSheetIndex("Sheet 8")); + assertEquals(8, wbr.getSheetIndex("Sheet 9")); + assertEquals(9, wbr.getSheetIndex("Sheet 1")); + + // Now get the index by the sheet, not the name + for(int i=0; i<10; i++) { + Sheet s = wbr.getSheetAt(i); + assertEquals(i, wbr.getSheetIndex(s)); + } + } + + public void testCloneSheet() { + Workbook book = getTestDataProvider().createWorkbook(); + Sheet sheet = book.createSheet("TEST"); + sheet.createRow(0).createCell(0).setCellValue("Test"); + sheet.createRow(1).createCell(0).setCellValue(36.6); + sheet.addMergedRegion(new CellRangeAddress(0, 1, 0, 2)); + sheet.addMergedRegion(new CellRangeAddress(1, 2, 0, 2)); + assertTrue(sheet.isSelected()); + + Sheet clonedSheet = book.cloneSheet(0); + assertEquals("TEST (2)", clonedSheet.getSheetName()); + assertEquals(2, clonedSheet.getPhysicalNumberOfRows()); + assertEquals(2, clonedSheet.getNumMergedRegions()); + assertFalse(clonedSheet.isSelected()); + + //cloned sheet is a deep copy, adding rows in the original does not affect the clone + sheet.createRow(2).createCell(0).setCellValue(1); + sheet.addMergedRegion(new CellRangeAddress(0, 2, 0, 2)); + assertEquals(2, clonedSheet.getPhysicalNumberOfRows()); + assertEquals(2, clonedSheet.getPhysicalNumberOfRows()); + + clonedSheet.createRow(2).createCell(0).setCellValue(1); + clonedSheet.addMergedRegion(new CellRangeAddress(0, 2, 0, 2)); + assertEquals(3, clonedSheet.getPhysicalNumberOfRows()); + assertEquals(3, clonedSheet.getPhysicalNumberOfRows()); + + } + + public void testParentReferences(){ + Workbook workbook = getTestDataProvider().createWorkbook(); + Sheet sheet = workbook.createSheet(); + assertSame(workbook, sheet.getWorkbook()); + + Row row = sheet.createRow(0); + assertSame(sheet, row.getSheet()); + + Cell cell = row.createCell(1); + assertSame(sheet, cell.getSheet()); + assertSame(row, cell.getRow()); + + workbook = getTestDataProvider().writeOutAndReadBack(workbook); + sheet = workbook.getSheetAt(0); + assertSame(workbook, sheet.getWorkbook()); + + row = sheet.getRow(0); + assertSame(sheet, row.getSheet()); + + cell = row.getCell(1); + assertSame(sheet, cell.getSheet()); + assertSame(row, cell.getRow()); + } +}