aboutsummaryrefslogtreecommitdiffstats
path: root/src/testcases/org/apache/poi/hssf/usermodel
diff options
context:
space:
mode:
authorNick Burch <nick@apache.org>2015-10-24 22:12:06 +0000
committerNick Burch <nick@apache.org>2015-10-24 22:12:06 +0000
commitcbde002fa1356f53b382b97797229ed209ee522f (patch)
tree93b2af34fa271842e13a4746f44354386bafab7d /src/testcases/org/apache/poi/hssf/usermodel
parente0addf54a5bb358fe969479cbc00c7939dccfb33 (diff)
downloadpoi-cbde002fa1356f53b382b97797229ed209ee522f.tar.gz
poi-cbde002fa1356f53b382b97797229ed209ee522f.zip
Fix inconsistent whitespace
git-svn-id: https://svn.apache.org/repos/asf/poi/trunk@1710395 13f79535-47bb-0310-9956-ffa450edef68
Diffstat (limited to 'src/testcases/org/apache/poi/hssf/usermodel')
-rw-r--r--src/testcases/org/apache/poi/hssf/usermodel/TestHSSFDataFormatter.java781
1 files changed, 390 insertions, 391 deletions
diff --git a/src/testcases/org/apache/poi/hssf/usermodel/TestHSSFDataFormatter.java b/src/testcases/org/apache/poi/hssf/usermodel/TestHSSFDataFormatter.java
index 425a56627d..85ceee2f9b 100644
--- a/src/testcases/org/apache/poi/hssf/usermodel/TestHSSFDataFormatter.java
+++ b/src/testcases/org/apache/poi/hssf/usermodel/TestHSSFDataFormatter.java
@@ -41,409 +41,408 @@ import org.junit.Test;
* Unit tests for HSSFDataFormatter.java
*/
public final class TestHSSFDataFormatter {
-
private static TimeZone userTimeZone;
-
+
@BeforeClass
public static void setTimeZone() {
userTimeZone = LocaleUtil.getUserTimeZone();
LocaleUtil.setUserTimeZone(TimeZone.getTimeZone("CET"));
LocaleUtil.setUserLocale(Locale.US);
}
-
+
@AfterClass
public static void resetTimeZone() {
LocaleUtil.setUserTimeZone(userTimeZone);
LocaleUtil.setUserLocale(Locale.ROOT);
}
-
+
private final HSSFDataFormatter formatter;
- private final HSSFWorkbook wb;
-
- public TestHSSFDataFormatter() {
- // create the formatter to test
- formatter = new HSSFDataFormatter();
-
- // create a workbook to test with
- wb = new HSSFWorkbook();
- HSSFSheet sheet = wb.createSheet();
- HSSFDataFormat format = wb.createDataFormat();
-
- // create a row and put some cells in it
- HSSFRow row = sheet.createRow(0);
-
- // date value for July 8 1901 1:19 PM
- double dateNum = 555.555;
- // date value for July 8 1901 11:23 AM
- double timeNum = 555.47431;
-
- //valid date formats -- all should have "Jul" in output
- String[] goodDatePatterns = {
- "[$-F800]dddd\\,\\ mmmm\\ dd\\,\\ yyyy",
- "mmm/d/yy\\ h:mm PM;@",
- "mmmm/d/yy\\ h:mm;@",
- "mmmm/d;@",
- "mmmm/d/yy;@",
- "mmm/dd/yy;@",
- "[$-409]d\\-mmm;@",
- "[$-409]d\\-mmm\\-yy;@",
- "[$-409]dd\\-mmm\\-yy;@",
- "[$-409]mmm\\-yy;@",
- "[$-409]mmmm\\-yy;@",
- "[$-409]mmmm\\ d\\,\\ yyyy;@",
- "[$-409]mmm/d/yy\\ h:mm:ss;@",
- "[$-409]mmmm/d/yy\\ h:mm:ss am;@",
- "[$-409]mmmmm;@",
- "[$-409]mmmmm\\-yy;@",
- "mmmm/d/yyyy;@",
- "[$-409]d\\-mmm\\-yyyy;@"
- };
-
- //valid time formats - all should have 11:23 in output
- String[] goodTimePatterns = {
- "HH:MM",
- "HH:MM:SS",
- "HH:MM;HH:MM;HH:MM",
- // This is fun - blue if positive time,
- // red if negative time or green for zero!
- "[BLUE]HH:MM;[RED]HH:MM;[GREEN]HH:MM",
- "yyyy-mm-dd hh:mm",
- "yyyy-mm-dd hh:mm:ss",
- };
-
- // valid number formats
- String[] goodNumPatterns = {
- "#,##0.0000",
- "#,##0;[Red]#,##0",
- "(#,##0.00_);(#,##0.00)",
- "($#,##0.00_);[Red]($#,##0.00)",
- "$#,##0.00",
- "[$-809]#,##0.00", // international format
- "[$-2]#,##0.00", // international format
- "0000.00000%",
- "0.000E+00",
- "0.00E+00",
- "[BLACK]0.00;[COLOR 5]##.##",
- "[>999999]#,,\"M\";[>999]#,\"K\";#", // num/K/M
- "[>999999]#.000,,\"M\";[>999]#.000,\"K\";#.000", // with decimals
- };
-
- // invalid date formats -- will throw exception in DecimalFormat ctor
- String[] badNumPatterns = {
- "#,#$'#0.0000",
- "'#','#ABC#0;##,##0",
- "000 '123 4'5'6 000",
- "#''0#0'1#10L16EE"
- };
-
- // create cells with good date patterns
- for (int i = 0; i < goodDatePatterns.length; i++) {
- HSSFCell cell = row.createCell(i);
- cell.setCellValue(dateNum);
- HSSFCellStyle cellStyle = wb.createCellStyle();
- cellStyle.setDataFormat(format.getFormat(goodDatePatterns[i]));
- cell.setCellStyle(cellStyle);
- }
- row = sheet.createRow(1);
-
- // create cells with time patterns
- for (int i = 0; i < goodTimePatterns.length; i++) {
- HSSFCell cell = row.createCell(i);
- cell.setCellValue(timeNum);
- HSSFCellStyle cellStyle = wb.createCellStyle();
- cellStyle.setDataFormat(format.getFormat(goodTimePatterns[i]));
- cell.setCellStyle(cellStyle);
- }
- row = sheet.createRow(2);
-
- // create cells with num patterns
- for (int i = 0; i < goodNumPatterns.length; i++) {
- HSSFCell cell = row.createCell(i);
- cell.setCellValue(-1234567890.12345);
- HSSFCellStyle cellStyle = wb.createCellStyle();
- cellStyle.setDataFormat(format.getFormat(goodNumPatterns[i]));
- cell.setCellStyle(cellStyle);
- }
- row = sheet.createRow(3);
-
- // create cells with bad num patterns
- for (int i = 0; i < badNumPatterns.length; i++) {
- HSSFCell cell = row.createCell(i);
- // If the '.' is any later, ExcelGeneralNumberFormat will render an integer, as Excel does.
- cell.setCellValue(12345678.9012345);
- HSSFCellStyle cellStyle = wb.createCellStyle();
- cellStyle.setDataFormat(format.getFormat(badNumPatterns[i]));
- cell.setCellStyle(cellStyle);
- }
-
- // Built in formats
-
- { // Zip + 4 format
- row = sheet.createRow(4);
- HSSFCell cell = row.createCell(0);
- cell.setCellValue(123456789);
- HSSFCellStyle cellStyle = wb.createCellStyle();
- cellStyle.setDataFormat(format.getFormat("00000-0000"));
- cell.setCellStyle(cellStyle);
- }
-
- { // Phone number format
- row = sheet.createRow(5);
- HSSFCell cell = row.createCell(0);
- cell.setCellValue(5551234567D);
- HSSFCellStyle cellStyle = wb.createCellStyle();
- cellStyle.setDataFormat(format.getFormat("[<=9999999]###-####;(###) ###-####"));
- cell.setCellStyle(cellStyle);
- }
-
- { // SSN format
- row = sheet.createRow(6);
- HSSFCell cell = row.createCell(0);
- cell.setCellValue(444551234);
- HSSFCellStyle cellStyle = wb.createCellStyle();
- cellStyle.setDataFormat(format.getFormat("000-00-0000"));
- cell.setCellStyle(cellStyle);
- }
-
- { // formula cell
- row = sheet.createRow(7);
- HSSFCell cell = row.createCell(0);
- cell.setCellType(HSSFCell.CELL_TYPE_FORMULA);
- cell.setCellFormula("SUM(12.25,12.25)/100");
- HSSFCellStyle cellStyle = wb.createCellStyle();
- cellStyle.setDataFormat(format.getFormat("##.00%;"));
- cell.setCellStyle(cellStyle);
- }
- }
-
- /**
- * Test getting formatted values from numeric and date cells.
- */
- @Test
- public void testGetFormattedCellValueHSSFCell() {
- // Valid date formats -- cell values should be date formatted & not "555.555"
- HSSFRow row = wb.getSheetAt(0).getRow(0);
- Iterator<Cell> it = row.cellIterator();
- log("==== VALID DATE FORMATS ====");
- while (it.hasNext()) {
- Cell cell = it.next();
- String fmtval = formatter.formatCellValue(cell);
- log(fmtval);
-
- // should not be equal to "555.555"
- assertTrue( DateUtil.isCellDateFormatted(cell) );
- assertTrue( ! "555.555".equals(fmtval));
-
- String fmt = cell.getCellStyle().getDataFormatString();
-
- //assert the correct month form, as in the original Excel format
- String monthPtrn = fmt.indexOf("mmmm") != -1 ? "MMMM" : "MMM";
- // this line is intended to compute how "July" would look like in the current locale
- SimpleDateFormat sdf = new SimpleDateFormat(monthPtrn, LocaleUtil.getUserLocale());
- sdf.setTimeZone(LocaleUtil.getUserTimeZone());
- Calendar calDef = LocaleUtil.getLocaleCalendar(2010, 6, 15, 0, 0, 0);
- String jul = sdf.format(calDef.getTime());
- // special case for MMMMM = 1st letter of month name
- if(fmt.indexOf("mmmmm") > -1) {
- jul = jul.substring(0,1);
- }
- // check we found july properly
- assertTrue("Format came out incorrect - " + fmt, fmtval.indexOf(jul) > -1);
- }
-
- row = wb.getSheetAt(0).getRow(1);
- it = row.cellIterator();
- log("==== VALID TIME FORMATS ====");
- while (it.hasNext()) {
- Cell cell = it.next();
- String fmt = cell.getCellStyle().getDataFormatString();
- String fmtval = formatter.formatCellValue(cell);
- log(fmtval);
-
- // should not be equal to "555.47431"
- assertTrue( DateUtil.isCellDateFormatted(cell) );
- assertTrue( ! "555.47431".equals(fmtval));
-
- // check we found the time properly
- assertTrue("Format came out incorrect - " + fmt + ": " + fmtval + ", but expected to find '11:23'",
- fmtval.indexOf("11:23") > -1);
- }
-
- // test number formats
- row = wb.getSheetAt(0).getRow(1);
- it = row.cellIterator();
- log("\n==== VALID NUMBER FORMATS ====");
- while (it.hasNext()) {
- HSSFCell cell = (HSSFCell) it.next();
- final String formatted = formatter.formatCellValue(cell);
- log(formatted);
-
- // should not include "12345678" - note that the input value was negative
- assertTrue(formatted != null && ! formatted.contains("12345678"));
- }
-
- // test bad number formats
- row = wb.getSheetAt(0).getRow(3);
- it = row.cellIterator();
- log("\n==== INVALID NUMBER FORMATS ====");
- while (it.hasNext()) {
- HSSFCell cell = (HSSFCell) it.next();
- log(formatter.formatCellValue(cell));
- // in some locales the the decimal delimiter is a comma, not a dot
- char decimalSeparator = new DecimalFormatSymbols(LocaleUtil.getUserLocale()).getDecimalSeparator();
- assertEquals("12345678" + decimalSeparator + "9", formatter.formatCellValue(cell));
- }
-
- // test Zip+4 format
- row = wb.getSheetAt(0).getRow(4);
- HSSFCell cell = row.getCell(0);
- log("\n==== ZIP FORMAT ====");
- log(formatter.formatCellValue(cell));
- assertEquals("12345-6789", formatter.formatCellValue(cell));
-
- // test phone number format
- row = wb.getSheetAt(0).getRow(5);
- cell = row.getCell(0);
- log("\n==== PHONE FORMAT ====");
- log(formatter.formatCellValue(cell));
- assertEquals("(555) 123-4567", formatter.formatCellValue(cell));
-
- // test SSN format
- row = wb.getSheetAt(0).getRow(6);
- cell = row.getCell(0);
- log("\n==== SSN FORMAT ====");
- log(formatter.formatCellValue(cell));
- assertEquals("444-55-1234", formatter.formatCellValue(cell));
-
- // null test-- null cell should result in empty String
- assertEquals(formatter.formatCellValue(null), "");
-
- // null test-- null cell should result in empty String
- assertEquals(formatter.formatCellValue(null), "");
- }
-
- @Test
- public void testGetFormattedCellValueHSSFCellHSSFFormulaEvaluator() {
- // test formula format
- HSSFRow row = wb.getSheetAt(0).getRow(7);
- HSSFCell cell = row.getCell(0);
- log("\n==== FORMULA CELL ====");
-
- // first without a formula evaluator
- log(formatter.formatCellValue(cell) + "\t (without evaluator)");
- assertEquals("SUM(12.25,12.25)/100", formatter.formatCellValue(cell));
-
- // now with a formula evaluator
- HSSFFormulaEvaluator evaluator = new HSSFFormulaEvaluator(wb);
- log(formatter.formatCellValue(cell, evaluator) + "\t\t\t (with evaluator)");
- char decimalSeparator = new DecimalFormatSymbols(LocaleUtil.getUserLocale()).getDecimalSeparator();
- assertEquals("24" + decimalSeparator + "50%", formatter.formatCellValue(cell,evaluator));
-
- }
-
- /**
- * Test using a default number format. The format should be used when a
- * format pattern cannot be parsed by DecimalFormat.
- */
- @Test
- public void testSetDefaultNumberFormat() {
- HSSFRow row = wb.getSheetAt(0).getRow(3);
- Iterator<Cell> it = row.cellIterator();
- DecimalFormatSymbols dfs = DecimalFormatSymbols.getInstance(LocaleUtil.getUserLocale());
- Format defaultFormat = new DecimalFormat("Balance $#,#00.00 USD;Balance -$#,#00.00 USD", dfs);
- formatter.setDefaultNumberFormat(defaultFormat);
-
- log("\n==== DEFAULT NUMBER FORMAT ====");
- while (it.hasNext()) {
- Cell cell = it.next();
- cell.setCellValue(cell.getNumericCellValue() * Math.random() / 1000000 - 1000);
- log(formatter.formatCellValue(cell));
- assertTrue(formatter.formatCellValue(cell).startsWith("Balance "));
- assertTrue(formatter.formatCellValue(cell).endsWith(" USD"));
- }
- }
-
- /**
- * A format of "@" means use the general format
- */
- @Test
- public void testGeneralAtFormat() {
- HSSFWorkbook workbook = HSSFTestDataSamples.openSampleWorkbook("47154.xls");
- HSSFSheet sheet = workbook.getSheetAt(0);
- HSSFRow row = sheet.getRow(0);
- HSSFCell cellA1 = row.getCell(0);
-
- assertEquals(HSSFCell.CELL_TYPE_NUMERIC, cellA1.getCellType());
- assertEquals(2345.0, cellA1.getNumericCellValue(), 0.0001);
- assertEquals("@", cellA1.getCellStyle().getDataFormatString());
-
- HSSFDataFormatter f = new HSSFDataFormatter();
-
- assertEquals("2345", f.formatCellValue(cellA1));
- }
-
- /**
- * Tests various formattings of dates and numbers
- */
- @Test
- public void testFromFile() {
- HSSFWorkbook workbook = HSSFTestDataSamples.openSampleWorkbook("Formatting.xls");
- HSSFSheet sheet = workbook.getSheetAt(0);
-
- HSSFDataFormatter f = new HSSFDataFormatter();
-
- // This one is one of the nasty auto-locale changing ones...
- assertEquals("dd/mm/yyyy", sheet.getRow(1).getCell(0).getStringCellValue());
- assertEquals("m/d/yy", sheet.getRow(1).getCell(1).getCellStyle().getDataFormatString());
- assertEquals("11/24/06", f.formatCellValue(sheet.getRow(1).getCell(1)));
-
- assertEquals("yyyy/mm/dd", sheet.getRow(2).getCell(0).getStringCellValue());
- assertEquals("yyyy/mm/dd", sheet.getRow(2).getCell(1).getCellStyle().getDataFormatString());
- assertEquals("2006/11/24", f.formatCellValue(sheet.getRow(2).getCell(1)));
-
- assertEquals("yyyy-mm-dd", sheet.getRow(3).getCell(0).getStringCellValue());
- assertEquals("yyyy\\-mm\\-dd", sheet.getRow(3).getCell(1).getCellStyle().getDataFormatString());
- assertEquals("2006-11-24", f.formatCellValue(sheet.getRow(3).getCell(1)));
-
- assertEquals("yy/mm/dd", sheet.getRow(4).getCell(0).getStringCellValue());
- assertEquals("yy/mm/dd", sheet.getRow(4).getCell(1).getCellStyle().getDataFormatString());
- assertEquals("06/11/24", f.formatCellValue(sheet.getRow(4).getCell(1)));
-
- // Another builtin fun one
- assertEquals("dd/mm/yy", sheet.getRow(5).getCell(0).getStringCellValue());
- assertEquals("d/m/yy;@", sheet.getRow(5).getCell(1).getCellStyle().getDataFormatString());
- assertEquals("24/11/06", f.formatCellValue(sheet.getRow(5).getCell(1)));
-
- assertEquals("dd-mm-yy", sheet.getRow(6).getCell(0).getStringCellValue());
- assertEquals("dd\\-mm\\-yy", sheet.getRow(6).getCell(1).getCellStyle().getDataFormatString());
- assertEquals("24-11-06", f.formatCellValue(sheet.getRow(6).getCell(1)));
-
-
- // Another builtin fun one
- assertEquals("nn.nn", sheet.getRow(9).getCell(0).getStringCellValue());
- assertEquals("General", sheet.getRow(9).getCell(1).getCellStyle().getDataFormatString());
- assertEquals("10.52", f.formatCellValue(sheet.getRow(9).getCell(1)));
-
- // text isn't quite the format rule...
- assertEquals("nn.nnn", sheet.getRow(10).getCell(0).getStringCellValue());
- assertEquals("0.000", sheet.getRow(10).getCell(1).getCellStyle().getDataFormatString());
- assertEquals("10.520", f.formatCellValue(sheet.getRow(10).getCell(1)));
-
- // text isn't quite the format rule...
- assertEquals("nn.n", sheet.getRow(11).getCell(0).getStringCellValue());
- assertEquals("0.0", sheet.getRow(11).getCell(1).getCellStyle().getDataFormatString());
- assertEquals("10.5", f.formatCellValue(sheet.getRow(11).getCell(1)));
-
- // text isn't quite the format rule...
- assertEquals("\u00a3nn.nn", sheet.getRow(12).getCell(0).getStringCellValue());
- assertEquals("\"\u00a3\"#,##0.00", sheet.getRow(12).getCell(1).getCellStyle().getDataFormatString());
- assertEquals("\u00a310.52", f.formatCellValue(sheet.getRow(12).getCell(1)));
- }
-
- private static void log(String msg) {
-// if (false) { // successful tests should be silent
-// System.out.println(msg);
-// }
- }
+ private final HSSFWorkbook wb;
+
+ public TestHSSFDataFormatter() {
+ // create the formatter to test
+ formatter = new HSSFDataFormatter();
+
+ // create a workbook to test with
+ wb = new HSSFWorkbook();
+ HSSFSheet sheet = wb.createSheet();
+ HSSFDataFormat format = wb.createDataFormat();
+
+ // create a row and put some cells in it
+ HSSFRow row = sheet.createRow(0);
+
+ // date value for July 8 1901 1:19 PM
+ double dateNum = 555.555;
+ // date value for July 8 1901 11:23 AM
+ double timeNum = 555.47431;
+
+ //valid date formats -- all should have "Jul" in output
+ String[] goodDatePatterns = {
+ "[$-F800]dddd\\,\\ mmmm\\ dd\\,\\ yyyy",
+ "mmm/d/yy\\ h:mm PM;@",
+ "mmmm/d/yy\\ h:mm;@",
+ "mmmm/d;@",
+ "mmmm/d/yy;@",
+ "mmm/dd/yy;@",
+ "[$-409]d\\-mmm;@",
+ "[$-409]d\\-mmm\\-yy;@",
+ "[$-409]dd\\-mmm\\-yy;@",
+ "[$-409]mmm\\-yy;@",
+ "[$-409]mmmm\\-yy;@",
+ "[$-409]mmmm\\ d\\,\\ yyyy;@",
+ "[$-409]mmm/d/yy\\ h:mm:ss;@",
+ "[$-409]mmmm/d/yy\\ h:mm:ss am;@",
+ "[$-409]mmmmm;@",
+ "[$-409]mmmmm\\-yy;@",
+ "mmmm/d/yyyy;@",
+ "[$-409]d\\-mmm\\-yyyy;@"
+ };
+
+ //valid time formats - all should have 11:23 in output
+ String[] goodTimePatterns = {
+ "HH:MM",
+ "HH:MM:SS",
+ "HH:MM;HH:MM;HH:MM",
+ // This is fun - blue if positive time,
+ // red if negative time or green for zero!
+ "[BLUE]HH:MM;[RED]HH:MM;[GREEN]HH:MM",
+ "yyyy-mm-dd hh:mm",
+ "yyyy-mm-dd hh:mm:ss",
+ };
+
+ // valid number formats
+ String[] goodNumPatterns = {
+ "#,##0.0000",
+ "#,##0;[Red]#,##0",
+ "(#,##0.00_);(#,##0.00)",
+ "($#,##0.00_);[Red]($#,##0.00)",
+ "$#,##0.00",
+ "[$-809]#,##0.00", // international format
+ "[$-2]#,##0.00", // international format
+ "0000.00000%",
+ "0.000E+00",
+ "0.00E+00",
+ "[BLACK]0.00;[COLOR 5]##.##",
+ "[>999999]#,,\"M\";[>999]#,\"K\";#", // num/K/M
+ "[>999999]#.000,,\"M\";[>999]#.000,\"K\";#.000", // with decimals
+ };
+
+ // invalid date formats -- will throw exception in DecimalFormat ctor
+ String[] badNumPatterns = {
+ "#,#$'#0.0000",
+ "'#','#ABC#0;##,##0",
+ "000 '123 4'5'6 000",
+ "#''0#0'1#10L16EE"
+ };
+
+ // create cells with good date patterns
+ for (int i = 0; i < goodDatePatterns.length; i++) {
+ HSSFCell cell = row.createCell(i);
+ cell.setCellValue(dateNum);
+ HSSFCellStyle cellStyle = wb.createCellStyle();
+ cellStyle.setDataFormat(format.getFormat(goodDatePatterns[i]));
+ cell.setCellStyle(cellStyle);
+ }
+ row = sheet.createRow(1);
+
+ // create cells with time patterns
+ for (int i = 0; i < goodTimePatterns.length; i++) {
+ HSSFCell cell = row.createCell(i);
+ cell.setCellValue(timeNum);
+ HSSFCellStyle cellStyle = wb.createCellStyle();
+ cellStyle.setDataFormat(format.getFormat(goodTimePatterns[i]));
+ cell.setCellStyle(cellStyle);
+ }
+ row = sheet.createRow(2);
+
+ // create cells with num patterns
+ for (int i = 0; i < goodNumPatterns.length; i++) {
+ HSSFCell cell = row.createCell(i);
+ cell.setCellValue(-1234567890.12345);
+ HSSFCellStyle cellStyle = wb.createCellStyle();
+ cellStyle.setDataFormat(format.getFormat(goodNumPatterns[i]));
+ cell.setCellStyle(cellStyle);
+ }
+ row = sheet.createRow(3);
+
+ // create cells with bad num patterns
+ for (int i = 0; i < badNumPatterns.length; i++) {
+ HSSFCell cell = row.createCell(i);
+ // If the '.' is any later, ExcelGeneralNumberFormat will render an integer, as Excel does.
+ cell.setCellValue(12345678.9012345);
+ HSSFCellStyle cellStyle = wb.createCellStyle();
+ cellStyle.setDataFormat(format.getFormat(badNumPatterns[i]));
+ cell.setCellStyle(cellStyle);
+ }
+
+ // Built in formats
+
+ { // Zip + 4 format
+ row = sheet.createRow(4);
+ HSSFCell cell = row.createCell(0);
+ cell.setCellValue(123456789);
+ HSSFCellStyle cellStyle = wb.createCellStyle();
+ cellStyle.setDataFormat(format.getFormat("00000-0000"));
+ cell.setCellStyle(cellStyle);
+ }
+
+ { // Phone number format
+ row = sheet.createRow(5);
+ HSSFCell cell = row.createCell(0);
+ cell.setCellValue(5551234567D);
+ HSSFCellStyle cellStyle = wb.createCellStyle();
+ cellStyle.setDataFormat(format.getFormat("[<=9999999]###-####;(###) ###-####"));
+ cell.setCellStyle(cellStyle);
+ }
+
+ { // SSN format
+ row = sheet.createRow(6);
+ HSSFCell cell = row.createCell(0);
+ cell.setCellValue(444551234);
+ HSSFCellStyle cellStyle = wb.createCellStyle();
+ cellStyle.setDataFormat(format.getFormat("000-00-0000"));
+ cell.setCellStyle(cellStyle);
+ }
+
+ { // formula cell
+ row = sheet.createRow(7);
+ HSSFCell cell = row.createCell(0);
+ cell.setCellType(HSSFCell.CELL_TYPE_FORMULA);
+ cell.setCellFormula("SUM(12.25,12.25)/100");
+ HSSFCellStyle cellStyle = wb.createCellStyle();
+ cellStyle.setDataFormat(format.getFormat("##.00%;"));
+ cell.setCellStyle(cellStyle);
+ }
+ }
+
+ /**
+ * Test getting formatted values from numeric and date cells.
+ */
+ @Test
+ public void testGetFormattedCellValueHSSFCell() {
+ // Valid date formats -- cell values should be date formatted & not "555.555"
+ HSSFRow row = wb.getSheetAt(0).getRow(0);
+ Iterator<Cell> it = row.cellIterator();
+ log("==== VALID DATE FORMATS ====");
+ while (it.hasNext()) {
+ Cell cell = it.next();
+ String fmtval = formatter.formatCellValue(cell);
+ log(fmtval);
+
+ // should not be equal to "555.555"
+ assertTrue( DateUtil.isCellDateFormatted(cell) );
+ assertTrue( ! "555.555".equals(fmtval));
+
+ String fmt = cell.getCellStyle().getDataFormatString();
+
+ //assert the correct month form, as in the original Excel format
+ String monthPtrn = fmt.indexOf("mmmm") != -1 ? "MMMM" : "MMM";
+ // this line is intended to compute how "July" would look like in the current locale
+ SimpleDateFormat sdf = new SimpleDateFormat(monthPtrn, LocaleUtil.getUserLocale());
+ sdf.setTimeZone(LocaleUtil.getUserTimeZone());
+ Calendar calDef = LocaleUtil.getLocaleCalendar(2010, 6, 15, 0, 0, 0);
+ String jul = sdf.format(calDef.getTime());
+ // special case for MMMMM = 1st letter of month name
+ if(fmt.indexOf("mmmmm") > -1) {
+ jul = jul.substring(0,1);
+ }
+ // check we found july properly
+ assertTrue("Format came out incorrect - " + fmt, fmtval.indexOf(jul) > -1);
+ }
+
+ row = wb.getSheetAt(0).getRow(1);
+ it = row.cellIterator();
+ log("==== VALID TIME FORMATS ====");
+ while (it.hasNext()) {
+ Cell cell = it.next();
+ String fmt = cell.getCellStyle().getDataFormatString();
+ String fmtval = formatter.formatCellValue(cell);
+ log(fmtval);
+
+ // should not be equal to "555.47431"
+ assertTrue( DateUtil.isCellDateFormatted(cell) );
+ assertTrue( ! "555.47431".equals(fmtval));
+
+ // check we found the time properly
+ assertTrue("Format came out incorrect - " + fmt + ": " + fmtval + ", but expected to find '11:23'",
+ fmtval.indexOf("11:23") > -1);
+ }
+
+ // test number formats
+ row = wb.getSheetAt(0).getRow(1);
+ it = row.cellIterator();
+ log("\n==== VALID NUMBER FORMATS ====");
+ while (it.hasNext()) {
+ HSSFCell cell = (HSSFCell) it.next();
+ final String formatted = formatter.formatCellValue(cell);
+ log(formatted);
+
+ // should not include "12345678" - note that the input value was negative
+ assertTrue(formatted != null && ! formatted.contains("12345678"));
+ }
+
+ // test bad number formats
+ row = wb.getSheetAt(0).getRow(3);
+ it = row.cellIterator();
+ log("\n==== INVALID NUMBER FORMATS ====");
+ while (it.hasNext()) {
+ HSSFCell cell = (HSSFCell) it.next();
+ log(formatter.formatCellValue(cell));
+ // in some locales the the decimal delimiter is a comma, not a dot
+ char decimalSeparator = new DecimalFormatSymbols(LocaleUtil.getUserLocale()).getDecimalSeparator();
+ assertEquals("12345678" + decimalSeparator + "9", formatter.formatCellValue(cell));
+ }
+
+ // test Zip+4 format
+ row = wb.getSheetAt(0).getRow(4);
+ HSSFCell cell = row.getCell(0);
+ log("\n==== ZIP FORMAT ====");
+ log(formatter.formatCellValue(cell));
+ assertEquals("12345-6789", formatter.formatCellValue(cell));
+
+ // test phone number format
+ row = wb.getSheetAt(0).getRow(5);
+ cell = row.getCell(0);
+ log("\n==== PHONE FORMAT ====");
+ log(formatter.formatCellValue(cell));
+ assertEquals("(555) 123-4567", formatter.formatCellValue(cell));
+
+ // test SSN format
+ row = wb.getSheetAt(0).getRow(6);
+ cell = row.getCell(0);
+ log("\n==== SSN FORMAT ====");
+ log(formatter.formatCellValue(cell));
+ assertEquals("444-55-1234", formatter.formatCellValue(cell));
+
+ // null test-- null cell should result in empty String
+ assertEquals(formatter.formatCellValue(null), "");
+
+ // null test-- null cell should result in empty String
+ assertEquals(formatter.formatCellValue(null), "");
+ }
+
+ @Test
+ public void testGetFormattedCellValueHSSFCellHSSFFormulaEvaluator() {
+ // test formula format
+ HSSFRow row = wb.getSheetAt(0).getRow(7);
+ HSSFCell cell = row.getCell(0);
+ log("\n==== FORMULA CELL ====");
+
+ // first without a formula evaluator
+ log(formatter.formatCellValue(cell) + "\t (without evaluator)");
+ assertEquals("SUM(12.25,12.25)/100", formatter.formatCellValue(cell));
+
+ // now with a formula evaluator
+ HSSFFormulaEvaluator evaluator = new HSSFFormulaEvaluator(wb);
+ log(formatter.formatCellValue(cell, evaluator) + "\t\t\t (with evaluator)");
+ char decimalSeparator = new DecimalFormatSymbols(LocaleUtil.getUserLocale()).getDecimalSeparator();
+ assertEquals("24" + decimalSeparator + "50%", formatter.formatCellValue(cell,evaluator));
+
+ }
+
+ /**
+ * Test using a default number format. The format should be used when a
+ * format pattern cannot be parsed by DecimalFormat.
+ */
+ @Test
+ public void testSetDefaultNumberFormat() {
+ HSSFRow row = wb.getSheetAt(0).getRow(3);
+ Iterator<Cell> it = row.cellIterator();
+ DecimalFormatSymbols dfs = DecimalFormatSymbols.getInstance(LocaleUtil.getUserLocale());
+ Format defaultFormat = new DecimalFormat("Balance $#,#00.00 USD;Balance -$#,#00.00 USD", dfs);
+ formatter.setDefaultNumberFormat(defaultFormat);
+
+ log("\n==== DEFAULT NUMBER FORMAT ====");
+ while (it.hasNext()) {
+ Cell cell = it.next();
+ cell.setCellValue(cell.getNumericCellValue() * Math.random() / 1000000 - 1000);
+ log(formatter.formatCellValue(cell));
+ assertTrue(formatter.formatCellValue(cell).startsWith("Balance "));
+ assertTrue(formatter.formatCellValue(cell).endsWith(" USD"));
+ }
+ }
+
+ /**
+ * A format of "@" means use the general format
+ */
+ @Test
+ public void testGeneralAtFormat() {
+ HSSFWorkbook workbook = HSSFTestDataSamples.openSampleWorkbook("47154.xls");
+ HSSFSheet sheet = workbook.getSheetAt(0);
+ HSSFRow row = sheet.getRow(0);
+ HSSFCell cellA1 = row.getCell(0);
+
+ assertEquals(HSSFCell.CELL_TYPE_NUMERIC, cellA1.getCellType());
+ assertEquals(2345.0, cellA1.getNumericCellValue(), 0.0001);
+ assertEquals("@", cellA1.getCellStyle().getDataFormatString());
+
+ HSSFDataFormatter f = new HSSFDataFormatter();
+
+ assertEquals("2345", f.formatCellValue(cellA1));
+ }
+
+ /**
+ * Tests various formattings of dates and numbers
+ */
+ @Test
+ public void testFromFile() {
+ HSSFWorkbook workbook = HSSFTestDataSamples.openSampleWorkbook("Formatting.xls");
+ HSSFSheet sheet = workbook.getSheetAt(0);
+
+ HSSFDataFormatter f = new HSSFDataFormatter();
+
+ // This one is one of the nasty auto-locale changing ones...
+ assertEquals("dd/mm/yyyy", sheet.getRow(1).getCell(0).getStringCellValue());
+ assertEquals("m/d/yy", sheet.getRow(1).getCell(1).getCellStyle().getDataFormatString());
+ assertEquals("11/24/06", f.formatCellValue(sheet.getRow(1).getCell(1)));
+
+ assertEquals("yyyy/mm/dd", sheet.getRow(2).getCell(0).getStringCellValue());
+ assertEquals("yyyy/mm/dd", sheet.getRow(2).getCell(1).getCellStyle().getDataFormatString());
+ assertEquals("2006/11/24", f.formatCellValue(sheet.getRow(2).getCell(1)));
+
+ assertEquals("yyyy-mm-dd", sheet.getRow(3).getCell(0).getStringCellValue());
+ assertEquals("yyyy\\-mm\\-dd", sheet.getRow(3).getCell(1).getCellStyle().getDataFormatString());
+ assertEquals("2006-11-24", f.formatCellValue(sheet.getRow(3).getCell(1)));
+
+ assertEquals("yy/mm/dd", sheet.getRow(4).getCell(0).getStringCellValue());
+ assertEquals("yy/mm/dd", sheet.getRow(4).getCell(1).getCellStyle().getDataFormatString());
+ assertEquals("06/11/24", f.formatCellValue(sheet.getRow(4).getCell(1)));
+
+ // Another builtin fun one
+ assertEquals("dd/mm/yy", sheet.getRow(5).getCell(0).getStringCellValue());
+ assertEquals("d/m/yy;@", sheet.getRow(5).getCell(1).getCellStyle().getDataFormatString());
+ assertEquals("24/11/06", f.formatCellValue(sheet.getRow(5).getCell(1)));
+
+ assertEquals("dd-mm-yy", sheet.getRow(6).getCell(0).getStringCellValue());
+ assertEquals("dd\\-mm\\-yy", sheet.getRow(6).getCell(1).getCellStyle().getDataFormatString());
+ assertEquals("24-11-06", f.formatCellValue(sheet.getRow(6).getCell(1)));
+
+
+ // Another builtin fun one
+ assertEquals("nn.nn", sheet.getRow(9).getCell(0).getStringCellValue());
+ assertEquals("General", sheet.getRow(9).getCell(1).getCellStyle().getDataFormatString());
+ assertEquals("10.52", f.formatCellValue(sheet.getRow(9).getCell(1)));
+
+ // text isn't quite the format rule...
+ assertEquals("nn.nnn", sheet.getRow(10).getCell(0).getStringCellValue());
+ assertEquals("0.000", sheet.getRow(10).getCell(1).getCellStyle().getDataFormatString());
+ assertEquals("10.520", f.formatCellValue(sheet.getRow(10).getCell(1)));
+
+ // text isn't quite the format rule...
+ assertEquals("nn.n", sheet.getRow(11).getCell(0).getStringCellValue());
+ assertEquals("0.0", sheet.getRow(11).getCell(1).getCellStyle().getDataFormatString());
+ assertEquals("10.5", f.formatCellValue(sheet.getRow(11).getCell(1)));
+
+ // text isn't quite the format rule...
+ assertEquals("\u00a3nn.nn", sheet.getRow(12).getCell(0).getStringCellValue());
+ assertEquals("\"\u00a3\"#,##0.00", sheet.getRow(12).getCell(1).getCellStyle().getDataFormatString());
+ assertEquals("\u00a310.52", f.formatCellValue(sheet.getRow(12).getCell(1)));
+ }
+
+ private static void log(String msg) {
+// if (false) { // successful tests should be silent
+// System.out.println(msg);
+// }
+ }
}