]> source.dussan.org Git - poi.git/commitdiff
improved test cases: moved common hssf-xssf test to org.apache.poi.ss namespace,...
authorYegor Kozlov <yegor@apache.org>
Fri, 27 Mar 2009 11:50:52 +0000 (11:50 +0000)
committerYegor Kozlov <yegor@apache.org>
Fri, 27 Mar 2009 11:50:52 +0000 (11:50 +0000)
git-svn-id: https://svn.apache.org/repos/asf/poi/trunk@759112 13f79535-47bb-0310-9956-ffa450edef68

37 files changed:
src/java/org/apache/poi/hssf/record/aggregates/PageSettingsBlock.java
src/java/org/apache/poi/hssf/usermodel/HSSFCell.java
src/java/org/apache/poi/hssf/usermodel/HSSFName.java
src/java/org/apache/poi/hssf/usermodel/HSSFRow.java
src/java/org/apache/poi/hssf/usermodel/HSSFSheet.java
src/java/org/apache/poi/hssf/usermodel/HSSFWorkbook.java
src/ooxml/interfaces-jdk15/org/apache/poi/ss/usermodel/FormulaError.java
src/ooxml/interfaces-jdk15/org/apache/poi/ss/usermodel/Sheet.java
src/ooxml/interfaces-jdk15/org/apache/poi/ss/usermodel/Workbook.java
src/ooxml/java/org/apache/poi/xssf/usermodel/XSSFCell.java
src/ooxml/java/org/apache/poi/xssf/usermodel/XSSFPicture.java
src/ooxml/java/org/apache/poi/xssf/usermodel/XSSFRow.java
src/ooxml/java/org/apache/poi/xssf/usermodel/XSSFSheet.java
src/ooxml/java/org/apache/poi/xssf/usermodel/XSSFWorkbook.java
src/ooxml/testcases/org/apache/poi/xssf/usermodel/TestXSSFCell.java
src/ooxml/testcases/org/apache/poi/xssf/usermodel/TestXSSFDialogSheet.java
src/ooxml/testcases/org/apache/poi/xssf/usermodel/TestXSSFName.java
src/ooxml/testcases/org/apache/poi/xssf/usermodel/TestXSSFRow.java
src/ooxml/testcases/org/apache/poi/xssf/usermodel/TestXSSFSheet.java
src/ooxml/testcases/org/apache/poi/xssf/usermodel/TestXSSFWorkbook.java
src/testcases/org/apache/poi/hssf/usermodel/AllUserModelTests.java
src/testcases/org/apache/poi/hssf/usermodel/TestBugs.java
src/testcases/org/apache/poi/hssf/usermodel/TestHSSFCell.java
src/testcases/org/apache/poi/hssf/usermodel/TestHSSFClientAnchor.java
src/testcases/org/apache/poi/hssf/usermodel/TestHSSFName.java [new file with mode: 0755]
src/testcases/org/apache/poi/hssf/usermodel/TestHSSFRow.java
src/testcases/org/apache/poi/hssf/usermodel/TestHSSFSheet.java
src/testcases/org/apache/poi/hssf/usermodel/TestHSSFSheetOrder.java [deleted file]
src/testcases/org/apache/poi/hssf/usermodel/TestHSSFSheetSetOrder.java [deleted file]
src/testcases/org/apache/poi/hssf/usermodel/TestHSSFWorkbook.java
src/testcases/org/apache/poi/hssf/usermodel/TestWorkbook.java
src/testcases/org/apache/poi/ss/usermodel/BaseTestCell.java
src/testcases/org/apache/poi/ss/usermodel/BaseTestDataFormat.java
src/testcases/org/apache/poi/ss/usermodel/BaseTestNamedRange.java [new file with mode: 0755]
src/testcases/org/apache/poi/ss/usermodel/BaseTestRow.java [new file with mode: 0755]
src/testcases/org/apache/poi/ss/usermodel/BaseTestSheet.java [new file with mode: 0755]
src/testcases/org/apache/poi/ss/usermodel/BaseTestWorkbook.java [new file with mode: 0755]

index 1d818aa03859f71b3d0c8f4076dc91450f9bf1b6..99694dcc99b4be03754584af5abf335f5daf65ee 100644 (file)
@@ -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 );
index 7ad80298cbcfb61a9e4d8137070f36f52a69e1d3..c34587de7ca7c7fa9c615d4f4c833e9cb9f320eb 100644 (file)
@@ -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());
     }
 
index 8c21ae99628da93e09a9dd5bd0636b0e82b30811..979f30ecc7ec1af2eaa2c9657a3b14f9de1b98f9 100644 (file)
@@ -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);
                 }
             }
index f8848f0741297ac1d72ed25be944e2ba7e5d7205..50483d908f3e1f955789084626fbfa6b2cac3ec4 100644 (file)
@@ -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, <code>-1</code> 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));
+        }
     }
 
     /**
index cda40b35d408e0098f6e568a6dabd6a05f1daa71..4fdbfd00f97797f1885f768942ee433a5b017e9c 100644 (file)
@@ -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);
+    }
+
 }
index 4294f6ecdf44dfdde028f5b735fcb9a15345a684..f3e0a10f2bec4b6565fad25d6bc41243bb6f130d 100644 (file)
@@ -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);
     }
 
index d765e0f01afd70314eb602c399c2b0d4955c26a2..4f631c6ee4a2afeaf74ee34556e3f26b274ddc5f 100755 (executable)
@@ -106,7 +106,7 @@ public enum FormulaError {
     /**\r
      * @return numeric code of the error\r
      */\r
