blob: 5d19c633f43bb8017122341610753a77c3f36a2a [file] [log] [blame]
/* ====================================================================
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.format;
import static org.junit.Assert.*;
import java.io.IOException;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Locale;
import java.util.TimeZone;
import javax.swing.JLabel;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.ss.usermodel.Cell;
import org.apache.poi.ss.usermodel.DateUtil;
import org.apache.poi.ss.usermodel.Row;
import org.apache.poi.ss.usermodel.Sheet;
import org.apache.poi.ss.usermodel.Workbook;
import org.apache.poi.util.LocaleUtil;
import org.junit.AfterClass;
import org.junit.BeforeClass;
import org.junit.Test;
public class TestCellFormat {
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 static final String _255_POUND_SIGNS;
static {
StringBuilder sb = new StringBuilder();
for (int i = 1; i <= 255; i++) {
sb.append('#');
}
_255_POUND_SIGNS = sb.toString();
}
@Test
public void testSome() {
JLabel l = new JLabel();
CellFormat fmt = CellFormat.getInstance(
"\"$\"#,##0.00_);[Red]\\(\"$\"#,##0.00\\)");
fmt.apply(l, 1.1);
}
@Test
public void testPositiveFormatHasOnePart() {
CellFormat fmt = CellFormat.getInstance("0.00");
CellFormatResult result = fmt.apply(12.345);
assertEquals("12.35", result.text);
}
@Test
public void testNegativeFormatHasOnePart() {
CellFormat fmt = CellFormat.getInstance("0.00");
CellFormatResult result = fmt.apply(-12.345);
assertEquals("-12.35", result.text);
}
@Test
public void testZeroFormatHasOnePart() {
CellFormat fmt = CellFormat.getInstance("0.00");
CellFormatResult result = fmt.apply(0.0);
assertEquals("0.00", result.text);
}
@Test
public void testPositiveFormatHasPosAndNegParts() {
CellFormat fmt = CellFormat.getInstance("0.00;-0.00");
CellFormatResult result = fmt.apply(12.345);
assertEquals("12.35", result.text);
}
@Test
public void testNegativeFormatHasPosAndNegParts() {
CellFormat fmt = CellFormat.getInstance("0.00;-0.00");
CellFormatResult result = fmt.apply(-12.345);
assertEquals("-12.35", result.text);
}
@Test
public void testNegativeFormatHasPosAndNegParts2() {
CellFormat fmt = CellFormat.getInstance("0.00;(0.00)");
CellFormatResult result = fmt.apply(-12.345);
assertEquals("(12.35)", result.text);
}
@Test
public void testZeroFormatHasPosAndNegParts() {
CellFormat fmt = CellFormat.getInstance("0.00;-0.00");
CellFormatResult result = fmt.apply(0.0);
assertEquals("0.00", result.text);
}
@Test
public void testFormatWithThreeSections() {
CellFormat fmt = CellFormat.getInstance("0.00;-0.00;-");
assertEquals("12.35", fmt.apply(12.345).text);
assertEquals("-12.35", fmt.apply(-12.345).text);
assertEquals("-", fmt.apply(0.0).text);
assertEquals("abc", fmt.apply("abc").text);
}
@Test
public void testFormatWithFourSections() {
CellFormat fmt = CellFormat.getInstance("0.00;-0.00;-; @ ");
assertEquals("12.35", fmt.apply(12.345).text);
assertEquals("-12.35", fmt.apply(-12.345).text);
assertEquals("-", fmt.apply(0.0).text);
assertEquals(" abc ", fmt.apply("abc").text);
}
@Test
public void testApplyCellForGeneralFormat() throws Exception {
// Create a workbook, row and cell to test with
Workbook wb = new HSSFWorkbook();
Sheet sheet = wb.createSheet();
Row row = sheet.createRow(0);
Cell cell0 = row.createCell(0);
Cell cell1 = row.createCell(1);
Cell cell2 = row.createCell(2);
Cell cell3 = row.createCell(3);
Cell cell4 = row.createCell(4);
CellFormat cf = CellFormat.getInstance("General");
// case CellType.BLANK
CellFormatResult result0 = cf.apply(cell0);
assertEquals("", result0.text);
// case CellType.BOOLEAN
cell1.setCellValue(true);
CellFormatResult result1 = cf.apply(cell1);
assertEquals("TRUE", result1.text);
// case CellType.NUMERIC
cell2.setCellValue(1.23);
CellFormatResult result2 = cf.apply(cell2);
assertEquals("1.23", result2.text);
cell3.setCellValue(123.0);
CellFormatResult result3 = cf.apply(cell3);
assertEquals("123", result3.text);
// case CellType.STRING
cell4.setCellValue("abc");
CellFormatResult result4 = cf.apply(cell4);
assertEquals("abc", result4.text);
wb.close();
}
@Test
public void testApplyCellForAtFormat() throws Exception {
// Create a workbook, row and cell to test with
Workbook wb = new HSSFWorkbook();
Sheet sheet = wb.createSheet();
Row row = sheet.createRow(0);
Cell cell0 = row.createCell(0);
Cell cell1 = row.createCell(1);
Cell cell2 = row.createCell(2);
Cell cell3 = row.createCell(3);
Cell cell4 = row.createCell(4);
CellFormat cf = CellFormat.getInstance("@");
// case CellType.BLANK
CellFormatResult result0 = cf.apply(cell0);
assertEquals("", result0.text);
// case CellType.BOOLEAN
cell1.setCellValue(true);
CellFormatResult result1 = cf.apply(cell1);
assertEquals("TRUE", result1.text);
// case CellType.NUMERIC
cell2.setCellValue(1.23);
CellFormatResult result2 = cf.apply(cell2);
assertEquals("1.23", result2.text);
cell3.setCellValue(123.0);
CellFormatResult result3 = cf.apply(cell3);
assertEquals("123", result3.text);
// case CellType.STRING
cell4.setCellValue("abc");
CellFormatResult result4 = cf.apply(cell4);
assertEquals("abc", result4.text);
wb.close();
}
@Test
public void testApplyCellForDateFormat() throws Exception {
// Create a workbook, row and cell to test with
Workbook wb = new HSSFWorkbook();
Sheet sheet = wb.createSheet();
Row row = sheet.createRow(0);
Cell cell0 = row.createCell(0);
Cell cell1 = row.createCell(1);
CellFormat cf = CellFormat.getInstance("dd/mm/yyyy");
cell0.setCellValue(10);
CellFormatResult result0 = cf.apply(cell0);
assertEquals("10/01/1900", result0.text);
cell1.setCellValue(-1);
CellFormatResult result1 = cf.apply(cell1);
assertEquals(_255_POUND_SIGNS, result1.text);
wb.close();
}
@Test
public void testApplyCellForTimeFormat() throws Exception {
// Create a workbook, row and cell to test with
Workbook wb = new HSSFWorkbook();
Sheet sheet = wb.createSheet();
Row row = sheet.createRow(0);
Cell cell = row.createCell(0);
CellFormat cf = CellFormat.getInstance("hh:mm");
cell.setCellValue(DateUtil.convertTime("03:04:05"));
CellFormatResult result = cf.apply(cell);
assertEquals("03:04", result.text);
wb.close();
}
@Test
public void testApplyCellForDateFormatAndNegativeFormat() throws Exception {
// Create a workbook, row and cell to test with
Workbook wb = new HSSFWorkbook();
Sheet sheet = wb.createSheet();
Row row = sheet.createRow(0);
Cell cell0 = row.createCell(0);
Cell cell1 = row.createCell(1);
CellFormat cf = CellFormat.getInstance("dd/mm/yyyy;(0)");
cell0.setCellValue(10);
CellFormatResult result0 = cf.apply(cell0);
assertEquals("10/01/1900", result0.text);
cell1.setCellValue(-1);
CellFormatResult result1 = cf.apply(cell1);
assertEquals("(1)", result1.text);
wb.close();
}
@Test
public void testApplyJLabelCellForGeneralFormat() throws Exception {
// Create a workbook, row and cell to test with
Workbook wb = new HSSFWorkbook();
Sheet sheet = wb.createSheet();
Row row = sheet.createRow(0);
Cell cell0 = row.createCell(0);
Cell cell1 = row.createCell(1);
Cell cell2 = row.createCell(2);
Cell cell3 = row.createCell(3);
Cell cell4 = row.createCell(4);
CellFormat cf = CellFormat.getInstance("General");
JLabel label0 = new JLabel();
JLabel label1 = new JLabel();
JLabel label2 = new JLabel();
JLabel label3 = new JLabel();
JLabel label4 = new JLabel();
// case CellType.BLANK
CellFormatResult result0 = cf.apply(label0, cell0);
assertEquals("", result0.text);
assertEquals("", label0.getText());
// case CellType.BOOLEAN
cell1.setCellValue(true);
CellFormatResult result1 = cf.apply(label1, cell1);
assertEquals("TRUE", result1.text);
assertEquals("TRUE", label1.getText());
// case CellType.NUMERIC
cell2.setCellValue(1.23);
CellFormatResult result2 = cf.apply(label2, cell2);
assertEquals("1.23", result2.text);
assertEquals("1.23", label2.getText());
cell3.setCellValue(123.0);
CellFormatResult result3 = cf.apply(label3, cell3);
assertEquals("123", result3.text);
assertEquals("123", label3.getText());
// case CellType.STRING
cell4.setCellValue("abc");
CellFormatResult result4 = cf.apply(label4, cell4);
assertEquals("abc", result4.text);
assertEquals("abc", label4.getText());
wb.close();
}
@Test
public void testApplyJLabelCellForAtFormat() throws Exception {
// Create a workbook, row and cell to test with
Workbook wb = new HSSFWorkbook();
Sheet sheet = wb.createSheet();
Row row = sheet.createRow(0);
Cell cell0 = row.createCell(0);
Cell cell1 = row.createCell(1);
Cell cell2 = row.createCell(2);
Cell cell3 = row.createCell(3);
Cell cell4 = row.createCell(4);
CellFormat cf = CellFormat.getInstance("@");
JLabel label0 = new JLabel();
JLabel label1 = new JLabel();
JLabel label2 = new JLabel();
JLabel label3 = new JLabel();
JLabel label4 = new JLabel();
// case CellType.BLANK
CellFormatResult result0 = cf.apply(label0, cell0);
assertEquals("", result0.text);
assertEquals("", label0.getText());
// case CellType.BOOLEAN
cell1.setCellValue(true);
CellFormatResult result1 = cf.apply(label1, cell1);
assertEquals("TRUE", result1.text);
assertEquals("TRUE", label1.getText());
// case CellType.NUMERIC
cell2.setCellValue(1.23);
CellFormatResult result2 = cf.apply(label2, cell2);
assertEquals("1.23", result2.text);
assertEquals("1.23", label2.getText());
cell3.setCellValue(123.0);
CellFormatResult result3 = cf.apply(label3, cell3);
assertEquals("123", result3.text);
assertEquals("123", label3.getText());
// case CellType.STRING
cell4.setCellValue("abc");
CellFormatResult result4 = cf.apply(label4, cell4);
assertEquals("abc", result4.text);
assertEquals("abc", label4.getText());
wb.close();
}
@Test
public void testApplyJLabelCellForDateFormat() throws Exception {
// Create a workbook, row and cell to test with
Workbook wb = new HSSFWorkbook();
Sheet sheet = wb.createSheet();
Row row = sheet.createRow(0);
Cell cell0 = row.createCell(0);
Cell cell1 = row.createCell(1);
CellFormat cf = CellFormat.getInstance("dd/mm/yyyy");
JLabel label0 = new JLabel();
JLabel label1 = new JLabel();
cell0.setCellValue(10);
CellFormatResult result0 = cf.apply(label0, cell0);
assertEquals("10/01/1900", result0.text);
assertEquals("10/01/1900", label0.getText());
cell1.setCellValue(-1);
CellFormatResult result1 = cf.apply(label1, cell1);
assertEquals(_255_POUND_SIGNS, result1.text);
assertEquals(_255_POUND_SIGNS, label1.getText());
wb.close();
}
@Test
public void testApplyJLabelCellForTimeFormat() throws Exception {
// Create a workbook, row and cell to test with
Workbook wb = new HSSFWorkbook();
Sheet sheet = wb.createSheet();
Row row = sheet.createRow(0);
Cell cell = row.createCell(0);
CellFormat cf = CellFormat.getInstance("hh:mm");
JLabel label = new JLabel();
cell.setCellValue(DateUtil.convertTime("03:04:05"));
CellFormatResult result = cf.apply(label, cell);
assertEquals("03:04", result.text);
assertEquals("03:04", label.getText());
wb.close();
}
@Test
public void testApplyJLabelCellForDateFormatAndNegativeFormat() throws Exception {
// Create a workbook, row and cell to test with
Workbook wb = new HSSFWorkbook();
Sheet sheet = wb.createSheet();
Row row = sheet.createRow(0);
Cell cell0 = row.createCell(0);
Cell cell1 = row.createCell(1);
CellFormat cf = CellFormat.getInstance("dd/mm/yyyy;(0)");
JLabel label0 = new JLabel();
JLabel label1 = new JLabel();
cell0.setCellValue(10);
CellFormatResult result0 = cf.apply(label0, cell0);
assertEquals("10/01/1900", result0.text);
assertEquals("10/01/1900", label0.getText());
cell1.setCellValue(-1);
CellFormatResult result1 = cf.apply(label1, cell1);
assertEquals("(1)", result1.text);
assertEquals("(1)", label1.getText());
wb.close();
}
@Test
public void testApplyFormatHasOnePartAndPartHasCondition() throws Exception {
// Create a workbook, row and cell to test with
Workbook wb = new HSSFWorkbook();
Sheet sheet = wb.createSheet();
Row row = sheet.createRow(0);
Cell cell = row.createCell(0);
CellFormat cf = CellFormat.getInstance("[>=100]0.00");
cell.setCellValue(100);
assertEquals("100.00", cf.apply(cell).text);
cell.setCellValue(10);
assertEquals("10", cf.apply(cell).text);
cell.setCellValue(0.123456789012345);
assertEquals("0.123456789", cf.apply(cell).text);
cell.setCellValue(0);
assertEquals("0", cf.apply(cell).text);
cell.setCellValue("abc");
assertEquals("abc", cf.apply(cell).text);
wb.close();
}
@Test
public void testApplyFormatHasTwoPartsFirstHasCondition() throws Exception {
// Create a workbook, row and cell to test with
Workbook wb = new HSSFWorkbook();
Sheet sheet = wb.createSheet();
Row row = sheet.createRow(0);
Cell cell = row.createCell(0);
CellFormat cf = CellFormat.getInstance("[>=100]0.00;0.000");
cell.setCellValue(100);
assertEquals("100.00", cf.apply(cell).text);
cell.setCellValue(10);
assertEquals("10.000", cf.apply(cell).text);
cell.setCellValue(0.123456789012345);
assertEquals("0.123", cf.apply(cell).text);
cell.setCellValue(0);
assertEquals("0.000", cf.apply(cell).text);
cell.setCellValue(-10);
assertEquals("-10.000", cf.apply(cell).text);
cell.setCellValue("abc");
assertEquals("abc", cf.apply(cell).text);
cell.setCellValue("TRUE");
assertEquals("TRUE", cf.apply(cell).text);
wb.close();
}
@Test
public void testApplyFormatHasTwoPartsBothHaveCondition() throws Exception {
// Create a workbook, row and cell to test with
Workbook wb = new HSSFWorkbook();
Sheet sheet = wb.createSheet();
Row row = sheet.createRow(0);
Cell cell = row.createCell(0);
CellFormat cf = CellFormat.getInstance("[>=100]0.00;[>=10]0.000");
cell.setCellValue(100);
assertEquals("100.00", cf.apply(cell).text);
cell.setCellValue(10);
assertEquals("10.000", cf.apply(cell).text);
cell.setCellValue(0);
assertEquals(_255_POUND_SIGNS, cf.apply(cell).text);
cell.setCellValue(-0.123456789012345);
assertEquals(_255_POUND_SIGNS, cf.apply(cell).text);
cell.setCellValue(-10);
assertEquals(_255_POUND_SIGNS, cf.apply(cell).text);
cell.setCellValue("abc");
assertEquals("abc", cf.apply(cell).text);
wb.close();
}
@Test
public void testApplyFormatHasThreePartsFirstHasCondition() throws Exception {
// Create a workbook, row and cell to test with
Workbook wb = new HSSFWorkbook();
Sheet sheet = wb.createSheet();
Row row = sheet.createRow(0);
Cell cell = row.createCell(0);
CellFormat cf = CellFormat.getInstance("[>=100]0.00;0.000;0.0000");
cell.setCellValue(100);
assertEquals("100.00", cf.apply(cell).text);
cell.setCellValue(10);
assertEquals("10.0000", cf.apply(cell).text);
cell.setCellValue(0.123456789012345);
assertEquals("0.1235", cf.apply(cell).text);
cell.setCellValue(0);
assertEquals("0.0000", cf.apply(cell).text);
// Second format part ('0.000') is used for negative numbers
// so result does not have a minus sign
cell.setCellValue(-10);
assertEquals("10.000", cf.apply(cell).text);
cell.setCellValue("abc");
assertEquals("abc", cf.apply(cell).text);
wb.close();
}
@Test
public void testApplyFormatHasThreePartsFirstTwoHaveCondition() throws Exception {
// Create a workbook, row and cell to test with
Workbook wb = new HSSFWorkbook();
Sheet sheet = wb.createSheet();
Row row = sheet.createRow(0);
Cell cell = row.createCell(0);
CellFormat cf = CellFormat.getInstance("[>=100]0.00;[>=10]0.000;0.0000");
cell.setCellValue(100);
assertEquals("100.00", cf.apply(cell).text);
cell.setCellValue(10);
assertEquals("10.000", cf.apply(cell).text);
cell.setCellValue(0);
assertEquals("0.0000", cf.apply(cell).text);
cell.setCellValue(-10);
assertEquals("-10.0000", cf.apply(cell).text);
cell.setCellValue("abc");
assertEquals("abc", cf.apply(cell).text);
wb.close();
}
@Test
public void testApplyFormatHasThreePartsFirstIsDateFirstTwoHaveCondition() throws Exception {
// Create a workbook, row and cell to test with
Workbook wb = new HSSFWorkbook();
Sheet sheet = wb.createSheet();
Row row = sheet.createRow(0);
Cell cell = row.createCell(0);
CellFormat cf = CellFormat.getInstance("[>=100]0.00;[>=10]dd/mm/yyyy;0.0");
cell.setCellValue(100);
assertEquals("100.00", cf.apply(cell).text);
cell.setCellValue(10);
assertEquals("10/01/1900", cf.apply(cell).text);
cell.setCellValue(0);
assertEquals("0.0", cf.apply(cell).text);
cell.setCellValue(-10);
assertEquals("-10.0", cf.apply(cell).text);
cell.setCellValue("abc");
assertEquals("abc", cf.apply(cell).text);
wb.close();
}
@Test
public void testApplyFormatHasTwoPartsFirstHasConditionSecondIsGeneral() throws Exception {
// Create a workbook, row and cell to test with
Workbook wb = new HSSFWorkbook();
Sheet sheet = wb.createSheet();
Row row = sheet.createRow(0);
Cell cell = row.createCell(0);
CellFormat cf = CellFormat.getInstance("[>=100]0.00;General");
cell.setCellValue(100);
assertEquals("100.00", cf.apply(cell).text);
cell.setCellValue(10);
assertEquals("10", cf.apply(cell).text);
cell.setCellValue(0);
assertEquals("0", cf.apply(cell).text);
cell.setCellValue(-10);
assertEquals("-10", cf.apply(cell).text);
cell.setCellValue("abc");
assertEquals("abc", cf.apply(cell).text);
wb.close();
}
@Test
public void testApplyFormatHasThreePartsFirstTwoHaveConditionThirdIsGeneral() throws Exception {
// Create a workbook, row and cell to test with
Workbook wb = new HSSFWorkbook();
Sheet sheet = wb.createSheet();
Row row = sheet.createRow(0);
Cell cell = row.createCell(0);
CellFormat cf = CellFormat.getInstance("[>=100]0.00;[>=10]0.000;General");
cell.setCellValue(100);
assertEquals("100.00", cf.apply(cell).text);
cell.setCellValue(10);
assertEquals("10.000", cf.apply(cell).text);
cell.setCellValue(0);
assertEquals("0", cf.apply(cell).text);
cell.setCellValue(-10);
assertEquals("-10", cf.apply(cell).text);
cell.setCellValue("abc");
assertEquals("abc", cf.apply(cell).text);
wb.close();
}
@Test
public void testApplyFormatHasFourPartsFirstHasCondition() throws Exception {
// Create a workbook, row and cell to test with
Workbook wb = new HSSFWorkbook();
Sheet sheet = wb.createSheet();
Row row = sheet.createRow(0);
Cell cell = row.createCell(0);
CellFormat cf = CellFormat.getInstance("[>=100]0.00;0.000;0.0000;~~@~~");
cell.setCellValue(100);
assertEquals("100.00", cf.apply(cell).text);
cell.setCellValue(10);
assertEquals("10.0000", cf.apply(cell).text);
cell.setCellValue(0.123456789012345);
assertEquals("0.1235", cf.apply(cell).text);
cell.setCellValue(0);
assertEquals("0.0000", cf.apply(cell).text);
// Second format part ('0.000') is used for negative numbers
// so result does not have a minus sign
cell.setCellValue(-10);
assertEquals("10.000", cf.apply(cell).text);
cell.setCellValue("abc");
assertEquals("~~abc~~", cf.apply(cell).text);
wb.close();
}
@Test
public void testApplyFormatHasFourPartsSecondHasCondition() throws Exception {
// Create a workbook, row and cell to test with
Workbook wb = new HSSFWorkbook();
Sheet sheet = wb.createSheet();
Row row = sheet.createRow(0);
Cell cell = row.createCell(0);
CellFormat cf = CellFormat.getInstance("0.00;[>=100]0.000;0.0000;~~@~~");
cell.setCellValue(100);
assertEquals("100.00", cf.apply(cell).text);
cell.setCellValue(10);
assertEquals("10.00", cf.apply(cell).text);
cell.setCellValue(0.123456789012345);
assertEquals("0.12", cf.apply(cell).text);
cell.setCellValue(0);
assertEquals("0.0000", cf.apply(cell).text);
cell.setCellValue(-10);
assertEquals("-10.0000", cf.apply(cell).text);
cell.setCellValue("abc");
assertEquals("~~abc~~", cf.apply(cell).text);
cell.setCellValue(true);
assertEquals("~~TRUE~~", cf.apply(cell).text);
wb.close();
}
@Test
public void testApplyFormatHasFourPartsFirstTwoHaveCondition() throws Exception {
// Create a workbook, row and cell to test with
Workbook wb = new HSSFWorkbook();
Sheet sheet = wb.createSheet();
Row row = sheet.createRow(0);
Cell cell = row.createCell(0);
CellFormat cf = CellFormat.getInstance("[>=100]0.00;[>=10]0.000;0.0000;~~@~~");
cell.setCellValue(100);
assertEquals("100.00", cf.apply(cell).text);
cell.setCellValue(10);
assertEquals("10.000", cf.apply(cell).text);
cell.setCellValue(0);
assertEquals("0.0000", cf.apply(cell).text);
cell.setCellValue(-10);
assertEquals("-10.0000", cf.apply(cell).text);
cell.setCellValue("abc");
assertEquals("~~abc~~", cf.apply(cell).text);
cell.setCellValue(true);
assertEquals("~~TRUE~~", cf.apply(cell).text);
wb.close();
}
/*
* Test apply(Object value) with a number as parameter
*/
@Test
public void testApplyObjectNumber() {
CellFormat cf1 = CellFormat.getInstance("0.000");
assertEquals("1.235", cf1.apply(1.2345).text);
assertEquals("-1.235", cf1.apply(-1.2345).text);
CellFormat cf2 = CellFormat.getInstance("0.000;(0.000)");
assertEquals("1.235", cf2.apply(1.2345).text);
assertEquals("(1.235)", cf2.apply(-1.2345).text);
CellFormat cf3 = CellFormat.getInstance("[>1]0.000;0.0000");
assertEquals("1.235", cf3.apply(1.2345).text);
assertEquals("-1.2345", cf3.apply(-1.2345).text);
CellFormat cf4 = CellFormat.getInstance("0.000;[>1]0.0000");
assertEquals("1.235", cf4.apply(1.2345).text);
assertEquals(_255_POUND_SIGNS, cf4.apply(-1.2345).text);
}
/*
* Test apply(Object value) with a Date as parameter
*/
@Test
public void testApplyObjectDate() throws ParseException {
CellFormat cf1 = CellFormat.getInstance("m/d/yyyy");
Date date1 = new SimpleDateFormat("M/d/y", Locale.ROOT).parse("01/11/2012");
assertEquals("1/11/2012", cf1.apply(date1).text);
}
@Test
public void testApplyCellForDateFormatWithConditions() throws Exception {
// Create a workbook, row and cell to test with
Workbook wb = new HSSFWorkbook();
Sheet sheet = wb.createSheet();
Row row = sheet.createRow(0);
Cell cell = row.createCell(0);
CellFormat cf = CellFormat.getInstance("[<1]hh:mm:ss AM/PM;[>=1]dd/mm/yyyy hh:mm:ss AM/PM;General");
cell.setCellValue(0.5);
assertEquals("12:00:00 PM", cf.apply(cell).text);
cell.setCellValue(1.5);
assertEquals("01/01/1900 12:00:00 PM", cf.apply(cell).text);
cell.setCellValue(-1);
assertEquals(_255_POUND_SIGNS, cf.apply(cell).text);
wb.close();
}
/*
* Test apply(Object value) with a String as parameter
*/
@Test
public void testApplyObjectString() {
CellFormat cf = CellFormat.getInstance("0.00");
assertEquals("abc", cf.apply("abc").text);
}
/*
* Test apply(Object value) with a Boolean as parameter
*/
@Test
public void testApplyObjectBoolean() {
CellFormat cf1 = CellFormat.getInstance("0");
CellFormat cf2 = CellFormat.getInstance("General");
CellFormat cf3 = CellFormat.getInstance("@");
assertEquals("TRUE", cf1.apply(true).text);
assertEquals("FALSE", cf2.apply(false).text);
assertEquals("TRUE", cf3.apply(true).text);
}
@Test
public void testSimpleFractionFormat() throws IOException {
CellFormat cf1 = CellFormat.getInstance("# ?/?");
// Create a workbook, row and cell to test with
Workbook wb = new HSSFWorkbook();
try {
Sheet sheet = wb.createSheet();
Row row = sheet.createRow(0);
Cell cell = row.createCell(0);
cell.setCellValue(123456.6);
//System.out.println(cf1.apply(cell).text);
assertEquals("123456 3/5", cf1.apply(cell).text);
} finally {
wb.close();
}
}
@Test
public void testAccountingFormats() throws IOException {
char pound = '\u00A3';
char euro = '\u20AC';
// Accounting -> 0 decimal places, default currency symbol
String formatDft = "_-\"$\"* #,##0_-;\\-\"$\"* #,##0_-;_-\"$\"* \"-\"_-;_-@_-";
// Accounting -> 0 decimal places, US currency symbol
String formatUS = "_-[$$-409]* #,##0_ ;_-[$$-409]* -#,##0 ;_-[$$-409]* \"-\"_-;_-@_-";
// Accounting -> 0 decimal places, UK currency symbol
String formatUK = "_-[$"+pound+"-809]* #,##0_-;\\-[$"+pound+"-809]* #,##0_-;_-[$"+pound+"-809]* \"-\"??_-;_-@_-";
// French style accounting, euro sign comes after not before
String formatFR = "_-#,##0* [$"+euro+"-40C]_-;\\-#,##0* [$"+euro+"-40C]_-;_-\"-\"??* [$"+euro+"-40C] _-;_-@_-";
// Has +ve, -ve and zero rules
CellFormat cfDft = CellFormat.getInstance(formatDft);
CellFormat cfUS = CellFormat.getInstance(formatUS);
CellFormat cfUK = CellFormat.getInstance(formatUK);
CellFormat cfFR = CellFormat.getInstance(formatFR);
// For +ve numbers, should be Space + currency symbol + spaces + whole number with commas + space
// (Except French, which is mostly reversed...)
assertEquals(" $ 12 ", cfDft.apply(Double.valueOf(12.33)).text);
assertEquals(" $ 12 ", cfUS.apply(Double.valueOf(12.33)).text);
assertEquals(" "+pound+" 12 ", cfUK.apply(Double.valueOf(12.33)).text);
assertEquals(" 12 "+euro+" ", cfFR.apply(Double.valueOf(12.33)).text);
assertEquals(" $ 16,789 ", cfDft.apply(Double.valueOf(16789.2)).text);
assertEquals(" $ 16,789 ", cfUS.apply(Double.valueOf(16789.2)).text);
assertEquals(" "+pound+" 16,789 ", cfUK.apply(Double.valueOf(16789.2)).text);
assertEquals(" 16,789 "+euro+" ", cfFR.apply(Double.valueOf(16789.2)).text);
// For -ve numbers, gets a bit more complicated...
assertEquals("-$ 12 ", cfDft.apply(Double.valueOf(-12.33)).text);
assertEquals(" $ -12 ", cfUS.apply(Double.valueOf(-12.33)).text);
assertEquals("-"+pound+" 12 ", cfUK.apply(Double.valueOf(-12.33)).text);
assertEquals("-12 "+euro+" ", cfFR.apply(Double.valueOf(-12.33)).text);
assertEquals("-$ 16,789 ", cfDft.apply(Double.valueOf(-16789.2)).text);
assertEquals(" $ -16,789 ", cfUS.apply(Double.valueOf(-16789.2)).text);
assertEquals("-"+pound+" 16,789 ", cfUK.apply(Double.valueOf(-16789.2)).text);
assertEquals("-16,789 "+euro+" ", cfFR.apply(Double.valueOf(-16789.2)).text);
// For zero, should be Space + currency symbol + spaces + Minus + spaces
assertEquals(" $ - ", cfDft.apply(Double.valueOf(0)).text);
// TODO Fix the exception this incorrectly triggers
//assertEquals(" $ - ", cfUS.apply(Double.valueOf(0)).text);
// TODO Fix these to not have an incorrect bonus 0 on the end
//assertEquals(" "+pound+" - ", cfUK.apply(Double.valueOf(0)).text);
//assertEquals(" - "+euro+" ", cfFR.apply(Double.valueOf(0)).text);
}
@Test
public void testThreePartComplexFormat1() {
// verify a rather complex format found e.g. in http://wahl.land-oberoesterreich.gv.at/Downloads/bp10.xls
CellFormatPart posPart = new CellFormatPart("[$-F400]h:mm:ss\\ AM/PM");
assertNotNull(posPart);
assertEquals("1:00:12 AM", posPart.apply(new Date(12345)).text);
CellFormatPart negPart = new CellFormatPart("[$-F40]h:mm:ss\\ AM/PM");
assertNotNull(negPart);
assertEquals("1:00:12 AM", posPart.apply(new Date(12345)).text);
//assertNotNull(new CellFormatPart("_-* \"\"??_-;_-@_-"));
CellFormat instance = CellFormat.getInstance("[$-F400]h:mm:ss\\ AM/PM;[$-F40]h:mm:ss\\ AM/PM;_-* \"\"??_-;_-@_-");
assertNotNull(instance);
assertEquals("1:00:12 AM", instance.apply(new Date(12345)).text);
}
@Test
public void testThreePartComplexFormat2() {
// verify a rather complex format found e.g. in http://wahl.land-oberoesterreich.gv.at/Downloads/bp10.xls
CellFormatPart posPart = new CellFormatPart("dd/mm/yyyy");
assertNotNull(posPart);
assertEquals("01/01/1970", posPart.apply(new Date(12345)).text);
CellFormatPart negPart = new CellFormatPart("dd/mm/yyyy");
assertNotNull(negPart);
assertEquals("01/01/1970", posPart.apply(new Date(12345)).text);
//assertNotNull(new CellFormatPart("_-* \"\"??_-;_-@_-"));
CellFormat instance = CellFormat.getInstance("dd/mm/yyyy;dd/mm/yyyy;_-* \"\"??_-;_-@_-");
assertNotNull(instance);
assertEquals("01/01/1970", instance.apply(new Date(12345)).text);
}
}