diff options
35 files changed, 1630 insertions, 1799 deletions
diff --git a/src/java/org/apache/poi/hssf/usermodel/HSSFCell.java b/src/java/org/apache/poi/hssf/usermodel/HSSFCell.java index c34587de7c..65736aa9f0 100644 --- a/src/java/org/apache/poi/hssf/usermodel/HSSFCell.java +++ b/src/java/org/apache/poi/hssf/usermodel/HSSFCell.java @@ -74,18 +74,6 @@ import org.apache.poi.ss.formula.FormulaType; * @author Yegor Kozlov cell comments support */ public class HSSFCell implements Cell { - /** Numeric Cell type (0) @see #setCellType(int) @see #getCellType() */ - public final static int CELL_TYPE_NUMERIC = 0; - /** String Cell type (1) @see #setCellType(int) @see #getCellType() */ - public final static int CELL_TYPE_STRING = 1; - /** Formula Cell type (2) @see #setCellType(int) @see #getCellType() */ - public final static int CELL_TYPE_FORMULA = 2; - /** Blank Cell type (3) @see #setCellType(int) @see #getCellType() */ - public final static int CELL_TYPE_BLANK = 3; - /** Boolean Cell type (4) @see #setCellType(int) @see #getCellType() */ - public final static int CELL_TYPE_BOOLEAN = 4; - /** Error Cell type (5) @see #setCellType(int) @see #getCellType() */ - public final static int CELL_TYPE_ERROR = 5; private static final String FILE_FORMAT_NAME = "BIFF8"; /** diff --git a/src/java/org/apache/poi/hssf/usermodel/HSSFCellStyle.java b/src/java/org/apache/poi/hssf/usermodel/HSSFCellStyle.java index d321512070..a56143ff42 100644 --- a/src/java/org/apache/poi/hssf/usermodel/HSSFCellStyle.java +++ b/src/java/org/apache/poi/hssf/usermodel/HSSFCellStyle.java @@ -44,195 +44,6 @@ public class HSSFCellStyle implements CellStyle private short index = 0; private Workbook workbook = null; - /** - * general (normal) horizontal alignment - */ - - public final static short ALIGN_GENERAL = 0x0; - - /** - * left-justified horizontal alignment - */ - - public final static short ALIGN_LEFT = 0x1; - - /** - * center horizontal alignment - */ - - public final static short ALIGN_CENTER = 0x2; - - /** - * right-justified horizontal alignment - */ - - public final static short ALIGN_RIGHT = 0x3; - - /** - * fill? horizontal alignment - */ - - public final static short ALIGN_FILL = 0x4; - - /** - * justified horizontal alignment - */ - - public final static short ALIGN_JUSTIFY = 0x5; - - /** - * center-selection? horizontal alignment - */ - - public final static short ALIGN_CENTER_SELECTION = 0x6; - - /** - * top-aligned vertical alignment - */ - - public final static short VERTICAL_TOP = 0x0; - - /** - * center-aligned vertical alignment - */ - - public final static short VERTICAL_CENTER = 0x1; - - /** - * bottom-aligned vertical alignment - */ - - public final static short VERTICAL_BOTTOM = 0x2; - - /** - * vertically justified vertical alignment - */ - - public final static short VERTICAL_JUSTIFY = 0x3; - - /** - * No border - */ - - public final static short BORDER_NONE = 0x0; - - /** - * Thin border - */ - - public final static short BORDER_THIN = 0x1; - - /** - * Medium border - */ - - public final static short BORDER_MEDIUM = 0x2; - - /** - * dash border - */ - - public final static short BORDER_DASHED = 0x3; - - /** - * dot border - */ - - public final static short BORDER_HAIR = 0x4; - - /** - * Thick border - */ - - public final static short BORDER_THICK = 0x5; - - /** - * double-line border - */ - - public final static short BORDER_DOUBLE = 0x6; - - /** - * hair-line border - */ - - public final static short BORDER_DOTTED = 0x7; - - /** - * Medium dashed border - */ - - public final static short BORDER_MEDIUM_DASHED = 0x8; - - /** - * dash-dot border - */ - - public final static short BORDER_DASH_DOT = 0x9; - - /** - * medium dash-dot border - */ - - public final static short BORDER_MEDIUM_DASH_DOT = 0xA; - - /** - * dash-dot-dot border - */ - - public final static short BORDER_DASH_DOT_DOT = 0xB; - - /** - * medium dash-dot-dot border - */ - - public final static short BORDER_MEDIUM_DASH_DOT_DOT = 0xC; - - /** - * slanted dash-dot border - */ - - public final static short BORDER_SLANTED_DASH_DOT = 0xD; - - /** No background */ - public final static short NO_FILL = 0 ; - /** Solidly filled */ - public final static short SOLID_FOREGROUND = 1 ; - /** Small fine dots */ - public final static short FINE_DOTS = 2 ; - /** Wide dots */ - public final static short ALT_BARS = 3 ; - /** Sparse dots */ - public final static short SPARSE_DOTS = 4 ; - /** Thick horizontal bands */ - public final static short THICK_HORZ_BANDS = 5 ; - /** Thick vertical bands */ - public final static short THICK_VERT_BANDS = 6 ; - /** Thick backward facing diagonals */ - public final static short THICK_BACKWARD_DIAG = 7 ; - /** Thick forward facing diagonals */ - public final static short THICK_FORWARD_DIAG = 8 ; - /** Large spots */ - public final static short BIG_SPOTS = 9 ; - /** Brick-like layout */ - public final static short BRICKS = 10 ; - /** Thin horizontal bands */ - public final static short THIN_HORZ_BANDS = 11 ; - /** Thin vertical bands */ - public final static short THIN_VERT_BANDS = 12 ; - /** Thin backward diagonal */ - public final static short THIN_BACKWARD_DIAG = 13 ; - /** Thin forward diagonal */ - public final static short THIN_FORWARD_DIAG = 14 ; - /** Squares */ - public final static short SQUARES = 15 ; - /** Diamonds */ - public final static short DIAMONDS = 16 ; - /** Less Dots */ - public final static short LESS_DOTS = 17 ; - /** Least Dots */ - public final static short LEAST_DOTS = 18 ; - /** Creates new HSSFCellStyle why would you want to do this?? */ protected HSSFCellStyle(short index, ExtendedFormatRecord rec, HSSFWorkbook workbook) diff --git a/src/java/org/apache/poi/hssf/usermodel/HSSFFont.java b/src/java/org/apache/poi/hssf/usermodel/HSSFFont.java index 310abecefe..58621bdc9e 100644 --- a/src/java/org/apache/poi/hssf/usermodel/HSSFFont.java +++ b/src/java/org/apache/poi/hssf/usermodel/HSSFFont.java @@ -31,6 +31,13 @@ import org.apache.poi.ss.usermodel.Font; */ public final class HSSFFont implements Font { + /** + * Arial font + */ + + public final static String FONT_ARIAL = "Arial"; + + private FontRecord font; private short index; diff --git a/src/java/org/apache/poi/hssf/usermodel/HSSFName.java b/src/java/org/apache/poi/hssf/usermodel/HSSFName.java index 979f30ecc7..a0f278cc6c 100644 --- a/src/java/org/apache/poi/hssf/usermodel/HSSFName.java +++ b/src/java/org/apache/poi/hssf/usermodel/HSSFName.java @@ -112,6 +112,8 @@ public final class HSSFName implements Name { * @throws IllegalArgumentException if the name is invalid or the name already exists (case-insensitive) */ public void setNameName(String nameName){ + validateName(nameName); + Workbook wb = _book.getWorkbook(); _definedNameRec.setNameText(nameName); @@ -131,6 +133,15 @@ public final class HSSFName implements Name { } } + private static void validateName(String name){ + if(name.length() == 0) throw new IllegalArgumentException("Name cannot be blank"); + + char c = name.charAt(0); + if(!(c == '_' || Character.isLetter(c)) || name.indexOf(' ') != -1) { + throw new IllegalArgumentException("Invalid name: '"+name+"'; Names must begin with a letter or underscore and not contain spaces"); + } + } + /** * Returns the formula that the name is defined to refer to. * diff --git a/src/ooxml/interfaces-jdk15/org/apache/poi/ss/usermodel/Font.java b/src/ooxml/interfaces-jdk15/org/apache/poi/ss/usermodel/Font.java index 1af438f7ca..b9c10a8b15 100644 --- a/src/ooxml/interfaces-jdk15/org/apache/poi/ss/usermodel/Font.java +++ b/src/ooxml/interfaces-jdk15/org/apache/poi/ss/usermodel/Font.java @@ -19,13 +19,6 @@ package org.apache.poi.ss.usermodel; public interface Font { - - /** - * Arial font - */ - - public final static String FONT_ARIAL = "Arial"; - /** * Normal boldness (not bold) */ @@ -116,7 +109,6 @@ public interface Font { /** * set the name for the font (i.e. Arial) * @param name String representing the name of the font to use - * @see #FONT_ARIAL */ void setFontName(String name); @@ -124,7 +116,6 @@ public interface Font { /** * get the name for the font (i.e. Arial) * @return String representing the name of the font to use - * @see #FONT_ARIAL */ String getFontName(); diff --git a/src/ooxml/interfaces-jdk15/org/apache/poi/ss/usermodel/Picture.java b/src/ooxml/interfaces-jdk15/org/apache/poi/ss/usermodel/Picture.java index eb5bc8828e..dd6a8e7d31 100755 --- a/src/ooxml/interfaces-jdk15/org/apache/poi/ss/usermodel/Picture.java +++ b/src/ooxml/interfaces-jdk15/org/apache/poi/ss/usermodel/Picture.java @@ -36,4 +36,7 @@ public interface Picture { * <code>resize(2.0)</code> resizes to 200% of the original.
*/
void resize(double scale);
+
+ ClientAnchor getPreferredSize();
+
}
diff --git a/src/ooxml/java/org/apache/poi/xssf/model/StylesTable.java b/src/ooxml/java/org/apache/poi/xssf/model/StylesTable.java index 33da9e4ea6..0844f45189 100644 --- a/src/ooxml/java/org/apache/poi/xssf/model/StylesTable.java +++ b/src/ooxml/java/org/apache/poi/xssf/model/StylesTable.java @@ -26,6 +26,7 @@ import java.util.Map.Entry; import org.apache.poi.ss.usermodel.FontFamily; import org.apache.poi.ss.usermodel.FontScheme; import org.apache.poi.ss.usermodel.BuiltinFormats; +import org.apache.poi.ss.usermodel.Font; import org.apache.poi.xssf.usermodel.XSSFCellStyle; import org.apache.poi.xssf.usermodel.XSSFFont; import org.apache.poi.xssf.usermodel.extensions.XSSFCellBorder; @@ -468,9 +469,9 @@ public class StylesTable extends POIXMLDocumentPart { */ public XSSFFont findFont(short boldWeight, short color, short fontHeight, String name, boolean italic, boolean strikeout, short typeOffset, byte underline) { for (XSSFFont font : fonts) { - if ( (font.getBold() == (boldWeight == XSSFFont.BOLDWEIGHT_BOLD)) + if ( (font.getBoldweight() == boldWeight) && font.getColor() == color - && font.getFontHeightInPoints() == fontHeight + && font.getFontHeight() == fontHeight && font.getFontName().equals(name) && font.getItalic() == italic && font.getStrikeout() == strikeout diff --git a/src/ooxml/java/org/apache/poi/xssf/usermodel/XSSFFont.java b/src/ooxml/java/org/apache/poi/xssf/usermodel/XSSFFont.java index c4af9bdafd..739ef4ca50 100644 --- a/src/ooxml/java/org/apache/poi/xssf/usermodel/XSSFFont.java +++ b/src/ooxml/java/org/apache/poi/xssf/usermodel/XSSFFont.java @@ -66,7 +66,7 @@ public class XSSFFont implements Font { protected XSSFFont() { this.ctFont = CTFont.Factory.newInstance(); setFontName(DEFAULT_FONT_NAME); - setFontHeight(DEFAULT_FONT_SIZE); + setFontHeight((double)DEFAULT_FONT_SIZE); } /** @@ -154,21 +154,16 @@ public class XSSFFont implements Font { CTFontSize size = ctFont.sizeOfSzArray() == 0 ? null : ctFont.getSzArray(0); if (size != null) { double fontHeight = size.getVal(); - return (short) fontHeight; + return (short)(fontHeight*20); } else - return DEFAULT_FONT_SIZE; + return (short)(DEFAULT_FONT_SIZE*20); } /** * @see #getFontHeight() */ public short getFontHeightInPoints() { - CTFontSize size = ctFont.sizeOfSzArray() == 0 ? null : ctFont.getSzArray(0); - if (size != null) { - double fontHeight = size.getVal(); - return (short) fontHeight; - } else - return DEFAULT_FONT_SIZE; + return (short)(getFontHeight()/20); } /** @@ -347,7 +342,7 @@ public class XSSFFont implements Font { * @param height - height in points */ public void setFontHeight(short height) { - setFontHeight((double) height); + setFontHeight((double) height/20); } /** @@ -366,7 +361,7 @@ public class XSSFFont implements Font { * @link #setFontHeight */ public void setFontHeightInPoints(short height) { - setFontHeight(height); + setFontHeight((double)height); } /** diff --git a/src/ooxml/java/org/apache/poi/xssf/usermodel/XSSFName.java b/src/ooxml/java/org/apache/poi/xssf/usermodel/XSSFName.java index 47fc9ba04a..4517f1292f 100644 --- a/src/ooxml/java/org/apache/poi/xssf/usermodel/XSSFName.java +++ b/src/ooxml/java/org/apache/poi/xssf/usermodel/XSSFName.java @@ -359,6 +359,7 @@ public final class XSSFName implements Name { } private static void validateName(String name){ + if(name.length() == 0) throw new IllegalArgumentException("Name cannot be blank"); char c = name.charAt(0); if(!(c == '_' || Character.isLetter(c)) || name.indexOf(' ') != -1) { throw new IllegalArgumentException("Invalid name: '"+name+"'; Names must begin with a letter or underscore and not contain spaces"); diff --git a/src/ooxml/java/org/apache/poi/xssf/usermodel/XSSFWorkbook.java b/src/ooxml/java/org/apache/poi/xssf/usermodel/XSSFWorkbook.java index 8af2c29a2e..874cd0f385 100644 --- a/src/ooxml/java/org/apache/poi/xssf/usermodel/XSSFWorkbook.java +++ b/src/ooxml/java/org/apache/poi/xssf/usermodel/XSSFWorkbook.java @@ -436,6 +436,11 @@ public class XSSFWorkbook extends POIXMLDocument implements Workbook, Iterable<X */ public XSSFSheet createSheet() { String sheetname = "Sheet" + (sheets.size()); + int idx = 0; + while(getSheet(sheetname) != null) { + sheetname = "Sheet" + idx; + idx++; + } return createSheet(sheetname); } diff --git a/src/ooxml/testcases/org/apache/poi/xssf/XSSFITestDataProvider.java b/src/ooxml/testcases/org/apache/poi/xssf/XSSFITestDataProvider.java index c0a17cf435..fac88830ad 100755 --- a/src/ooxml/testcases/org/apache/poi/xssf/XSSFITestDataProvider.java +++ b/src/ooxml/testcases/org/apache/poi/xssf/XSSFITestDataProvider.java @@ -19,6 +19,7 @@ package org.apache.poi.xssf; import org.apache.poi.ss.ITestDataProvider;
import org.apache.poi.ss.usermodel.Workbook;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
+import org.apache.poi.hssf.HSSFTestDataSamples;
/**
* @author Yegor Kozlov
@@ -41,6 +42,10 @@ public final class XSSFITestDataProvider implements ITestDataProvider { return new XSSFWorkbook();
}
+ public byte[] getTestDataFileContent(String fileName) {
+ return HSSFTestDataSamples.getTestDataFileContent(fileName);
+ }
+
private XSSFITestDataProvider(){}
private static XSSFITestDataProvider inst = new XSSFITestDataProvider();
public static XSSFITestDataProvider getInstance(){
diff --git a/src/ooxml/testcases/org/apache/poi/xssf/usermodel/TestXSSFBugs.java b/src/ooxml/testcases/org/apache/poi/xssf/usermodel/TestXSSFBugs.java index 3715410ef9..9cb9b7f737 100644 --- a/src/ooxml/testcases/org/apache/poi/xssf/usermodel/TestXSSFBugs.java +++ b/src/ooxml/testcases/org/apache/poi/xssf/usermodel/TestXSSFBugs.java @@ -26,16 +26,21 @@ import org.apache.poi.openxml4j.opc.OPCPackage; import org.apache.poi.openxml4j.opc.PackagePart; import org.apache.poi.openxml4j.opc.PackagingURIHelper; import org.apache.poi.xssf.XSSFTestDataSamples; +import org.apache.poi.xssf.XSSFITestDataProvider; +import org.apache.poi.ss.usermodel.BaseTestBugzillaIssues; -public class TestXSSFBugs extends TestCase { - private String getFilePath(String file) { - File xml = new File( - System.getProperty("HSSF.testdata.path") + - File.separator + file - ); - assertTrue(xml.exists()); +public class TestXSSFBugs extends BaseTestBugzillaIssues { + @Override + protected XSSFITestDataProvider getTestDataProvider(){ + return XSSFITestDataProvider.getInstance(); + } - return xml.toString(); + /** + * test writing a file with large number of unique strings, + * open resulting file in Excel to check results! + */ + public void test15375_2() { + baseTest15375(1000); } /** @@ -43,7 +48,7 @@ public class TestXSSFBugs extends TestCase { * the wrong sheet name */ public void test45430() throws Exception { - XSSFWorkbook wb = new XSSFWorkbook(getFilePath("45430.xlsx")); + XSSFWorkbook wb = getTestDataProvider().openSampleWorkbook("45430.xlsx"); assertFalse(wb.isMacroEnabled()); assertEquals(3, wb.getNumberOfNames()); @@ -72,8 +77,8 @@ public class TestXSSFBugs extends TestCase { * We should carry vba macros over after save */ public void test45431() throws Exception { - OPCPackage pkg = OPCPackage.open(getFilePath("45431.xlsm")); - XSSFWorkbook wb = new XSSFWorkbook(pkg); + XSSFWorkbook wb = getTestDataProvider().openSampleWorkbook("45431.xlsm"); + OPCPackage pkg = wb.getPackage(); assertTrue(wb.isMacroEnabled()); // Check the various macro related bits can be found @@ -115,10 +120,5 @@ public class TestXSSFBugs extends TestCase { PackagingURIHelper.createPartName("/xl/drawings/vmlDrawing1.vml") ); assertNotNull(drw); - - // For testing with excel -// FileOutputStream fout = new FileOutputStream("/tmp/foo.xlsm"); -// nwb.write(fout); -// fout.close(); } } diff --git a/src/ooxml/testcases/org/apache/poi/xssf/usermodel/TestXSSFFont.java b/src/ooxml/testcases/org/apache/poi/xssf/usermodel/TestXSSFFont.java index d3c9da576e..bb541e54cd 100755 --- a/src/ooxml/testcases/org/apache/poi/xssf/usermodel/TestXSSFFont.java +++ b/src/ooxml/testcases/org/apache/poi/xssf/usermodel/TestXSSFFont.java @@ -21,6 +21,7 @@ import junit.framework.TestCase; import org.apache.poi.ss.usermodel.*; import org.apache.poi.xssf.XSSFTestDataSamples; +import org.apache.poi.xssf.XSSFITestDataProvider; import org.apache.poi.xssf.usermodel.XSSFColor; import org.openxmlformats.schemas.spreadsheetml.x2006.main.CTBooleanProperty; import org.openxmlformats.schemas.spreadsheetml.x2006.main.CTColor; @@ -35,7 +36,16 @@ import org.openxmlformats.schemas.spreadsheetml.x2006.main.STFontScheme; import org.openxmlformats.schemas.spreadsheetml.x2006.main.STUnderlineValues; import org.openxmlformats.schemas.spreadsheetml.x2006.main.STVerticalAlignRun; -public final class TestXSSFFont extends TestCase{ +public final class TestXSSFFont extends BaseTestFont{ + + @Override + protected XSSFITestDataProvider getTestDataProvider(){ + return XSSFITestDataProvider.getInstance(); + } + + public void testDefaultFont() { + baseTestDefaultFont("Calibri", (short)220, IndexedColors.BLACK.getIndex()); + } public void testConstructor() { XSSFFont xssfFont=new XSSFFont(); @@ -119,9 +129,9 @@ public final class TestXSSFFont extends TestCase{ ctFont.setSzArray(0,size); XSSFFont xssfFont=new XSSFFont(ctFont); - assertEquals(11,xssfFont.getFontHeight()); + assertEquals(11,xssfFont.getFontHeightInPoints()); - xssfFont.setFontHeight((short)20); + xssfFont.setFontHeight(20); assertEquals(20.0, ctFont.getSzArray(0).getVal(), 0.0); } @@ -236,203 +246,4 @@ public final class TestXSSFFont extends TestCase{ font.setTypeOffset(XSSFFont.SS_SUPER); assertEquals(STVerticalAlignRun.SUPERSCRIPT,ctFont.getVertAlignArray(0).getVal()); } - - /** - * Tests that we can define fonts to a new - * file, save, load, and still see them - * @throws Exception - */ - public void testCreateSave() { - XSSFWorkbook wb = new XSSFWorkbook(); - XSSFSheet s1 = wb.createSheet(); - Row r1 = s1.createRow(0); - Cell r1c1 = r1.createCell(0); - r1c1.setCellValue(2.2); - - assertEquals(1, wb.getNumberOfFonts()); - - XSSFFont font=wb.createFont(); - font.setBold(true); - font.setStrikeout(true); - font.setColor(IndexedColors.YELLOW.getIndex()); - font.setFontName("Courier"); - wb.createCellStyle().setFont(font); - assertEquals(2, wb.getNumberOfFonts()); - - CellStyle cellStyleTitle=wb.createCellStyle(); - cellStyleTitle.setFont(font); - r1c1.setCellStyle(cellStyleTitle); - - // Save and re-load - wb = XSSFTestDataSamples.writeOutAndReadBack(wb); - s1 = wb.getSheetAt(0); - - assertEquals(2, wb.getNumberOfFonts()); - short idx = s1.getRow(0).getCell(0).getCellStyle().getFontIndex(); - Font fnt = wb.getFontAt(idx); - assertNotNull(fnt); - assertEquals(IndexedColors.YELLOW.getIndex(), fnt.getColor()); - assertEquals("Courier", fnt.getFontName()); - - // Now add an orphaned one - XSSFFont font2 = wb.createFont(); - font2.setItalic(true); - font2.setFontHeightInPoints((short)15); - wb.createCellStyle().setFont(font2); - assertEquals(3, wb.getNumberOfFonts()); - - // Save and re-load - wb = XSSFTestDataSamples.writeOutAndReadBack(wb); - s1 = wb.getSheetAt(0); - - assertEquals(3, wb.getNumberOfFonts()); - assertNotNull(wb.getFontAt((short)1)); - assertNotNull(wb.getFontAt((short)2)); - - assertEquals(15, wb.getFontAt((short)2).getFontHeightInPoints()); - assertEquals(true, wb.getFontAt((short)2).getItalic()); - } - - public void testXSSFFont() { - XSSFWorkbook workbook=new XSSFWorkbook(); - //Font font1=workbook.createFont(); - - Sheet sheet=workbook.createSheet("sheet 1 - test font"); - - - Row row=sheet.createRow(0); - Cell cell=row.createCell(0); - cell.setCellValue(new XSSFRichTextString("XSSFFont test example file")); - XSSFFont font=new XSSFFont(); - font.setBold(true); - font.setFontHeightInPoints((short)22); - font.setColor(IndexedColors.BLUE.getIndex()); - font.setFontName("Verdana"); - CellStyle cellStyleTitle=workbook.createCellStyle(); - cellStyleTitle.setFont(font); - cell.setCellStyle(cellStyleTitle); - - - row=sheet.createRow(3); - XSSFFont font1=new XSSFFont(); - font1.setBold(true); - font1.setItalic(true); - font1.setFontHeightInPoints((short)18); - font1.setColor(IndexedColors.RED.getIndex()); - font1.setFontName("Arial"); - CellStyle cellStyle1=workbook.createCellStyle(); - cellStyle1.setFont(font1); - - Cell cell1=row.createCell(0); - cell1.setCellValue(new XSSFRichTextString("red bold 18pt italic Arial")); - cell1.setCellStyle(cellStyle1); - - - row=sheet.createRow(4); - Font font2=new XSSFFont(); - font2.setFontHeight((short)1); - font2.setFontName("Courier"); - font2.setColor(IndexedColors.BLACK.getIndex()); - font2.setUnderline(Font.U_DOUBLE); - CellStyle cellStyle2=workbook.createCellStyle(); - cellStyle2.setFont(font2); - - Cell cell2=row.createCell(0); - cell2.setCellValue(new XSSFRichTextString("Something in courier underlined")); - cell2.setCellStyle(cellStyle2); - - - row=sheet.createRow(5); - cell1=row.createCell(0); - Font font3=new XSSFFont(); - font3.setFontHeightInPoints((short)9); - font3.setFontName("Times"); - font3.setStrikeout(true); - font3.setColor(IndexedColors.PINK.getIndex()); - CellStyle cellStyle3=workbook.createCellStyle(); - cellStyle3.setFont(font3); - - cell1.setCellValue(new XSSFRichTextString("pink italic Times 9pt strikeout!!!")); - cell1.setCellStyle(cellStyle3); - - XSSFTestDataSamples.writeOutAndReadBack(workbook); - } - - /** - * Test that fonts get added properly - * - * @see org.apache.poi.hssf.usermodel.TestBugs#test45338() - */ - public void test45338() { - XSSFWorkbook wb = new XSSFWorkbook(); - assertEquals(1, wb.getNumberOfFonts()); - - XSSFSheet s = wb.createSheet(); - s.createRow(0); - s.createRow(1); - s.getRow(0).createCell(0); - s.getRow(1).createCell(0); - - assertEquals(1, wb.getNumberOfFonts()); - - XSSFFont f1 = wb.getFontAt((short)0); - assertEquals(XSSFFont.BOLDWEIGHT_NORMAL, f1.getBoldweight()); - - // Check that asking for the same font - // multiple times gives you the same thing. - // Otherwise, our tests wouldn't work! - assertEquals(wb.getFontAt((short)0), wb.getFontAt((short)0)); - - // Look for a new font we have - // yet to add - assertNull( - wb.findFont( - (short)11, (short)123, (short)22, - "Thingy", false, true, (short)2, (byte)2 - ) - ); - - XSSFFont nf = wb.createFont(); - assertEquals(2, wb.getNumberOfFonts()); - - assertEquals(1, nf.getIndex()); - assertEquals(nf, wb.getFontAt((short)1)); - - nf.setBoldweight((short)11); - nf.setColor((short)123); - nf.setFontHeight((short)22); - nf.setFontName("Thingy"); - nf.setItalic(false); - nf.setStrikeout(true); - nf.setTypeOffset((short)2); - nf.setUnderline((byte)2); - - assertEquals(2, wb.getNumberOfFonts()); - assertEquals(nf, wb.getFontAt((short)1)); - - assertEquals(wb.getFontAt((short)1), wb.getFontAt((short)1)); - assertTrue(wb.getFontAt((short)0) != wb.getFontAt((short)1)); - - // Find it now - assertNotNull( - wb.findFont( - (short)11, (short)123, (short)22, - "Thingy", false, true, (short)2, (byte)2 - ) - ); - assertEquals( - 1, - wb.findFont( - (short)11, (short)123, (short)22, - "Thingy", false, true, (short)2, (byte)2 - ).getIndex() - ); - assertEquals(nf, - wb.findFont( - (short)11, (short)123, (short)22, - "Thingy", false, true, (short)2, (byte)2 - ) - ); - } - } diff --git a/src/ooxml/testcases/org/apache/poi/xssf/usermodel/TestXSSFName.java b/src/ooxml/testcases/org/apache/poi/xssf/usermodel/TestXSSFName.java index 37f95dfa33..065ccf14ff 100755 --- a/src/ooxml/testcases/org/apache/poi/xssf/usermodel/TestXSSFName.java +++ b/src/ooxml/testcases/org/apache/poi/xssf/usermodel/TestXSSFName.java @@ -31,4 +31,46 @@ public class TestXSSFName extends BaseTestNamedRange { return XSSFITestDataProvider.getInstance();
}
+ //TODO combine testRepeatingRowsAndColums() for HSSF and XSSF
+ public void testRepeatingRowsAndColums() {
+ // First test that setting RR&C for same sheet more than once only creates a
+ // single Print_Titles built-in record
+ XSSFWorkbook wb = getTestDataProvider().createWorkbook();
+ XSSFSheet sheet = wb.createSheet("FirstSheet");
+
+ // set repeating rows and columns twice for the first sheet
+ for (int i = 0; i < 2; i++) {
+ wb.setRepeatingRowsAndColumns(0, 0, 0, 0, 3);
+ //sheet.createFreezePane(0, 3);
+ }
+ assertEquals(1, wb.getNumberOfNames());
+ XSSFName nr1 = wb.getNameAt(0);
+
+ assertEquals(XSSFName.BUILTIN_PRINT_TITLE, nr1.getNameName());
+ assertEquals("'FirstSheet'!$A:$A,'FirstSheet'!$1:$4", nr1.getRefersToFormula());
+
+ // Save and re-open
+ XSSFWorkbook nwb = XSSFTestDataSamples.writeOutAndReadBack(wb);
+
+ assertEquals(1, nwb.getNumberOfNames());
+ nr1 = nwb.getNameAt(0);
+
+ assertEquals(XSSFName.BUILTIN_PRINT_TITLE, nr1.getNameName());
+ assertEquals("'FirstSheet'!$A:$A,'FirstSheet'!$1:$4", nr1.getRefersToFormula());
+
+ // check that setting RR&C on a second sheet causes a new Print_Titles built-in
+ // name to be created
+ sheet = nwb.createSheet("SecondSheet");
+ nwb.setRepeatingRowsAndColumns(1, 1, 2, 0, 0);
+
+ assertEquals(2, nwb.getNumberOfNames());
+ XSSFName nr2 = nwb.getNameAt(1);
+
+ assertEquals(XSSFName.BUILTIN_PRINT_TITLE, nr2.getNameName());
+ assertEquals("'SecondSheet'!$B:$C,'SecondSheet'!$1:$1", nr2.getRefersToFormula());
+
+ nwb.setRepeatingRowsAndColumns(1, -1, -1, -1, -1);
+ }
+
+
}
diff --git a/src/ooxml/testcases/org/apache/poi/xssf/usermodel/TestXSSFPicture.java b/src/ooxml/testcases/org/apache/poi/xssf/usermodel/TestXSSFPicture.java index 4fb3589ecc..01d646c30c 100755 --- a/src/ooxml/testcases/org/apache/poi/xssf/usermodel/TestXSSFPicture.java +++ b/src/ooxml/testcases/org/apache/poi/xssf/usermodel/TestXSSFPicture.java @@ -18,6 +18,8 @@ package org.apache.poi.xssf.usermodel; import junit.framework.TestCase;
import org.apache.poi.ss.usermodel.ClientAnchor;
+import org.apache.poi.ss.usermodel.BaseTestPicture;
+import org.apache.poi.xssf.XSSFITestDataProvider;
import org.openxmlformats.schemas.drawingml.x2006.spreadsheetDrawing.CTTwoCellAnchor;
import org.openxmlformats.schemas.drawingml.x2006.spreadsheetDrawing.STEditAs;
@@ -27,7 +29,17 @@ import java.util.Arrays; /**
* @author Yegor Kozlov
*/
-public class TestXSSFPicture extends TestCase {
+public class TestXSSFPicture extends BaseTestPicture {
+
+ @Override
+ protected XSSFITestDataProvider getTestDataProvider(){
+ return XSSFITestDataProvider.getInstance();
+ }
+
+ public void testResize() {
+ baseTestResize(new XSSFClientAnchor(0, 0, 504825, 85725, (short)0, 0, (short)1, 8));
+ }
+
public void testCreate(){
XSSFWorkbook wb = new XSSFWorkbook();
diff --git a/src/ooxml/testcases/org/apache/poi/xssf/usermodel/TestXSSFSheet.java b/src/ooxml/testcases/org/apache/poi/xssf/usermodel/TestXSSFSheet.java index 897cf43f80..8e8c3c02a2 100644 --- a/src/ooxml/testcases/org/apache/poi/xssf/usermodel/TestXSSFSheet.java +++ b/src/ooxml/testcases/org/apache/poi/xssf/usermodel/TestXSSFSheet.java @@ -19,6 +19,7 @@ package org.apache.poi.xssf.usermodel; import java.io.File; import java.util.Iterator; + import junit.framework.TestCase; import org.apache.poi.ss.usermodel.*; import org.apache.poi.ss.util.CellRangeAddress; @@ -35,7 +36,7 @@ import org.openxmlformats.schemas.spreadsheetml.x2006.main.*; public class TestXSSFSheet extends BaseTestSheet { @Override - protected XSSFITestDataProvider getTestDataProvider(){ + protected XSSFITestDataProvider getTestDataProvider() { return XSSFITestDataProvider.getInstance(); } @@ -48,90 +49,66 @@ public class TestXSSFSheet extends BaseTestSheet { baseTestGetSetMargin(new double[]{0.7, 0.7, 0.75, 0.75, 0.3, 0.3}); } - public void testGetFirstLastRowNum() { - Workbook workbook = getTestDataProvider().createWorkbook(); - Sheet sheet = workbook.createSheet("Sheet 1"); - Row row10 = sheet.createRow(9); - Row row1 = sheet.createRow(0); - Row row2 = sheet.createRow(1); - assertEquals(0, sheet.getFirstRowNum()); - assertEquals(9, sheet.getLastRowNum()); - } - - public void testGetFooter() { - XSSFWorkbook workbook = getTestDataProvider().createWorkbook(); - XSSFSheet sheet = workbook.createSheet("Sheet 1"); - assertNotNull(sheet.getFooter()); - sheet.getFooter().setCenter("test center footer"); - assertEquals("test center footer", sheet.getFooter().getCenter()); - - // Default is odd footer - assertNotNull(sheet.getOddFooter()); - assertEquals("test center footer", sheet.getOddFooter().getCenter()); - } - public void testExistingHeaderFooter() throws Exception { - File xml = new File( - System.getProperty("HSSF.testdata.path") + - File.separator + "45540_classic_Header.xlsx" - ); - assertTrue(xml.exists()); - - XSSFWorkbook workbook = new XSSFWorkbook(xml.toString()); - XSSFOddHeader hdr; - XSSFOddFooter ftr; - - // Sheet 1 has a header with center and right text - XSSFSheet s1 = workbook.getSheetAt(0); - assertNotNull(s1.getHeader()); - assertNotNull(s1.getFooter()); - hdr = (XSSFOddHeader)s1.getHeader(); - ftr = (XSSFOddFooter)s1.getFooter(); - - assertEquals("&Ctestdoc&Rtest phrase", hdr.getText()); - assertEquals(null, ftr.getText()); - - assertEquals("", hdr.getLeft()); - assertEquals("testdoc", hdr.getCenter()); - assertEquals("test phrase", hdr.getRight()); - - assertEquals("", ftr.getLeft()); - assertEquals("", ftr.getCenter()); - assertEquals("", ftr.getRight()); - - - // Sheet 2 has a footer, but it's empty - XSSFSheet s2 = workbook.getSheetAt(1); - assertNotNull(s2.getHeader()); - assertNotNull(s2.getFooter()); - hdr = (XSSFOddHeader)s2.getHeader(); - ftr = (XSSFOddFooter)s2.getFooter(); - - assertEquals(null, hdr.getText()); - assertEquals("&L&F", ftr.getText()); - - assertEquals("", hdr.getLeft()); - assertEquals("", hdr.getCenter()); - assertEquals("", hdr.getRight()); - - assertEquals("&F", ftr.getLeft()); - assertEquals("", ftr.getCenter()); - assertEquals("", ftr.getRight()); - - - // Save and reload - XSSFWorkbook wb = XSSFTestDataSamples.writeOutAndReadBack(workbook); - - hdr = (XSSFOddHeader)wb.getSheetAt(0).getHeader(); - ftr = (XSSFOddFooter)wb.getSheetAt(0).getFooter(); - - assertEquals("", hdr.getLeft()); - assertEquals("testdoc", hdr.getCenter()); - assertEquals("test phrase", hdr.getRight()); - - assertEquals("", ftr.getLeft()); - assertEquals("", ftr.getCenter()); - assertEquals("", ftr.getRight()); + File xml = new File( + System.getProperty("HSSF.testdata.path") + + File.separator + "45540_classic_Header.xlsx" + ); + assertTrue(xml.exists()); + + XSSFWorkbook workbook = new XSSFWorkbook(xml.toString()); + XSSFOddHeader hdr; + XSSFOddFooter ftr; + + // Sheet 1 has a header with center and right text + XSSFSheet s1 = workbook.getSheetAt(0); + assertNotNull(s1.getHeader()); + assertNotNull(s1.getFooter()); + hdr = (XSSFOddHeader) s1.getHeader(); + ftr = (XSSFOddFooter) s1.getFooter(); + + assertEquals("&Ctestdoc&Rtest phrase", hdr.getText()); + assertEquals(null, ftr.getText()); + + assertEquals("", hdr.getLeft()); + assertEquals("testdoc", hdr.getCenter()); + assertEquals("test phrase", hdr.getRight()); + + assertEquals("", ftr.getLeft()); + assertEquals("", ftr.getCenter()); + assertEquals("", ftr.getRight()); + + // Sheet 2 has a footer, but it's empty + XSSFSheet s2 = workbook.getSheetAt(1); + assertNotNull(s2.getHeader()); + assertNotNull(s2.getFooter()); + hdr = (XSSFOddHeader) s2.getHeader(); + ftr = (XSSFOddFooter) s2.getFooter(); + + assertEquals(null, hdr.getText()); + assertEquals("&L&F", ftr.getText()); + + assertEquals("", hdr.getLeft()); + assertEquals("", hdr.getCenter()); + assertEquals("", hdr.getRight()); + + assertEquals("&F", ftr.getLeft()); + assertEquals("", ftr.getCenter()); + assertEquals("", ftr.getRight()); + + // Save and reload + XSSFWorkbook wb = XSSFTestDataSamples.writeOutAndReadBack(workbook); + + hdr = (XSSFOddHeader) wb.getSheetAt(0).getHeader(); + ftr = (XSSFOddFooter) wb.getSheetAt(0).getFooter(); + + assertEquals("", hdr.getLeft()); + assertEquals("testdoc", hdr.getCenter()); + assertEquals("test phrase", hdr.getRight()); + + assertEquals("", ftr.getLeft()); + assertEquals("", ftr.getCenter()); + assertEquals("", ftr.getRight()); } public void testGetAllHeadersFooters() { @@ -173,25 +150,18 @@ public class TestXSSFSheet extends BaseTestSheet { assertEquals("odd header center", sheet.getHeader().getCenter()); } - public void testGetSetColumnHidden() { - Workbook workbook = getTestDataProvider().createWorkbook(); - Sheet sheet = workbook.createSheet("Sheet 1"); - sheet.setColumnHidden((short) 2, true); - assertTrue(sheet.isColumnHidden((short) 2)); - } - public void testAutoSizeColumn() { XSSFWorkbook workbook = new XSSFWorkbook(); XSSFSheet sheet = workbook.createSheet("Sheet 1"); sheet.createRow(0).createCell(13).setCellValue("test"); - sheet.autoSizeColumn((short)13); + sheet.autoSizeColumn(13); ColumnHelper columnHelper = sheet.getColumnHelper(); CTCol col = columnHelper.getColumn(13, false); assertTrue(col.getBestFit()); } - + public void testGetCellComment() { XSSFWorkbook workbook = new XSSFWorkbook(); @@ -203,195 +173,184 @@ public class TestXSSFSheet extends BaseTestSheet { assertNotNull(sheet.getCellComment(9, 2)); assertEquals("test C10 author", sheet.getCellComment(9, 2).getAuthor()); } - + public void testSetCellComment() { XSSFWorkbook workbook = new XSSFWorkbook(); XSSFSheet sheet = workbook.createSheet(); XSSFComment comment = sheet.createComment(); - Cell cell = sheet.createRow(0).createCell((short)0); + Cell cell = sheet.createRow(0).createCell((short) 0); CommentsTable comments = sheet.getCommentsTable(); CTComments ctComments = comments.getCTComments(); sheet.setCellComment("A1", comment); assertEquals("A1", ctComments.getCommentList().getCommentArray(0).getRef()); comment.setAuthor("test A1 author"); - assertEquals("test A1 author", comments.getAuthor((int)ctComments.getCommentList().getCommentArray(0).getAuthorId())); + assertEquals("test A1 author", comments.getAuthor((int) ctComments.getCommentList().getCommentArray(0).getAuthorId())); } - + public void testGetActiveCell() { - XSSFWorkbook workbook = new XSSFWorkbook(); - XSSFSheet sheet = workbook.createSheet(); - sheet.setActiveCell("R5"); + XSSFWorkbook workbook = new XSSFWorkbook(); + XSSFSheet sheet = workbook.createSheet(); + sheet.setActiveCell("R5"); + + assertEquals("R5", sheet.getActiveCell()); - assertEquals("R5", sheet.getActiveCell()); - } - + public void testCreateFreezePane() { - XSSFWorkbook workbook = new XSSFWorkbook(); - XSSFSheet sheet = workbook.createSheet(); + XSSFWorkbook workbook = new XSSFWorkbook(); + XSSFSheet sheet = workbook.createSheet(); CTWorksheet ctWorksheet = sheet.getCTWorksheet(); - sheet.createFreezePane(2, 4); - assertEquals((double)2, ctWorksheet.getSheetViews().getSheetViewArray(0).getPane().getXSplit()); - assertEquals(STPane.BOTTOM_RIGHT, ctWorksheet.getSheetViews().getSheetViewArray(0).getPane().getActivePane()); - sheet.createFreezePane(3, 6, 10, 10); - assertEquals((double)3, ctWorksheet.getSheetViews().getSheetViewArray(0).getPane().getXSplit()); - // assertEquals(10, sheet.getTopRow()); - // assertEquals(10, sheet.getLeftCol()); - sheet.createSplitPane(4, 8, 12, 12, 1); - assertEquals((double)8, ctWorksheet.getSheetViews().getSheetViewArray(0).getPane().getYSplit()); - assertEquals(STPane.BOTTOM_RIGHT, ctWorksheet.getSheetViews().getSheetViewArray(0).getPane().getActivePane()); + sheet.createFreezePane(2, 4); + assertEquals((double) 2, ctWorksheet.getSheetViews().getSheetViewArray(0).getPane().getXSplit()); + assertEquals(STPane.BOTTOM_RIGHT, ctWorksheet.getSheetViews().getSheetViewArray(0).getPane().getActivePane()); + sheet.createFreezePane(3, 6, 10, 10); + assertEquals((double) 3, ctWorksheet.getSheetViews().getSheetViewArray(0).getPane().getXSplit()); + // assertEquals(10, sheet.getTopRow()); + // assertEquals(10, sheet.getLeftCol()); + sheet.createSplitPane(4, 8, 12, 12, 1); + assertEquals((double) 8, ctWorksheet.getSheetViews().getSheetViewArray(0).getPane().getYSplit()); + assertEquals(STPane.BOTTOM_RIGHT, ctWorksheet.getSheetViews().getSheetViewArray(0).getPane().getActivePane()); } - + public void testNewMergedRegionAt() { XSSFWorkbook workbook = new XSSFWorkbook(); XSSFSheet sheet = workbook.createSheet(); - CellRangeAddress region = CellRangeAddress.valueOf("B2:D4"); - sheet.addMergedRegion(region); - assertEquals("B2:D4", sheet.getMergedRegion(0).formatAsString()); + CellRangeAddress region = CellRangeAddress.valueOf("B2:D4"); + sheet.addMergedRegion(region); + assertEquals("B2:D4", sheet.getMergedRegion(0).formatAsString()); + assertEquals(1, sheet.getNumMergedRegions()); } - - public void testGetNumMergedRegions() { + + public void testRemoveMergedRegion_lowlevel() { XSSFWorkbook workbook = new XSSFWorkbook(); XSSFSheet sheet = workbook.createSheet(); - assertEquals(0, sheet.getNumMergedRegions()); - CellRangeAddress region = CellRangeAddress.valueOf("B2:D4"); - sheet.addMergedRegion(region); - assertEquals(1, sheet.getNumMergedRegions()); + CTWorksheet ctWorksheet = sheet.getCTWorksheet(); + CellRangeAddress region_1 = CellRangeAddress.valueOf("A1:B2"); + CellRangeAddress region_2 = CellRangeAddress.valueOf("C3:D4"); + CellRangeAddress region_3 = CellRangeAddress.valueOf("E5:F6"); + sheet.addMergedRegion(region_1); + sheet.addMergedRegion(region_2); + sheet.addMergedRegion(region_3); + assertEquals("C3:D4", ctWorksheet.getMergeCells().getMergeCellArray(1).getRef()); + assertEquals(3, sheet.getNumMergedRegions()); + sheet.removeMergedRegion(1); + assertEquals("E5:F6", ctWorksheet.getMergeCells().getMergeCellArray(1).getRef()); + assertEquals(2, sheet.getNumMergedRegions()); + sheet.removeMergedRegion(1); + sheet.removeMergedRegion(0); + assertEquals(0, sheet.getNumMergedRegions()); } - - public void testRemoveMergedRegion() { + + public void testSetDefaultColumnStyle() { XSSFWorkbook workbook = new XSSFWorkbook(); XSSFSheet sheet = workbook.createSheet(); CTWorksheet ctWorksheet = sheet.getCTWorksheet(); - CellRangeAddress region_1 = CellRangeAddress.valueOf("A1:B2"); - CellRangeAddress region_2 = CellRangeAddress.valueOf("C3:D4"); - CellRangeAddress region_3 = CellRangeAddress.valueOf("E5:F6"); - sheet.addMergedRegion(region_1); - sheet.addMergedRegion(region_2); - sheet.addMergedRegion(region_3); - assertEquals("C3:D4", ctWorksheet.getMergeCells().getMergeCellArray(1).getRef()); - assertEquals(3, sheet.getNumMergedRegions()); - sheet.removeMergedRegion(1); - assertEquals("E5:F6", ctWorksheet.getMergeCells().getMergeCellArray(1).getRef()); - assertEquals(2, sheet.getNumMergedRegions()); - sheet.removeMergedRegion(1); - sheet.removeMergedRegion(0); - assertEquals(0, sheet.getNumMergedRegions()); + StylesTable stylesTable = workbook.getStylesSource(); + XSSFFont font = new XSSFFont(); + font.setFontName("Cambria"); + stylesTable.putFont(font); + CTXf cellStyleXf = CTXf.Factory.newInstance(); + cellStyleXf.setFontId(1); + cellStyleXf.setFillId(0); + cellStyleXf.setBorderId(0); + cellStyleXf.setNumFmtId(0); + stylesTable.putCellStyleXf(cellStyleXf); + CTXf cellXf = CTXf.Factory.newInstance(); + cellXf.setXfId(1); + stylesTable.putCellXf(cellXf); + XSSFCellStyle cellStyle = new XSSFCellStyle(1, 1, stylesTable); + assertEquals(1, cellStyle.getFontIndex()); + + sheet.setDefaultColumnStyle((short) 3, cellStyle); + assertEquals(1, ctWorksheet.getColsArray(0).getColArray(0).getStyle()); } - - public void testSetDefaultColumnStyle() { + + + public void testGroupUngroupColumn() { XSSFWorkbook workbook = new XSSFWorkbook(); XSSFSheet sheet = workbook.createSheet(); - CTWorksheet ctWorksheet = sheet.getCTWorksheet(); - StylesTable stylesTable = workbook.getStylesSource(); - XSSFFont font = new XSSFFont(); - font.setFontName("Cambria"); - stylesTable.putFont(font); - CTXf cellStyleXf = CTXf.Factory.newInstance(); - cellStyleXf.setFontId(1); - cellStyleXf.setFillId(0); - cellStyleXf.setBorderId(0); - cellStyleXf.setNumFmtId(0); - stylesTable.putCellStyleXf(cellStyleXf); - CTXf cellXf = CTXf.Factory.newInstance(); - cellXf.setXfId(1); - stylesTable.putCellXf(cellXf); - XSSFCellStyle cellStyle = new XSSFCellStyle(1, 1, stylesTable); - assertEquals(1, cellStyle.getFontIndex()); - - sheet.setDefaultColumnStyle((short) 3, cellStyle); - assertEquals(1, ctWorksheet.getColsArray(0).getColArray(0).getStyle()); + + //one level + sheet.groupColumn((short) 2, (short) 7); + sheet.groupColumn((short) 10, (short) 11); + CTCols cols = sheet.getCTWorksheet().getColsArray(0); + assertEquals(2, cols.sizeOfColArray()); + CTCol[] colArray = cols.getColArray(); + assertNotNull(colArray); + assertEquals(2 + 1, colArray[0].getMin()); // 1 based + assertEquals(7 + 1, colArray[0].getMax()); // 1 based + assertEquals(1, colArray[0].getOutlineLevel()); + + //two level + sheet.groupColumn((short) 1, (short) 2); + cols = sheet.getCTWorksheet().getColsArray(0); + assertEquals(4, cols.sizeOfColArray()); + colArray = cols.getColArray(); + assertEquals(2, colArray[1].getOutlineLevel()); + + //three level + sheet.groupColumn((short) 6, (short) 8); + sheet.groupColumn((short) 2, (short) 3); + cols = sheet.getCTWorksheet().getColsArray(0); + assertEquals(7, cols.sizeOfColArray()); + colArray = cols.getColArray(); + assertEquals(3, colArray[1].getOutlineLevel()); + assertEquals(3, sheet.getCTWorksheet().getSheetFormatPr().getOutlineLevelCol()); + + sheet.ungroupColumn((short) 8, (short) 10); + colArray = cols.getColArray(); + //assertEquals(3, colArray[1].getOutlineLevel()); + + sheet.ungroupColumn((short) 4, (short) 6); + sheet.ungroupColumn((short) 2, (short) 2); + colArray = cols.getColArray(); + assertEquals(4, colArray.length); + assertEquals(2, sheet.getCTWorksheet().getSheetFormatPr().getOutlineLevelCol()); } - - - - - - public void testGroupUngroupColumn() { - XSSFWorkbook workbook = new XSSFWorkbook(); - XSSFSheet sheet = workbook.createSheet(); - - //one level - sheet.groupColumn((short)2,(short)7); - sheet.groupColumn((short)10,(short)11); - CTCols cols=sheet.getCTWorksheet().getColsArray(0); - assertEquals(2,cols.sizeOfColArray()); - CTCol[]colArray=cols.getColArray(); - assertNotNull(colArray); - assertEquals(2+1,colArray[0].getMin()); // 1 based - assertEquals(7+1,colArray[0].getMax()); // 1 based - assertEquals(1, colArray[0].getOutlineLevel()); - - //two level - sheet.groupColumn((short)1,(short)2); - cols=sheet.getCTWorksheet().getColsArray(0); - assertEquals(4,cols.sizeOfColArray()); - colArray=cols.getColArray(); - assertEquals(2, colArray[1].getOutlineLevel()); - - //three level - sheet.groupColumn((short)6,(short)8); - sheet.groupColumn((short)2,(short)3); - cols=sheet.getCTWorksheet().getColsArray(0); - assertEquals(7,cols.sizeOfColArray()); - colArray=cols.getColArray(); - assertEquals(3, colArray[1].getOutlineLevel()); - assertEquals(3,sheet.getCTWorksheet().getSheetFormatPr().getOutlineLevelCol()); - - sheet.ungroupColumn((short)8,(short) 10); - colArray=cols.getColArray(); - //assertEquals(3, colArray[1].getOutlineLevel()); - - sheet.ungroupColumn((short)4,(short)6); - sheet.ungroupColumn((short)2,(short)2); - colArray=cols.getColArray(); - assertEquals(4, colArray.length); - assertEquals(2,sheet.getCTWorksheet().getSheetFormatPr().getOutlineLevelCol()); - } - - - public void testGroupUngroupRow() { - XSSFWorkbook workbook = new XSSFWorkbook(); - XSSFSheet sheet = workbook.createSheet(); - - //one level - sheet.groupRow(9,10); - assertEquals(2,sheet.getPhysicalNumberOfRows()); - CTRow ctrow = sheet.getRow(9).getCTRow(); - - assertNotNull(ctrow); - assertEquals(10,ctrow.getR()); - assertEquals(1, ctrow.getOutlineLevel()); - assertEquals(1,sheet.getCTWorksheet().getSheetFormatPr().getOutlineLevelRow()); - - //two level - sheet.groupRow(10,13); - assertEquals(5,sheet.getPhysicalNumberOfRows()); - ctrow = sheet.getRow(10).getCTRow(); - assertNotNull(ctrow); - assertEquals(11,ctrow.getR()); - assertEquals(2, ctrow.getOutlineLevel()); - assertEquals(2,sheet.getCTWorksheet().getSheetFormatPr().getOutlineLevelRow()); - - - sheet.ungroupRow(8, 10); - assertEquals(4,sheet.getPhysicalNumberOfRows()); - assertEquals(1,sheet.getCTWorksheet().getSheetFormatPr().getOutlineLevelRow()); - - sheet.ungroupRow(10,10); - assertEquals(3,sheet.getPhysicalNumberOfRows()); - - assertEquals(1,sheet.getCTWorksheet().getSheetFormatPr().getOutlineLevelRow()); - } - + + + public void testGroupUngroupRow() { + XSSFWorkbook workbook = new XSSFWorkbook(); + XSSFSheet sheet = workbook.createSheet(); + + //one level + sheet.groupRow(9, 10); + assertEquals(2, sheet.getPhysicalNumberOfRows()); + CTRow ctrow = sheet.getRow(9).getCTRow(); + + assertNotNull(ctrow); + assertEquals(10, ctrow.getR()); + assertEquals(1, ctrow.getOutlineLevel()); + assertEquals(1, sheet.getCTWorksheet().getSheetFormatPr().getOutlineLevelRow()); + + //two level + sheet.groupRow(10, 13); + assertEquals(5, sheet.getPhysicalNumberOfRows()); + ctrow = sheet.getRow(10).getCTRow(); + assertNotNull(ctrow); + assertEquals(11, ctrow.getR()); + assertEquals(2, ctrow.getOutlineLevel()); + assertEquals(2, sheet.getCTWorksheet().getSheetFormatPr().getOutlineLevelRow()); + + + sheet.ungroupRow(8, 10); + assertEquals(4, sheet.getPhysicalNumberOfRows()); + assertEquals(1, sheet.getCTWorksheet().getSheetFormatPr().getOutlineLevelRow()); + + sheet.ungroupRow(10, 10); + assertEquals(3, sheet.getPhysicalNumberOfRows()); + + assertEquals(1, sheet.getCTWorksheet().getSheetFormatPr().getOutlineLevelRow()); + } + public void testSetZoom() { XSSFWorkbook workBook = new XSSFWorkbook(); XSSFSheet sheet1 = workBook.createSheet("new sheet"); - sheet1.setZoom(3,4); // 75 percent magnification + sheet1.setZoom(3, 4); // 75 percent magnification long zoom = sheet1.getCTWorksheet().getSheetViews().getSheetViewArray(0).getZoomScale(); assertEquals(zoom, 75); @@ -402,7 +361,7 @@ public class TestXSSFSheet extends BaseTestSheet { try { sheet1.setZoom(500); fail("Expecting exception"); - } catch (IllegalArgumentException e){ + } catch (IllegalArgumentException e) { assertEquals("Valid scale values range from 10 to 400", e.getMessage()); } } @@ -413,8 +372,8 @@ public class TestXSSFSheet extends BaseTestSheet { 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)); + 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 @@ -432,9 +391,8 @@ public class TestXSSFSheet extends BaseTestSheet { assertEquals(2, col.getMax()); assertEquals(22.0, col.getWidth()); - // Now set another - sheet.setColumnWidth(3, 33*256); + sheet.setColumnWidth(3, 33 * 256); cols_s = cts.getColsArray(); assertEquals(1, cols_s.length); diff --git a/src/ooxml/testcases/org/apache/poi/xssf/usermodel/TestXSSFWorkbook.java b/src/ooxml/testcases/org/apache/poi/xssf/usermodel/TestXSSFWorkbook.java index 40d16925aa..5a4b2b1fd6 100644 --- a/src/ooxml/testcases/org/apache/poi/xssf/usermodel/TestXSSFWorkbook.java +++ b/src/ooxml/testcases/org/apache/poi/xssf/usermodel/TestXSSFWorkbook.java @@ -44,46 +44,6 @@ public final class TestXSSFWorkbook extends BaseTestWorkbook { } - public void testRepeatingRowsAndColums() { - // First test that setting RR&C for same sheet more than once only creates a - // single Print_Titles built-in record - XSSFWorkbook wb = new XSSFWorkbook(); - XSSFSheet sheet = wb.createSheet("FirstSheet"); - - // set repeating rows and columns twice for the first sheet - for (int i = 0; i < 2; i++) { - wb.setRepeatingRowsAndColumns(0, 0, 0, 0, 3); - //sheet.createFreezePane(0, 3); - } - assertEquals(1, wb.getNumberOfNames()); - XSSFName nr1 = wb.getNameAt(0); - - assertEquals(XSSFName.BUILTIN_PRINT_TITLE, nr1.getNameName()); - assertEquals("'FirstSheet'!$A:$A,'FirstSheet'!$1:$4", nr1.getRefersToFormula()); - - // Save and re-open - XSSFWorkbook nwb = XSSFTestDataSamples.writeOutAndReadBack(wb); - - assertEquals(1, nwb.getNumberOfNames()); - nr1 = nwb.getNameAt(0); - - assertEquals(XSSFName.BUILTIN_PRINT_TITLE, nr1.getNameName()); - assertEquals("'FirstSheet'!$A:$A,'FirstSheet'!$1:$4", nr1.getRefersToFormula()); - - // check that setting RR&C on a second sheet causes a new Print_Titles built-in - // name to be created - sheet = nwb.createSheet("SecondSheet"); - nwb.setRepeatingRowsAndColumns(1, 1, 2, 0, 0); - - assertEquals(2, nwb.getNumberOfNames()); - XSSFName nr2 = nwb.getNameAt(1); - - 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, and then re-load a new document */ @@ -164,20 +124,6 @@ public final class TestXSSFWorkbook extends BaseTestWorkbook { } - public void testFindFont(){ - //get default font and check against default value - XSSFWorkbook workbook = new XSSFWorkbook(); - Font fontFind=workbook.findFont(Font.BOLDWEIGHT_NORMAL, IndexedColors.BLACK.getIndex(), (short)11, "Calibri", false, false, Font.SS_NONE, Font.U_NONE); - assertNotNull(fontFind); - - //get default font, then change 2 values and check against different values (height changes) - Font font=workbook.createFont(); - ((XSSFFont)font).setBold(true); - font.setUnderline(Font.U_DOUBLE); - fontFind=workbook.findFont(Font.BOLDWEIGHT_BOLD, IndexedColors.BLACK.getIndex(), (short)15, "Calibri", false, false, Font.SS_NONE, Font.U_DOUBLE); - assertNull(fontFind); - } - public void testGetCellStyleAt(){ XSSFWorkbook workbook = new XSSFWorkbook(); short i = 0; @@ -212,25 +158,6 @@ public final class TestXSSFWorkbook extends BaseTestWorkbook { assertNotNull(fontAt); } - public void testGetNumberOfFonts(){ - XSSFWorkbook wb = new XSSFWorkbook(); - - XSSFFont f1=wb.createFont(); - f1.setBold(true); - wb.createCellStyle().setFont(f1); - - XSSFFont f2=wb.createFont(); - f2.setUnderline(Font.U_DOUBLE); - wb.createCellStyle().setFont(f2); - - XSSFFont f3=wb.createFont(); - f3.setFontHeightInPoints((short)23); - wb.createCellStyle().setFont(f3); - - assertEquals(4,wb.getNumberOfFonts()); - assertEquals(Font.U_DOUBLE,wb.getFontAt((short)2).getUnderline()); - } - public void testGetNumCellStyles(){ XSSFWorkbook workbook = new XSSFWorkbook(); short i = workbook.getNumCellStyles(); @@ -240,17 +167,6 @@ public final class TestXSSFWorkbook extends BaseTestWorkbook { assertNotSame(2, i); } - public void testSetDisplayedTab(){ - XSSFWorkbook workbook = new XSSFWorkbook(); - workbook.setFirstVisibleTab(1); - short i = (short) workbook.getFirstVisibleTab(); - //0 (defualt value) is not longer set - assertNotSame(0, i); - //1 is the default tab - assertEquals(1, i); - } - - public void testLoadSave() { XSSFWorkbook workbook = XSSFTestDataSamples.openSampleWorkbook("Formatting.xlsx"); assertEquals(3, workbook.getNumberOfSheets()); diff --git a/src/testcases/org/apache/poi/hssf/HSSFITestDataProvider.java b/src/testcases/org/apache/poi/hssf/HSSFITestDataProvider.java index 2311cc0b39..a86bd099ee 100755 --- a/src/testcases/org/apache/poi/hssf/HSSFITestDataProvider.java +++ b/src/testcases/org/apache/poi/hssf/HSSFITestDataProvider.java @@ -42,6 +42,10 @@ public final class HSSFITestDataProvider implements ITestDataProvider { return new HSSFWorkbook();
}
+ public byte[] getTestDataFileContent(String fileName) {
+ return HSSFTestDataSamples.getTestDataFileContent(fileName);
+ }
+
private HSSFITestDataProvider(){}
private static HSSFITestDataProvider inst = new HSSFITestDataProvider();
public static HSSFITestDataProvider getInstance(){
diff --git a/src/testcases/org/apache/poi/hssf/usermodel/AllUserModelTests.java b/src/testcases/org/apache/poi/hssf/usermodel/AllUserModelTests.java index 5effed4b55..6b3043c072 100755 --- a/src/testcases/org/apache/poi/hssf/usermodel/AllUserModelTests.java +++ b/src/testcases/org/apache/poi/hssf/usermodel/AllUserModelTests.java @@ -60,7 +60,7 @@ public class AllUserModelTests { result.addTestSuite(TestHSSFTextbox.class); result.addTestSuite(TestHSSFWorkbook.class); result.addTestSuite(TestLinkTable.class); - result.addTestSuite(TestNamedRange.class); + result.addTestSuite(TestHSSFName.class); result.addTestSuite(TestOLE2Embeding.class); result.addTestSuite(TestPOIFSProperties.class); result.addTestSuite(TestReadWriteChart.class); diff --git a/src/testcases/org/apache/poi/hssf/usermodel/TestBug43093.java b/src/testcases/org/apache/poi/hssf/usermodel/TestBug43093.java deleted file mode 100644 index 3dbf5907ff..0000000000 --- a/src/testcases/org/apache/poi/hssf/usermodel/TestBug43093.java +++ /dev/null @@ -1,61 +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; - -/** - * - */ -public final class TestBug43093 extends TestCase { - - private static void addNewSheetWithCellsA1toD4(HSSFWorkbook book, int sheet) { - - HSSFSheet sht = book .createSheet("s" + sheet); - for (int r=0; r < 4; r++) { - - HSSFRow row = sht.createRow (r); - for (int c=0; c < 4; c++) { - - HSSFCell cel = row.createCell(c); - cel.setCellValue(sheet*100 + r*10 + c); - } - } - } - - public void testBug43093() { - HSSFWorkbook xlw = new HSSFWorkbook(); - - addNewSheetWithCellsA1toD4(xlw, 1); - addNewSheetWithCellsA1toD4(xlw, 2); - addNewSheetWithCellsA1toD4(xlw, 3); - addNewSheetWithCellsA1toD4(xlw, 4); - - HSSFSheet s2 = xlw.getSheet("s2"); - HSSFRow s2r3 = s2.getRow(3); - HSSFCell s2E4 = s2r3.createCell(4); - s2E4.setCellFormula("SUM(s3!B2:C3)"); - - HSSFFormulaEvaluator eva = new HSSFFormulaEvaluator(xlw); - double d = eva.evaluate(s2E4).getNumberValue(); - - // internalEvaluate(...) Area3DEval.: 311+312+321+322 expected - assertEquals(d, (311+312+321+322), 0.0000001); - // System.out.println("Area3DEval ok.: 311+312+321+322=" + d); - } -} diff --git a/src/testcases/org/apache/poi/hssf/usermodel/TestBugs.java b/src/testcases/org/apache/poi/hssf/usermodel/TestBugs.java index c3b0fe2c92..44063e3c7a 100644 --- a/src/testcases/org/apache/poi/hssf/usermodel/TestBugs.java +++ b/src/testcases/org/apache/poi/hssf/usermodel/TestBugs.java @@ -26,6 +26,7 @@ import junit.framework.TestCase; import org.apache.poi.hssf.HSSFTestDataSamples; import org.apache.poi.hssf.OldExcelFormatException; +import org.apache.poi.hssf.HSSFITestDataProvider; import org.apache.poi.hssf.model.Workbook; import org.apache.poi.hssf.record.CellValueRecordInterface; import org.apache.poi.hssf.record.EmbeddedObjectRefSubRecord; @@ -36,23 +37,33 @@ import org.apache.poi.hssf.record.formula.Ptg; import org.apache.poi.ss.usermodel.Cell; import org.apache.poi.ss.usermodel.RichTextString; import org.apache.poi.ss.usermodel.Row; +import org.apache.poi.ss.usermodel.BaseTestBugzillaIssues; import org.apache.poi.ss.util.CellRangeAddress; import org.apache.poi.util.TempFile; /** * Testcases for bugs entered in bugzilla * the Test name contains the bugzilla bug id + * + * <b>YK: If a bug can be tested in terms of common ss interfaces, + * define the test in the base class {@link BaseTestBugzillaIssues}</b> + * * @author Avik Sengupta * @author Yegor Kozlov */ -public final class TestBugs extends TestCase { +public final class TestBugs extends BaseTestBugzillaIssues { - private static HSSFWorkbook openSample(String sampleFileName) { - return HSSFTestDataSamples.openSampleWorkbook(sampleFileName); + @Override + protected HSSFITestDataProvider getTestDataProvider(){ + return HSSFITestDataProvider.getInstance(); } - private static HSSFWorkbook writeOutAndReadBack(HSSFWorkbook original) { - return HSSFTestDataSamples.writeOutAndReadBack(original); + private HSSFWorkbook openSample(String sampleFileName) { + return getTestDataProvider().openSampleWorkbook(sampleFileName); + } + + private HSSFWorkbook writeOutAndReadBack(HSSFWorkbook original) { + return getTestDataProvider().writeOutAndReadBack(original); } private static void writeTestOutputFileForViewing(HSSFWorkbook wb, String simpleFileName) { @@ -94,16 +105,6 @@ public final class TestBugs extends TestCase { c.setCellValue(10); writeOutAndReadBack(wb); } - /**Test writing a hyperlink - * Open resulting sheet in Excel and check that A1 contains a hyperlink*/ - public void test23094() { - HSSFWorkbook wb = new HSSFWorkbook(); - HSSFSheet s = wb.createSheet(); - HSSFRow r = s.createRow(0); - r.createCell(0).setCellFormula("HYPERLINK( \"http://jakarta.apache.org\", \"Jakarta\" )"); - - writeTestOutputFileForViewing(wb, "test23094"); - } /** test hyperlinks * open resulting file in excel, and check that there is a link to Google @@ -163,68 +164,14 @@ public final class TestBugs extends TestCase { writeTestOutputFileForViewing(wb, "test15375"); } - - /** test writing a file with large number of unique strings - *open resulting file in Excel to check results!*/ - - public void test15375_2() throws Exception{ - HSSFWorkbook wb = new HSSFWorkbook(); - HSSFSheet sheet = wb.createSheet(); - - String tmp1 = null; - String tmp2 = null; - String tmp3 = null; - - for (int i = 0; i < 6000; i++) { - tmp1 = "Test1" + i; - tmp2 = "Test2" + i; - tmp3 = "Test3" + i; - - HSSFRow row = sheet.createRow(i); - - HSSFCell cell = row.createCell(0); - setCellText(cell, tmp1); - cell = row.createCell(1); - setCellText(cell, tmp2); - cell = row.createCell(2); - setCellText(cell, tmp3); - } - writeTestOutputFileForViewing(wb, "test15375-2"); - } - /** another test for the number of unique strings issue - *test opening the resulting file in Excel*/ - public void test22568() { - int r=2000;int c=3; - - HSSFWorkbook wb = new HSSFWorkbook() ; - HSSFSheet sheet = wb.createSheet("ExcelTest") ; - - int col_cnt=0, rw_cnt=0 ; - - col_cnt = c; - rw_cnt = r; - - HSSFRow rw ; - rw = sheet.createRow(0) ; - //Header row - for(int j=0; j<col_cnt; j++){ - HSSFCell cell = rw.createCell(j) ; - setCellText(cell, "Col " + (j+1)) ; - } - - for(int i=1; i<rw_cnt; i++){ - rw = sheet.createRow(i) ; - for(int j=0; j<col_cnt; j++){ - HSSFCell cell = rw.createCell(j) ; - setCellText(cell, "Row:" + (i+1) + ",Column:" + (j+1)) ; - } - } - - sheet.setDefaultColumnWidth(18) ; - - writeTestOutputFileForViewing(wb, "test22568"); + /** + * test writing a file with large number of unique strings, + * open resulting file in Excel to check results! + */ + public void test15375_2() { + baseTest15375(6000); } - + /**Double byte strings*/ public void test15556() { @@ -286,50 +233,6 @@ public final class TestBugs extends TestCase { } } - public void test18800() { - HSSFWorkbook book = new HSSFWorkbook(); - book.createSheet("TEST"); - HSSFSheet sheet = book.cloneSheet(0); - book.setSheetName(1,"CLONE"); - sheet.createRow(0).createCell(0).setCellValue(new HSSFRichTextString("Test")); - - book = writeOutAndReadBack(book); - sheet = book.getSheet("CLONE"); - HSSFRow row = sheet.getRow(0); - HSSFCell cell = row.getCell(0); - assertEquals("Test", cell.getRichStringCellValue().getString()); - } - - /** - * Merged regions were being removed from the parent in cloned sheets - */ - public void test22720() { - HSSFWorkbook workBook = new HSSFWorkbook(); - workBook.createSheet("TEST"); - HSSFSheet template = workBook.getSheetAt(0); - - template.addMergedRegion(new CellRangeAddress(0, 1, 0, 2)); - template.addMergedRegion(new CellRangeAddress(1, 2, 0, 2)); - - HSSFSheet clone = workBook.cloneSheet(0); - int originalMerged = template.getNumMergedRegions(); - assertEquals("2 merged regions", 2, originalMerged); - -// remove merged regions from clone - for (int i=template.getNumMergedRegions()-1; i>=0; i--) { - clone.removeMergedRegion(i); - } - - assertEquals("Original Sheet's Merged Regions were removed", originalMerged, template.getNumMergedRegions()); -// check if template's merged regions are OK - if (template.getNumMergedRegions()>0) { - // fetch the first merged region...EXCEPTION OCCURS HERE - template.getMergedRegion(0); - } - //make sure we dont exception - - } - /**Tests read and write of Unicode strings in formula results * bug and testcase submitted by Sompop Kumnoonsate * The file contains THAI unicode characters. @@ -424,21 +327,6 @@ public final class TestBugs extends TestCase { } } - public void test28031() { - HSSFWorkbook wb = new HSSFWorkbook(); - HSSFSheet sheet = wb.createSheet(); - wb.setSheetName(0, "Sheet1"); - - HSSFRow row = sheet.createRow(0); - HSSFCell cell = row.createCell(0); - String formulaText = - "IF(ROUND(A2*B2*C2,2)>ROUND(B2*D2,2),ROUND(A2*B2*C2,2),ROUND(B2*D2,2))"; - cell.setCellFormula(formulaText); - - assertEquals(formulaText, cell.getCellFormula()); - writeTestOutputFileForViewing(wb, "output28031.xls"); - } - public void test33082() { openSample("33082.xls"); } @@ -486,19 +374,8 @@ public final class TestBugs extends TestCase { */ public void test29206() { //the first check with blank workbook - HSSFWorkbook wb = new HSSFWorkbook(); + HSSFWorkbook wb = openSample("Simple.xls"); HSSFSheet sheet = wb.createSheet(); - - for(int i = 1; i < 400; i++) { - HSSFRow row = sheet.getRow(i); - if(row != null) { - row.getCell(0); - } - } - - //now check on an existing xls file - wb = openSample("Simple.xls"); - for(int i = 1; i < 400; i++) { HSSFRow row = sheet.getRow(i); if(row != null) { @@ -901,23 +778,6 @@ public final class TestBugs extends TestCase { assertTrue("no errors writing sample xls", true); } - /** - * Bug 21334: "File error: data may have been lost" with a file - * that contains macros and this formula: - * {=SUM(IF(FREQUENCY(IF(LEN(V4:V220)>0,MATCH(V4:V220,V4:V220,0),""),IF(LEN(V4:V220)>0,MATCH(V4:V220,V4:V220,0),""))>0,1))} - */ - public void test21334() { - HSSFWorkbook wb = new HSSFWorkbook(); - HSSFSheet sh = wb.createSheet(); - HSSFCell cell = sh.createRow(0).createCell(0); - String formula = "SUM(IF(FREQUENCY(IF(LEN(V4:V220)>0,MATCH(V4:V220,V4:V220,0),\"\"),IF(LEN(V4:V220)>0,MATCH(V4:V220,V4:V220,0),\"\"))>0,1))"; - cell.setCellFormula(formula); - - HSSFWorkbook wb_sv = writeOutAndReadBack(wb); - HSSFCell cell_sv = wb_sv.getSheetAt(0).getRow(0).getCell(0); - assertEquals(formula, cell_sv.getCellFormula()); - } - public void test36947() { HSSFWorkbook wb = openSample("36947.xls"); assertTrue("no errors reading sample xls", true); @@ -925,16 +785,6 @@ public final class TestBugs extends TestCase { assertTrue("no errors writing sample xls", true); } - /** - * Bug 42448: Can't parse SUMPRODUCT(A!C7:A!C67, B8:B68) / B69 - */ - public void test42448(){ - HSSFWorkbook wb = new HSSFWorkbook(); - HSSFCell cell = wb.createSheet().createRow(0).createCell(0); - cell.setCellFormula("SUMPRODUCT(A!C7:A!C67, B8:B68) / B69"); - assertTrue("no errors parsing formula", true); - } - public void test39634() { HSSFWorkbook wb = openSample("39634.xls"); assertTrue("no errors reading sample xls", true); @@ -1522,38 +1372,6 @@ public final class TestBugs extends TestCase { } /** - * HSSFRichTextString.length() returns negative for really - * long strings - */ - public void test46368() { - HSSFWorkbook wb = new HSSFWorkbook(); - HSSFSheet s = wb.createSheet(); - HSSFRow r = s.createRow(0); - for(int i=0; i<15; i++) { - int len = 32760 + i; - HSSFCell c = r.createCell(i); - - StringBuffer sb = new StringBuffer(); - for(int j=0; j<len; j++) { - sb.append("x"); - } - HSSFRichTextString rtr = new HSSFRichTextString(sb.toString()); - assertEquals(len, rtr.length()); - c.setCellValue(rtr); - } - - // Save and reload - wb = writeOutAndReadBack(wb); - s = wb.getSheetAt(0); - r = s.getRow(0); - for(int i=0; i<15; i++) { - int len = 32760 + i; - HSSFCell c = r.getCell(i); - assertEquals(len, c.getRichStringCellValue().length()); - } - } - - /** * In POI-2.5 user reported exception when parsing a name with a custom VBA function: * =MY_VBA_FUNCTION("lskdjflsk") */ diff --git a/src/testcases/org/apache/poi/hssf/usermodel/TestHSSFFont.java b/src/testcases/org/apache/poi/hssf/usermodel/TestHSSFFont.java new file mode 100755 index 0000000000..f6ce14ca92 --- /dev/null +++ b/src/testcases/org/apache/poi/hssf/usermodel/TestHSSFFont.java @@ -0,0 +1,56 @@ +/* ==================================================================== + 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 java.io.File; +import java.io.FileOutputStream; +import java.io.IOException; + +import junit.framework.AssertionFailedError; +import org.apache.poi.hssf.HSSFITestDataProvider; +import org.apache.poi.hssf.HSSFTestDataSamples; +import org.apache.poi.hssf.model.Sheet; +import org.apache.poi.hssf.model.HSSFFormulaParser; +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.hssf.record.formula.Ptg; +import org.apache.poi.ss.usermodel.*; +import org.apache.poi.ss.util.AreaReference; +import org.apache.poi.ss.util.CellReference; +import org.apache.poi.ss.formula.FormulaType; + +/** + * Tests various functionality having to do with {@link org.apache.poi.ss.usermodel.Name}. + * + * @author Yegor Kozlov + */ +public final class TestHSSFFont extends BaseTestFont { + + @Override + protected HSSFITestDataProvider getTestDataProvider(){ + return HSSFITestDataProvider.getInstance(); + } + + public void testDefaultFont() { + baseTestDefaultFont(HSSFFont.FONT_ARIAL, (short)200, Font.COLOR_NORMAL); + } +}
\ No newline at end of file diff --git a/src/testcases/org/apache/poi/hssf/usermodel/TestHSSFName.java b/src/testcases/org/apache/poi/hssf/usermodel/TestHSSFName.java index 56bd25b346..291698ec8f 100755 --- a/src/testcases/org/apache/poi/hssf/usermodel/TestHSSFName.java +++ b/src/testcases/org/apache/poi/hssf/usermodel/TestHSSFName.java @@ -19,24 +19,34 @@ package org.apache.poi.hssf.usermodel; import java.util.Date; import java.util.GregorianCalendar; +import java.io.File; +import java.io.FileOutputStream; +import java.io.IOException; import junit.framework.AssertionFailedError; import org.apache.poi.hssf.HSSFITestDataProvider; +import org.apache.poi.hssf.HSSFTestDataSamples; import org.apache.poi.hssf.model.Sheet; +import org.apache.poi.hssf.model.HSSFFormulaParser; 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.hssf.record.formula.Ptg; import org.apache.poi.ss.usermodel.ErrorConstants; import org.apache.poi.ss.usermodel.BaseTestCell; import org.apache.poi.ss.usermodel.BaseTestNamedRange; +import org.apache.poi.ss.util.AreaReference; +import org.apache.poi.ss.util.CellReference; +import org.apache.poi.ss.formula.FormulaType; /** - * 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) + * Tests various functionality having to do with {@link org.apache.poi.ss.usermodel.Name}. + * + * @author Andrew C. Oliver (acoliver at apache dot org) + * @author ROMANL + * @author Danny Mui (danny at muibros.com) + * @author Amol S. Deshmukh < amol at ap ache dot org > */ public final class TestHSSFName extends BaseTestNamedRange { @@ -45,4 +55,187 @@ public final class TestHSSFName extends BaseTestNamedRange { return HSSFITestDataProvider.getInstance(); } + public void testRepeatingRowsAndColumsNames() { + // First test that setting RR&C for same sheet more than once only creates a + // single Print_Titles built-in record + HSSFWorkbook wb = new HSSFWorkbook(); + HSSFSheet sheet = wb.createSheet("FirstSheet"); + + // set repeating rows and columns twice for the first sheet + for (int i = 0; i < 2; i++) { + wb.setRepeatingRowsAndColumns(0, 0, 0, 0, 3-1); + sheet.createFreezePane(0, 3); + } + assertEquals(1, wb.getNumberOfNames()); + HSSFName nr1 = wb.getNameAt(0); + + assertEquals("Print_Titles", nr1.getNameName()); + if (false) { + // TODO - full column references not rendering properly, absolute markers not present either + assertEquals("FirstSheet!$A:$A,FirstSheet!$1:$3", nr1.getRefersToFormula()); + } else { + assertEquals("FirstSheet!A:A,FirstSheet!$A$1:$IV$3", nr1.getRefersToFormula()); + } + + // Save and re-open + HSSFWorkbook nwb = HSSFTestDataSamples.writeOutAndReadBack(wb); + + assertEquals(1, nwb.getNumberOfNames()); + nr1 = nwb.getNameAt(0); + + assertEquals("Print_Titles", nr1.getNameName()); + assertEquals("FirstSheet!A:A,FirstSheet!$A$1:$IV$3", nr1.getRefersToFormula()); + + // check that setting RR&C on a second sheet causes a new Print_Titles built-in + // name to be created + sheet = nwb.createSheet("SecondSheet"); + nwb.setRepeatingRowsAndColumns(1, 1, 2, 0, 0); + + assertEquals(2, nwb.getNumberOfNames()); + HSSFName nr2 = nwb.getNameAt(1); + + assertEquals("Print_Titles", nr2.getNameName()); + assertEquals("SecondSheet!B:C,SecondSheet!$A$1:$IV$1", nr2.getRefersToFormula()); + + if (false) { + // In case you fancy checking in excel, to ensure it + // won't complain about the file now + try { + File tempFile = File.createTempFile("POI-45126-", ".xls"); + FileOutputStream fout = new FileOutputStream(tempFile); + nwb.write(fout); + fout.close(); + System.out.println("check out " + tempFile.getAbsolutePath()); + } catch (IOException e) { + throw new RuntimeException(e); + } + } + } + + /** Test of TestCase method, of class test.RangeTest. */ + public void testNamedRange() { + HSSFWorkbook wb = getTestDataProvider().openSampleWorkbook("Simple.xls"); + + //Creating new Named Range + HSSFName newNamedRange = wb.createName(); + + //Getting Sheet Name for the reference + String sheetName = wb.getSheetName(0); + + //Setting its name + newNamedRange.setNameName("RangeTest"); + //Setting its reference + newNamedRange.setRefersToFormula(sheetName + "!$D$4:$E$8"); + + //Getting NAmed Range + HSSFName namedRange1 = wb.getNameAt(0); + //Getting it sheet name + sheetName = namedRange1.getSheetName(); + + // sanity check + SanityChecker c = new SanityChecker(); + c.checkHSSFWorkbook(wb); + + wb = HSSFTestDataSamples.writeOutAndReadBack(wb); + HSSFName nm =wb.getNameAt(wb.getNameIndex("RangeTest")); + assertTrue("Name is "+nm.getNameName(),"RangeTest".equals(nm.getNameName())); + assertEquals(wb.getSheetName(0)+"!$D$4:$E$8", nm.getRefersToFormula()); + } + + /** + * Reads an excel file already containing a named range. + * <p> + * Addresses Bug <a href="http://issues.apache.org/bugzilla/show_bug.cgi?id=9632" target="_bug">#9632</a> + */ + public void testNamedRead() { + HSSFWorkbook wb = getTestDataProvider().openSampleWorkbook("namedinput.xls"); + + //Get index of the namedrange with the name = "NamedRangeName" , which was defined in input.xls as A1:D10 + int NamedRangeIndex = wb.getNameIndex("NamedRangeName"); + + //Getting NAmed Range + HSSFName namedRange1 = wb.getNameAt(NamedRangeIndex); + String sheetName = wb.getSheetName(0); + + //Getting its reference + String reference = namedRange1.getRefersToFormula(); + + assertEquals(sheetName+"!$A$1:$D$10", reference); + + HSSFName namedRange2 = wb.getNameAt(1); + + assertEquals(sheetName+"!$D$17:$G$27", namedRange2.getRefersToFormula()); + assertEquals("SecondNamedRange", namedRange2.getNameName()); + } + + /** + * Reads an excel file already containing a named range and updates it + * <p> + * Addresses Bug <a href="http://issues.apache.org/bugzilla/show_bug.cgi?id=16411" target="_bug">#16411</a> + */ + public void testNamedReadModify() { + HSSFWorkbook wb = getTestDataProvider().openSampleWorkbook("namedinput.xls"); + + HSSFName name = wb.getNameAt(0); + String sheetName = wb.getSheetName(0); + + assertEquals(sheetName+"!$A$1:$D$10", name.getRefersToFormula()); + + name = wb.getNameAt(1); + String newReference = sheetName +"!$A$1:$C$36"; + + name.setRefersToFormula(newReference); + assertEquals(newReference, name.getRefersToFormula()); + } + + /** + * Test to see if the print area can be retrieved from an excel created file + */ + public void testPrintAreaFileRead() { + HSSFWorkbook workbook = getTestDataProvider().openSampleWorkbook("SimpleWithPrintArea.xls"); + + String sheetName = workbook.getSheetName(0); + String reference = sheetName+"!$A$1:$C$5"; + + assertEquals(reference, workbook.getPrintArea(0)); + } + + + public void testDeletedReference() throws Exception { + HSSFWorkbook wb = HSSFTestDataSamples.openSampleWorkbook("24207.xls"); + assertEquals(2, wb.getNumberOfNames()); + + HSSFName name1 = wb.getNameAt(0); + assertEquals("a", name1.getNameName()); + assertEquals("Sheet1!$A$1", name1.getRefersToFormula()); + new AreaReference(name1.getRefersToFormula()); + assertTrue("Successfully constructed first reference", true); + + HSSFName name2 = wb.getNameAt(1); + assertEquals("b", name2.getNameName()); + assertEquals("Sheet1!#REF!", name2.getRefersToFormula()); + assertTrue(name2.isDeleted()); + try { + new AreaReference(name2.getRefersToFormula()); + fail("attempt to supply an invalid reference to AreaReference constructor results in exception"); + } catch (StringIndexOutOfBoundsException e) { // TODO - use a different exception for this condition + // expected during successful test + } + } + + /** + * When setting A1 type of referencese HSSFName.setRefersToFormula + * must set the type of operands to Ptg.CLASS_REF, + * otherwise created named don't appear in the dropdown to the left opf formula bar in Excel + */ + public void testTypeOfRootPtg(){ + HSSFWorkbook wb = new HSSFWorkbook(); + wb.createSheet("CSCO"); + + Ptg[] ptgs = HSSFFormulaParser.parse("CSCO!$E$71", wb, FormulaType.NAMEDRANGE, 0); + for (int i = 0; i < ptgs.length; i++) { + assertEquals('R', ptgs[i].getRVAType()); + } + + } }
\ No newline at end of file diff --git a/src/testcases/org/apache/poi/hssf/usermodel/TestHSSFPicture.java b/src/testcases/org/apache/poi/hssf/usermodel/TestHSSFPicture.java index d1a6719e32..81c8990769 100644 --- a/src/testcases/org/apache/poi/hssf/usermodel/TestHSSFPicture.java +++ b/src/testcases/org/apache/poi/hssf/usermodel/TestHSSFPicture.java @@ -19,33 +19,23 @@ package org.apache.poi.hssf.usermodel; import junit.framework.TestCase;
import org.apache.poi.hssf.HSSFTestDataSamples;
+import org.apache.poi.hssf.HSSFITestDataProvider;
+import org.apache.poi.ss.usermodel.BaseTestPicture;
/**
* Test <code>HSSFPicture</code>.
*
* @author Yegor Kozlov (yegor at apache.org)
*/
-public final class TestHSSFPicture extends TestCase{
+public final class TestHSSFPicture extends BaseTestPicture {
- public void testResize() {
- HSSFWorkbook wb = new HSSFWorkbook();
- HSSFSheet sh1 = wb.createSheet();
- HSSFPatriarch p1 = sh1.createDrawingPatriarch();
-
- byte[] pictureData = HSSFTestDataSamples.getTestDataFileContent("logoKarmokar4.png");
- int idx1 = wb.addPicture( pictureData, HSSFWorkbook.PICTURE_TYPE_PNG );
- HSSFPicture picture1 = p1.createPicture(new HSSFClientAnchor(), idx1);
- HSSFClientAnchor anchor1 = picture1.getPreferredSize();
+ @Override
+ protected HSSFITestDataProvider getTestDataProvider(){
+ return HSSFITestDataProvider.getInstance();
+ }
- //assert against what would BiffViewer print if we insert the image in xls and dump the file
- assertEquals(0, anchor1.getCol1());
- assertEquals(0, anchor1.getRow1());
- assertEquals(1, anchor1.getCol2());
- assertEquals(9, anchor1.getRow2());
- assertEquals(0, anchor1.getDx1());
- assertEquals(0, anchor1.getDy1());
- assertEquals(848, anchor1.getDx2());
- assertEquals(240, anchor1.getDy2());
+ public void testResize() {
+ baseTestResize(new HSSFClientAnchor(0, 0, 848, 240, (short)0, 0, (short)1, 9));
}
/**
diff --git a/src/testcases/org/apache/poi/hssf/usermodel/TestHSSFWorkbook.java b/src/testcases/org/apache/poi/hssf/usermodel/TestHSSFWorkbook.java index 880f3ecf24..484ff70e18 100644 --- a/src/testcases/org/apache/poi/hssf/usermodel/TestHSSFWorkbook.java +++ b/src/testcases/org/apache/poi/hssf/usermodel/TestHSSFWorkbook.java @@ -59,23 +59,6 @@ public final class TestHSSFWorkbook extends BaseTestWorkbook { assertEquals(3, nameRecord.getSheetNumber()); } - public void testCaseInsensitiveNames() { - HSSFWorkbook b = new HSSFWorkbook( ); - HSSFSheet originalSheet = b.createSheet("Sheet1"); - HSSFSheet fetchedSheet = b.getSheet("sheet1"); - if(fetchedSheet == null) { - throw new AssertionFailedError("Identified bug 44892"); - } - assertEquals(originalSheet, fetchedSheet); - try { - b.createSheet("sHeeT1"); - fail("should have thrown exceptiuon due to duplicate sheet name"); - } catch (IllegalArgumentException e) { - // expected during successful test - assertEquals("The workbook already contains a sheet of this name", e.getMessage()); - } - } - public void testWindowOneDefaults() { HSSFWorkbook b = new HSSFWorkbook( ); try { @@ -154,7 +137,7 @@ public final class TestHSSFWorkbook extends BaseTestWorkbook { // So, start again b = getTestDataProvider().openSampleWorkbook("44010-SingleChart.xls"); - b = writeRead(b); + b = getTestDataProvider().writeOutAndReadBack(b); assertEquals(2, b.getNumberOfSheets()); s = b.getSheetAt(1); assertEquals(0, s.getFirstRowNum()); @@ -184,7 +167,7 @@ public final class TestHSSFWorkbook extends BaseTestWorkbook { // So, start again b = getTestDataProvider().openSampleWorkbook("44010-TwoCharts.xls"); - b = writeRead(b); + b = getTestDataProvider().writeOutAndReadBack(b); assertEquals(3, b.getNumberOfSheets()); s = b.getSheetAt(1); @@ -195,11 +178,6 @@ public final class TestHSSFWorkbook extends BaseTestWorkbook { assertEquals(8, s.getLastRowNum()); } - private static HSSFWorkbook writeRead(HSSFWorkbook b) { - return HSSFTestDataSamples.writeOutAndReadBack(b); - } - - public void testSelectedSheet_bug44523() { HSSFWorkbook wb=new HSSFWorkbook(); HSSFSheet sheet1 = wb.createSheet("Sheet1"); diff --git a/src/testcases/org/apache/poi/hssf/usermodel/TestNamedRange.java b/src/testcases/org/apache/poi/hssf/usermodel/TestNamedRange.java deleted file mode 100644 index ecb6d7a62b..0000000000 --- a/src/testcases/org/apache/poi/hssf/usermodel/TestNamedRange.java +++ /dev/null @@ -1,603 +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.File; -import java.io.FileOutputStream; -import java.io.IOException; - -import junit.framework.TestCase; - -import org.apache.poi.hssf.HSSFTestDataSamples; -import org.apache.poi.hssf.model.HSSFFormulaParser; -import org.apache.poi.hssf.record.formula.Ptg; -import org.apache.poi.ss.util.AreaReference; -import org.apache.poi.ss.util.CellReference; -import org.apache.poi.ss.formula.FormulaType; - -/** - * - * @author ROMANL - * @author Andrew C. Oliver (acoliver at apache dot org) - * @author Danny Mui (danny at muibros.com) - * @author Amol S. Deshmukh < amol at ap ache dot org > - */ -public final class TestNamedRange extends TestCase { - - private static HSSFWorkbook openSample(String sampleFileName) { - return HSSFTestDataSamples.openSampleWorkbook(sampleFileName); - } - - /** Test of TestCase method, of class test.RangeTest. */ - public void testNamedRange() { - HSSFWorkbook wb = openSample("Simple.xls"); - - //Creating new Named Range - HSSFName newNamedRange = wb.createName(); - - //Getting Sheet Name for the reference - String sheetName = wb.getSheetName(0); - - //Setting its name - newNamedRange.setNameName("RangeTest"); - //Setting its reference - newNamedRange.setRefersToFormula(sheetName + "!$D$4:$E$8"); - - //Getting NAmed Range - HSSFName namedRange1 = wb.getNameAt(0); - //Getting it sheet name - sheetName = namedRange1.getSheetName(); - - // sanity check - SanityChecker c = new SanityChecker(); - c.checkHSSFWorkbook(wb); - - wb = HSSFTestDataSamples.writeOutAndReadBack(wb); - HSSFName nm =wb.getNameAt(wb.getNameIndex("RangeTest")); - assertTrue("Name is "+nm.getNameName(),"RangeTest".equals(nm.getNameName())); - assertEquals(wb.getSheetName(0)+"!$D$4:$E$8", nm.getRefersToFormula()); - } - - /** - * Reads an excel file already containing a named range. - * <p> - * Addresses Bug <a href="http://issues.apache.org/bugzilla/show_bug.cgi?id=9632" target="_bug">#9632</a> - */ - public void testNamedRead() { - HSSFWorkbook wb = openSample("namedinput.xls"); - - //Get index of the namedrange with the name = "NamedRangeName" , which was defined in input.xls as A1:D10 - int NamedRangeIndex = wb.getNameIndex("NamedRangeName"); - - //Getting NAmed Range - HSSFName namedRange1 = wb.getNameAt(NamedRangeIndex); - String sheetName = wb.getSheetName(0); - - //Getting its reference - String reference = namedRange1.getRefersToFormula(); - - assertEquals(sheetName+"!$A$1:$D$10", reference); - - HSSFName namedRange2 = wb.getNameAt(1); - - assertEquals(sheetName+"!$D$17:$G$27", namedRange2.getRefersToFormula()); - assertEquals("SecondNamedRange", namedRange2.getNameName()); - } - - /** - * Reads an excel file already containing a named range and updates it - * <p> - * Addresses Bug <a href="http://issues.apache.org/bugzilla/show_bug.cgi?id=16411" target="_bug">#16411</a> - */ - public void testNamedReadModify() { - HSSFWorkbook wb = openSample("namedinput.xls"); - - HSSFName name = wb.getNameAt(0); - String sheetName = wb.getSheetName(0); - - assertEquals(sheetName+"!$A$1:$D$10", name.getRefersToFormula()); - - name = wb.getNameAt(1); - String newReference = sheetName +"!$A$1:$C$36"; - - name.setRefersToFormula(newReference); - assertEquals(newReference, name.getRefersToFormula()); - } - - /** - * Test that multiple named ranges can be added written and read - */ - public void testMultipleNamedWrite() { - HSSFWorkbook wb = new HSSFWorkbook(); - - - wb.createSheet("testSheet1"); - String sheetName = wb.getSheetName(0); - - assertEquals("testSheet1", sheetName); - - //Creating new Named Range - HSSFName newNamedRange = wb.createName(); - - newNamedRange.setNameName("RangeTest"); - newNamedRange.setRefersToFormula(sheetName + "!$D$4:$E$8"); - - //Creating another new Named Range - HSSFName newNamedRange2 = wb.createName(); - - newNamedRange2.setNameName("AnotherTest"); - newNamedRange2.setRefersToFormula(sheetName + "!$F$1:$G$6"); - - wb.getNameAt(0); - - wb = HSSFTestDataSamples.writeOutAndReadBack(wb); - HSSFName nm =wb.getNameAt(wb.getNameIndex("RangeTest")); - assertTrue("Name is "+nm.getNameName(),"RangeTest".equals(nm.getNameName())); - assertTrue("Reference is "+nm.getRefersToFormula(),(wb.getSheetName(0)+"!$D$4:$E$8").equals(nm.getRefersToFormula())); - - nm = wb.getNameAt(wb.getNameIndex("AnotherTest")); - assertTrue("Name is "+nm.getNameName(),"AnotherTest".equals(nm.getNameName())); - assertTrue("Reference is "+nm.getRefersToFormula(),newNamedRange2.getRefersToFormula().equals(nm.getRefersToFormula())); - } - - /** - * Test case provided by czhang@cambian.com (Chun Zhang) - * <p> - * Addresses Bug <a href="http://issues.apache.org/bugzilla/show_bug.cgi?id=13775" target="_bug">#13775</a> - */ - public void testMultiNamedRange() { - - // Create a new workbook - HSSFWorkbook wb = new HSSFWorkbook (); - - - // Create a worksheet 'sheet1' in the new workbook - wb.createSheet (); - wb.setSheetName (0, "sheet1"); - - // Create another worksheet 'sheet2' in the new workbook - wb.createSheet (); - wb.setSheetName (1, "sheet2"); - - // Create a new named range for worksheet 'sheet1' - HSSFName namedRange1 = wb.createName(); - - // Set the name for the named range for worksheet 'sheet1' - namedRange1.setNameName("RangeTest1"); - - // Set the reference for the named range for worksheet 'sheet1' - namedRange1.setRefersToFormula("sheet1" + "!$A$1:$L$41"); - - // Create a new named range for worksheet 'sheet2' - HSSFName namedRange2 = wb.createName(); - - // Set the name for the named range for worksheet 'sheet2' - namedRange2.setNameName("RangeTest2"); - - // Set the reference for the named range for worksheet 'sheet2' - namedRange2.setRefersToFormula("sheet2" + "!$A$1:$O$21"); - - // Write the workbook to a file - // Read the Excel file and verify its content - wb = HSSFTestDataSamples.writeOutAndReadBack(wb); - HSSFName nm1 =wb.getNameAt(wb.getNameIndex("RangeTest1")); - assertTrue("Name is "+nm1.getNameName(),"RangeTest1".equals(nm1.getNameName())); - assertTrue("Reference is "+nm1.getRefersToFormula(),(wb.getSheetName(0)+"!$A$1:$L$41").equals(nm1.getRefersToFormula())); - - HSSFName nm2 =wb.getNameAt(wb.getNameIndex("RangeTest2")); - assertTrue("Name is "+nm2.getNameName(),"RangeTest2".equals(nm2.getNameName())); - assertTrue("Reference is "+nm2.getRefersToFormula(),(wb.getSheetName(1)+"!$A$1:$O$21").equals(nm2.getRefersToFormula())); - } - - public void testUnicodeNamedRange() { - HSSFWorkbook workBook = new HSSFWorkbook(); - workBook.createSheet("Test"); - HSSFName name = workBook.createName(); - name.setNameName("\u03B1"); - name.setRefersToFormula("Test!$D$3:$E$8"); - - - HSSFWorkbook workBook2 = HSSFTestDataSamples.writeOutAndReadBack(workBook); - HSSFName name2 = workBook2.getNameAt(0); - - assertEquals("\u03B1", name2.getNameName()); - assertEquals("Test!$D$3:$E$8", name2.getRefersToFormula()); - } - - /** - * Test to see if the print areas can be retrieved/created in memory - */ - public void testSinglePrintArea() { - HSSFWorkbook workbook = new HSSFWorkbook(); - workbook.createSheet("Test Print Area"); - String sheetName = workbook.getSheetName(0); - - String reference = "$A$1:$B$1"; - workbook.setPrintArea(0, reference); - - String retrievedPrintArea = workbook.getPrintArea(0); - - assertNotNull("Print Area not defined for first sheet", retrievedPrintArea); - assertEquals("'" + sheetName + "'!$A$1:$B$1", retrievedPrintArea); - } - - /** - * For Convenience, don't force sheet names to be used - */ - public void testSinglePrintAreaWOSheet() - { - HSSFWorkbook workbook = new HSSFWorkbook(); - workbook.createSheet("Test Print Area"); - String sheetName = workbook.getSheetName(0); - - String reference = "$A$1:$B$1"; - workbook.setPrintArea(0, reference); - - String retrievedPrintArea = workbook.getPrintArea(0); - - assertNotNull("Print Area not defined for first sheet", retrievedPrintArea); - assertEquals("'" + sheetName + "'!" + reference, retrievedPrintArea); - } - - /** - * Test to see if the print area can be retrieved from an excel created file - */ - public void testPrintAreaFileRead() { - HSSFWorkbook workbook = openSample("SimpleWithPrintArea.xls"); - - String sheetName = workbook.getSheetName(0); - String reference = sheetName+"!$A$1:$C$5"; - - assertEquals(reference, workbook.getPrintArea(0)); - } - - /** - * Test to see if the print area made it to the file - */ - public void testPrintAreaFile() { - HSSFWorkbook workbook = new HSSFWorkbook(); - workbook.createSheet("Test Print Area"); - String sheetName = workbook.getSheetName(0); - - - String reference = "$A$1:$B$1"; - workbook.setPrintArea(0, reference); - - workbook = HSSFTestDataSamples.writeOutAndReadBack(workbook); - - String retrievedPrintArea = workbook.getPrintArea(0); - assertNotNull("Print Area not defined for first sheet", retrievedPrintArea); - assertEquals("References Match", "'" + sheetName + "'!$A$1:$B$1", retrievedPrintArea); - } - - /** - * Test to see if multiple print areas made it to the file - */ - public void testMultiplePrintAreaFile() { - HSSFWorkbook workbook = new HSSFWorkbook(); - - workbook.createSheet("Sheet1"); - workbook.createSheet("Sheet2"); - workbook.createSheet("Sheet3"); - String reference1 = "$A$1:$B$1"; - String reference2 = "$B$2:$D$5"; - String reference3 = "$D$2:$F$5"; - - workbook.setPrintArea(0, reference1); - workbook.setPrintArea(1, reference2); - workbook.setPrintArea(2, reference3); - - //Check created print areas - String retrievedPrintArea; - - retrievedPrintArea = workbook.getPrintArea(0); - assertNotNull("Print Area Not Found (Sheet 1)", retrievedPrintArea); - assertEquals("Sheet1!" + reference1, retrievedPrintArea); - - retrievedPrintArea = workbook.getPrintArea(1); - assertNotNull("Print Area Not Found (Sheet 2)", retrievedPrintArea); - assertEquals("Sheet2!" + reference2, retrievedPrintArea); - - retrievedPrintArea = workbook.getPrintArea(2); - assertNotNull("Print Area Not Found (Sheet 3)", retrievedPrintArea); - assertEquals("Sheet3!" + reference3, retrievedPrintArea); - - // Check print areas after re-reading workbook - workbook = HSSFTestDataSamples.writeOutAndReadBack(workbook); - - retrievedPrintArea = workbook.getPrintArea(0); - assertNotNull("Print Area Not Found (Sheet 1)", retrievedPrintArea); - assertEquals("Sheet1!" + reference1, retrievedPrintArea); - - retrievedPrintArea = workbook.getPrintArea(1); - assertNotNull("Print Area Not Found (Sheet 2)", retrievedPrintArea); - assertEquals("Sheet2!" + reference2, retrievedPrintArea); - - retrievedPrintArea = workbook.getPrintArea(2); - assertNotNull("Print Area Not Found (Sheet 3)", retrievedPrintArea); - assertEquals("Sheet3!" + reference3, retrievedPrintArea); - } - - /** - * Tests the setting of print areas with coordinates (Row/Column designations) - * - */ - public void testPrintAreaCoords(){ - HSSFWorkbook workbook = new HSSFWorkbook(); - workbook.createSheet("Test Print Area"); - String sheetName = workbook.getSheetName(0); - - workbook.setPrintArea(0, 0, 1, 0, 0); - - String retrievedPrintArea = workbook.getPrintArea(0); - - assertNotNull("Print Area not defined for first sheet", retrievedPrintArea); - assertEquals("'" + sheetName + "'!$A$1:$B$1", retrievedPrintArea); - } - - - /** - * Tests the parsing of union area expressions, and re-display in the presence of sheet names - * with special characters. - */ - public void testPrintAreaUnion(){ - HSSFWorkbook workbook = new HSSFWorkbook(); - workbook.createSheet("Test Print Area"); - - String reference = "$A$1:$B$1,$D$1:$F$2"; - workbook.setPrintArea(0, reference); - String retrievedPrintArea = workbook.getPrintArea(0); - assertNotNull("Print Area not defined for first sheet", retrievedPrintArea); - assertEquals("'Test Print Area'!$A$1:$B$1,'Test Print Area'!$D$1:$F$2", retrievedPrintArea); - } - - /** - * Verifies an existing print area is deleted - * - */ - public void testPrintAreaRemove() { - HSSFWorkbook workbook = new HSSFWorkbook(); - workbook.createSheet("Test Print Area"); - workbook.getSheetName(0); - - workbook.setPrintArea(0, 0, 1, 0, 0); - - String retrievedPrintArea = workbook.getPrintArea(0); - - assertNotNull("Print Area not defined for first sheet", retrievedPrintArea); - - workbook.removePrintArea(0); - assertNull("PrintArea was not removed", workbook.getPrintArea(0)); - } - - /** - * Verifies correct functioning for "single cell named range" (aka "named cell") - */ - public void testNamedCell_1() { - - // setup for this testcase - String sheetName = "Test Named Cell"; - String cellName = "A name for a named cell"; - String cellValue = "TEST Value"; - HSSFWorkbook wb = new HSSFWorkbook(); - HSSFSheet sheet = wb.createSheet(sheetName); - sheet.createRow(0).createCell(0).setCellValue(new HSSFRichTextString(cellValue)); - - // create named range for a single cell using areareference - HSSFName namedCell = wb.createName(); - namedCell.setNameName(cellName); - String reference = "'" + sheetName + "'" + "!A1:A1"; - namedCell.setRefersToFormula(reference); - - // retrieve the newly created named range - int namedCellIdx = wb.getNameIndex(cellName); - HSSFName aNamedCell = wb.getNameAt(namedCellIdx); - assertNotNull(aNamedCell); - - // retrieve the cell at the named range and test its contents - AreaReference aref = new AreaReference(aNamedCell.getRefersToFormula()); - assertTrue("Should be exactly 1 cell in the named cell :'" +cellName+"'", aref.isSingleCell()); - - CellReference cref = aref.getFirstCell(); - assertNotNull(cref); - HSSFSheet s = wb.getSheet(cref.getSheetName()); - assertNotNull(s); - HSSFRow r = sheet.getRow(cref.getRow()); - HSSFCell c = r.getCell(cref.getCol()); - String contents = c.getRichStringCellValue().getString(); - assertEquals("Contents of cell retrieved by its named reference", contents, cellValue); - } - - /** - * Verifies correct functioning for "single cell named range" (aka "named cell") - */ - public void testNamedCell_2() { - - // setup for this testcase - String sname = "TestSheet", cname = "TestName", cvalue = "TestVal"; - HSSFWorkbook wb = new HSSFWorkbook(); - HSSFSheet sheet = wb.createSheet(sname); - sheet.createRow(0).createCell(0).setCellValue(new HSSFRichTextString(cvalue)); - - // create named range for a single cell using cellreference - HSSFName namedCell = wb.createName(); - namedCell.setNameName(cname); - String reference = sname+"!A1"; - namedCell.setRefersToFormula(reference); - - // retrieve the newly created named range - int namedCellIdx = wb.getNameIndex(cname); - HSSFName aNamedCell = wb.getNameAt(namedCellIdx); - assertNotNull(aNamedCell); - - // retrieve the cell at the named range and test its contents - CellReference cref = new CellReference(aNamedCell.getRefersToFormula()); - assertNotNull(cref); - HSSFSheet s = wb.getSheet(cref.getSheetName()); - HSSFRow r = sheet.getRow(cref.getRow()); - HSSFCell c = r.getCell(cref.getCol()); - String contents = c.getRichStringCellValue().getString(); - assertEquals("Contents of cell retrieved by its named reference", contents, cvalue); - } - - public void testDeletedReference() throws Exception { - HSSFWorkbook wb = HSSFTestDataSamples.openSampleWorkbook("24207.xls"); - assertEquals(2, wb.getNumberOfNames()); - - HSSFName name1 = wb.getNameAt(0); - assertEquals("a", name1.getNameName()); - assertEquals("Sheet1!$A$1", name1.getRefersToFormula()); - new AreaReference(name1.getRefersToFormula()); - assertTrue("Successfully constructed first reference", true); - - HSSFName name2 = wb.getNameAt(1); - assertEquals("b", name2.getNameName()); - assertEquals("Sheet1!#REF!", name2.getRefersToFormula()); - assertTrue(name2.isDeleted()); - try { - new AreaReference(name2.getRefersToFormula()); - fail("attempt to supply an invalid reference to AreaReference constructor results in exception"); - } catch (StringIndexOutOfBoundsException e) { // TODO - use a different exception for this condition - // expected during successful test - } - } - - public void testRepeatingRowsAndColumsNames() { - // First test that setting RR&C for same sheet more than once only creates a - // single Print_Titles built-in record - HSSFWorkbook wb = new HSSFWorkbook(); - HSSFSheet sheet = wb.createSheet("FirstSheet"); - - // set repeating rows and columns twice for the first sheet - for (int i = 0; i < 2; i++) { - wb.setRepeatingRowsAndColumns(0, 0, 0, 0, 3-1); - sheet.createFreezePane(0, 3); - } - assertEquals(1, wb.getNumberOfNames()); - HSSFName nr1 = wb.getNameAt(0); - - assertEquals("Print_Titles", nr1.getNameName()); - if (false) { - // TODO - full column references not rendering properly, absolute markers not present either - assertEquals("FirstSheet!$A:$A,FirstSheet!$1:$3", nr1.getRefersToFormula()); - } else { - assertEquals("FirstSheet!A:A,FirstSheet!$A$1:$IV$3", nr1.getRefersToFormula()); - } - - // Save and re-open - HSSFWorkbook nwb = HSSFTestDataSamples.writeOutAndReadBack(wb); - - assertEquals(1, nwb.getNumberOfNames()); - nr1 = nwb.getNameAt(0); - - assertEquals("Print_Titles", nr1.getNameName()); - assertEquals("FirstSheet!A:A,FirstSheet!$A$1:$IV$3", nr1.getRefersToFormula()); - - // check that setting RR&C on a second sheet causes a new Print_Titles built-in - // name to be created - sheet = nwb.createSheet("SecondSheet"); - nwb.setRepeatingRowsAndColumns(1, 1, 2, 0, 0); - - assertEquals(2, nwb.getNumberOfNames()); - HSSFName nr2 = nwb.getNameAt(1); - - assertEquals("Print_Titles", nr2.getNameName()); - assertEquals("SecondSheet!B:C,SecondSheet!$A$1:$IV$1", nr2.getRefersToFormula()); - - if (false) { - // In case you fancy checking in excel, to ensure it - // won't complain about the file now - try { - File tempFile = File.createTempFile("POI-45126-", ".xls"); - FileOutputStream fout = new FileOutputStream(tempFile); - nwb.write(fout); - fout.close(); - System.out.println("check out " + tempFile.getAbsolutePath()); - } catch (IOException e) { - throw new RuntimeException(e); - } - } - } - - /** - * When setting A1 type of referencese HSSFName.setRefersToFormula - * must set the type of operands to Ptg.CLASS_REF, - * otherwise created named don't appear in the dropdown to the left opf formula bar in Excel - */ - public void testTypeOfRootPtg(){ - HSSFWorkbook wb = new HSSFWorkbook(); - wb.createSheet("CSCO"); - - Ptg[] ptgs = HSSFFormulaParser.parse("CSCO!$E$71", wb, FormulaType.NAMEDRANGE, 0); - for (int i = 0; i < ptgs.length; i++) { - assertEquals('R', ptgs[i].getRVAType()); - } - - } - - public void testScope() { - HSSFWorkbook wb = new HSSFWorkbook(); - HSSFSheet sh1 = wb.createSheet(); - HSSFSheet sh2 = wb.createSheet(); - - HSSFName 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.setNameName("aaa-2"); - } - - 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.setNameName("aaa-2"); - } - - 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()); - name.setNameName("aaa-2"); - } - - int cnt = 0; - for (int i = 0; i < wb.getNumberOfNames(); i++) { - if("aaa".equals(wb.getNameName(i))) cnt++; - } - assertEquals(3, cnt); - } -} diff --git a/src/testcases/org/apache/poi/hssf/usermodel/TestUnicodeWorkbook.java b/src/testcases/org/apache/poi/hssf/usermodel/TestUnicodeWorkbook.java index 2a92152857..a90aa29080 100644 --- a/src/testcases/org/apache/poi/hssf/usermodel/TestUnicodeWorkbook.java +++ b/src/testcases/org/apache/poi/hssf/usermodel/TestUnicodeWorkbook.java @@ -16,132 +16,39 @@ */ package org.apache.poi.hssf.usermodel; -import java.io.File; -import java.io.FileOutputStream; -import java.io.FileInputStream; - -import org.apache.poi.util.TempFile; - import junit.framework.TestCase; +import org.apache.poi.hssf.HSSFTestDataSamples; public class TestUnicodeWorkbook extends TestCase { - public TestUnicodeWorkbook(String s) { - super(s); - } - - /** Tests that all of the unicode capable string fields can be set, written and then read back - * - * - */ - public void testUnicodeInAll() throws Exception { - HSSFWorkbook wb = new HSSFWorkbook(); - //Create a unicode dataformat (contains euro symbol) - HSSFDataFormat df = wb.createDataFormat(); - final String formatStr = "_([$\u20ac-2]\\\\\\ * #,##0.00_);_([$\u20ac-2]\\\\\\ * \\\\\\(#,##0.00\\\\\\);_([$\u20ac-2]\\\\\\ *\\\"\\-\\\\\"??_);_(@_)"; - short fmt = df.getFormat(formatStr); - - //Create a unicode sheet name (euro symbol) - HSSFSheet s = wb.createSheet("\u20ac"); - - //Set a unicode header (you guessed it the euro symbol) - HSSFHeader h = s.getHeader(); - h.setCenter("\u20ac"); - h.setLeft("\u20ac"); - h.setRight("\u20ac"); - - //Set a unicode footer - HSSFFooter f = s.getFooter(); - f.setCenter("\u20ac"); - f.setLeft("\u20ac"); - f.setRight("\u20ac"); - - HSSFRow r = s.createRow(0); - HSSFCell c = r.createCell(1); - c.setCellValue(12.34); - c.getCellStyle().setDataFormat(fmt); - - HSSFCell c2 = r.createCell(2); - c.setCellValue(new HSSFRichTextString("\u20ac")); - - HSSFCell c3 = r.createCell(3); - String formulaString = "TEXT(12.34,\"\u20ac###,##\")"; - c3.setCellFormula(formulaString); - - - File tempFile = TempFile.createTempFile("unicode", "test.xls"); - FileOutputStream stream = new FileOutputStream(tempFile); - wb.write(stream); - - wb = null; - FileInputStream in = new FileInputStream(tempFile); - wb = new HSSFWorkbook(in); - - //Test the sheetname - s = wb.getSheet("\u20ac"); - assertNotNull(s); - - //Test the header - h = s.getHeader(); - assertEquals(h.getCenter(), "\u20ac"); - assertEquals(h.getLeft(), "\u20ac"); - assertEquals(h.getRight(), "\u20ac"); - - //Test the footer - f = s.getFooter(); - assertEquals(f.getCenter(), "\u20ac"); - assertEquals(f.getLeft(), "\u20ac"); - assertEquals(f.getRight(), "\u20ac"); - - //Test the dataformat - r = s.getRow(0); - c = r.getCell(1); - df = wb.createDataFormat(); - assertEquals(formatStr, df.getFormat(c.getCellStyle().getDataFormat())); - - //Test the cell string value - c2 = r.getCell(2); - assertEquals(c.getRichStringCellValue().getString(), "\u20ac"); - - //Test the cell formula - c3 = r.getCell(3); - assertEquals(c3.getCellFormula(), formulaString); - } - /** Tests Bug38230 * That a Umlat is written and then read back. * It should have been written as a compressed unicode. - * - * + * + * * */ public void testUmlatReadWrite() throws Exception { HSSFWorkbook wb = new HSSFWorkbook(); - + //Create a unicode sheet name (euro symbol) HSSFSheet s = wb.createSheet("test"); - + HSSFRow r = s.createRow(0); HSSFCell c = r.createCell(1); c.setCellValue(new HSSFRichTextString("\u00e4")); - + //Confirm that the sring will be compressed assertEquals(c.getRichStringCellValue().getUnicodeString().getOptionFlags(), 0); - - File tempFile = TempFile.createTempFile("umlat", "test.xls"); - FileOutputStream stream = new FileOutputStream(tempFile); - wb.write(stream); - - wb = null; - FileInputStream in = new FileInputStream(tempFile); - wb = new HSSFWorkbook(in); + + wb = HSSFTestDataSamples.writeOutAndReadBack(wb); //Test the sheetname s = wb.getSheet("test"); assertNotNull(s); - + c = r.getCell(1); assertEquals(c.getRichStringCellValue().getString(), "\u00e4"); - } + } } diff --git a/src/testcases/org/apache/poi/ss/ITestDataProvider.java b/src/testcases/org/apache/poi/ss/ITestDataProvider.java index f3ca3b256f..983147691b 100755 --- a/src/testcases/org/apache/poi/ss/ITestDataProvider.java +++ b/src/testcases/org/apache/poi/ss/ITestDataProvider.java @@ -44,4 +44,10 @@ public interface ITestDataProvider { */
Workbook createWorkbook();
+ /**
+ * Opens a sample file from the standard HSSF test data directory
+ *
+ * @return an open <tt>InputStream</tt> for the specified sample file
+ */
+ byte[] getTestDataFileContent(String fileName);
}
diff --git a/src/testcases/org/apache/poi/ss/usermodel/BaseTestBugzillaIssues.java b/src/testcases/org/apache/poi/ss/usermodel/BaseTestBugzillaIssues.java new file mode 100755 index 0000000000..ef6d0a14fa --- /dev/null +++ b/src/testcases/org/apache/poi/ss/usermodel/BaseTestBugzillaIssues.java @@ -0,0 +1,298 @@ +/* ====================================================================
+ 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 junit.framework.AssertionFailedError;
+import org.apache.poi.ss.ITestDataProvider;
+import org.apache.poi.ss.util.CellRangeAddress;
+
+/**
+ * A base class for bugzilla issues that can be described in terms of common ss interfaces.
+ *
+ * @author Yegor Kozlov
+ */
+public abstract class BaseTestBugzillaIssues extends TestCase {
+
+ protected abstract ITestDataProvider getTestDataProvider();
+
+ /**
+ *
+ * Test writing a hyperlink
+ * Open resulting sheet in Excel and check that A1 contains a hyperlink
+ *
+ * Also tests bug 15353 (problems with hyperlinks to Google)
+ */
+ public void test23094() {
+ Workbook wb = getTestDataProvider().createWorkbook();
+ Sheet s = wb.createSheet();
+ Row r = s.createRow(0);
+ r.createCell(0).setCellFormula("HYPERLINK(\"http://jakarta.apache.org\",\"Jakarta\")");
+ r.createCell(1).setCellFormula("HYPERLINK(\"http://google.com\",\"Google\")");
+
+ wb = getTestDataProvider().writeOutAndReadBack(wb);
+ r = wb.getSheetAt(0).getRow(0);
+
+ Cell cell_0 = r.getCell(0);
+ assertEquals("HYPERLINK(\"http://jakarta.apache.org\",\"Jakarta\")", cell_0.getCellFormula());
+ Cell cell_1 = r.getCell(1);
+ assertEquals("HYPERLINK(\"http://google.com\",\"Google\")", cell_1.getCellFormula());
+ }
+
+ /**
+ * test writing a file with large number of unique strings,
+ * open resulting file in Excel to check results!
+ * @param num the number of strings to generate
+ */
+ public void baseTest15375(int num) {
+ Workbook wb = getTestDataProvider().createWorkbook();
+ Sheet sheet = wb.createSheet();
+ CreationHelper factory = wb.getCreationHelper();
+
+ String tmp1 = null;
+ String tmp2 = null;
+ String tmp3 = null;
+
+ for (int i = 0; i < num; i++) {
+ tmp1 = "Test1" + i;
+ tmp2 = "Test2" + i;
+ tmp3 = "Test3" + i;
+
+ Row row = sheet.createRow(i);
+
+ Cell cell = row.createCell(0);
+ cell.setCellValue(factory.createRichTextString(tmp1));
+ cell = row.createCell(1);
+ cell.setCellValue(factory.createRichTextString(tmp2));
+ cell = row.createCell(2);
+ cell.setCellValue(factory.createRichTextString(tmp3));
+ }
+ wb = getTestDataProvider().writeOutAndReadBack(wb);
+ for (int i = 0; i < num; i++) {
+ tmp1 = "Test1" + i;
+ tmp2 = "Test2" + i;
+ tmp3 = "Test3" + i;
+
+ Row row = sheet.getRow(i);
+
+ assertEquals(tmp1, row.getCell(0).getStringCellValue());
+ assertEquals(tmp2, row.getCell(1).getStringCellValue());
+ assertEquals(tmp3, row.getCell(2).getStringCellValue());
+ }
+ }
+
+ /**
+ * Merged regions were being removed from the parent in cloned sheets
+ */
+ public void test22720() {
+ Workbook workBook = getTestDataProvider().createWorkbook();
+ workBook.createSheet("TEST");
+ Sheet template = workBook.getSheetAt(0);
+
+ template.addMergedRegion(new CellRangeAddress(0, 1, 0, 2));
+ template.addMergedRegion(new CellRangeAddress(1, 2, 0, 2));
+
+ Sheet clone = workBook.cloneSheet(0);
+ int originalMerged = template.getNumMergedRegions();
+ assertEquals("2 merged regions", 2, originalMerged);
+
+ //remove merged regions from clone
+ for (int i=template.getNumMergedRegions()-1; i>=0; i--) {
+ clone.removeMergedRegion(i);
+ }
+
+ assertEquals("Original Sheet's Merged Regions were removed", originalMerged, template.getNumMergedRegions());
+ //check if template's merged regions are OK
+ if (template.getNumMergedRegions()>0) {
+ // fetch the first merged region...EXCEPTION OCCURS HERE
+ template.getMergedRegion(0);
+ }
+ //make sure we dont exception
+
+ }
+
+ public void test28031() {
+ Workbook wb = getTestDataProvider().createWorkbook();
+ Sheet sheet = wb.createSheet();
+ wb.setSheetName(0, "Sheet1");
+
+ Row row = sheet.createRow(0);
+ Cell cell = row.createCell(0);
+ String formulaText =
+ "IF(ROUND(A2*B2*C2,2)>ROUND(B2*D2,2),ROUND(A2*B2*C2,2),ROUND(B2*D2,2))";
+ cell.setCellFormula(formulaText);
+
+ assertEquals(formulaText, cell.getCellFormula());
+ wb = getTestDataProvider().writeOutAndReadBack(wb);
+ cell = wb.getSheetAt(0).getRow(0).getCell(0);
+ assertEquals("IF(ROUND(A2*B2*C2,2)>ROUND(B2*D2,2),ROUND(A2*B2*C2,2),ROUND(B2*D2,2))", cell.getCellFormula());
+ }
+
+ /**
+ * Bug 21334: "File error: data may have been lost" with a file
+ * that contains macros and this formula:
+ * {=SUM(IF(FREQUENCY(IF(LEN(V4:V220)>0,MATCH(V4:V220,V4:V220,0),""),IF(LEN(V4:V220)>0,MATCH(V4:V220,V4:V220,0),""))>0,1))}
+ */
+ public void test21334() {
+ Workbook wb = getTestDataProvider().createWorkbook();
+ Sheet sh = wb.createSheet();
+ Cell cell = sh.createRow(0).createCell(0);
+ String formula = "SUM(IF(FREQUENCY(IF(LEN(V4:V220)>0,MATCH(V4:V220,V4:V220,0),\"\"),IF(LEN(V4:V220)>0,MATCH(V4:V220,V4:V220,0),\"\"))>0,1))";
+ cell.setCellFormula(formula);
+
+ Workbook wb_sv = getTestDataProvider().writeOutAndReadBack(wb);
+ Cell cell_sv = wb_sv.getSheetAt(0).getRow(0).getCell(0);
+ assertEquals(formula, cell_sv.getCellFormula());
+ }
+
+ /** another test for the number of unique strings issue
+ *test opening the resulting file in Excel*/
+ public void test22568() {
+ int r=2000;int c=3;
+
+ Workbook wb = getTestDataProvider().createWorkbook();
+ Sheet sheet = wb.createSheet("ExcelTest") ;
+
+ int col_cnt=0, rw_cnt=0 ;
+
+ col_cnt = c;
+ rw_cnt = r;
+
+ Row rw ;
+ rw = sheet.createRow(0) ;
+ //Header row
+ for(int j=0; j<col_cnt; j++){
+ Cell cell = rw.createCell(j) ;
+ cell.setCellValue("Col " + (j+1));
+ }
+
+ for(int i=1; i<rw_cnt; i++){
+ rw = sheet.createRow(i) ;
+ for(int j=0; j<col_cnt; j++){
+ Cell cell = rw.createCell(j) ;
+ cell.setCellValue("Row:" + (i+1) + ",Column:" + (j+1));
+ }
+ }
+
+ sheet.setDefaultColumnWidth(18) ;
+
+ wb = getTestDataProvider().writeOutAndReadBack(wb);
+ sheet = wb.getSheetAt(0);
+ rw = sheet.getRow(0);
+ //Header row
+ for(int j=0; j<col_cnt; j++){
+ Cell cell = rw.getCell(j) ;
+ assertEquals("Col " + (j+1), cell.getStringCellValue());
+ }
+ for(int i=1; i<rw_cnt; i++){
+ rw = sheet.getRow(i) ;
+ for(int j=0; j<col_cnt; j++){
+ Cell cell = rw.getCell(j) ;
+ assertEquals("Row:" + (i+1) + ",Column:" + (j+1), cell.getStringCellValue());
+ }
+ }
+ }
+
+ /**
+ * Bug 42448: Can't parse SUMPRODUCT(A!C7:A!C67, B8:B68) / B69
+ */
+ public void test42448(){
+ Workbook wb = getTestDataProvider().createWorkbook();
+ Cell cell = wb.createSheet().createRow(0).createCell(0);
+ cell.setCellFormula("SUMPRODUCT(A!C7:A!C67, B8:B68) / B69");
+ assertTrue("no errors parsing formula", true);
+ }
+
+ /**
+ * HSSFRichTextString.length() returns negative for really
+ * long strings
+ */
+ public void test46368() {
+ Workbook wb = getTestDataProvider().createWorkbook();
+ Sheet s = wb.createSheet();
+ Row r = s.createRow(0);
+ for(int i=0; i<15; i++) {
+ int len = 32760 + i;
+ Cell c = r.createCell(i);
+
+ StringBuffer sb = new StringBuffer();
+ for(int j=0; j<len; j++) {
+ sb.append("x");
+ }
+ RichTextString rtr = wb.getCreationHelper().createRichTextString(sb.toString());
+ assertEquals(len, rtr.length());
+ c.setCellValue(rtr);
+ }
+
+ // Save and reload
+ wb = getTestDataProvider().writeOutAndReadBack(wb);
+ s = wb.getSheetAt(0);
+ r = s.getRow(0);
+ for(int i=0; i<15; i++) {
+ int len = 32760 + i;
+ Cell c = r.getCell(i);
+ assertEquals(len, c.getRichStringCellValue().length());
+ }
+ }
+
+ public void test18800() {
+ Workbook book = getTestDataProvider().createWorkbook();
+ book.createSheet("TEST");
+ Sheet sheet = book.cloneSheet(0);
+ book.setSheetName(1,"CLONE");
+ sheet.createRow(0).createCell(0).setCellValue("Test");
+
+ book = getTestDataProvider().writeOutAndReadBack(book);
+ sheet = book.getSheet("CLONE");
+ Row row = sheet.getRow(0);
+ Cell cell = row.getCell(0);
+ assertEquals("Test", cell.getRichStringCellValue().getString());
+ }
+
+ private static void addNewSheetWithCellsA1toD4(Workbook book, int sheet) {
+
+ Sheet sht = book .createSheet("s" + sheet);
+ for (int r=0; r < 4; r++) {
+
+ Row row = sht.createRow (r);
+ for (int c=0; c < 4; c++) {
+
+ Cell cel = row.createCell(c);
+ cel.setCellValue(sheet*100 + r*10 + c);
+ }
+ }
+ }
+
+ public void testBug43093() {
+ Workbook xlw = getTestDataProvider().createWorkbook();
+
+ addNewSheetWithCellsA1toD4(xlw, 1);
+ addNewSheetWithCellsA1toD4(xlw, 2);
+ addNewSheetWithCellsA1toD4(xlw, 3);
+ addNewSheetWithCellsA1toD4(xlw, 4);
+
+ Sheet s2 = xlw.getSheet("s2");
+ Row s2r3 = s2.getRow(3);
+ Cell s2E4 = s2r3.createCell(4);
+ s2E4.setCellFormula("SUM(s3!B2:C3)");
+
+ FormulaEvaluator eva = xlw.getCreationHelper().createFormulaEvaluator();
+ double d = eva.evaluate(s2E4).getNumberValue();
+
+ assertEquals(d, (311+312+321+322), 0.0000001);
+ }
+}
\ No newline at end of file diff --git a/src/testcases/org/apache/poi/ss/usermodel/BaseTestFont.java b/src/testcases/org/apache/poi/ss/usermodel/BaseTestFont.java new file mode 100755 index 0000000000..6dae51c62a --- /dev/null +++ b/src/testcases/org/apache/poi/ss/usermodel/BaseTestFont.java @@ -0,0 +1,204 @@ +/* ====================================================================
+ 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 junit.framework.AssertionFailedError;
+import org.apache.poi.ss.ITestDataProvider;
+import org.apache.poi.ss.util.CellRangeAddress;
+
+/**
+ * @author Yegor Kozlov
+ */
+public abstract class BaseTestFont extends TestCase {
+
+ protected abstract ITestDataProvider getTestDataProvider();
+
+ public void baseTestDefaultFont(String defaultName, short defaultSize, short defaultColor){
+ //get default font and check against default value
+ Workbook workbook = getTestDataProvider().createWorkbook();
+ Font fontFind=workbook.findFont(Font.BOLDWEIGHT_NORMAL, defaultColor, defaultSize, defaultName, false, false, Font.SS_NONE, Font.U_NONE);
+ assertNotNull(fontFind);
+
+ //get default font, then change 2 values and check against different values (height changes)
+ Font font=workbook.createFont();
+ font.setBoldweight(Font.BOLDWEIGHT_BOLD);
+ assertEquals(Font.BOLDWEIGHT_BOLD, font.getBoldweight());
+ font.setUnderline(Font.U_DOUBLE);
+ assertEquals(Font.U_DOUBLE, font.getUnderline());
+ font.setFontHeightInPoints((short)15);
+ assertEquals(15*20, font.getFontHeight());
+ assertEquals(15, font.getFontHeightInPoints());
+ fontFind=workbook.findFont(Font.BOLDWEIGHT_BOLD, defaultColor, (short)(15*20), defaultName, false, false, Font.SS_NONE, Font.U_DOUBLE);
+ assertNotNull(fontFind);
+ }
+
+ public void testGetNumberOfFonts(){
+ Workbook wb = getTestDataProvider().createWorkbook();
+ int num0 = wb.getNumberOfFonts();
+
+ Font f1=wb.createFont();
+ f1.setBoldweight(Font.BOLDWEIGHT_BOLD);
+ short idx1 = f1.getIndex();
+ wb.createCellStyle().setFont(f1);
+
+ Font f2=wb.createFont();
+ f2.setUnderline(Font.U_DOUBLE);
+ short idx2 = f2.getIndex();
+ wb.createCellStyle().setFont(f2);
+
+ Font f3=wb.createFont();
+ f3.setFontHeightInPoints((short)23);
+ short idx3 = f3.getIndex();
+ wb.createCellStyle().setFont(f3);
+
+ assertEquals(num0 + 3,wb.getNumberOfFonts());
+ assertEquals(Font.BOLDWEIGHT_BOLD,wb.getFontAt(idx1).getBoldweight());
+ assertEquals(Font.U_DOUBLE,wb.getFontAt(idx2).getUnderline());
+ assertEquals(23,wb.getFontAt(idx3).getFontHeightInPoints());
+ }
+
+ /**
+ * Tests that we can define fonts to a new
+ * file, save, load, and still see them
+ * @throws Exception
+ */
+ public void testCreateSave() {
+ Workbook wb = getTestDataProvider().createWorkbook();
+ Sheet s1 = wb.createSheet();
+ Row r1 = s1.createRow(0);
+ Cell r1c1 = r1.createCell(0);
+ r1c1.setCellValue(2.2);
+
+ int num0 = wb.getNumberOfFonts();
+
+ Font font=wb.createFont();
+ font.setBoldweight(Font.BOLDWEIGHT_BOLD);
+ font.setStrikeout(true);
+ font.setColor(IndexedColors.YELLOW.getIndex());
+ font.setFontName("Courier");
+ short font1Idx = font.getIndex();
+ wb.createCellStyle().setFont(font);
+ assertEquals(num0 + 1, wb.getNumberOfFonts());
+
+ CellStyle cellStyleTitle=wb.createCellStyle();
+ cellStyleTitle.setFont(font);
+ r1c1.setCellStyle(cellStyleTitle);
+
+ // Save and re-load
+ wb = getTestDataProvider().writeOutAndReadBack(wb);
+ s1 = wb.getSheetAt(0);
+
+ assertEquals(num0 + 1, wb.getNumberOfFonts());
+ short idx = s1.getRow(0).getCell(0).getCellStyle().getFontIndex();
+ Font fnt = wb.getFontAt(idx);
+ assertNotNull(fnt);
+ assertEquals(IndexedColors.YELLOW.getIndex(), fnt.getColor());
+ assertEquals("Courier", fnt.getFontName());
+
+ // Now add an orphaned one
+ Font font2 = wb.createFont();
+ font2.setItalic(true);
+ font2.setFontHeightInPoints((short)15);
+ short font2Idx = font2.getIndex();
+ wb.createCellStyle().setFont(font2);
+ assertEquals(num0 + 2, wb.getNumberOfFonts());
+
+ // Save and re-load
+ wb = getTestDataProvider().writeOutAndReadBack(wb);
+ s1 = wb.getSheetAt(0);
+
+ assertEquals(num0 + 2, wb.getNumberOfFonts());
+ assertNotNull(wb.getFontAt(font1Idx));
+ assertNotNull(wb.getFontAt(font2Idx));
+
+ assertEquals(15, wb.getFontAt(font2Idx).getFontHeightInPoints());
+ assertEquals(true, wb.getFontAt(font2Idx).getItalic());
+ }
+
+
+
+ /**
+ * Test that fonts get added properly
+ *
+ * @see org.apache.poi.hssf.usermodel.TestBugs#test45338()
+ */
+ public void test45338() {
+ Workbook wb = getTestDataProvider().createWorkbook();
+ int num0 = wb.getNumberOfFonts();
+
+ Sheet s = wb.createSheet();
+ s.createRow(0);
+ s.createRow(1);
+ s.getRow(0).createCell(0);
+ s.getRow(1).createCell(0);
+
+ //default font
+ Font f1 = wb.getFontAt((short)0);
+ assertEquals(Font.BOLDWEIGHT_NORMAL, f1.getBoldweight());
+
+ // Check that asking for the same font
+ // multiple times gives you the same thing.
+ // Otherwise, our tests wouldn't work!
+ assertSame(wb.getFontAt((short)0), wb.getFontAt((short)0));
+
+ // Look for a new font we have
+ // yet to add
+ assertNull(
+ wb.findFont(
+ Font.BOLDWEIGHT_BOLD, (short)123, (short)(22*20),
+ "Thingy", false, true, (short)2, (byte)2
+ )
+ );
+
+ Font nf = wb.createFont();
+ short nfIdx = nf.getIndex();
+ assertEquals(num0 + 1, wb.getNumberOfFonts());
+
+ assertSame(nf, wb.getFontAt(nfIdx));
+
+ nf.setBoldweight(Font.BOLDWEIGHT_BOLD);
+ nf.setColor((short)123);
+ nf.setFontHeightInPoints((short)22);
+ nf.setFontName("Thingy");
+ nf.setItalic(false);
+ nf.setStrikeout(true);
+ nf.setTypeOffset((short)2);
+ nf.setUnderline((byte)2);
+
+ assertEquals(num0 + 1, wb.getNumberOfFonts());
+ assertEquals(nf, wb.getFontAt(nfIdx));
+
+ assertEquals(wb.getFontAt(nfIdx), wb.getFontAt(nfIdx));
+ assertTrue(wb.getFontAt((short)0) != wb.getFontAt(nfIdx));
+
+ // Find it now
+ assertNotNull(
+ wb.findFont(
+ Font.BOLDWEIGHT_BOLD, (short)123, (short)(22*20),
+ "Thingy", false, true, (short)2, (byte)2
+ )
+ );
+ assertSame(nf,
+ wb.findFont(
+ Font.BOLDWEIGHT_BOLD, (short)123, (short)(22*20),
+ "Thingy", false, true, (short)2, (byte)2
+ )
+ );
+ }
+
+}
\ No newline at end of file diff --git a/src/testcases/org/apache/poi/ss/usermodel/BaseTestNamedRange.java b/src/testcases/org/apache/poi/ss/usermodel/BaseTestNamedRange.java index 36df11b2eb..253d6b50aa 100755 --- a/src/testcases/org/apache/poi/ss/usermodel/BaseTestNamedRange.java +++ b/src/testcases/org/apache/poi/ss/usermodel/BaseTestNamedRange.java @@ -19,10 +19,16 @@ package org.apache.poi.ss.usermodel; import junit.framework.TestCase; import org.apache.poi.ss.ITestDataProvider; +import org.apache.poi.ss.formula.FormulaParser; +import org.apache.poi.ss.formula.FormulaType; +import org.apache.poi.ss.util.CellReference; +import org.apache.poi.ss.util.AreaReference; +import org.apache.poi.hssf.record.formula.Ptg; /** - * Tests of implementation of {@link org.apache.poi.ss.usermodel.Name} + * Tests of implementations of {@link org.apache.poi.ss.usermodel.Name}. * + * @author Yegor Kozlov */ public abstract class BaseTestNamedRange extends TestCase { @@ -84,6 +90,18 @@ public abstract class BaseTestNamedRange extends TestCase { //-1 means the name applies to the entire workbook name1.setSheetIndex(-1); assertEquals(-1, name1.getSheetIndex()); + + //names cannot be blank and must begin with a letter or underscore and not contain spaces + String[] invalidNames = {"", "123", "1Name", "Named Range"}; + for (String name : invalidNames) { + try { + name1.setNameName(name); + fail("should have thrown exceptiuon due to invalid name: " + name); + } catch (IllegalArgumentException e) { + // expected during successful test + ; + } + } } public void testUnicodeNamedRange() { @@ -170,4 +188,314 @@ public abstract class BaseTestNamedRange extends TestCase { } assertEquals(3, cnt); } + + /** + * Test case provided by czhang@cambian.com (Chun Zhang) + * <p> + * Addresses Bug <a href="http://issues.apache.org/bugzilla/show_bug.cgi?id=13775" target="_bug">#13775</a> + */ + public void testMultiNamedRange() { + + // Create a new workbook + Workbook wb = getTestDataProvider().createWorkbook(); + + // Create a worksheet 'sheet1' in the new workbook + wb.createSheet (); + wb.setSheetName (0, "sheet1"); + + // Create another worksheet 'sheet2' in the new workbook + wb.createSheet (); + wb.setSheetName (1, "sheet2"); + + // Create a new named range for worksheet 'sheet1' + Name namedRange1 = wb.createName(); + + // Set the name for the named range for worksheet 'sheet1' + namedRange1.setNameName("RangeTest1"); + + // Set the reference for the named range for worksheet 'sheet1' + namedRange1.setRefersToFormula("sheet1" + "!$A$1:$L$41"); + + // Create a new named range for worksheet 'sheet2' + Name namedRange2 = wb.createName(); + + // Set the name for the named range for worksheet 'sheet2' + namedRange2.setNameName("RangeTest2"); + + // Set the reference for the named range for worksheet 'sheet2' + namedRange2.setRefersToFormula("sheet2" + "!$A$1:$O$21"); + + // Write the workbook to a file + // Read the Excel file and verify its content + wb = getTestDataProvider().writeOutAndReadBack(wb); + Name nm1 =wb.getNameAt(wb.getNameIndex("RangeTest1")); + assertTrue("Name is "+nm1.getNameName(),"RangeTest1".equals(nm1.getNameName())); + assertTrue("Reference is "+nm1.getRefersToFormula(),(wb.getSheetName(0)+"!$A$1:$L$41").equals(nm1.getRefersToFormula())); + + Name nm2 =wb.getNameAt(wb.getNameIndex("RangeTest2")); + assertTrue("Name is "+nm2.getNameName(),"RangeTest2".equals(nm2.getNameName())); + assertTrue("Reference is "+nm2.getRefersToFormula(),(wb.getSheetName(1)+"!$A$1:$O$21").equals(nm2.getRefersToFormula())); + } + + /** + * Test to see if the print areas can be retrieved/created in memory + */ + public void testSinglePrintArea() { + Workbook workbook = getTestDataProvider().createWorkbook(); + workbook.createSheet("Test Print Area"); + String sheetName = workbook.getSheetName(0); + + String reference = "$A$1:$B$1"; + workbook.setPrintArea(0, reference); + + String retrievedPrintArea = workbook.getPrintArea(0); + + assertNotNull("Print Area not defined for first sheet", retrievedPrintArea); + assertEquals("'" + sheetName + "'!$A$1:$B$1", retrievedPrintArea); + } + + /** + * For Convenience, don't force sheet names to be used + */ + public void testSinglePrintAreaWOSheet() + { + Workbook workbook = getTestDataProvider().createWorkbook(); + workbook.createSheet("Test Print Area"); + String sheetName = workbook.getSheetName(0); + + String reference = "$A$1:$B$1"; + workbook.setPrintArea(0, reference); + + String retrievedPrintArea = workbook.getPrintArea(0); + + assertNotNull("Print Area not defined for first sheet", retrievedPrintArea); + assertEquals("'" + sheetName + "'!" + reference, retrievedPrintArea); + } + + /** + * Test to see if the print area made it to the file + */ + public void testPrintAreaFile() { + Workbook workbook = getTestDataProvider().createWorkbook(); + workbook.createSheet("Test Print Area"); + String sheetName = workbook.getSheetName(0); + + + String reference = "$A$1:$B$1"; + workbook.setPrintArea(0, reference); + + workbook = getTestDataProvider().writeOutAndReadBack(workbook); + + String retrievedPrintArea = workbook.getPrintArea(0); + assertNotNull("Print Area not defined for first sheet", retrievedPrintArea); + assertEquals("References Match", "'" + sheetName + "'!$A$1:$B$1", retrievedPrintArea); + } + + /** + * Test to see if multiple print areas made it to the file + */ + public void testMultiplePrintAreaFile() { + Workbook workbook = getTestDataProvider().createWorkbook(); + + workbook.createSheet("Sheet1"); + workbook.createSheet("Sheet2"); + workbook.createSheet("Sheet3"); + String reference1 = "$A$1:$B$1"; + String reference2 = "$B$2:$D$5"; + String reference3 = "$D$2:$F$5"; + + workbook.setPrintArea(0, reference1); + workbook.setPrintArea(1, reference2); + workbook.setPrintArea(2, reference3); + + //Check created print areas + String retrievedPrintArea; + + retrievedPrintArea = workbook.getPrintArea(0); + assertNotNull("Print Area Not Found (Sheet 1)", retrievedPrintArea); + assertEquals("Sheet1!" + reference1, retrievedPrintArea); + + retrievedPrintArea = workbook.getPrintArea(1); + assertNotNull("Print Area Not Found (Sheet 2)", retrievedPrintArea); + assertEquals("Sheet2!" + reference2, retrievedPrintArea); + + retrievedPrintArea = workbook.getPrintArea(2); + assertNotNull("Print Area Not Found (Sheet 3)", retrievedPrintArea); + assertEquals("Sheet3!" + reference3, retrievedPrintArea); + + // Check print areas after re-reading workbook + workbook = getTestDataProvider().writeOutAndReadBack(workbook); + + retrievedPrintArea = workbook.getPrintArea(0); + assertNotNull("Print Area Not Found (Sheet 1)", retrievedPrintArea); + assertEquals("Sheet1!" + reference1, retrievedPrintArea); + + retrievedPrintArea = workbook.getPrintArea(1); + assertNotNull("Print Area Not Found (Sheet 2)", retrievedPrintArea); + assertEquals("Sheet2!" + reference2, retrievedPrintArea); + + retrievedPrintArea = workbook.getPrintArea(2); + assertNotNull("Print Area Not Found (Sheet 3)", retrievedPrintArea); + assertEquals("Sheet3!" + reference3, retrievedPrintArea); + } + + /** + * Tests the setting of print areas with coordinates (Row/Column designations) + * + */ + public void testPrintAreaCoords(){ + Workbook workbook = getTestDataProvider().createWorkbook(); + workbook.createSheet("Test Print Area"); + String sheetName = workbook.getSheetName(0); + + workbook.setPrintArea(0, 0, 1, 0, 0); + + String retrievedPrintArea = workbook.getPrintArea(0); + + assertNotNull("Print Area not defined for first sheet", retrievedPrintArea); + assertEquals("'" + sheetName + "'!$A$1:$B$1", retrievedPrintArea); + } + + + /** + * Tests the parsing of union area expressions, and re-display in the presence of sheet names + * with special characters. + */ + public void testPrintAreaUnion(){ + Workbook workbook = getTestDataProvider().createWorkbook(); + workbook.createSheet("Test Print Area"); + + String reference = "$A$1:$B$1,$D$1:$F$2"; + workbook.setPrintArea(0, reference); + String retrievedPrintArea = workbook.getPrintArea(0); + assertNotNull("Print Area not defined for first sheet", retrievedPrintArea); + assertEquals("'Test Print Area'!$A$1:$B$1,'Test Print Area'!$D$1:$F$2", retrievedPrintArea); + } + + /** + * Verifies an existing print area is deleted + * + */ + public void testPrintAreaRemove() { + Workbook workbook = getTestDataProvider().createWorkbook(); + workbook.createSheet("Test Print Area"); + workbook.getSheetName(0); + + workbook.setPrintArea(0, 0, 1, 0, 0); + + String retrievedPrintArea = workbook.getPrintArea(0); + + assertNotNull("Print Area not defined for first sheet", retrievedPrintArea); + + workbook.removePrintArea(0); + assertNull("PrintArea was not removed", workbook.getPrintArea(0)); + } + + /** + * Test that multiple named ranges can be added written and read + */ + public void testMultipleNamedWrite() { + Workbook wb = getTestDataProvider().createWorkbook(); + + + wb.createSheet("testSheet1"); + String sheetName = wb.getSheetName(0); + + assertEquals("testSheet1", sheetName); + + //Creating new Named Range + Name newNamedRange = wb.createName(); + + newNamedRange.setNameName("RangeTest"); + newNamedRange.setRefersToFormula(sheetName + "!$D$4:$E$8"); + + //Creating another new Named Range + Name newNamedRange2 = wb.createName(); + + newNamedRange2.setNameName("AnotherTest"); + newNamedRange2.setRefersToFormula(sheetName + "!$F$1:$G$6"); + + wb.getNameAt(0); + + wb = getTestDataProvider().writeOutAndReadBack(wb); + Name nm =wb.getNameAt(wb.getNameIndex("RangeTest")); + assertTrue("Name is "+nm.getNameName(),"RangeTest".equals(nm.getNameName())); + assertTrue("Reference is "+nm.getRefersToFormula(),(wb.getSheetName(0)+"!$D$4:$E$8").equals(nm.getRefersToFormula())); + + nm = wb.getNameAt(wb.getNameIndex("AnotherTest")); + assertTrue("Name is "+nm.getNameName(),"AnotherTest".equals(nm.getNameName())); + assertTrue("Reference is "+nm.getRefersToFormula(),newNamedRange2.getRefersToFormula().equals(nm.getRefersToFormula())); + } + /** + * Verifies correct functioning for "single cell named range" (aka "named cell") + */ + public void testNamedCell_1() { + + // setup for this testcase + String sheetName = "Test Named Cell"; + String cellName = "named_cell"; + String cellValue = "TEST Value"; + Workbook wb = getTestDataProvider().createWorkbook(); + Sheet sheet = wb.createSheet(sheetName); + CreationHelper factory = wb.getCreationHelper(); + sheet.createRow(0).createCell(0).setCellValue(factory.createRichTextString(cellValue)); + + // create named range for a single cell using areareference + Name namedCell = wb.createName(); + namedCell.setNameName(cellName); + String reference = "'" + sheetName + "'" + "!A1:A1"; + namedCell.setRefersToFormula(reference); + + // retrieve the newly created named range + int namedCellIdx = wb.getNameIndex(cellName); + Name aNamedCell = wb.getNameAt(namedCellIdx); + assertNotNull(aNamedCell); + + // retrieve the cell at the named range and test its contents + AreaReference aref = new AreaReference(aNamedCell.getRefersToFormula()); + assertTrue("Should be exactly 1 cell in the named cell :'" +cellName+"'", aref.isSingleCell()); + + CellReference cref = aref.getFirstCell(); + assertNotNull(cref); + Sheet s = wb.getSheet(cref.getSheetName()); + assertNotNull(s); + Row r = sheet.getRow(cref.getRow()); + Cell c = r.getCell(cref.getCol()); + String contents = c.getRichStringCellValue().getString(); + assertEquals("Contents of cell retrieved by its named reference", contents, cellValue); + } + + /** + * Verifies correct functioning for "single cell named range" (aka "named cell") + */ + public void testNamedCell_2() { + + // setup for this testcase + String sname = "TestSheet", cname = "TestName", cvalue = "TestVal"; + Workbook wb = getTestDataProvider().createWorkbook(); + CreationHelper factory = wb.getCreationHelper(); + Sheet sheet = wb.createSheet(sname); + sheet.createRow(0).createCell(0).setCellValue(factory.createRichTextString(cvalue)); + + // create named range for a single cell using cellreference + Name namedCell = wb.createName(); + namedCell.setNameName(cname); + String reference = sname+"!A1"; + namedCell.setRefersToFormula(reference); + + // retrieve the newly created named range + int namedCellIdx = wb.getNameIndex(cname); + Name aNamedCell = wb.getNameAt(namedCellIdx); + assertNotNull(aNamedCell); + + // retrieve the cell at the named range and test its contents + CellReference cref = new CellReference(aNamedCell.getRefersToFormula()); + assertNotNull(cref); + Sheet s = wb.getSheet(cref.getSheetName()); + Row r = sheet.getRow(cref.getRow()); + Cell c = r.getCell(cref.getCol()); + String contents = c.getRichStringCellValue().getString(); + assertEquals("Contents of cell retrieved by its named reference", contents, cvalue); + } + }
\ No newline at end of file diff --git a/src/testcases/org/apache/poi/ss/usermodel/BaseTestPicture.java b/src/testcases/org/apache/poi/ss/usermodel/BaseTestPicture.java new file mode 100755 index 0000000000..03cea5d5f2 --- /dev/null +++ b/src/testcases/org/apache/poi/ss/usermodel/BaseTestPicture.java @@ -0,0 +1,53 @@ +/* ====================================================================
+ 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;
+
+/**
+ * @author Yegor Kozlov
+ */
+public abstract class BaseTestPicture extends TestCase {
+
+ protected abstract ITestDataProvider getTestDataProvider();
+
+ public void baseTestResize(ClientAnchor referenceAnchor) {
+ Workbook wb = getTestDataProvider().createWorkbook();
+ Sheet sh1 = wb.createSheet();
+ Drawing p1 = sh1.createDrawingPatriarch();
+ CreationHelper factory = wb.getCreationHelper();
+
+ byte[] pictureData = getTestDataProvider().getTestDataFileContent("logoKarmokar4.png");
+ int idx1 = wb.addPicture( pictureData, Workbook.PICTURE_TYPE_PNG );
+ Picture picture = p1.createPicture(factory.createClientAnchor(), idx1);
+ picture.resize();
+ ClientAnchor anchor1 = picture.getPreferredSize();
+
+ //assert against what would BiffViewer print if we insert the image in xls and dump the file
+ assertEquals(referenceAnchor.getCol1(), anchor1.getCol1());
+ assertEquals(referenceAnchor.getRow1(), anchor1.getRow1());
+ assertEquals(referenceAnchor.getCol2(), anchor1.getCol2());
+ assertEquals(referenceAnchor.getRow2(), anchor1.getRow2());
+ assertEquals(referenceAnchor.getDx1(), anchor1.getDx1());
+ assertEquals(referenceAnchor.getDy1(), anchor1.getDy1());
+ assertEquals(referenceAnchor.getDx2(), anchor1.getDx2());
+ assertEquals(referenceAnchor.getDy2(), anchor1.getDy2());
+ }
+
+
+}
\ 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 index 5aee7a18e4..3c162d7762 100755 --- a/src/testcases/org/apache/poi/ss/usermodel/BaseTestRow.java +++ b/src/testcases/org/apache/poi/ss/usermodel/BaseTestRow.java @@ -41,6 +41,9 @@ public abstract class BaseTestRow extends TestCase { assertEquals(-1, row.getFirstCellNum()); assertEquals(-1, row.getLastCellNum()); + //getting cells from an empty row should returns null + for(int i=0; i < 10; i++) assertNull(row.getCell(i)); + row.createCell(2); assertEquals(2, row.getFirstCellNum()); assertEquals(3, row.getLastCellNum()); diff --git a/src/testcases/org/apache/poi/ss/usermodel/BaseTestSheet.java b/src/testcases/org/apache/poi/ss/usermodel/BaseTestSheet.java index e2e70b4f43..c119ce05fc 100755 --- a/src/testcases/org/apache/poi/ss/usermodel/BaseTestSheet.java +++ b/src/testcases/org/apache/poi/ss/usermodel/BaseTestSheet.java @@ -562,4 +562,31 @@ public abstract class BaseTestSheet extends TestCase { assertFalse(sheet.isColumnBroken(11)); assertFalse(sheet.isColumnBroken(12)); } + + public void testGetFirstLastRowNum() { + Workbook workbook = getTestDataProvider().createWorkbook(); + Sheet sheet = workbook.createSheet("Sheet 1"); + Row row10 = sheet.createRow(9); + Row row1 = sheet.createRow(0); + Row row2 = sheet.createRow(1); + assertEquals(0, sheet.getFirstRowNum()); + assertEquals(9, sheet.getLastRowNum()); + } + + public void testGetFooter() { + Workbook workbook = getTestDataProvider().createWorkbook(); + Sheet sheet = workbook.createSheet("Sheet 1"); + assertNotNull(sheet.getFooter()); + sheet.getFooter().setCenter("test center footer"); + assertEquals("test center footer", sheet.getFooter().getCenter()); + } + + public void testGetSetColumnHidden() { + Workbook workbook = getTestDataProvider().createWorkbook(); + Sheet sheet = workbook.createSheet("Sheet 1"); + sheet.setColumnHidden(2, true); + assertTrue(sheet.isColumnHidden(2)); + } + + }
\ 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 index eafda064df..1a556dc0ed 100755 --- a/src/testcases/org/apache/poi/ss/usermodel/BaseTestWorkbook.java +++ b/src/testcases/org/apache/poi/ss/usermodel/BaseTestWorkbook.java @@ -273,4 +273,77 @@ public abstract class BaseTestWorkbook extends TestCase { assertSame(sheet, cell.getSheet());
assertSame(row, cell.getRow());
}
+
+ /** Tests that all of the unicode capable string fields can be set, written and then read back
+ *
+ *
+ */
+ public void testUnicodeInAll() throws Exception {
+ Workbook wb = getTestDataProvider().createWorkbook();
+ CreationHelper factory = wb.getCreationHelper();
+ //Create a unicode dataformat (contains euro symbol)
+ DataFormat df = wb.createDataFormat();
+ final String formatStr = "_([$\u20ac-2]\\\\\\ * #,##0.00_);_([$\u20ac-2]\\\\\\ * \\\\\\(#,##0.00\\\\\\);_([$\u20ac-2]\\\\\\ *\\\"\\-\\\\\"??_);_(@_)";
+ short fmt = df.getFormat(formatStr);
+
+ //Create a unicode sheet name (euro symbol)
+ Sheet s = wb.createSheet("\u20ac");
+
+ //Set a unicode header (you guessed it the euro symbol)
+ Header h = s.getHeader();
+ h.setCenter("\u20ac");
+ h.setLeft("\u20ac");
+ h.setRight("\u20ac");
+
+ //Set a unicode footer
+ Footer f = s.getFooter();
+ f.setCenter("\u20ac");
+ f.setLeft("\u20ac");
+ f.setRight("\u20ac");
+
+ Row r = s.createRow(0);
+ Cell c = r.createCell(1);
+ c.setCellValue(12.34);
+ c.getCellStyle().setDataFormat(fmt);
+
+ Cell c2 = r.createCell(2);
+ c.setCellValue(factory.createRichTextString("\u20ac"));
+
+ Cell c3 = r.createCell(3);
+ String formulaString = "TEXT(12.34,\"\u20ac###,##\")";
+ c3.setCellFormula(formulaString);
+
+ wb = getTestDataProvider().writeOutAndReadBack(wb);
+
+ //Test the sheetname
+ s = wb.getSheet("\u20ac");
+ assertNotNull(s);
+
+ //Test the header
+ h = s.getHeader();
+ assertEquals(h.getCenter(), "\u20ac");
+ assertEquals(h.getLeft(), "\u20ac");
+ assertEquals(h.getRight(), "\u20ac");
+
+ //Test the footer
+ f = s.getFooter();
+ assertEquals(f.getCenter(), "\u20ac");
+ assertEquals(f.getLeft(), "\u20ac");
+ assertEquals(f.getRight(), "\u20ac");
+
+ //Test the dataformat
+ r = s.getRow(0);
+ c = r.getCell(1);
+ df = wb.createDataFormat();
+ assertEquals(formatStr, df.getFormat(c.getCellStyle().getDataFormat()));
+
+ //Test the cell string value
+ c2 = r.getCell(2);
+ assertEquals(c.getRichStringCellValue().getString(), "\u20ac");
+
+ //Test the cell formula
+ c3 = r.getCell(3);
+ assertEquals(c3.getCellFormula(), formulaString);
+ }
+
}
|