-    public int getCode() {\r
+    public byte getCode() {\r
         return type;\r
     }\r
 \r
@@ -118,7 +118,7 @@ public enum FormulaError {
     }\r
 \r
     private static Map<String, FormulaError> smap = new HashMap<String, FormulaError>();\r
-    private static Map<Integer, FormulaError> imap = new HashMap<Integer, FormulaError>();\r
+    private static Map<Byte, FormulaError> imap = new HashMap<Byte, FormulaError>();\r
     static{\r
         for (FormulaError error : values()) {\r
             imap.put(error.getCode(), error);\r
@@ -126,7 +126,7 @@ public enum FormulaError {
         }\r
     }\r
 \r
-    public static FormulaError forInt(int type){\r
+    public static FormulaError forInt(byte type){\r
         FormulaError err = imap.get(type);\r
         if(err == null) throw new IllegalArgumentException("Unknown error type: " + type);\r
         return err;\r
index 0a508c382e81a6e378054ac423c6b860f8a19682..ffeb96abda8d80f7b2f3e740a832d8bf2c7387e4 100644 (file)
@@ -224,6 +224,11 @@ public interface Sheet extends Iterable<Row> {
 
     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<Row> {
      * 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<Row> {
      * @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 <code>true</code> if this sheet is currently selected
+     */
+    boolean isSelected();
+
 }
index b33dc5745c7a038304a372ee69e3f75f2457f35e..051a48f67e0bfa1815cf3d522a59ae06b5aa1a4d 100644 (file)
@@ -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.
index bd8c79a0c60b14287e5ebed36ad03b66b957a0d1..b517246196c8ecd9894d5077267ea8ae7f6c20d4 100644 (file)
@@ -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:
index 3fc0e52e8ee3020778650f17ee4922c1c421503e..e58b58377b19507712d4ecf83a6398ebc3926cf4 100755 (executable)
@@ -18,6 +18,7 @@ package org.apache.poi.xssf.usermodel;
 \r
 import org.openxmlformats.schemas.drawingml.x2006.spreadsheetDrawing.*;\r
 import org.openxmlformats.schemas.drawingml.x2006.main.*;\r
+import org.openxmlformats.schemas.spreadsheetml.x2006.main.CTCol;\r
 import org.apache.poi.ss.usermodel.Workbook;\r
 import org.apache.poi.ss.usermodel.Picture;\r
 import org.apache.poi.util.POILogger;\r
@@ -43,6 +44,15 @@ import java.util.Iterator;
 public class XSSFPicture extends XSSFShape implements Picture {\r
     private static final POILogger logger = POILogFactory.getLogger(XSSFPicture.class);\r
 \r
+    /**\r
+     * Column width measured as the number of characters of the maximum digit width of the\r
+     * numbers 0, 1, 2, ..., 9 as rendered in the normal style's font. There are 4 pixels of margin\r
+     * padding (two on each side), plus 1 pixel padding for the gridlines.\r
+     *\r
+     * This value is the same for default font in Office 2007 (Calibry) and Office 2003 and earlier (Arial)\r
+     */\r
+    private static float DEFAULT_COLUMN_WIDTH = 9.140625f;\r
+\r
     /**\r
      * A default instance of CTShape used for creating new shapes.\r
      */\r
@@ -230,9 +240,11 @@ public class XSSFPicture extends XSSFShape implements Picture {
 \r
     private float getColumnWidthInPixels(int columnIndex){\r
         XSSFSheet sheet = (XSSFSheet)getDrawing().getParent();\r
-        float numChars = (float)sheet.getColumnWidth(columnIndex)/256;\r
 \r
-        return numChars*XSSFWorkbook.DEFAULT_CHARACTER_WIDTH;\r
+        CTCol col = sheet.getColumnHelper().getColumn(columnIndex, false);\r
+        double numChars = col == null || !col.isSetWidth() ? DEFAULT_COLUMN_WIDTH : col.getWidth();\r
+\r
+        return (float)numChars*XSSFWorkbook.DEFAULT_CHARACTER_WIDTH;\r
     }\r
 \r
     private float getRowHeightInPixels(int rowIndex){\r
index 0b55e52b7c476fdb2ad3b7e24c2443705273ad65..20cbcf36773af56994e6ba4d051b5f027f4f29a6 100644 (file)
@@ -45,7 +45,7 @@ public class XSSFRow implements Row, Comparable<XSSFRow> {
     /**
      * 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<XSSFRow> {
      * @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<XSSFRow> {
      * @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);
     }
index ac82bd24a2b9e37f52f1f7a4d4694fd33dca9b08..8bf5172bdfd8be57015d8685a6f2befbc9118fa0 100644 (file)
@@ -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<Integer, XSSFRow> 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);
index 4f2cfd43fbe60fa0dd2d3efa7df264ee0f449b27..8af2c29a2e385698fb5f5db0e0e513fd75d7fd06 100644 (file)
@@ -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<X
      * @return XSSFSheet representing the new sheet.
      */
     public XSSFSheet createSheet() {
-        String sheetname = "Sheet" + (sheets.size() + 1);
+        String sheetname = "Sheet" + (sheets.size());
         return createSheet(sheetname);
     }
 
@@ -777,6 +767,8 @@ public class XSSFWorkbook extends POIXMLDocument implements Workbook, Iterable<X
     public void removeSheetAt(int index) {
         validateSheetIndex(index);
 
+        XSSFSheet sheet = getSheetAt(index);
+        removeRelation(sheet);
         this.sheets.remove(index);
         this.workbook.getSheets().removeSheet(index);
     }
@@ -1009,7 +1001,7 @@ public class XSSFWorkbook extends POIXMLDocument implements Workbook, Iterable<X
     /**
      * We only set one sheet as selected for compatibility with HSSF.
      */
-    public void setSelectedTab(short index) {
+    public void setSelectedTab(int index) {
         for (int i = 0 ; i < sheets.size() ; ++i) {
             XSSFSheet sheet = sheets.get(i);
             sheet.setSelected(i == index);
@@ -1042,10 +1034,16 @@ public class XSSFWorkbook extends POIXMLDocument implements Workbook, Iterable<X
         int idx = getSheetIndex(sheetname);
         sheets.add(pos, sheets.remove(idx));
         // Reorder CTSheets
-        XmlObject cts = workbook.getSheets().getSheetArray(idx).copy();
+        CTSheets ct = workbook.getSheets();
+        XmlObject cts = ct.getSheetArray(idx).copy();
         workbook.getSheets().removeSheet(idx);
-        CTSheet newcts = workbook.getSheets().insertNewSheet(pos);
+        CTSheet newcts = ct.insertNewSheet(pos);
         newcts.set(cts);
+
+        //notify sheets
+        for(int i=0; i < sheets.size(); i++) {
+            sheets.get(i).sheet = ct.getSheetArray(i);
+        }
     }
 
     /**
index f422bedb42f06ac44e5ef89892458fe08671ad6c..f73368650c27e995d6b9735a7fe560ec554d4ccb 100755 (executable)
@@ -31,27 +31,8 @@ public final class TestXSSFCell extends BaseTestCell {
         return XSSFITestDataProvider.getInstance();
     }
 
-    public void testSetValues() {
-        baseTestSetValues();
-    }
-
-   public void testBoolErr() {
-        baseTestBoolErr();
-    }
-
-    public void testFormulaStyle() {
-        baseTestFormulaStyle();
-    }
-
-    public void testToString() {
-        baseTestToString();
-    }
-
-    public void testSetFormulaValue() {
-        baseTestSetFormulaValue();
-    }
-
     public void testChangeCellType() {
+        //for performance reasons combine baseTestChangeType* together 
         Workbook wb = getTestDataProvider().createWorkbook();
         Row row = wb.createSheet().createRow(0);
         baseTestChangeTypeStringToBool(row.createCell(0));
@@ -62,6 +43,4 @@ public final class TestXSSFCell extends BaseTestCell {
         //TODO: works in HSSF but fails in XSSF
         //baseTestChangeTypeFormulaToBoolean(row.createCell(4));
     }
-
-
 }
\ No newline at end of file
index 012b2bd67e195c2b745fbaf5c10e2e63a39a7f7f..8a72b4105a3a917efd1da4aba49aed18181d591d 100644 (file)
@@ -66,48 +66,7 @@ public class TestXSSFDialogSheet extends TestCase {
         assertFalse(sheet.getFitToPage());
     }
     
-    public void testGetSetMargin() {
-        XSSFWorkbook workbook = new XSSFWorkbook();
-        XSSFDialogsheet sheet = workbook.createDialogsheet("Dialogsheet 1", null);
-        assertEquals((double) 0, 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();
         XSSFDialogsheet sheet = workbook.createDialogsheet("Dialogsheet 1", null);
index 4d273ea26caccdf134a735c09a1dd1c7fb5061e1..37f95dfa33aebbe5eb37371f63f237bf6f0d29ee 100755 (executable)
@@ -18,144 +18,17 @@ package org.apache.poi.xssf.usermodel;
 \r
 import junit.framework.TestCase;\r
 import org.apache.poi.xssf.XSSFTestDataSamples;\r
+import org.apache.poi.xssf.XSSFITestDataProvider;\r
+import org.apache.poi.ss.usermodel.BaseTestNamedRange;\r
 \r
 /**\r
  * @author Yegor Kozlov\r
  */\r
-public class TestXSSFName extends TestCase {\r
+public class TestXSSFName extends BaseTestNamedRange {\r
 \r
-    public void testCreate(){\r
-        // Create a new workbook\r
-        XSSFWorkbook wb = new XSSFWorkbook();\r
-\r
-        XSSFName name1 = wb.createName();\r
-        name1.setNameName("testOne");\r
-\r
-        //setting a duplicate name should throw IllegalArgumentException\r
-        XSSFName name2 = wb.createName();\r
-        try {\r
-            name2.setNameName("testOne");\r
-            fail("expected exception");\r
-        } catch (IllegalArgumentException e){\r
-            assertEquals("The workbook already contains this name: testOne", e.getMessage());\r
-        }\r
-\r
-        name2.setNameName("testTwo");\r
-\r
-        String ref1 = "Test1!$A$1:$B$1";\r
-        name1.setRefersToFormula(ref1);\r
-        assertEquals(ref1, name1.getRefersToFormula());\r
-        assertEquals("Test1", name1.getSheetName());\r
-\r
-        String ref2 = "'Testing Named Ranges'!$A$1:$B$1";\r
-        name1.setRefersToFormula(ref2);\r
-        assertEquals("'Testing Named Ranges'!$A$1:$B$1", name1.getRefersToFormula());\r
-        assertEquals("Testing Named Ranges", name1.getSheetName());\r
-\r
-        assertEquals(-1, name1.getSheetIndex());\r
-        name1.setSheetIndex(-1);\r
-        assertEquals(-1, name1.getSheetIndex());\r
-        try {\r
-            name1.setSheetIndex(1);\r
-            fail("should throw IllegalArgumentException");\r
-        } catch(IllegalArgumentException e){\r
-            assertEquals("Sheet index (1) is out of range", e.getMessage());\r
-        }\r
-        wb.createSheet();\r
-        try {\r
-            name1.setSheetIndex(1);\r
-            fail("should throw IllegalArgumentException");\r
-        } catch(IllegalArgumentException e){\r
-            assertEquals("Sheet index (1) is out of range (0..0)", e.getMessage());\r
-        }\r
-        wb.createSheet();\r
-        name1.setSheetIndex(1);\r
-        assertEquals(1, name1.getSheetIndex());\r
-    }\r
-\r
-    public void testUnicodeNamedRange() {\r
-        XSSFWorkbook workBook = new XSSFWorkbook();\r
-        workBook.createSheet("Test");\r
-        XSSFName name = workBook.createName();\r
-        name.setNameName("\u03B1");\r
-        name.setRefersToFormula("Test!$D$3:$E$8");\r
-\r
-\r
-        XSSFWorkbook workBook2 = XSSFTestDataSamples.writeOutAndReadBack(workBook);\r
-        XSSFName name2 = workBook2.getNameAt(0);\r
-\r
-        assertEquals("\u03B1", name2.getNameName());\r
-        assertEquals("Test!$D$3:$E$8", name2.getRefersToFormula());\r
-    }\r
-\r
-    public void testAddRemove() {\r
-        XSSFWorkbook wb = new XSSFWorkbook();\r
-        assertEquals(0, wb.getNumberOfNames());\r
-        XSSFName name1 = wb.createName();\r
-        name1.setNameName("name1");\r
-        assertEquals(1, wb.getNumberOfNames());\r
-\r
-        XSSFName name2 = wb.createName();\r
-        name2.setNameName("name2");\r
-        assertEquals(2, wb.getNumberOfNames());\r
-\r
-        XSSFName name3 = wb.createName();\r
-        name3.setNameName("name3");\r
-        assertEquals(3, wb.getNumberOfNames());\r
-\r
-        wb.removeName("name2");\r
-        assertEquals(2, wb.getNumberOfNames());\r
-\r
-        wb.removeName(0);\r
-        assertEquals(1, wb.getNumberOfNames());\r
-    }\r
-\r
-    public void testScope() {\r
-        XSSFWorkbook wb = new XSSFWorkbook();\r
-        wb.createSheet();\r
-        wb.createSheet();\r
-        \r
-        XSSFName name;\r
-\r
-        name = wb.createName();\r
-        name.setNameName("aaa");\r
-        name = wb.createName();\r
-        try {\r
-            name.setNameName("aaa");\r
-            fail("Expected exception");\r
-        } catch(Exception e){\r
-            assertEquals("The workbook already contains this name: aaa", e.getMessage());\r
-        }\r
-\r
-        name = wb.createName();\r
-        name.setSheetIndex(0);\r
-        name.setNameName("aaa");\r
-        name = wb.createName();\r
-        name.setSheetIndex(0);\r
-        try {\r
-            name.setNameName("aaa");\r
-            fail("Expected exception");\r
-        } catch(Exception e){\r
-            assertEquals("The sheet already contains this name: aaa", e.getMessage());\r
-        }\r
-\r
-        name = wb.createName();\r
-        name.setSheetIndex(1);\r
-        name.setNameName("aaa");\r
-        name = wb.createName();\r
-        name.setSheetIndex(1);\r
-        try {\r
-            name.setNameName("aaa");\r
-            fail("Expected exception");\r
-        } catch(Exception e){\r
-            assertEquals("The sheet already contains this name: aaa", e.getMessage());\r
-        }\r
-\r
-        int cnt = 0;\r
-        for (int i = 0; i < wb.getNumberOfNames(); i++) {\r
-            if("aaa".equals(wb.getNameAt(i).getNameName())) cnt++;\r
-        }\r
-        assertEquals(3, cnt);\r
+    @Override\r
+    protected XSSFITestDataProvider getTestDataProvider(){\r
+        return XSSFITestDataProvider.getInstance();\r
     }\r
 \r
 }\r
index fc968be6bc14b509d53b9eb0bcc81d05fa317093..7da2f62281f6d03e73808eca11496647763472ea 100644 (file)
@@ -23,12 +23,10 @@ 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.Workbook;
-import org.apache.poi.ss.usermodel.Sheet;
+import org.apache.poi.ss.usermodel.*;
 import org.apache.poi.xssf.model.SharedStringsTable;
 import org.apache.poi.xssf.XSSFTestDataSamples;
+import org.apache.poi.xssf.XSSFITestDataProvider;
 import org.apache.poi.hssf.usermodel.HSSFSheet;
 import org.apache.poi.hssf.usermodel.HSSFRow;
 import org.apache.poi.hssf.usermodel.HSSFWorkbook;
@@ -37,303 +35,18 @@ import org.apache.poi.hssf.usermodel.HSSFCell;
 /**
  * Tests for XSSFRow
  */
-public final class TestXSSFRow extends TestCase {
+public final class TestXSSFRow extends BaseTestRow {
 
-    /**
-     * Test adding cells to a row in various places and see if we can find them again.
-     */
-    public void testAddAndIterateCells() {
-        XSSFSheet sheet = createParentObjects();
-        XSSFRow row = sheet.createRow(0);
-
-        // One cell at the beginning
-        Cell cell1 = row.createCell((short) 1);
-        Iterator<Cell> 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());
-    }
-
-    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 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());
+    @Override
+    protected XSSFITestDataProvider getTestDataProvider(){
+        return XSSFITestDataProvider.getInstance();
     }
 
-    /**
-     * 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;
+    public void testRowBounds() {
+        baseTestRowBounds(XSSFRow.MAX_ROW_NUMBER);
     }
 
-    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);
     }
 }
index c19ea200f1ec21415e5505f266863006172c2909..897cf43f801a89b35f062d61d7100bfb9c254286 100644 (file)
@@ -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<Row> 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<Row> 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<Row> 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());
-    }
-
+    /**
+     * Get / Set column width and check the actual values of the underlying XML beans
+     */
+    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));
 
-    public void testSetColumnGroupCollapsed(){
-       
-    }
-    
+        // Now check the low level stuff, and check that's all
+        //  been set correctly
+        XSSFSheet xs = sheet;
+        CTWorksheet cts = xs.getCTWorksheet();
 
-    public void testColumnWidthCompatibility() {
-        Workbook wb1 = new HSSFWorkbook();
-        Workbook wb2 = new XSSFWorkbook();
+        CTCols[] cols_s = cts.getColsArray();
+        assertEquals(1, cols_s.length);
+        CTCols cols = cols_s[0];
+        assertEquals(1, cols.sizeOfColArray());
+        CTCol col = cols.getColArray(0);
 
-        Sheet sh1 = wb1.createSheet();
-        Sheet sh2 = wb2.createSheet();
+        // XML is 1 based, POI is 0 based
+        assertEquals(2, col.getMin());
+        assertEquals(2, col.getMax());
+        assertEquals(22.0, col.getWidth());
 
-        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));
+        // Now set another
+        sheet.setColumnWidth(3, 33*256);
 
-        sh1.setDefaultColumnWidth(1000);
-        sh2.setDefaultColumnWidth(1000);
-        assertEquals(1000, sh2.getDefaultColumnWidth());
-        assertEquals(sh1.getDefaultColumnWidth(), sh2.getDefaultColumnWidth());
+        cols_s = cts.getColsArray();
+        assertEquals(1, cols_s.length);
+        cols = cols_s[0];
+        assertEquals(2, cols.sizeOfColArray());
 
-        sh1.setColumnWidth(0, 500);
-        sh2.setColumnWidth(0, 500);
-        assertEquals(500, sh2.getColumnWidth(0));
-        assertEquals(sh1.getColumnWidth(0), sh2.getColumnWidth(0));
-    }
+        col = cols.getColArray(0);
+        assertEquals(2, col.getMin()); // POI 1
+        assertEquals(2, col.getMax());
+        assertEquals(22.0, col.getWidth());
 
-    /**
-     * Tests the display of gridlines, formulas, and rowcolheadings.
-     * @author Shawn Laubach (slaubach at apache dot org)
-     */
-    public void testDisplayOptions() {
-        Workbook wb = new XSSFWorkbook();
-        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 = XSSFTestDataSamples.writeOutAndReadBack(wb);
-        sheet = wb.getSheetAt(0);
-
-        assertEquals(sheet.isDisplayGridlines(), false);
-        assertEquals(sheet.isDisplayRowColHeadings(), false);
-        assertEquals(sheet.isDisplayFormulas(), true);
-        assertEquals(sheet.isDisplayZeros(), false);
+        col = cols.getColArray(1);
+        assertEquals(4, col.getMin()); // POI 3
+        assertEquals(4, col.getMax());
+        assertEquals(33.0, col.getWidth());
     }
 
 }
index 73c181bd2bbb9f4c9ba525c62512c40dbdcc2354..40d16925aad186118ba4b2831b69bb403fcc7e14 100644 (file)
@@ -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");
-       }
 }
index 72d420cb4f8bf60e5b4234540e438ad90dc1bb7e..5effed4b554c40f574bd3cf72745c657c2d1e927 100755 (executable)
@@ -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);
index af1ec26aa03be9ac9c2d0035fc8fb4cb8301c1fa..c3b0fe2c924557eb652e3d367253660ecb4e0568 100644 (file)
@@ -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
      *
index e00c0423665fdf94d077185b640bc1900cc4e014..2e95772216ac47388ee918351354f40dbe3aa440 100644 (file)
@@ -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 {
index 655f78eddb8838d805298a210fc58f6bbb0a626c..5de4fc787b149b5631f246378135b60bcf65ea30 100644 (file)
@@ -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/TestHSSFName.java b/src/testcases/org/apache/poi/hssf/usermodel/TestHSSFName.java
new file mode 100755 (executable)
index 0000000..56bd25b
--- /dev/null
@@ -0,0 +1,48 @@
+/* ====================================================================
+   Licensed to the Apache Software Foundation (ASF) under one or more
+   contributor license agreements.  See the NOTICE file distributed with
+   this work for additional information regarding copyright ownership.
+   The ASF licenses this file to You under the Apache License, Version 2.0
+   (the "License"); you may not use this file except in compliance with
+   the License.  You may obtain a copy of the License at
+
+       http://www.apache.org/licenses/LICENSE-2.0
+
+   Unless required by applicable law or agreed to in writing, software
+   distributed under the License is distributed on an "AS IS" BASIS,
+   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+   See the License for the specific language governing permissions and
+   limitations under the License.
+==================================================================== */
+
+package org.apache.poi.hssf.usermodel;
+
+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 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
index 444eef108e124ba2f8b788133b5a2a1fbcd8fca0..1b63f9f233906460fe7d5058e9cc628729a00525 100644 (file)
@@ -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());
+    @Override
+    protected HSSFITestDataProvider getTestDataProvider(){
+        return HSSFITestDataProvider.getInstance();
+    }
 
-        row.createCell(1);
-        assertEquals(1, row.getFirstCellNum());
-        assertEquals(3, row.getLastCellNum());
+    public void testRowBounds() {
+        baseTestRowBounds(RowRecord.MAX_ROW_NUMBER);
+    }
 
-        // 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());
+    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());
-    }
 }
index 446034ebfef48305df954e0f2ab904be1cc003eb..65f2f7689109ca3378e06db4f490e7c4c902c8c7 100644 (file)
@@ -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 (file)
index 450a4e8..0000000
+++ /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/TestHSSFSheetSetOrder.java b/src/testcases/org/apache/poi/hssf/usermodel/TestHSSFSheetSetOrder.java
deleted file mode 100644 (file)
index 974011c..0000000
+++ /dev/null
@@ -1,66 +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 junit.framework.TestCase;
-
-import org.apache.poi.hssf.model.Sheet;
-
-/**
-* 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);
-         
-        
-   }
-
-
-}
-
-
index 692ca86b2500e336b8e6dd22bc987df3d52f2df7..880f3ecf248b2a60edf949785a1e2116d1cb442a 100644 (file)
@@ -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
index cfcb3670e2dfd59ca288e7c65b2b3af4da209fbf..786838122005a0f26a3a7bf736a744cd0b45c48f 100644 (file)
@@ -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());
-
-
-    }
 }
index 9d7c78fb0fc32b99c7898c856d40dfa01434de5e..c5259feef25153f50d8a6337f0cc3176f1cb050e 100755 (executable)
@@ -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
index a65c73a051d0a598b949ee01ea84d03627ecbc50..bfaed8d37090502ccbb12ea805c5cbd88a36b6d0 100755 (executable)
@@ -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 (executable)
index 0000000..36df11b
--- /dev/null
@@ -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 (executable)
index 0000000..5aee7a1
--- /dev/null
@@ -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<Cell> 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 (executable)
index 0000000..e2e70b4
--- /dev/null
@@ -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<Row> 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<Row> 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 (executable)
index 0000000..eafda06
--- /dev/null
@@ -0,0 +1,276 @@
+package org.apache.poi.ss.usermodel;\r
+\r
+import junit.framework.TestCase;\r
+import junit.framework.AssertionFailedError;\r
+import org.apache.poi.ss.ITestDataProvider;\r
+import org.apache.poi.ss.util.CellRangeAddress;\r
+\r
+/**\r
+ * @author Yegor Kozlov\r
+ */\r
+public abstract class BaseTestWorkbook extends TestCase {\r
+\r
+    protected abstract ITestDataProvider getTestDataProvider();\r
+\r
+    public void testCreateSheet() {\r
+        Workbook wb = getTestDataProvider().createWorkbook();\r
+        assertEquals(0, wb.getNumberOfSheets());\r
+\r
+        //getting a sheet by invalid index or non-existing name\r
+        assertNull(wb.getSheet("Sheet1"));\r
+        try {\r
+            wb.getSheetAt(0);\r
+            fail("should have thrown exceptiuon due to invalid sheet index");\r
+        } catch (IllegalArgumentException e) {\r
+            // expected during successful test\r
+            ;\r
+        }\r
+\r
+        Sheet sheet0 = wb.createSheet();\r
+        Sheet sheet1 = wb.createSheet();\r
+        assertEquals("Sheet0", sheet0.getSheetName());\r
+        assertEquals("Sheet1", sheet1.getSheetName());\r
+        assertEquals(2, wb.getNumberOfSheets());\r
+\r
+        //fetching sheets by name is case-insensitive\r
+        Sheet originalSheet = wb.createSheet("Sheet3");\r
+        Sheet fetchedSheet = wb.getSheet("sheet3");\r
+        if (fetchedSheet == null) {\r
+            throw new AssertionFailedError("Identified bug 44892");\r
+        }\r
+        assertEquals("Sheet3", fetchedSheet.getSheetName());\r
+        assertEquals(3, wb.getNumberOfSheets());\r
+        assertSame(originalSheet, fetchedSheet);\r
+        try {\r
+            wb.createSheet("sHeeT3");\r
+            fail("should have thrown exceptiuon due to duplicate sheet name");\r
+        } catch (IllegalArgumentException e) {\r
+            // expected during successful test\r
+            assertEquals("The workbook already contains a sheet of this name", e.getMessage());\r
+        }\r
+\r
+        //names cannot be blank or contain any of /\*?[]\r
+        String[] invalidNames = {"", "Sheet/", "Sheet\\",\r
+                "Sheet?", "Sheet*", "Sheet[", "Sheet]"};\r
+        for (String sheetName : invalidNames) {\r
+            try {\r
+                wb.createSheet(sheetName);\r
+                fail("should have thrown exceptiuon due to invalid sheet name: " + sheetName);\r
+            } catch (IllegalArgumentException e) {\r
+                // expected during successful test\r
+                ;\r
+            }\r
+        }\r
+        //still have 3 sheets\r
+        assertEquals(3, wb.getNumberOfSheets());\r
+\r
+        //change the name of the 3rd sheet\r
+        wb.setSheetName(2, "I changed!");\r
+\r
+        //try to assign an invalid name to the 2nd sheet\r
+        try {\r
+            wb.setSheetName(1, "[I'm invalid]");\r
+            fail("should have thrown exceptiuon due to invalid sheet name");\r
+        } catch (IllegalArgumentException e) {\r
+            ; // expected during successful test\r
+        }\r
+\r
+        //check\r
+        assertEquals(0, wb.getSheetIndex("sheet0"));\r
+        assertEquals(1, wb.getSheetIndex("sheet1"));\r
+        assertEquals(2, wb.getSheetIndex("I changed!"));\r
+\r
+        assertSame(sheet0, wb.getSheet("sheet0"));\r
+        assertSame(sheet1, wb.getSheet("sheet1"));\r
+        assertSame(originalSheet, wb.getSheet("I changed!"));\r
+        assertNull(wb.getSheet("unknown"));\r
+\r
+        //serialize and read again\r
+        wb = getTestDataProvider().writeOutAndReadBack(wb);\r
+        assertEquals(3, wb.getNumberOfSheets());\r
+        assertEquals(0, wb.getSheetIndex("sheet0"));\r
+        assertEquals(1, wb.getSheetIndex("sheet1"));\r
+        assertEquals(2, wb.getSheetIndex("I changed!"));\r
+\r
+    }\r
+\r
+    public void testRemoveSheetAt() {\r
+        Workbook workbook = getTestDataProvider().createWorkbook();\r
+        workbook.createSheet("sheet1");\r
+        workbook.createSheet("sheet2");\r
+        workbook.createSheet("sheet3");\r
+        assertEquals(3, workbook.getNumberOfSheets());\r
+        workbook.removeSheetAt(1);\r
+        assertEquals(2, workbook.getNumberOfSheets());\r
+        assertEquals("sheet3", workbook.getSheetName(1));\r
+        workbook.removeSheetAt(0);\r
+        assertEquals(1, workbook.getNumberOfSheets());\r
+        assertEquals("sheet3", workbook.getSheetName(0));\r
+        workbook.removeSheetAt(0);\r
+        assertEquals(0, workbook.getNumberOfSheets());\r
+    }\r
+\r
+    public void testDefaultValues() {\r
+        Workbook b = getTestDataProvider().createWorkbook();\r
+        assertEquals(0, b.getActiveSheetIndex());\r
+        assertEquals(0, b.getFirstVisibleTab());\r
+        assertEquals(0, b.getNumberOfNames());\r
+        assertEquals(0, b.getNumberOfSheets());\r
+    }\r
+\r
+\r
+    public void testSheetSelection() {\r
+        Workbook b = getTestDataProvider().createWorkbook();\r
+        b.createSheet("Sheet One");\r
+        b.createSheet("Sheet Two");\r
+        b.setActiveSheet(1);\r
+        b.setSelectedTab(1);\r
+        b.setFirstVisibleTab(1);\r
+        assertEquals(1, b.getActiveSheetIndex());\r
+        assertEquals(1, b.getFirstVisibleTab());\r
+    }\r
+\r
+    public void testPrintArea() {\r
+        Workbook workbook = getTestDataProvider().createWorkbook();\r
+        Sheet sheet1 = workbook.createSheet("Test Print Area");\r
+        String sheetName1 = sheet1.getSheetName();\r
+\r
+        // workbook.setPrintArea(0, reference);\r
+        workbook.setPrintArea(0, 1, 5, 4, 9);\r
+        String retrievedPrintArea = workbook.getPrintArea(0);\r
+        assertEquals("'" + sheetName1 + "'!$B$5:$F$10", retrievedPrintArea);\r
+\r
+        String reference = "$A$1:$B$1";\r
+        workbook.setPrintArea(0, reference);\r
+        retrievedPrintArea = workbook.getPrintArea(0);\r
+        assertEquals("'" + sheetName1 + "'!" + reference, retrievedPrintArea);\r
+\r
+        workbook.removePrintArea(0);\r
+        assertNull(workbook.getPrintArea(0));\r
+    }\r
+\r
+    public void testGetSetActiveSheet(){\r
+        Workbook workbook = getTestDataProvider().createWorkbook();\r
+        assertEquals(0, workbook.getActiveSheetIndex());\r
+\r
+               workbook.createSheet("sheet1");\r
+               workbook.createSheet("sheet2");\r
+               workbook.createSheet("sheet3");\r
+               // set second sheet\r
+               workbook.setActiveSheet(1);\r
+               // test if second sheet is set up\r
+               assertEquals(1, workbook.getActiveSheetIndex());\r
+\r
+        workbook.setActiveSheet(0);\r
+        // test if second sheet is set up\r
+        assertEquals(0, workbook.getActiveSheetIndex());\r
+       }\r
+\r
+    public void testSetSheetOrder() {\r
+        Workbook wb = getTestDataProvider().createWorkbook();\r
+\r
+        for (int i=0; i < 10; i++) {\r
+                       Sheet sh = wb.createSheet("Sheet " + i);\r
+        }\r
+\r
+        // Check the initial order\r
+        assertEquals(0, wb.getSheetIndex("Sheet 0"));\r
+        assertEquals(1, wb.getSheetIndex("Sheet 1"));\r
+        assertEquals(2, wb.getSheetIndex("Sheet 2"));\r
+        assertEquals(3, wb.getSheetIndex("Sheet 3"));\r
+        assertEquals(4, wb.getSheetIndex("Sheet 4"));\r
+        assertEquals(5, wb.getSheetIndex("Sheet 5"));\r
+        assertEquals(6, wb.getSheetIndex("Sheet 6"));\r
+        assertEquals(7, wb.getSheetIndex("Sheet 7"));\r
+        assertEquals(8, wb.getSheetIndex("Sheet 8"));\r
+        assertEquals(9, wb.getSheetIndex("Sheet 9"));\r
+\r
+        // Change\r
+        wb.setSheetOrder("Sheet 6", 0);\r
+        wb.setSheetOrder("Sheet 3", 7);\r
+        wb.setSheetOrder("Sheet 1", 9);\r
+\r
+        // Check they're currently right\r
+        assertEquals(0, wb.getSheetIndex("Sheet 6"));\r
+        assertEquals(1, wb.getSheetIndex("Sheet 0"));\r
+        assertEquals(2, wb.getSheetIndex("Sheet 2"));\r
+        assertEquals(3, wb.getSheetIndex("Sheet 4"));\r
+        assertEquals(4, wb.getSheetIndex("Sheet 5"));\r
+        assertEquals(5, wb.getSheetIndex("Sheet 7"));\r
+        assertEquals(6, wb.getSheetIndex("Sheet 3"));\r
+        assertEquals(7, wb.getSheetIndex("Sheet 8"));\r
+        assertEquals(8, wb.getSheetIndex("Sheet 9"));\r
+        assertEquals(9, wb.getSheetIndex("Sheet 1"));\r
+\r
+        Workbook wbr = getTestDataProvider().writeOutAndReadBack(wb);\r
+\r
+        assertEquals(0, wbr.getSheetIndex("Sheet 6"));\r
+        assertEquals(1, wbr.getSheetIndex("Sheet 0"));\r
+        assertEquals(2, wbr.getSheetIndex("Sheet 2"));\r
+        assertEquals(3, wbr.getSheetIndex("Sheet 4"));\r
+        assertEquals(4, wbr.getSheetIndex("Sheet 5"));\r
+        assertEquals(5, wbr.getSheetIndex("Sheet 7"));\r
+        assertEquals(6, wbr.getSheetIndex("Sheet 3"));\r
+        assertEquals(7, wbr.getSheetIndex("Sheet 8"));\r
+        assertEquals(8, wbr.getSheetIndex("Sheet 9"));\r
+        assertEquals(9, wbr.getSheetIndex("Sheet 1"));\r
+\r
+        // Now get the index by the sheet, not the name\r
+        for(int i=0; i<10; i++) {\r
+               Sheet s = wbr.getSheetAt(i);\r
+               assertEquals(i, wbr.getSheetIndex(s));\r
+        }\r
+    }\r
+\r
+    public void testCloneSheet() {\r
+        Workbook book = getTestDataProvider().createWorkbook();\r
+        Sheet sheet = book.createSheet("TEST");\r
+        sheet.createRow(0).createCell(0).setCellValue("Test");\r
+        sheet.createRow(1).createCell(0).setCellValue(36.6);\r
+        sheet.addMergedRegion(new CellRangeAddress(0, 1, 0, 2));\r
+        sheet.addMergedRegion(new CellRangeAddress(1, 2, 0, 2));\r
+        assertTrue(sheet.isSelected());\r
+\r
+        Sheet clonedSheet = book.cloneSheet(0);\r
+        assertEquals("TEST (2)", clonedSheet.getSheetName());\r
+        assertEquals(2, clonedSheet.getPhysicalNumberOfRows());\r
+        assertEquals(2, clonedSheet.getNumMergedRegions());\r
+        assertFalse(clonedSheet.isSelected());\r
+\r
+        //cloned sheet is a deep copy, adding rows in the original does not affect the clone\r
+        sheet.createRow(2).createCell(0).setCellValue(1);\r
+        sheet.addMergedRegion(new CellRangeAddress(0, 2, 0, 2));\r
+        assertEquals(2, clonedSheet.getPhysicalNumberOfRows());\r
+        assertEquals(2, clonedSheet.getPhysicalNumberOfRows());\r
+\r
+        clonedSheet.createRow(2).createCell(0).setCellValue(1);\r
+        clonedSheet.addMergedRegion(new CellRangeAddress(0, 2, 0, 2));\r
+        assertEquals(3, clonedSheet.getPhysicalNumberOfRows());\r
+        assertEquals(3, clonedSheet.getPhysicalNumberOfRows());\r
+\r
+    }\r
+\r
+    public void testParentReferences(){\r
+        Workbook workbook = getTestDataProvider().createWorkbook();\r
+        Sheet sheet = workbook.createSheet();\r
+        assertSame(workbook, sheet.getWorkbook());\r
+\r
+        Row row = sheet.createRow(0);\r
+        assertSame(sheet, row.getSheet());\r
+\r
+        Cell cell = row.createCell(1);\r
+        assertSame(sheet, cell.getSheet());\r
+        assertSame(row, cell.getRow());\r
+\r
+        workbook = getTestDataProvider().writeOutAndReadBack(workbook);\r
+        sheet = workbook.getSheetAt(0);\r
+        assertSame(workbook, sheet.getWorkbook());\r
+\r
+        row = sheet.getRow(0);\r
+        assertSame(sheet, row.getSheet());\r
+\r
+        cell = row.getCell(1);\r
+        assertSame(sheet, cell.getSheet());\r
+        assertSame(row, cell.getRow());\r
+    }\r
+}\r