| /* |
| 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.simple.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.dom.element.table.TableCoveredTableCellElement; |
| import org.odftoolkit.odfdom.incubator.doc.text.OdfTextParagraph; |
| import org.odftoolkit.simple.SpreadsheetDocument; |
| import org.odftoolkit.simple.TextDocument; |
| import org.odftoolkit.simple.common.TextExtractor; |
| import org.odftoolkit.simple.utils.ResourceUtilities; |
| import org.w3c.dom.NodeList; |
| |
| public class TableCellRangeTest { |
| |
| final String filename = "TestSpreadsheetTable"; |
| final String odtfilename = "TestTextTable"; |
| SpreadsheetDocument odsdoc; |
| TextDocument odtdoc; |
| Table odsTable, odtTable; |
| |
| @Before |
| public void setUp() { |
| try { |
| odsdoc = (SpreadsheetDocument) SpreadsheetDocument.loadDocument(ResourceUtilities |
| .getTestResourceAsStream(filename + ".ods")); |
| odtdoc = (TextDocument) TextDocument.loadDocument(ResourceUtilities.getTestResourceAsStream(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 |
| Table table1 = odtdoc.getTableByName("Table1"); |
| // get the first two cell |
| CellRange cellRange = table1.getCellRangeByPosition(0, 0, 1, 0); |
| cellRange.merge(); |
| Cell cell = cellRange.getCellByPosition(0, 0); |
| saveodt("MergeTwoCell"); |
| Assert.assertEquals(cell.getDisplayText(), "cell1\ncell2"); |
| try { |
| TextDocument saveddoc = (TextDocument) TextDocument.loadDocument(ResourceUtilities |
| .getTestResourceAsStream(odtfilename + "MergeTwoCell.odt")); |
| Table savedTable1 = saveddoc.getTableByName("Table1"); |
| // get the cell range which the first cell is the covered cell. |
| // so the cell range will be enlarged |
| CellRange savedCellRange = savedTable1.getCellRangeByPosition(1, 0, 2, 0); |
| savedCellRange.merge(); |
| Assert.assertTrue(savedCellRange.getColumnNumber() == 3); |
| Cell savedCell = savedCellRange.getCellByPosition(0, 0); |
| NodeList paraList = savedCell.getOdfElement().getChildNodes(); |
| Assert.assertTrue(paraList.item(2) instanceof OdfTextParagraph); |
| Assert.assertEquals(TextExtractor.getText((OdfTextParagraph) 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 { |
| TextDocument saveddoc = (TextDocument) TextDocument.loadDocument(ResourceUtilities |
| .getTestResourceAsStream(odtfilename + "MergeTwoCell.odt")); |
| Table savedTable1 = saveddoc.getTableByName("Table1"); |
| // get the cell range which the first cell is the covered cell. |
| // so the cell range will be enlarged |
| CellRange savedCellRange = savedTable1.getCellRangeByPosition(0, 0, 0, 1); |
| savedCellRange.merge(); |
| Assert.assertTrue(savedCellRange.getColumnNumber() == 2); |
| Assert.assertTrue(savedCellRange.getRowNumber() == 2); |
| Cell 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() { |
| Table table1 = odtdoc.getTableByName("Table1"); |
| // merge whole table |
| CellRange 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 |
| Table table1 = odtdoc.getTableByName("Table1"); |
| CellRange firstColumn = table1.getCellRangeByPosition(0, 0, 0, table1.getRowCount() - 1); |
| firstColumn.merge(); |
| Cell cell = firstColumn.getCellByPosition(0, 2); |
| Cell firstCell = firstColumn.getCellByPosition(0, 0); |
| Assert.assertTrue(cell.getOwnerTableCell().equals(firstCell)); |
| saveodt("MergeFirstColumn"); |
| try { |
| TextDocument saveddoc = (TextDocument) TextDocument.loadDocument(ResourceUtilities |
| .getTestResourceAsStream(odtfilename + "MergeFirstColumn.odt")); |
| Table savedTable = saveddoc.getTableByName("Table1"); |
| CellRange firstTwoColumn = savedTable.getCellRangeByPosition(0, 0, 1, savedTable.getRowCount() - 1); |
| firstTwoColumn.merge(); |
| Cell cell1 = firstTwoColumn.getCellByPosition(0, 2); |
| Cell 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 |
| Table table1 = odtdoc.getTableByName("Table1"); |
| int rowCount = table1.getRowCount(); |
| CellRange 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 |
| Table sheet1 = odsdoc.getTableByName("Sheet1"); |
| CellRange cellRange = sheet1.getCellRangeByPosition(28, 0, 28, 5); |
| cellRange.setCellRangeName("test"); |
| cellRange.merge(); |
| CellRange cellRange1 = sheet1.getCellRangeByPosition("$E1", "$E6"); |
| cellRange1.setCellRangeName("TimeCellRange"); |
| cellRange1.merge(); |
| |
| saveods("CellRangeName"); |
| try { |
| SpreadsheetDocument saveddos = (SpreadsheetDocument) SpreadsheetDocument.loadDocument(ResourceUtilities |
| .getTestResourceAsStream(filename + "CellRangeName.ods")); |
| Table savedSheet = saveddos.getTableByName("Sheet1"); |
| CellRange namedCellRange = savedSheet.getCellRangeByName("TimeCellRange"); |
| Cell 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 { |
| SpreadsheetDocument ods = SpreadsheetDocument.newSpreadsheetDocument(); |
| // the doc contain the table which only have one column and one row |
| // element |
| Table table = ods.getTableByName("Sheet1"); |
| int nCols = table.getColumnCount(); |
| int nRows = table.getRowCount(); |
| Assert.assertTrue(nCols == 1); |
| Assert.assertTrue(nRows == 1); |
| CellRange cellRange = table.getCellRangeByPosition("A1", "E1"); |
| Cell cell = table.getCellByPosition("A1"); |
| cell.setStringValue("Merge A1:E1"); |
| cellRange.merge(); |
| Table table2 = Table.newTable(ods, 1, 1); |
| table2.setTableName("Sheet2"); |
| CellRange cellRange2 = table2.getCellRangeByPosition("A1", "F3"); |
| Cell 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); |
| TextDocument odt = TextDocument.newTextDocument(); |
| Table swTable = Table.newTable(odt, 1, 5); |
| CellRange swCellRange = swTable.getCellRangeByPosition("A1", "E2"); |
| Cell 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() + "'"); |
| } |
| } |
| } |