blob: 6fa3c176dbaa24820963235079050e3e26126b08 [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.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.element.table.TableCoveredTableCellElement;
import org.odftoolkit.odfdom.incubator.doc.text.OdfTextParagraph;
import org.odftoolkit.odfdom.incubator.doc.text.OdfWhitespaceProcessor;
import org.odftoolkit.odfdom.utils.ResourceUtilities;
import org.w3c.dom.NodeList;
public class TableCellRangeTest {
final String filename = "TestSpreadsheetTable";
final String odtfilename = "TestTextTable";
OdfSpreadsheetDocument odsdoc;
OdfTextDocument odtdoc;
OdfTable odsTable, odtTable;
@Before
public void setUp() {
try {
odsdoc = (OdfSpreadsheetDocument) OdfSpreadsheetDocument.loadDocument(ResourceUtilities.getAbsolutePath(filename + ".ods"));
odtdoc = (OdfTextDocument) OdfTextDocument.loadDocument(ResourceUtilities.getAbsolutePath(odtfilename + ".odt"));
} catch (Exception e) {
Logger.getLogger(TableCellRangeTest.class.getName()).log(Level.SEVERE, e.getMessage(), e);
Assert.fail("Failed with " + e.getClass().getName() + ": '" + e.getMessage() + "'");
}
}
@Test
public void testTextCellMerge() {
//get cell range, then merge
OdfTable table1 = odtdoc.getTableByName("Table1");
//get the first two cell
OdfTableCellRange cellRange = table1.getCellRangeByPosition(0, 0, 1, 0);
cellRange.merge();
OdfTableCell cell = cellRange.getCellByPosition(0, 0);
Assert.assertEquals(cell.getDisplayText(), "cell1cell2");
saveodt("MergeTwoCell");
try {
OdfTextDocument saveddoc = (OdfTextDocument) OdfTextDocument.loadDocument(ResourceUtilities.getAbsolutePath(odtfilename + "MergeTwoCell.odt"));
OdfTable savedTable1 = saveddoc.getTableByName("Table1");
//get the cell range which the first cell is the covered cell.
//so the cell range will be enlarged
OdfTableCellRange savedCellRange = savedTable1.getCellRangeByPosition(1, 0, 2, 0);
savedCellRange.merge();
Assert.assertTrue(savedCellRange.getColumnNumber() == 3);
OdfTableCell savedCell = savedCellRange.getCellByPosition(0, 0);
NodeList paraList = savedCell.getOdfElement().getChildNodes();
OdfWhitespaceProcessor textProcessor = new OdfWhitespaceProcessor();
Assert.assertTrue(paraList.item(2) instanceof OdfTextParagraph);
Assert.assertEquals(textProcessor.getText(paraList.item(2)),"0.00");
saveddoc.save(ResourceUtilities.newTestOutputFile(odtfilename + "MergeCoveredCell.odt"));
} catch (Exception e) {
Logger.getLogger(TableCellRangeTest.class.getName()).log(Level.SEVERE, e.getMessage(), e);
Assert.fail("Failed with " + e.getClass().getName() + ": '" + e.getMessage() + "'");
}
try {
OdfTextDocument saveddoc = (OdfTextDocument) OdfTextDocument.loadDocument(ResourceUtilities.getAbsolutePath(odtfilename + "MergeTwoCell.odt"));
OdfTable savedTable1 = saveddoc.getTableByName("Table1");
//get the cell range which the first cell is the covered cell.
//so the cell range will be enlarged
OdfTableCellRange savedCellRange = savedTable1.getCellRangeByPosition(0, 0, 0, 1);
savedCellRange.merge();
Assert.assertTrue(savedCellRange.getColumnNumber() == 2);
Assert.assertTrue(savedCellRange.getRowNumber() == 2);
OdfTableCell savedCell = savedCellRange.getCellByPosition(0, 1);
Assert.assertTrue(savedCell.getOdfElement() instanceof TableCoveredTableCellElement);
saveddoc.save(ResourceUtilities.newTestOutputFile(odtfilename + "MergeCoveredCell2.odt"));
} catch (Exception e) {
Logger.getLogger(TableCellRangeTest.class.getName()).log(Level.SEVERE, e.getMessage(), e);
Assert.fail("Failed with " + e.getClass().getName() + ": '" + e.getMessage() + "'");
}
}
/////////////////////////////////////////
//issue: removeColumnByIndex removeRowByIndex removeCellByIndex
@Test
public void testTextTableMerge() {
OdfTable table1 = odtdoc.getTableByName("Table1");
//merge whole table
OdfTableCellRange cellRange = table1.getCellRangeByPosition(0, 0, table1.getColumnCount() - 1, table1.getRowCount() - 1);
cellRange.merge();
Assert.assertEquals(table1.getColumnCount(), 1);
Assert.assertEquals(table1.getRowCount(), 1);
saveodt("MergeTable");
}
@Test
public void testTextColumnMerge() {
//merge first column
OdfTable table1 = odtdoc.getTableByName("Table1");
OdfTableCellRange firstColumn = table1.getCellRangeByPosition(0, 0, 0, table1.getRowCount() - 1);
firstColumn.merge();
OdfTableCell cell = firstColumn.getCellByPosition(0, 2);
OdfTableCell firstCell = firstColumn.getCellByPosition(0, 0);
Assert.assertTrue(cell.getOwnerTableCell().equals(firstCell));
saveodt("MergeFirstColumn");
try {
OdfTextDocument saveddoc = (OdfTextDocument) OdfTextDocument.loadDocument(ResourceUtilities.getAbsolutePath(odtfilename + "MergeFirstColumn.odt"));
OdfTable savedTable = saveddoc.getTableByName("Table1");
OdfTableCellRange firstTwoColumn = savedTable.getCellRangeByPosition(0, 0, 1, savedTable.getRowCount() - 1);
firstTwoColumn.merge();
OdfTableCell cell1 = firstTwoColumn.getCellByPosition(0, 2);
OdfTableCell firstCell1 = firstTwoColumn.getCellByPosition(0, 0);
Assert.assertTrue(cell1.getOwnerTableCell().equals(firstCell1));
saveddoc.save(ResourceUtilities.newTestOutputFile(odtfilename + "MergeFirstTwoColumn.odt"));
} catch (Exception e) {
Logger.getLogger(TableCellRangeTest.class.getName()).log(Level.SEVERE, e.getMessage(), e);
Assert.fail("Failed with " + e.getClass().getName() + ": '" + e.getMessage() + "'");
}
}
@Test
public void testTextRowMerge() {
//merge first two row
OdfTable table1 = odtdoc.getTableByName("Table1");
int rowCount = table1.getRowCount();
OdfTableCellRange firstTwoRow = table1.getCellRangeByPosition(0, 0, table1.getColumnCount() - 1, 1);
firstTwoRow.merge();
Assert.assertTrue(rowCount == (table1.getRowCount() + 1));
saveodt("MergeFirstTwoRow");
}
@Test
public void testSpreadSheetMerge() {
//get cell range, set name
OdfTable sheet1 = odsdoc.getTableByName("Sheet1");
OdfTableCellRange cellRange = sheet1.getCellRangeByPosition(28, 0, 28, 5);
cellRange.setCellRangeName("test");
cellRange.merge();
OdfTableCellRange cellRange1 = sheet1.getCellRangeByPosition("$E1", "$E6");
cellRange1.setCellRangeName("TimeCellRange");
cellRange1.merge();
saveods("CellRangeName");
try {
OdfSpreadsheetDocument saveddos = (OdfSpreadsheetDocument) OdfSpreadsheetDocument.loadDocument(ResourceUtilities.getAbsolutePath(filename + "CellRangeName.ods"));
OdfTable savedSheet = saveddos.getTableByName("Sheet1");
OdfTableCellRange namedCellRange = savedSheet.getCellRangeByName("TimeCellRange");
OdfTableCell cell = namedCellRange.getCellByPosition("A1");
Assert.assertTrue(cell.getRowSpannedNumber() == 6);
} catch (Exception e) {
Logger.getLogger(TableCellRangeTest.class.getName()).log(Level.SEVERE, e.getMessage(), e);
Assert.fail("Failed with " + e.getClass().getName() + ": '" + e.getMessage() + "'");
}
}
@Test
public void testMergeExpandCellRange() {
try {
OdfSpreadsheetDocument ods = OdfSpreadsheetDocument
.newSpreadsheetDocument();
// the doc contain the table which only have one column and one row
// element
OdfTable table = ods.getTableByName("Sheet1");
int nCols = table.getColumnCount();
int nRows = table.getRowCount();
Assert.assertTrue(nCols == 1);
Assert.assertTrue(nRows == 1);
OdfTableCellRange cellRange = table.getCellRangeByPosition("A1","E1");
OdfTableCell cell = table.getCellByPosition("A1");
cell.setStringValue("Merge A1:E1");
cellRange.merge();
OdfTable table2 = OdfTable.newTable(ods, 1, 1);
table2.setTableName("Sheet2");
OdfTableCellRange cellRange2 = table2.getCellRangeByPosition("A1","F3");
OdfTableCell cell2 = table2.getCellByPosition("A1");
cell2.setStringValue("Merge A1:F3");
cellRange2.merge();
ods.save(ResourceUtilities.newTestOutputFile(filename + "MergeExpandCell.ods"));
table = ods.getTableByName("Sheet1");
Assert.assertTrue(table.getColumnCount() == 5);
Assert.assertTrue(table.getRowCount() == 1);
table = ods.getTableByName("Sheet2");
Assert.assertTrue(table.getColumnCount() == 6);
Assert.assertTrue(table.getRowCount() == 3);
OdfTextDocument odt = OdfTextDocument.newTextDocument();
OdfTable swTable = OdfTable.newTable(odt, 1, 5);
OdfTableCellRange swCellRange = swTable.getCellRangeByPosition("A1", "E2");
OdfTableCell swCell = swTable.getCellByPosition("E2");
swCell.setStringValue("Merge A1:E2");
swCellRange.merge();
odt.save(ResourceUtilities.newTestOutputFile(odtfilename + "MergeTextExpandCell.odt"));
swTable = odt.getTableList().get(0);
Assert.assertTrue(swTable.getColumnCount() == 1);
Assert.assertTrue(swTable.getRowCount() == 1);
} catch (Exception ex) {
Logger.getLogger(TableCellRangeTest.class.getName()).log( Level.SEVERE, ex.getMessage(), ex);
Assert.fail("Failed with " + ex.getClass().getName() + ": '" + ex.getMessage() + "'");
}
}
private void saveods(String name) {
try {
odsdoc.save(ResourceUtilities.newTestOutputFile(filename + name + ".ods"));
} catch (Exception e) {
Logger.getLogger(TableCellRangeTest.class.getName()).log(Level.SEVERE, e.getMessage(), e);
Assert.fail("Failed with " + e.getClass().getName() + ": '" + e.getMessage() + "'");
}
}
private void saveodt(String name) {
try {
odtdoc.save(ResourceUtilities.newTestOutputFile(odtfilename + name + ".odt"));
} catch (Exception e) {
Logger.getLogger(TableCellRangeTest.class.getName()).log(Level.SEVERE, e.getMessage(), e);
Assert.fail("Failed with " + e.getClass().getName() + ": '" + e.getMessage() + "'");
}
}
}