blob: d791ee4c508891505a386b7395854207fe0a684c [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.odftoolkit.odfdom.doc.table;
import java.text.DecimalFormatSymbols;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.GregorianCalendar;
import java.util.List;
import java.util.logging.Level;
import java.util.logging.Logger;
import junit.framework.Assert;
import org.junit.Before;
import org.junit.Test;
import org.odftoolkit.odfdom.doc.OdfSpreadsheetDocument;
import org.odftoolkit.odfdom.doc.OdfTextDocument;
import org.odftoolkit.odfdom.dom.OdfContentDom;
import org.odftoolkit.odfdom.dom.OdfStylesDom;
import org.odftoolkit.odfdom.dom.attribute.office.OfficeValueTypeAttribute;
import org.odftoolkit.odfdom.dom.element.draw.DrawFrameElement;
import org.odftoolkit.odfdom.dom.element.draw.DrawImageElement;
import org.odftoolkit.odfdom.dom.element.style.StyleParagraphPropertiesElement;
import org.odftoolkit.odfdom.dom.style.OdfStyleFamily;
import org.odftoolkit.odfdom.incubator.doc.number.OdfNumberDateStyle;
import org.odftoolkit.odfdom.incubator.doc.number.OdfNumberStyle;
import org.odftoolkit.odfdom.incubator.doc.office.OdfOfficeAutomaticStyles;
import org.odftoolkit.odfdom.incubator.doc.office.OdfOfficeStyles;
import org.odftoolkit.odfdom.incubator.doc.style.OdfStyle;
import org.odftoolkit.odfdom.type.Color;
import org.odftoolkit.odfdom.utils.ResourceUtilities;
public class TableCellTest {
final static String SAMPLE_SPREADSHEET = "TestSpreadsheetTable";
final static String SAMPLE_STYLE_SPREADSHEET = "TestSpreadsheetStyleTable";
final static String SAMPLE_TEXT = "TestTextTable";
OdfSpreadsheetDocument odsdoc, odsstyle;
OdfTextDocument odtdoc;
OdfTable odsTable, odtTable;
@Before
public void setUp() {
try {
odsdoc = (OdfSpreadsheetDocument) OdfSpreadsheetDocument.loadDocument(ResourceUtilities.getAbsolutePath(SAMPLE_SPREADSHEET
+ ".ods"));
odtdoc = (OdfTextDocument) OdfTextDocument.loadDocument(ResourceUtilities.getAbsolutePath(SAMPLE_TEXT + ".odt"));
} catch (Exception e) {
Logger.getLogger(TableCellTest.class.getName()).log(Level.SEVERE, e.getMessage(), e);
}
}
private void saveods() {
try {
odsdoc.save(ResourceUtilities.newTestOutputFile(SAMPLE_SPREADSHEET
+ "Output.ods"));
} catch (Exception e) {
Logger.getLogger(TableCellTest.class.getName()).log(Level.SEVERE, e.getMessage(), e);
}
}
private void saveodt() {
try {
odtdoc.save(ResourceUtilities.newTestOutputFile(SAMPLE_TEXT
+ "Output.odt"));
} catch (Exception e) {
Logger.getLogger(TableCellTest.class.getName()).log(Level.SEVERE, e.getMessage(), e);
}
}
@Test
public void testGetIndexInRowColumn() {
int rowindex = 2, columnindex = 1;
OdfTable table = odsdoc.getTableByName("Sheet1");
OdfTableCell cell = table.getCellByPosition(columnindex, rowindex);
Assert.assertEquals(rowindex, cell.getRowIndex());
Assert.assertEquals(columnindex, cell.getColumnIndex());
OdfTable table3 = odtdoc.getTableByName("Table3");
OdfTableCell cell1 = table.getCellByPosition(0, 1);
Assert.assertEquals(1, cell1.getRowIndex());
Assert.assertEquals(0, cell1.getColumnIndex());
}
@Test
public void testGetSetHoriAlignment() {
int rowindex = 3, columnindex = 0;
OdfTable table = odsdoc.getTableByName("Sheet1");
OdfTableCell fcell = table.getCellByPosition(columnindex, rowindex);
String align = fcell.getHorizontalAlignment();
Assert.assertEquals("center", align);
fcell.setHorizontalAlignment(null);
String newAlign = fcell.getHorizontalAlignment();
Assert.assertEquals(null, newAlign);
fcell.setHorizontalAlignment("start");
align = fcell.getHorizontalAlignment();
Assert.assertEquals("start", align);
// "left" and "right" should be mapped as "start" and "end".
fcell.setHorizontalAlignment("left");
align = fcell.getHorizontalAlignment();
Assert.assertEquals("start", align);
fcell.setHorizontalAlignment("right");
align = fcell.getHorizontalAlignment();
Assert.assertEquals("end", align);
saveods();
OdfSpreadsheetDocument ods;
try {
ods = OdfSpreadsheetDocument.newSpreadsheetDocument();
OdfTable tbl = ods.getTableByName("Sheet1");
OdfTableCell cell = tbl.getCellByPosition(0, 0);
String horizonAlignment = cell.getHorizontalAlignment();
Assert.assertEquals(null, horizonAlignment);
} catch (Exception e) {
Logger.getLogger(TableCellTest.class.getName()).log(Level.SEVERE, e.getMessage(), e);
Assert.fail(e.getMessage());
}
}
@Test
public void testGetSetVertAlignment() {
int rowindex = 3, columnindex = 0;
OdfTable table = odsdoc.getTableByName("Sheet1");
OdfTableCell fcell = table.getCellByPosition(columnindex, rowindex);
String align = fcell.getVerticalAlignment();
Assert.assertEquals("top", align);
fcell.setVerticalAlignment(null);
String newAlign = fcell.getVerticalAlignment();
Assert.assertEquals(null, newAlign);
fcell.setVerticalAlignment("bottom");
align = fcell.getVerticalAlignment();
Assert.assertEquals("bottom", align);
saveods();
OdfSpreadsheetDocument ods;
try {
ods = OdfSpreadsheetDocument.newSpreadsheetDocument();
OdfTable tbl = ods.getTableByName("Sheet1");
OdfTableCell cell = tbl.getCellByPosition(0, 0);
String verticalAlignment = cell.getVerticalAlignment();
Assert.assertEquals(null, verticalAlignment);
} catch (Exception e) {
Logger.getLogger(TableCellTest.class.getName()).log(Level.SEVERE, e.getMessage(), e);
Assert.fail(e.getMessage());
}
}
@Test
public void testGetSetValueType() {
int rowindex = 3, columnindex = 0;
OdfTable table = odsdoc.getTableByName("Sheet1");
OdfTableCell fcell = table.getCellByPosition(columnindex, rowindex);
boolean illegalArgumentFlag = false;
try {
fcell.setValueType(null);
} catch (IllegalArgumentException ie) {
if ("type shouldn't be null.".equals(ie.getMessage())) {
illegalArgumentFlag = true;
}
}
Assert.assertTrue(illegalArgumentFlag);
fcell.setValueType("date");
String valueType = fcell.getValueType();
Assert.assertEquals("date", valueType);
saveods();
OdfSpreadsheetDocument ods;
try {
ods = OdfSpreadsheetDocument.newSpreadsheetDocument();
OdfTable tbl = ods.getTableByName("Sheet1");
OdfTableCell cell = tbl.getCellByPosition(0, 0);
valueType = cell.getValueType();
Assert.assertEquals(null, valueType);
} catch (Exception e) {
Logger.getLogger(TableCellTest.class.getName()).log(Level.SEVERE, e.getMessage(), e);
Assert.fail(e.getMessage());
}
}
@Test
public void testGetSetWrapOption() {
int rowindex = 5, columnindex = 8;
OdfTable table = odsdoc.getTableByName("Sheet1");
OdfTableCell fcell = table.getCellByPosition(columnindex, rowindex);
boolean wrap = fcell.isTextWrapped();
Assert.assertEquals(true, wrap);
fcell.setTextWrapped(false);
wrap = fcell.isTextWrapped();
Assert.assertEquals(false, wrap);
saveods();
}
@Test
public void testGetSetTextValue() {
int rowindex = 5, columnindex = 8;
OdfTable table = odsdoc.getTableByName("Sheet1");
OdfTableCell fcell = table.getCellByPosition(columnindex, rowindex);
String text = fcell.getDisplayText();
Assert.assertEquals("this is a big cell with a big table", text);
fcell.setDisplayText("changed");
text = fcell.getDisplayText();
Assert.assertEquals("changed", text);
// reproduce bug 150.
fcell.setDisplayText(null);
text = fcell.getDisplayText();
Assert.assertEquals("", text);
fcell.setDisplayText(null, "automatic7777");
text = fcell.getDisplayText();
Assert.assertEquals("", text);
saveods();
OdfTable table1 = odtdoc.getTableByName("Table1");
OdfTableCell fcell2 = table1.getCellByPosition(0, 1);
text = fcell2.getDisplayText();
Assert.assertEquals("Aabbccddee", text);
}
@Test
public void testSetGetFormat() {
int rowindex = 3, columnindex = 0;
OdfTable table = odsdoc.getTableByName("Sheet1");
OdfTableCell fcell = table.getCellByPosition(columnindex, rowindex);
fcell.setFormatString("#0.0");
String displayvalue = fcell.getDisplayText();
Assert.assertEquals("300"
+ (new DecimalFormatSymbols()).getDecimalSeparator() + "0",
displayvalue);
String format = fcell.getFormatString();
Assert.assertEquals("#0.0", format);
OdfTableCell dcell = table.getCellByPosition(3, 2);
format = dcell.getFormatString();
Assert.assertEquals("MMM d, yy", format);
dcell.setFormatString("yyyy-MM-dd");
displayvalue = dcell.getDisplayText();
Assert.assertEquals("2008-12-23", displayvalue);
OdfTableCell pcell = table.getCellByPosition("B2");
format = pcell.getFormatString();
Assert.assertEquals("#0%", format);
pcell.setFormatString("#0.00%");
displayvalue = pcell.getDisplayText();
Assert.assertEquals("200"
+ (new DecimalFormatSymbols()).getDecimalSeparator() + "00%",
displayvalue);
try {
OdfTableRow tablerow = table.getRowByIndex(6);
OdfTableCell cell = tablerow.getCellByIndex(3);
Calendar currenttime = Calendar.getInstance();
cell.setDateValue(currenttime);
cell.setFormatString("yyyy-MM-dd");
tablerow = table.getRowByIndex(7);
cell = tablerow.getCellByIndex(3);
cell.setTimeValue(currenttime);
cell.setFormatString("HH:mm:ss");
} catch (Exception e) {
Logger.getLogger(TableCellTest.class.getName()).log(Level.SEVERE, e.getMessage(), e);
Assert.fail(e.getMessage());
}
saveods();
//test value type adapt function.
OdfSpreadsheetDocument ods;
try {
ods = OdfSpreadsheetDocument.newSpreadsheetDocument();
OdfTable tbl = ods.getTableByName("Sheet1");
OdfTableCell cell;
for (int i = 1; i <= 10; i++) {
cell = tbl.getCellByPosition("A" + i);
cell.setDoubleValue(new Double(i));
}
cell = tbl.getCellByPosition("A11");
cell.setFormula("=sum(A1:A10)");
//contains '#' should be adapted as float.
cell.setFormatString("#,###");
Assert.assertEquals("float", cell.getValueType());
cell = tbl.getCellByPosition("A12");
cell.setFormula("=sum(A1:A10)");
//contains '0' should be adapted as float.
cell.setFormatString("0.00");
Assert.assertEquals("float", cell.getValueType());
} catch (Exception e) {
Logger.getLogger(TableCellTest.class.getName()).log(Level.SEVERE, e.getMessage(), e);
Assert.fail(e.getMessage());
}
try {
ods = OdfSpreadsheetDocument.newSpreadsheetDocument();
OdfTable tbl = ods.getTableByName("Sheet1");
OdfTableCell cell;
for (int i = 1; i <= 10; i++) {
cell = tbl.getCellByPosition("A" + i);
cell.setPercentageValue(0.1);
}
cell = tbl.getCellByPosition("A11");
cell.setFormula("=sum(A1:A10)");
//contains '%'should be adapted as percentage.
cell.setFormatString("###.0%");
Assert.assertEquals("percentage", cell.getValueType());
} catch (Exception e) {
Logger.getLogger(TableCellTest.class.getName()).log(Level.SEVERE, e.getMessage(), e);
Assert.fail(e.getMessage());
}
try {
ods = OdfSpreadsheetDocument.newSpreadsheetDocument();
OdfTable tbl = ods.getTableByName("Sheet1");
OdfTableCell cell;
for (int i = 1; i <= 10; i++) {
cell = tbl.getCellByPosition("A" + i);
cell.setDateValue(Calendar.getInstance());
cell.setFormatString("yyyy.MM.dd");
}
cell = tbl.getCellByPosition("A11");
cell.setFormula("=max(A1:A10)");
//contains 'y' 'M' 'd' should be adapted as date.
cell.setFormatString("yyyy.MM.dd");
Assert.assertEquals("date", cell.getValueType());
} catch (Exception e) {
Logger.getLogger(TableCellTest.class.getName()).log(Level.SEVERE, e.getMessage(), e);
Assert.fail(e.getMessage());
}
try {
ods = OdfSpreadsheetDocument.newSpreadsheetDocument();
OdfTable tbl = ods.getTableByName("Sheet1");
OdfTableCell cell;
for (int i = 1; i <= 10; i++) {
cell = tbl.getCellByPosition("A" + i);
cell.setTimeValue(Calendar.getInstance());
cell.setFormatString("yyyy.MM.dd HH:mm:ss");
}
cell = tbl.getCellByPosition("A11");
cell.setFormula("=max(A1:A10)");
//contains 'H' 'm' 's' should be adapted as time.
cell.setFormatString("yyyy.MM.dd HH:mm:ss");
Assert.assertEquals("time", cell.getValueType());
cell = tbl.getCellByPosition("A12");
cell.setFormula("=max(A1:A10)");
//contains 'H' 'm' 's' should be adapted as time.
cell.setFormatString("HH:mm:ss");
Assert.assertEquals("time", cell.getValueType());
} catch (Exception e) {
Logger.getLogger(TableCellTest.class.getName()).log(Level.SEVERE, e.getMessage(), e);
Assert.fail(e.getMessage());
}
}
private void loadOutputSpreadsheet() {
try {
odsdoc = (OdfSpreadsheetDocument) OdfSpreadsheetDocument.loadDocument(ResourceUtilities.getAbsolutePath(SAMPLE_SPREADSHEET
+ "Output.ods"));
} catch (Exception e) {
Logger.getLogger(TableCellTest.class.getName()).log(Level.SEVERE, e.getMessage(), e);
}
}
@Test
public void testGetSetCellBackgroundColor() throws Exception {
int rowindex = 2, columnindex = 0;
OdfTable table = odsdoc.getTableByName("Sheet1");
OdfTableCell fcell = table.getCellByPosition(columnindex, rowindex);
fcell.setCellBackgroundColor("#ffffff");
saveods();
// reload
loadOutputSpreadsheet();
table = odsdoc.getTableByName("Sheet1");
fcell = table.getCellByPosition(columnindex, rowindex);
// set color as DEFAULT_BACKGROUND_COLOR #FFFFFF
Assert.assertEquals("#ffffff", fcell.getCellBackgroundColorString());
Color expectedColor = Color.valueOf("#000000");
fcell.setCellBackgroundColor(expectedColor);
saveods();
// reload
loadOutputSpreadsheet();
table = odsdoc.getTableByName("Sheet1");
fcell = table.getCellByPosition(columnindex, rowindex);
Assert.assertEquals(expectedColor.toString(), fcell.getCellBackgroundColor().toString());
OdfSpreadsheetDocument ods;
try {
ods = OdfSpreadsheetDocument.newSpreadsheetDocument();
OdfTable tbl = ods.getTableByName("Sheet1");
OdfTableCell cell = tbl.getCellByPosition(0, 0);
Color actualBackColor = cell.getCellBackgroundColor();
Assert.assertEquals("#ffffff", actualBackColor.toString());
} catch (Exception e) {
Logger.getLogger(TableCellTest.class.getName()).log(Level.SEVERE, e.getMessage(), e);
Assert.fail(e.getMessage());
}
}
@Test
public void testGetSetColumnSpannedNumber() throws Exception {
int rowindex = 2, columnindex = 0;
OdfTable table = odsdoc.getTableByName("Sheet1");
OdfTableCell fcell = table.getCellByPosition(columnindex, rowindex);
fcell.setColumnSpannedNumber(-2);
saveods();
// reload
loadOutputSpreadsheet();
table = odsdoc.getTableByName("Sheet1");
fcell = table.getCellByPosition(columnindex, rowindex);
// set column spanned number as DEFAULT_COLUMN_SPANNED_NUMBER 1.
Assert.assertEquals(1, fcell.getColumnSpannedNumber());
fcell.setColumnSpannedNumber(0);
saveods();
// reload
loadOutputSpreadsheet();
table = odsdoc.getTableByName("Sheet1");
fcell = table.getCellByPosition(columnindex, rowindex);
// set column spanned number as DEFAULT_COLUMN_SPANNED_NUMBER 1.
Assert.assertEquals(1, fcell.getColumnSpannedNumber());
fcell.setColumnSpannedNumber(2);
saveods();
// reload
loadOutputSpreadsheet();
table = odsdoc.getTableByName("Sheet1");
fcell = table.getCellByPosition(columnindex, rowindex);
Assert.assertEquals(2, fcell.getColumnSpannedNumber());
}
@Test
public void testGetSetRowSpannedNumber() throws Exception {
int rowindex = 2, columnindex = 0;
OdfTable table = odsdoc.getTableByName("Sheet1");
OdfTableCell fcell = table.getCellByPosition(columnindex, rowindex);
fcell.setRowSpannedNumber(-2);
saveods();
// reload
loadOutputSpreadsheet();
table = odsdoc.getTableByName("Sheet1");
fcell = table.getCellByPosition(columnindex, rowindex);
// set row spanned number as DEFAULT_ROW_SPANNED_NUMBER 1.
Assert.assertEquals(1, fcell.getRowSpannedNumber());
fcell.setRowSpannedNumber(0);
saveods();
// reload
loadOutputSpreadsheet();
table = odsdoc.getTableByName("Sheet1");
fcell = table.getCellByPosition(columnindex, rowindex);
// set row spanned number as DEFAULT_ROW_SPANNED_NUMBER 1.
Assert.assertEquals(1, fcell.getRowSpannedNumber());
fcell.setRowSpannedNumber(2);
saveods();
// reload
loadOutputSpreadsheet();
table = odsdoc.getTableByName("Sheet1");
fcell = table.getCellByPosition(columnindex, rowindex);
Assert.assertEquals(2, fcell.getRowSpannedNumber());
}
@Test
public void testGetSetColumnsRepeatedNumber() throws Exception {
int rowindex = 3, columnindex = 1;
OdfTable table = odsdoc.getTableByName("Sheet1");
OdfTableCell fcell = table.getCellByPosition(columnindex, rowindex);
fcell.setColumnsRepeatedNumber(-2);
saveods();
// reload
loadOutputSpreadsheet();
table = odsdoc.getTableByName("Sheet1");
fcell = table.getCellByPosition(columnindex, rowindex);
// set columns repeated number as DEFAULT_COLUMNS_REPEATED_NUMBER 1.
Assert.assertEquals(1, fcell.getColumnsRepeatedNumber());
fcell.setColumnsRepeatedNumber(0);
saveods();
// reload
loadOutputSpreadsheet();
table = odsdoc.getTableByName("Sheet1");
fcell = table.getCellByPosition(columnindex, rowindex);
// set columns repeated number as DEFAULT_COLUMNS_REPEATED_NUMBER 1.
Assert.assertEquals(1, fcell.getColumnsRepeatedNumber());
fcell.setColumnsRepeatedNumber(2);
saveods();
// reload
loadOutputSpreadsheet();
table = odsdoc.getTableByName("Sheet1");
fcell = table.getCellByPosition(columnindex, rowindex);
Assert.assertEquals(2, fcell.getColumnsRepeatedNumber());
}
@Test
public void testGetSetDateValue() {
int rowindex = 7, columnindex = 7;
OdfTable table = odsdoc.getTableByName("Sheet1");
OdfTableCell fcell = table.getCellByPosition(columnindex, rowindex);
boolean illegalArgumentFlag = false;
try {
fcell.setDateValue(null);
} catch (IllegalArgumentException ie) {
if ("date shouldn't be null.".equals(ie.getMessage())) {
illegalArgumentFlag = true;
}
}
Assert.assertTrue(illegalArgumentFlag);
Calendar expectedCalendar = new GregorianCalendar(2010, 1, 30);
fcell.setDateValue(expectedCalendar);
saveods();
// reload
loadOutputSpreadsheet();
table = odsdoc.getTableByName("Sheet1");
fcell = table.getCellByPosition(columnindex, rowindex);
Assert.assertEquals(0, fcell.getDateValue().compareTo(
expectedCalendar));
}
@Test
public void testGetSetStringValue() {
int rowindex = 6, columnindex = 0;
OdfTable table = odsdoc.getTableByName("Sheet1");
OdfTableCell fcell = table.getCellByPosition(columnindex, rowindex);
fcell.setStringValue(null);
saveods();
// reload
loadOutputSpreadsheet();
table = odsdoc.getTableByName("Sheet1");
fcell = table.getCellByPosition(columnindex, rowindex);
Assert.assertEquals("", fcell.getStringValue());
String expectedString = "hello world";
fcell.setStringValue(expectedString);
saveods();
// reload
loadOutputSpreadsheet();
table = odsdoc.getTableByName("Sheet1");
fcell = table.getCellByPosition(columnindex, rowindex);
Assert.assertEquals(expectedString, fcell.getStringValue());
}
@Test
public void testGetSetBooleanValue() {
int rowindex = 5, columnindex = 5;
OdfTable table = odsdoc.getTableByName("Sheet1");
OdfTableCell fcell = table.getCellByPosition(columnindex, rowindex);
boolean expected = false;
fcell.setBooleanValue(expected);
saveods();
// reload
loadOutputSpreadsheet();
table = odsdoc.getTableByName("Sheet1");
fcell = table.getCellByPosition(columnindex, rowindex);
Assert.assertFalse(fcell.getBooleanValue());
}
@Test
public void testGetSetCurrencyValue() {
int rowindex = 5, columnindex = 5;
OdfTable table = odsdoc.getTableByName("Sheet1");
OdfTableCell fcell = table.getCellByPosition(columnindex, rowindex);
fcell.setValueType("currency");
fcell.setCurrencyFormat("$", "#,##0.00");
Double actualValue = fcell.getCurrencyValue();
Assert.assertNull(actualValue);
double expected = 100.00;
boolean illegalArgumentFlag = false;
try {
fcell.setCurrencyValue(expected, null);
} catch (IllegalArgumentException ie) {
if ("currency shouldn't be null.".equals(ie.getMessage())) {
illegalArgumentFlag = true;
}
}
Assert.assertTrue(illegalArgumentFlag);
fcell.setCurrencyValue(expected, "USD");
saveods();
// reload
loadOutputSpreadsheet();
table = odsdoc.getTableByName("Sheet1");
fcell = table.getCellByPosition(columnindex, rowindex);
Assert.assertEquals(expected, fcell.getCurrencyValue());
}
@Test
public void testGetSetCurrencyDesc() {
int rowindex = 1, columnindex = 2;
OdfTable table = odsdoc.getTableByName("Sheet1");
OdfTableCell fcell = table.getCellByPosition(columnindex, rowindex);
boolean illegalArgumentFlag = false;
try {
fcell.setCurrencyCode(null);
} catch (IllegalArgumentException ie) {
if ("Currency code of cell should not be null.".equals(ie.getMessage())) {
illegalArgumentFlag = true;
}
}
Assert.assertTrue(illegalArgumentFlag);
fcell = table.getCellByPosition(columnindex, rowindex);
String expected = "USD";
fcell.setCurrencyCode(expected);
saveods();
// reload
loadOutputSpreadsheet();
table = odsdoc.getTableByName("Sheet1");
fcell = table.getCellByPosition(columnindex, rowindex);
Assert.assertEquals(expected, fcell.getCurrencyCode());
}
@Test
public void testGetSetPercentageValue() {
int rowindex = 5, columnindex = 5;
OdfTable table = odsdoc.getTableByName("Sheet1");
OdfTableCell fcell = table.getCellByPosition(columnindex, rowindex);
double expected = 56.98;
fcell.setPercentageValue(expected);
saveods();
// reload
loadOutputSpreadsheet();
table = odsdoc.getTableByName("Sheet1");
fcell = table.getCellByPosition(columnindex, rowindex);
Assert.assertEquals(expected, fcell.getPercentageValue());
}
@Test
public void testGetSetTimeValue() {
int rowindex = 0, columnindex = 4;
OdfTable table = odsdoc.getTableByName("Sheet1");
OdfTableCell fcell = table.getCellByPosition(columnindex, rowindex);
boolean illegalArgumentFlag = false;
try {
fcell.setTimeValue(null);
} catch (IllegalArgumentException ie) {
if ("time shouldn't be null.".equals(ie.getMessage())) {
illegalArgumentFlag = true;
}
}
Assert.assertTrue(illegalArgumentFlag);
Calendar expected = Calendar.getInstance();
fcell.setTimeValue(expected);
saveods();
// reload
loadOutputSpreadsheet();
table = odsdoc.getTableByName("Sheet1");
fcell = table.getCellByPosition(columnindex, rowindex);
SimpleDateFormat simpleFormat = new SimpleDateFormat(
"'PT'HH'H'mm'M'ss'S'");
String expectedString = simpleFormat.format(expected.getTime());
String targetString = simpleFormat.format(fcell.getTimeValue().getTime());
Assert.assertEquals(expectedString, targetString);
}
@Test
public void testGetSetFormula() {
int rowindex = 1, columnindex = 10;
OdfTable table = odsdoc.getTableByName("Sheet1");
OdfTableCell fcell = table.getCellByPosition(columnindex, rowindex);
boolean illegalArgumentFlag = false;
try {
fcell.setFormula(null);
} catch (IllegalArgumentException ie) {
if ("formula shouldn't be null.".equals(ie.getMessage())) {
illegalArgumentFlag = true;
}
}
Assert.assertTrue(illegalArgumentFlag);
String expected = "of:=[.I2]*4";
fcell.setFormula(expected);
saveods();
// reload
loadOutputSpreadsheet();
table = odsdoc.getTableByName("Sheet1");
fcell = table.getCellByPosition(columnindex, rowindex);
Assert.assertEquals(expected, fcell.getFormula());
}
/**
* This test case is used to check whether the new created cell uses correct
* style settings.</br>
* ODFDOM allows users to set if cell styles are inherited or not whenever a
* new cell is added to the table. The default setting is using inheritance.
* In this condition, the style of new column is same with the
* last column before the inserted position, while the style of new row
* is same with the last row before the inserted position.<br/>
* This feature setting will influence <code>appendRow()</code>,
* <code>appendColumn()</code>, <code>appendRows()</code>,
* <code>appendColumns()</code>, <code>insertRowsBefore()</code> and
* <code>insertColumnsBefore()</code>. In default setting condition, the
* style name of new created cells after these methods called should be
* "ce1" which is inherited from preceding cell. <br/>
* But after setting cell style inheritance false, these new created cells'
* style name should be "Default", which is not inherited from preceding
* one.<br/>
* For <code>getCellByPosition()</code>,
* <code>getCellRangeByPosition()</code>, <code>getCellRangeByName()</code>,
* <code>getRowByIndex()</code> and <code>getColumnByIndex()</code>, if need
* automatically expand cells, it will return empty cell(s) without any
* style settings. Inheritance setting have no effect on them, so for cells
* which created after these methods are called, should have "Default" style
* name.
*/
@Test
public void testGetStyleName() {
try {
odsstyle = (OdfSpreadsheetDocument) OdfSpreadsheetDocument.loadDocument(ResourceUtilities.getAbsolutePath(SAMPLE_STYLE_SPREADSHEET
+ ".ods"));
int rowindex = 1, columnindex = 0;
OdfTable table = odsstyle.getTableByName("Sheet1");
OdfTableCell fcell = table.getCellByPosition(columnindex, rowindex);
String expected = "ce1";
Assert.assertEquals(expected, fcell.getStyleName());
// the default setting is inherited, so for new row,
// the cell style name should be "ce1".
//test appendColumn
table.appendColumn();
int columnCount = table.getColumnCount();
fcell = table.getCellByPosition(columnCount - 1, rowindex);
Assert.assertEquals(expected, fcell.getStyleName());
//test appendRow
table.appendRow();
int rowCount = table.getRowCount();
fcell = table.getCellByPosition(columnindex, rowCount - 1);
Assert.assertEquals(expected, fcell.getStyleName());
//test insertRowsBefore
table.insertRowsBefore(rowindex + 1, 1);
fcell = table.getCellByPosition(columnindex, rowindex + 1);
Assert.assertEquals(expected, fcell.getStyleName());
//test insertColumnsBefore
table.insertColumnsBefore(columnindex + 1, 1);
fcell = table.getCellByPosition(columnindex + 1, rowindex);
Assert.assertEquals(expected, fcell.getStyleName());
//test appendColumns
table.appendColumns(2);
columnCount = table.getColumnCount();
fcell = table.getCellByPosition(columnCount - 1, rowindex);
Assert.assertEquals(expected, fcell.getStyleName());
//test appendRows
table.appendRows(2);
rowCount = table.getRowCount();
fcell = table.getCellByPosition(columnindex, rowCount - 1);
Assert.assertEquals(expected, fcell.getStyleName());
// for getCellByPosition the return cell style should be "Default".
fcell = table.getCellByPosition(table.getColumnCount() + 1, table.getRowCount() + 1);
Assert.assertEquals("Default", fcell.getStyleName());
odsstyle.close();
// change setting is not inherited, so for new row,
// the cell style name should be "Default".
odsstyle = (OdfSpreadsheetDocument) OdfSpreadsheetDocument.loadDocument(ResourceUtilities.getAbsolutePath(SAMPLE_STYLE_SPREADSHEET
+ ".ods"));
rowindex = 1;
columnindex = 0;
table = odsstyle.getTableByName("Sheet1");
table.setCellStyleInheritance(false);
expected = "Default";
table.appendColumn();
columnCount = table.getColumnCount();
fcell = table.getCellByPosition(columnCount - 1, rowindex);
Assert.assertEquals(expected, fcell.getStyleName());
//test appendRow
table.appendRow();
rowCount = table.getRowCount();
fcell = table.getCellByPosition(columnindex, rowCount - 1);
Assert.assertEquals(expected, fcell.getStyleName());
//test insertRowsBefore
table.insertRowsBefore(rowindex + 1, 1);
fcell = table.getCellByPosition(columnindex, rowindex + 1);
Assert.assertEquals(expected, fcell.getStyleName());
//test insertColumnsBefore
table.insertColumnsBefore(columnindex + 1, 1);
fcell = table.getCellByPosition(columnindex + 1, rowindex);
//Assert.assertEquals(expected, fcell.getStyleName());
//test appendColumns
table.appendColumns(2);
columnCount = table.getColumnCount();
fcell = table.getCellByPosition(columnCount - 1, rowindex);
Assert.assertEquals(expected, fcell.getStyleName());
//test appendRows
table.appendRows(2);
rowCount = table.getRowCount();
fcell = table.getCellByPosition(columnindex, rowCount - 1);
Assert.assertEquals(expected, fcell.getStyleName());
// for getCellByPosition the return cell style should be "Default".
fcell = table.getCellByPosition(table.getColumnCount(), table.getRowCount());
Assert.assertEquals("Default", fcell.getStyleName());
odsstyle.close();
} catch (Exception e) {
Assert.fail(e.toString());
}
}
@Test
public void testGetTableColumn() {
int rowindex = 2, columnindex = 0;
OdfTable table = odsdoc.getTableByName("Sheet1");
OdfTableCell fcell = table.getCellByPosition(columnindex, rowindex);
Assert.assertNotNull(fcell.getTableColumn());
Assert.assertEquals(columnindex, fcell.getTableColumn().getColumnIndex());
}
@Test
public void testGetTableRow() {
int rowindex = 2, columnindex = 0;
OdfTable table = odsdoc.getTableByName("Sheet1");
OdfTableCell fcell = table.getCellByPosition(columnindex, rowindex);
Assert.assertNotNull(fcell.getTableRow());
Assert.assertEquals(rowindex, fcell.getTableRow().getRowIndex());
}
@Test
public void testRemoveContent() {
int rowindex = 5, columnindex = 8;
OdfTable table = odsdoc.getTableByName("Sheet1");
OdfTableCell fcell = table.getCellByPosition(columnindex, rowindex);
Assert.assertTrue(fcell.mCellElement.getChildNodes().getLength() > 0);
fcell.removeContent();
saveods();
// reload
loadOutputSpreadsheet();
table = odsdoc.getTableByName("Sheet1");
fcell = table.getCellByPosition(columnindex, rowindex);
Assert.assertEquals(0, fcell.mCellElement.getChildNodes().getLength());
}
@Test
public void testRemoveTextContent() throws Exception {
int rowindex = 5, columnindex = 8;
OdfTable table = odsdoc.getTableByName("Sheet1");
OdfTableCell fcell = table.getCellByPosition(columnindex, rowindex);
// how to test?
fcell.removeContent();
Assert.assertEquals(0, fcell.mCellElement.getChildNodes().getLength());
fcell.setDisplayText("hello");
DrawFrameElement drawEle = new DrawFrameElement(odsdoc.getContentDom());
DrawImageElement imageEle = drawEle.newDrawImageElement();
fcell.mCellElement.appendChild(drawEle);
Assert.assertEquals(2, fcell.mCellElement.getChildNodes().getLength());
fcell.removeTextContent();
saveods();
// reload
loadOutputSpreadsheet();
table = odsdoc.getTableByName("Sheet1");
fcell = table.getCellByPosition(columnindex, rowindex);
Assert.assertEquals(1, fcell.mCellElement.getChildNodes().getLength());
}
@Test
public void testGetSetDisplayText() {
int rowindex = 5, columnindex = 5;
OdfTable table = odsdoc.getTableByName("Sheet1");
OdfTableCell fcell = table.getCellByPosition(columnindex, rowindex);
String expected = "display text";
// Assert.assertEquals(expected, fcell.getDisplayText());
fcell.setDisplayText(expected);
saveods();
// reload
loadOutputSpreadsheet();
table = odsdoc.getTableByName("Sheet1");
fcell = table.getCellByPosition(columnindex, rowindex);
Assert.assertEquals(expected, fcell.getDisplayText());
}
@Test
public void testGetSetFormatString() {
int rowindex = 3, columnindex = 0;
OdfTable table = odsdoc.getTableByName("Sheet1");
OdfTableCell fcell = table.getCellByPosition(columnindex, rowindex);
boolean illegalArgumentFlag = false;
try {
fcell.setFormatString(null);
} catch (IllegalArgumentException ie) {
if ("formatStr shouldn't be null.".equals(ie.getMessage())) {
illegalArgumentFlag = true;
}
}
Assert.assertTrue(illegalArgumentFlag);
// float format string
String expected = "#0.0";
fcell.setFormatString(expected);
// date format string
// String expected="MMM d, yy";
// String expected="yyyy-MM-dd";
saveods();
// reload
loadOutputSpreadsheet();
table = odsdoc.getTableByName("Sheet1");
fcell = table.getCellByPosition(columnindex, rowindex);
Assert.assertEquals(expected, fcell.getFormatString());
}
@Test
public void testGetCurrencySymbol() {
OdfTable table = odsdoc.getTableByName("Sheet1");
OdfTableCell cell1 = table.getCellByPosition("C2");
Assert.assertEquals("$", cell1.getCurrencySymbol());
OdfTableCell cell2 = table.getCellByPosition("C3");
Assert.assertEquals("CNY", cell2.getCurrencySymbol());
}
@Test
public void testGetSetCurrencyFormat() {
OdfTable table = odsdoc.getTableByName("Sheet1");
String[] formats = {"$#,##0.00", "#,##0.00 CNY", "$#,##0.0"};
OdfTableCell cell = table.getCellByPosition("J1");
boolean illegalArgumentFlag = false;
try {
cell.setCurrencyFormat(null, formats[0]);
} catch (IllegalArgumentException ie) {
if ("currencySymbol shouldn't be null.".equals(ie.getMessage())) {
illegalArgumentFlag = true;
}
}
Assert.assertTrue(illegalArgumentFlag);
try {
cell.setCurrencyFormat("$", null);
} catch (IllegalArgumentException ie) {
if ("format shouldn't be null.".equals(ie.getMessage())) {
illegalArgumentFlag = true;
}
}
Assert.assertTrue(illegalArgumentFlag);
cell.setCurrencyValue(32.12, "USD");
cell.setCurrencyFormat("$", formats[0]);
cell = table.getCellByPosition("J2");
cell.setCurrencyValue(new Double(32), "CNY");
cell.setCurrencyFormat("CNY", formats[1]);
cell = table.getCellByPosition("J3");
cell.setCurrencyValue(-32.12, "USD");
cell.setCurrencyFormat("$", formats[2]);
saveods();
// reload
loadOutputSpreadsheet();
table = odsdoc.getTableByName("Sheet1");
for (int i = 1; i <= 3; i++) {
OdfTableCell newcell = table.getCellByPosition("J" + i);
Assert.assertEquals(formats[i - 1], newcell.getFormatString());
}
}
@Test
public void testSetDefaultCellStyle() {
OdfSpreadsheetDocument outputDocument;
OdfContentDom contentDom; // the document object model for content.xml
OdfStylesDom stylesDom; // the document object model for styles.xml
// the office:automatic-styles element in content.xml
OdfOfficeAutomaticStyles contentAutoStyles;
// the office:styles element in styles.xml
OdfOfficeStyles stylesOfficeStyles;
OdfStyle style;
String noaaDateStyleName;
String noaaTempStyleName;
try {
outputDocument = OdfSpreadsheetDocument.newSpreadsheetDocument();
contentDom = outputDocument.getContentDom();
contentAutoStyles = contentDom.getOrCreateAutomaticStyles();
OdfNumberDateStyle dateStyle = new OdfNumberDateStyle(contentDom,
"yyyy-MM-dd", "numberDateStyle", null);
OdfNumberStyle numberStyle = new OdfNumberStyle(contentDom,
"#0.00", "numberTemperatureStyle");
contentAutoStyles.appendChild(dateStyle);
contentAutoStyles.appendChild(numberStyle);
style = contentAutoStyles.newStyle(OdfStyleFamily.TableCell);
noaaDateStyleName = style.getStyleNameAttribute();
style.setStyleDataStyleNameAttribute("numberDateStyle");
// and for time cells
style = contentAutoStyles.newStyle(OdfStyleFamily.TableCell);
noaaTempStyleName = style.getStyleNameAttribute();
style.setStyleDataStyleNameAttribute("numberTemperatureStyle");
style.setProperty(StyleParagraphPropertiesElement.TextAlign, "end");
OdfTable table = OdfTable.newTable(outputDocument);
List<OdfTableColumn> columns = table.insertColumnsBefore(0, 3);
OdfTableColumn column = columns.get(0);
column.setDefaultCellStyle(
contentAutoStyles.getStyle(noaaDateStyleName,
OdfStyleFamily.TableCell));
OdfTableCell aCell = column.getCellByIndex(0);
aCell.setValueType("date");
String format = aCell.getFormatString();
Assert.assertEquals("yyyy-MM-dd", format);
List<OdfTableRow> rows = table.insertRowsBefore(0, 1);
OdfTableRow row = rows.get(0);
row.setDefaultCellStyle(contentAutoStyles.getStyle(noaaTempStyleName,
OdfStyleFamily.TableCell));
OdfTableCell bCell = row.getCellByIndex(0);
bCell.setValueType("float");
String bformat = bCell.getFormatString();
Assert.assertEquals("#0.00", bformat);
Assert.assertEquals("end", bCell.getHorizontalAlignment());
} catch (Exception e) {
Logger.getLogger(TableCellTest.class.getName()).log(Level.SEVERE, e.getMessage(), e);
Assert.fail();
}
}
@Test
public void testGetFromEmptyDateValue() throws Exception {
OdfSpreadsheetDocument doc = OdfSpreadsheetDocument.newSpreadsheetDocument();
OdfTable table = OdfTable.newTable(doc);
OdfTableCell dateCell = table.appendRow().getCellByIndex(0);
dateCell.setValueType(OfficeValueTypeAttribute.Value.DATE.toString());
Assert.assertNull(dateCell.getDateValue());
}
@Test
public void testGetFromEmptyTimeValue() throws Exception {
OdfSpreadsheetDocument doc = OdfSpreadsheetDocument.newSpreadsheetDocument();
OdfTable table = OdfTable.newTable(doc);
OdfTableCell timeCell = table.appendRow().getCellByIndex(0);
timeCell.setValueType(OfficeValueTypeAttribute.Value.TIME.toString());
Assert.assertNull(timeCell.getTimeValue());
}
}