more refactoring of common ss tests

git-svn-id: https://svn.apache.org/repos/asf/poi/trunk@759714 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
Yegor Kozlov 2009-03-29 16:10:40 +00:00
parent 52ab464cab
commit 51d71180ab
35 changed files with 1605 additions and 1774 deletions

View File

@ -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";
/**

View File

@ -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)

View File

@ -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;

View File

@ -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.
*

View File

@ -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();

View File

@ -36,4 +36,7 @@ public interface Picture {
* <code>resize(2.0)</code> resizes to 200% of the original.
*/
void resize(double scale);
ClientAnchor getPreferredSize();
}

View File

@ -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

View File

@ -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);
}
/**

View File

@ -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");

View File

@ -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);
}

View File

@ -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(){

View File

@ -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();
}
}

View File

@ -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
)
);
}
}

View File

@ -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);
}
}

View File

@ -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();

View File

@ -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());
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;
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();
// 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("&Ctestdoc&Rtest phrase", hdr.getText());
assertEquals(null, ftr.getText());
assertEquals("", hdr.getLeft());
assertEquals("testdoc", hdr.getCenter());
assertEquals("test phrase", hdr.getRight());
assertEquals("", hdr.getLeft());
assertEquals("testdoc", hdr.getCenter());
assertEquals("test phrase", hdr.getRight());
assertEquals("", ftr.getLeft());
assertEquals("", ftr.getCenter());
assertEquals("", ftr.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();
// 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(null, hdr.getText());
assertEquals("&L&F", ftr.getText());
assertEquals("", hdr.getLeft());
assertEquals("", hdr.getCenter());
assertEquals("", hdr.getRight());
assertEquals("", hdr.getLeft());
assertEquals("", hdr.getCenter());
assertEquals("", hdr.getRight());
assertEquals("&F", ftr.getLeft());
assertEquals("", ftr.getCenter());
assertEquals("", ftr.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();
// Save and reload
XSSFWorkbook wb = XSSFTestDataSamples.writeOutAndReadBack(workbook);
assertEquals("", hdr.getLeft());
assertEquals("testdoc", hdr.getCenter());
assertEquals("test phrase", hdr.getRight());
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());
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");
assertEquals("R5", sheet.getActiveCell());
public void testGetActiveCell() {
XSSFWorkbook workbook = new XSSFWorkbook();
XSSFSheet sheet = workbook.createSheet();
sheet.setActiveCell("R5");
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() {
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());
}
public void testRemoveMergedRegion() {
public void testRemoveMergedRegion_lowlevel() {
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());
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 testSetDefaultColumnStyle() {
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());
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 testGroupUngroupColumn() {
XSSFWorkbook workbook = new XSSFWorkbook();
XSSFSheet sheet = workbook.createSheet();
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());
//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());
//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());
//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) 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());
}
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();
public void testGroupUngroupRow() {
XSSFWorkbook workbook = new XSSFWorkbook();
XSSFSheet sheet = workbook.createSheet();
assertNotNull(ctrow);
assertEquals(10,ctrow.getR());
assertEquals(1, ctrow.getOutlineLevel());
assertEquals(1,sheet.getCTWorksheet().getSheetFormatPr().getOutlineLevelRow());
//one level
sheet.groupRow(9, 10);
assertEquals(2, sheet.getPhysicalNumberOfRows());
CTRow ctrow = sheet.getRow(9).getCTRow();
//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());
assertNotNull(ctrow);
assertEquals(10, ctrow.getR());
assertEquals(1, ctrow.getOutlineLevel());
assertEquals(1, sheet.getCTWorksheet().getSheetFormatPr().getOutlineLevelRow());
sheet.ungroupRow(8, 10);
assertEquals(4,sheet.getPhysicalNumberOfRows());
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(10,10);
assertEquals(3,sheet.getPhysicalNumberOfRows());
assertEquals(1,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);

View File

@ -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());

View File

@ -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(){

View File

@ -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);

View File

@ -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);
}
}

View File

@ -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");
/**
* test writing a file with large number of unique strings,
* open resulting file in Excel to check results!
*/
public void test15375_2() {
baseTest15375(6000);
}
/** 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");
}
/**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);
@ -1521,38 +1371,6 @@ public final class TestBugs extends TestCase {
assertEquals(1, wb.getNumberOfSheets());
}
/**
* 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")

View File

@ -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);
}
}

View File

@ -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 &lt; amol at ap ache dot org &gt;
*/
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());
}
}
}

View File

@ -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 {
@Override
protected HSSFITestDataProvider getTestDataProvider(){
return HSSFITestDataProvider.getInstance();
}
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();
//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());
baseTestResize(new HSSFClientAnchor(0, 0, 848, 240, (short)0, 0, (short)1, 9));
}
/**

View File

@ -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");

View File

@ -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 &lt; amol at ap ache dot org &gt;
*/
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);
}
}

View File

@ -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");
}
}
}

View File

@ -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);
}

View File

@ -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);
}
}

View File

@ -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
)
);
}
}

View File

@ -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);
}
}

View File

@ -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());
}
}

View File

@ -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());

View File

@ -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));
}
}

View File

@ -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);
}
}