Browse Source

Close more file-handles in tests

git-svn-id: https://svn.apache.org/repos/asf/poi/trunk@1858024 13f79535-47bb-0310-9956-ffa450edef68
tags/REL_4_1_1
Dominik Stadler 5 years ago
parent
commit
bd8fab1196

+ 7
- 3
src/java/org/apache/poi/ss/formula/PlainCellCache.java View File

@@ -34,9 +34,9 @@ final class PlainCellCache {
}

public static long toBookSheetColumn(int bookIndex, int sheetIndex, int columnIndex) {
return ((bookIndex & 0xFFFFl) << 48) +
((sheetIndex & 0xFFFFl) << 32) +
((columnIndex & 0xFFFFl) << 0);
return ((bookIndex & 0xFFFFL) << 48) +
((sheetIndex & 0xFFFFL) << 32) +
((columnIndex & 0xFFFFL) << 0);
}

public Loc(long bookSheetColumn, int rowIndex) {
@@ -80,15 +80,19 @@ final class PlainCellCache {
public PlainCellCache() {
_plainValueEntriesByLoc = new HashMap<>();
}

public void put(Loc key, PlainValueCellCacheEntry cce) {
_plainValueEntriesByLoc.put(key, cce);
}

public void clear() {
_plainValueEntriesByLoc.clear();
}

public PlainValueCellCacheEntry get(Loc key) {
return _plainValueEntriesByLoc.get(key);
}

public void remove(Loc key) {
_plainValueEntriesByLoc.remove(key);
}

+ 280
- 279
src/ooxml/testcases/org/apache/poi/xssf/usermodel/TestXSSFTable.java View File

@@ -17,20 +17,6 @@

package org.apache.poi.xssf.usermodel;

import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertNotEquals;
import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertNull;
import static org.junit.Assert.assertTrue;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;

import org.apache.poi.ss.usermodel.Cell;
import org.apache.poi.ss.util.AreaReference;
import org.apache.poi.ss.util.CellReference;
@@ -43,44 +29,57 @@ import org.openxmlformats.schemas.spreadsheetml.x2006.main.CTTable;
import org.openxmlformats.schemas.spreadsheetml.x2006.main.CTTableColumn;
import org.openxmlformats.schemas.spreadsheetml.x2006.main.CTTableStyleInfo;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;

import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertNull;
import static org.junit.Assert.assertTrue;

public final class TestXSSFTable {

@Test
public void bug56274() throws IOException {
// read sample file
XSSFWorkbook wb1 = XSSFTestDataSamples.openSampleWorkbook("56274.xlsx");

// read the original sheet header order
XSSFRow row = wb1.getSheetAt(0).getRow(0);
List<String> headers = new ArrayList<>();
for (Cell cell : row) {
headers.add(cell.getStringCellValue());
try (XSSFWorkbook wb1 = XSSFTestDataSamples.openSampleWorkbook("56274.xlsx")) {

// read the original sheet header order
XSSFRow row = wb1.getSheetAt(0).getRow(0);
List<String> headers = new ArrayList<>();
for (Cell cell : row) {
headers.add(cell.getStringCellValue());
}

// save the worksheet as-is using SXSSF
File outputFile = TempFile.createTempFile("poi-56274", ".xlsx");
SXSSFWorkbook outputWorkbook = new SXSSFWorkbook(wb1);
FileOutputStream fos = new FileOutputStream(outputFile);
outputWorkbook.write(fos);
fos.close();
outputWorkbook.close();

// re-read the saved file and make sure headers in the xml are in the original order
FileInputStream fis = new FileInputStream(outputFile);
XSSFWorkbook wb2 = new XSSFWorkbook(fis);
fis.close();
CTTable ctTable = wb2.getSheetAt(0).getTables().get(0).getCTTable();
CTTableColumn[] ctTableColumnArray = ctTable.getTableColumns().getTableColumnArray();

assertEquals("number of headers in xml table should match number of header cells in worksheet",
headers.size(), ctTableColumnArray.length);
for (int i = 0; i < headers.size(); i++) {
assertEquals("header name in xml table should match number of header cells in worksheet",
headers.get(i), ctTableColumnArray[i].getName());
}
assertTrue(outputFile.delete());
wb2.close();
}

// save the worksheet as-is using SXSSF
File outputFile = TempFile.createTempFile("poi-56274", ".xlsx");
SXSSFWorkbook outputWorkbook = new SXSSFWorkbook(wb1);
FileOutputStream fos = new FileOutputStream(outputFile);
outputWorkbook.write(fos);
fos.close();
outputWorkbook.close();

// re-read the saved file and make sure headers in the xml are in the original order
FileInputStream fis = new FileInputStream(outputFile);
XSSFWorkbook wb2 = new XSSFWorkbook(fis);
fis.close();
CTTable ctTable = wb2.getSheetAt(0).getTables().get(0).getCTTable();
CTTableColumn[] ctTableColumnArray = ctTable.getTableColumns().getTableColumnArray();

assertEquals("number of headers in xml table should match number of header cells in worksheet",
headers.size(), ctTableColumnArray.length);
for (int i = 0; i < headers.size(); i++) {
assertEquals("header name in xml table should match number of header cells in worksheet",
headers.get(i), ctTableColumnArray[i].getName());
}
assertTrue(outputFile.delete());
wb2.close();
wb1.close();
}

@Test
@@ -119,234 +118,234 @@ public final class TestXSSFTable {

@Test
public void findColumnIndex() throws IOException {
XSSFWorkbook wb = XSSFTestDataSamples.openSampleWorkbook("StructuredReferences.xlsx");

XSSFTable table = wb.getTable("\\_Prime.1");
assertNotNull(table);
assertEquals("column header has special escaped characters",
0, table.findColumnIndex("calc='#*'#"));
assertEquals(1, table.findColumnIndex("Name"));
assertEquals(2, table.findColumnIndex("Number"));
try (XSSFWorkbook wb = XSSFTestDataSamples.openSampleWorkbook("StructuredReferences.xlsx")) {

assertEquals("case insensitive", 2, table.findColumnIndex("NuMbEr"));
XSSFTable table = wb.getTable("\\_Prime.1");
assertNotNull(table);
assertEquals("column header has special escaped characters",
0, table.findColumnIndex("calc='#*'#"));
assertEquals(1, table.findColumnIndex("Name"));
assertEquals(2, table.findColumnIndex("Number"));

// findColumnIndex should return -1 if no column header name matches
assertEquals(-1, table.findColumnIndex(null));
assertEquals(-1, table.findColumnIndex(""));
assertEquals(-1, table.findColumnIndex("one"));
assertEquals("case insensitive", 2, table.findColumnIndex("NuMbEr"));

wb.close();
// findColumnIndex should return -1 if no column header name matches
assertEquals(-1, table.findColumnIndex(null));
assertEquals(-1, table.findColumnIndex(""));
assertEquals(-1, table.findColumnIndex("one"));
}
}

@Test
public void findColumnIndexIsRelativeToTableNotSheet() throws IOException {
XSSFWorkbook wb = XSSFTestDataSamples.openSampleWorkbook("DataTableCities.xlsx");
XSSFTable table = wb.getTable("SmallCity");

// Make sure that XSSFTable.findColumnIndex returns the column index relative to the first
// column in the table, not the column number in the sheet
assertEquals(0, table.findColumnIndex("City")); // column I in worksheet but 0th column in table
assertEquals(1, table.findColumnIndex("Latitude"));
assertEquals(2, table.findColumnIndex("Longitude"));
assertEquals(3, table.findColumnIndex("Population"));

wb.close();
try (XSSFWorkbook wb = XSSFTestDataSamples.openSampleWorkbook("DataTableCities.xlsx")) {
XSSFTable table = wb.getTable("SmallCity");

// Make sure that XSSFTable.findColumnIndex returns the column index relative to the first
// column in the table, not the column number in the sheet
assertEquals(0, table.findColumnIndex("City")); // column I in worksheet but 0th column in table
assertEquals(1, table.findColumnIndex("Latitude"));
assertEquals(2, table.findColumnIndex("Longitude"));
assertEquals(3, table.findColumnIndex("Population"));
}
}

@Test
public void getSheetName() throws IOException {
XSSFWorkbook wb = XSSFTestDataSamples.openSampleWorkbook("StructuredReferences.xlsx");
XSSFTable table = wb.getTable("\\_Prime.1");
assertEquals("Table", table.getSheetName());
wb.close();
try (XSSFWorkbook wb = XSSFTestDataSamples.openSampleWorkbook("StructuredReferences.xlsx")) {
XSSFTable table = wb.getTable("\\_Prime.1");
assertEquals("Table", table.getSheetName());
}
}

@Test
public void isHasTotalsRow() throws IOException {
XSSFWorkbook wb = XSSFTestDataSamples.openSampleWorkbook("StructuredReferences.xlsx");
XSSFTable table = wb.getTable("\\_Prime.1");
assertFalse(table.getTotalsRowCount() > 0);
wb.close();
try (XSSFWorkbook wb = XSSFTestDataSamples.openSampleWorkbook("StructuredReferences.xlsx")) {
XSSFTable table = wb.getTable("\\_Prime.1");
assertFalse(table.getTotalsRowCount() > 0);
}
}

@Test
public void getStartColIndex() throws IOException {
XSSFWorkbook wb = XSSFTestDataSamples.openSampleWorkbook("StructuredReferences.xlsx");
XSSFTable table = wb.getTable("\\_Prime.1");
assertEquals(0, table.getStartColIndex());
wb.close();
try (XSSFWorkbook wb = XSSFTestDataSamples.openSampleWorkbook("StructuredReferences.xlsx")) {
XSSFTable table = wb.getTable("\\_Prime.1");
assertEquals(0, table.getStartColIndex());
}
}

@Test
public void getEndColIndex() throws IOException {
XSSFWorkbook wb = XSSFTestDataSamples.openSampleWorkbook("StructuredReferences.xlsx");
XSSFTable table = wb.getTable("\\_Prime.1");
assertEquals(2, table.getEndColIndex());
wb.close();
try (XSSFWorkbook wb = XSSFTestDataSamples.openSampleWorkbook("StructuredReferences.xlsx")) {
XSSFTable table = wb.getTable("\\_Prime.1");
assertEquals(2, table.getEndColIndex());
}
}

@Test
public void getStartRowIndex() throws IOException {
XSSFWorkbook wb = XSSFTestDataSamples.openSampleWorkbook("StructuredReferences.xlsx");
XSSFTable table = wb.getTable("\\_Prime.1");
assertEquals(0, table.getStartRowIndex());
wb.close();
try (XSSFWorkbook wb = XSSFTestDataSamples.openSampleWorkbook("StructuredReferences.xlsx")) {
XSSFTable table = wb.getTable("\\_Prime.1");
assertEquals(0, table.getStartRowIndex());
}
}

@Test
public void getEndRowIndex() throws IOException {
XSSFWorkbook wb = XSSFTestDataSamples.openSampleWorkbook("StructuredReferences.xlsx");
XSSFTable table = wb.getTable("\\_Prime.1");
assertEquals(6, table.getEndRowIndex());
wb.close();
try (XSSFWorkbook wb = XSSFTestDataSamples.openSampleWorkbook("StructuredReferences.xlsx")) {
XSSFTable table = wb.getTable("\\_Prime.1");
assertEquals(6, table.getEndRowIndex());
}
}

@Test
public void getStartCellReference() throws IOException {
XSSFWorkbook wb = XSSFTestDataSamples.openSampleWorkbook("StructuredReferences.xlsx");
XSSFTable table = wb.getTable("\\_Prime.1");
assertEquals(new CellReference("A1"), table.getStartCellReference());
wb.close();
try (XSSFWorkbook wb = XSSFTestDataSamples.openSampleWorkbook("StructuredReferences.xlsx")) {
XSSFTable table = wb.getTable("\\_Prime.1");
assertEquals(new CellReference("A1"), table.getStartCellReference());
}
}

@Test
public void getEndCellReference() throws IOException {
XSSFWorkbook wb = XSSFTestDataSamples.openSampleWorkbook("StructuredReferences.xlsx");
XSSFTable table = wb.getTable("\\_Prime.1");
assertEquals(new CellReference("C7"), table.getEndCellReference());
wb.close();
try (XSSFWorkbook wb = XSSFTestDataSamples.openSampleWorkbook("StructuredReferences.xlsx")) {
XSSFTable table = wb.getTable("\\_Prime.1");
assertEquals(new CellReference("C7"), table.getEndCellReference());
}
}

@Test
public void getNumberOfMappedColumns() throws IOException {
XSSFWorkbook wb = XSSFTestDataSamples.openSampleWorkbook("StructuredReferences.xlsx");
XSSFTable table = wb.getTable("\\_Prime.1");
assertEquals(3, table.getNumberOfMappedColumns());
wb.close();
try (XSSFWorkbook wb = XSSFTestDataSamples.openSampleWorkbook("StructuredReferences.xlsx")) {
XSSFTable table = wb.getTable("\\_Prime.1");
assertEquals(3, table.getNumberOfMappedColumns());
}
}

@Test
public void getColumnCount() throws IOException {
XSSFWorkbook wb = XSSFTestDataSamples.openSampleWorkbook("StructuredReferences.xlsx");
XSSFTable table = wb.getTable("\\_Prime.1");
assertEquals(3, table.getColumnCount());
wb.close();
try (XSSFWorkbook wb = XSSFTestDataSamples.openSampleWorkbook("StructuredReferences.xlsx")) {
XSSFTable table = wb.getTable("\\_Prime.1");
assertEquals(3, table.getColumnCount());
}
}
@Test
public void getAndSetDisplayName() throws IOException {
XSSFWorkbook wb = XSSFTestDataSamples.openSampleWorkbook("StructuredReferences.xlsx");
XSSFTable table = wb.getTable("\\_Prime.1");
assertEquals("\\_Prime.1", table.getDisplayName());

table.setDisplayName(null);
assertNull(table.getDisplayName());
assertEquals("\\_Prime.1", table.getName()); // name and display name are different
try (XSSFWorkbook wb = XSSFTestDataSamples.openSampleWorkbook("StructuredReferences.xlsx")) {
XSSFTable table = wb.getTable("\\_Prime.1");
assertEquals("\\_Prime.1", table.getDisplayName());

table.setDisplayName("Display name");
assertEquals("Display name", table.getDisplayName());
assertEquals("\\_Prime.1", table.getName()); // name and display name are different
table.setDisplayName(null);
assertNull(table.getDisplayName());
assertEquals("\\_Prime.1", table.getName()); // name and display name are different

wb.close();
table.setDisplayName("Display name");
assertEquals("Display name", table.getDisplayName());
assertEquals("\\_Prime.1", table.getName()); // name and display name are different
}
}

@Test
public void getCellReferences() {
public void getCellReferences() throws IOException {
// make sure that cached start and end cell references
// can be synchronized with the underlying CTTable
XSSFWorkbook wb = new XSSFWorkbook();
XSSFSheet sh = wb.createSheet();
XSSFTable table = sh.createTable();
CTTable ctTable = table.getCTTable();
ctTable.setRef("B2:E8");

assertEquals(new CellReference("B2"), table.getStartCellReference());
assertEquals(new CellReference("E8"), table.getEndCellReference());

// At this point start and end cell reference are cached
// and may not follow changes to the underlying CTTable
ctTable.setRef("C1:M3");

assertEquals(new CellReference("B2"), table.getStartCellReference());
assertEquals(new CellReference("E8"), table.getEndCellReference());

// Force a synchronization between CTTable and XSSFTable
// start and end cell references
table.updateReferences();

assertEquals(new CellReference("C1"), table.getStartCellReference());
assertEquals(new CellReference("M3"), table.getEndCellReference());
IOUtils.closeQuietly(wb);
try (XSSFWorkbook wb = new XSSFWorkbook()) {
XSSFSheet sh = wb.createSheet();
XSSFTable table = sh.createTable();
CTTable ctTable = table.getCTTable();
ctTable.setRef("B2:E8");

assertEquals(new CellReference("B2"), table.getStartCellReference());
assertEquals(new CellReference("E8"), table.getEndCellReference());

// At this point start and end cell reference are cached
// and may not follow changes to the underlying CTTable
ctTable.setRef("C1:M3");

assertEquals(new CellReference("B2"), table.getStartCellReference());
assertEquals(new CellReference("E8"), table.getEndCellReference());

// Force a synchronization between CTTable and XSSFTable
// start and end cell references
table.updateReferences();

assertEquals(new CellReference("C1"), table.getStartCellReference());
assertEquals(new CellReference("M3"), table.getEndCellReference());

IOUtils.closeQuietly(wb);
}
}

@Test
public void getRowCount() {
XSSFWorkbook wb = new XSSFWorkbook();
XSSFSheet sh = wb.createSheet();
XSSFTable table = sh.createTable();
CTTable ctTable = table.getCTTable();

assertEquals(0, table.getRowCount());

ctTable.setRef("B2:B2");
// update cell references to clear the cache
table.updateReferences();
assertEquals(1, table.getRowCount());

ctTable.setRef("B2:B12");
// update cell references to clear the cache
table.updateReferences();
assertEquals(11, table.getRowCount());
IOUtils.closeQuietly(wb);
public void getRowCount() throws IOException {
try (XSSFWorkbook wb = new XSSFWorkbook()) {
XSSFSheet sh = wb.createSheet();
XSSFTable table = sh.createTable();
CTTable ctTable = table.getCTTable();

assertEquals(0, table.getRowCount());

ctTable.setRef("B2:B2");
// update cell references to clear the cache
table.updateReferences();
assertEquals(1, table.getRowCount());

ctTable.setRef("B2:B12");
// update cell references to clear the cache
table.updateReferences();
assertEquals(11, table.getRowCount());

IOUtils.closeQuietly(wb);
}
}
@Test
public void testGetDataRowCount() {
XSSFWorkbook wb = new XSSFWorkbook();
XSSFSheet sh = wb.createSheet();
AreaReference tableArea = new AreaReference("B2:B6", wb.getSpreadsheetVersion());
XSSFTable table = sh.createTable(tableArea);

assertEquals(5, table.getRowCount()); // includes column header
assertEquals(4, table.getDataRowCount());
table.setArea(new AreaReference("B2:B7", wb.getSpreadsheetVersion()));
assertEquals(6, table.getRowCount());
assertEquals(5, table.getDataRowCount());
IOUtils.closeQuietly(wb);
public void testGetDataRowCount() throws IOException {
try (XSSFWorkbook wb = new XSSFWorkbook()) {
XSSFSheet sh = wb.createSheet();
AreaReference tableArea = new AreaReference("B2:B6", wb.getSpreadsheetVersion());
XSSFTable table = sh.createTable(tableArea);

assertEquals(5, table.getRowCount()); // includes column header
assertEquals(4, table.getDataRowCount());

table.setArea(new AreaReference("B2:B7", wb.getSpreadsheetVersion()));

assertEquals(6, table.getRowCount());
assertEquals(5, table.getDataRowCount());

IOUtils.closeQuietly(wb);
}
}
@Test
public void testSetDataRowCount() throws IOException {
XSSFWorkbook wb = new XSSFWorkbook();
XSSFSheet sh = wb.createSheet();
// 1 header row + 1 data row
AreaReference tableArea = new AreaReference("C10:C11", wb.getSpreadsheetVersion());
XSSFTable table = sh.createTable(tableArea);
assertEquals(2, table.getRowCount()); // includes all data and header/footer rows
assertEquals(1, table.getHeaderRowCount());
assertEquals(1, table.getDataRowCount());
assertEquals(0, table.getTotalsRowCount());
table.setDataRowCount(5);
assertEquals(6, table.getRowCount());
assertEquals(1, table.getHeaderRowCount());
assertEquals(5, table.getDataRowCount());
assertEquals(0, table.getTotalsRowCount());
assertEquals("C10:C15", table.getArea().formatAsString());
IOUtils.closeQuietly(wb);
try (XSSFWorkbook wb = new XSSFWorkbook()) {
XSSFSheet sh = wb.createSheet();
// 1 header row + 1 data row
AreaReference tableArea = new AreaReference("C10:C11", wb.getSpreadsheetVersion());
XSSFTable table = sh.createTable(tableArea);
assertEquals(2, table.getRowCount()); // includes all data and header/footer rows
assertEquals(1, table.getHeaderRowCount());
assertEquals(1, table.getDataRowCount());
assertEquals(0, table.getTotalsRowCount());
table.setDataRowCount(5);
assertEquals(6, table.getRowCount());
assertEquals(1, table.getHeaderRowCount());
assertEquals(5, table.getDataRowCount());
assertEquals(0, table.getTotalsRowCount());
assertEquals("C10:C15", table.getArea().formatAsString());
IOUtils.closeQuietly(wb);
}
}

@Test
@@ -464,33 +463,34 @@ public final class TestXSSFTable {
@Test
public void testDifferentHeaderTypes() throws IOException {
XSSFWorkbook wb = XSSFTestDataSamples.openSampleWorkbook("TablesWithDifferentHeaders.xlsx");
assertEquals(3, wb.getNumberOfSheets());
XSSFSheet s;
XSSFTable t;

// TODO Nicer column fetching
s = wb.getSheet("IntHeaders");
assertEquals(1, s.getTables().size());
t = s.getTables().get(0);
assertEquals("A1:B2", t.getCellReferences().formatAsString());
assertEquals("12", t.getCTTable().getTableColumns().getTableColumnArray(0).getName());
assertEquals("34", t.getCTTable().getTableColumns().getTableColumnArray(1).getName());
s = wb.getSheet("FloatHeaders");
assertEquals(1, s.getTables().size());
t = s.getTables().get(0);
assertEquals("A1:B2", t.getCellReferences().formatAsString());
assertEquals("12.34", t.getCTTable().getTableColumns().getTableColumnArray(0).getName());
assertEquals("34.56", t.getCTTable().getTableColumns().getTableColumnArray(1).getName());
s = wb.getSheet("NoExplicitHeaders");
assertEquals(1, s.getTables().size());
t = s.getTables().get(0);
assertEquals("A1:B3", t.getCellReferences().formatAsString());
assertEquals("Column1", t.getCTTable().getTableColumns().getTableColumnArray(0).getName());
assertEquals("Column2", t.getCTTable().getTableColumns().getTableColumnArray(1).getName());
try (XSSFWorkbook wb = XSSFTestDataSamples.openSampleWorkbook("TablesWithDifferentHeaders.xlsx")) {
assertEquals(3, wb.getNumberOfSheets());
XSSFSheet s;
XSSFTable t;

// TODO Nicer column fetching

s = wb.getSheet("IntHeaders");
assertEquals(1, s.getTables().size());
t = s.getTables().get(0);
assertEquals("A1:B2", t.getCellReferences().formatAsString());
assertEquals("12", t.getCTTable().getTableColumns().getTableColumnArray(0).getName());
assertEquals("34", t.getCTTable().getTableColumns().getTableColumnArray(1).getName());

s = wb.getSheet("FloatHeaders");
assertEquals(1, s.getTables().size());
t = s.getTables().get(0);
assertEquals("A1:B2", t.getCellReferences().formatAsString());
assertEquals("12.34", t.getCTTable().getTableColumns().getTableColumnArray(0).getName());
assertEquals("34.56", t.getCTTable().getTableColumns().getTableColumnArray(1).getName());

s = wb.getSheet("NoExplicitHeaders");
assertEquals(1, s.getTables().size());
t = s.getTables().get(0);
assertEquals("A1:B3", t.getCellReferences().formatAsString());
assertEquals("Column1", t.getCTTable().getTableColumns().getTableColumnArray(0).getName());
assertEquals("Column2", t.getCTTable().getTableColumns().getTableColumnArray(1).getName());
}
}
/**
@@ -498,51 +498,52 @@ public final class TestXSSFTable {
*/
@Test
public void testNumericCellsInTable() throws IOException {
XSSFWorkbook wb = new XSSFWorkbook();
XSSFSheet s = wb.createSheet();
// Create some cells, some numeric, some not
Cell c1 = s.createRow(0).createCell(0);
Cell c2 = s.getRow(0).createCell(1);
Cell c3 = s.getRow(0).createCell(2);
Cell c4 = s.createRow(1).createCell(0);
Cell c5 = s.getRow(1).createCell(1);
Cell c6 = s.getRow(1).createCell(2);
c1.setCellValue(12);
c2.setCellValue(34.56);
c3.setCellValue("ABCD");
c4.setCellValue("AB");
c5.setCellValue("CD");
c6.setCellValue("EF");

// Setting up the table
XSSFTable t = s.createTable(new AreaReference("A1:C3", wb.getSpreadsheetVersion()));
t.setName("TableTest");
t.setDisplayName("CT_Table_Test");
t.createColumn("Column 1");
t.createColumn("Column 2");
t.createColumn("Column 3");
t.setCellReferences(wb.getCreationHelper().createAreaReference(
new CellReference(c1), new CellReference(c6)
));

// Save and re-load
XSSFWorkbook wb2 = XSSFTestDataSamples.writeOutAndReadBack(wb);
IOUtils.closeQuietly(wb);
s = wb2.getSheetAt(0);
// Check
assertEquals(1, s.getTables().size());
t = s.getTables().get(0);
assertEquals("A1", t.getStartCellReference().formatAsString());
assertEquals("C2", t.getEndCellReference().formatAsString());
// TODO Nicer column fetching
assertEquals("12", t.getCTTable().getTableColumns().getTableColumnArray(0).getName());
assertEquals("34.56", t.getCTTable().getTableColumns().getTableColumnArray(1).getName());
assertEquals("ABCD", t.getCTTable().getTableColumns().getTableColumnArray(2).getName());
// Done
IOUtils.closeQuietly(wb2);
try (XSSFWorkbook wb = new XSSFWorkbook()) {
XSSFSheet s = wb.createSheet();

// Create some cells, some numeric, some not
Cell c1 = s.createRow(0).createCell(0);
Cell c2 = s.getRow(0).createCell(1);
Cell c3 = s.getRow(0).createCell(2);
Cell c4 = s.createRow(1).createCell(0);
Cell c5 = s.getRow(1).createCell(1);
Cell c6 = s.getRow(1).createCell(2);
c1.setCellValue(12);
c2.setCellValue(34.56);
c3.setCellValue("ABCD");
c4.setCellValue("AB");
c5.setCellValue("CD");
c6.setCellValue("EF");

// Setting up the table
XSSFTable t = s.createTable(new AreaReference("A1:C3", wb.getSpreadsheetVersion()));
t.setName("TableTest");
t.setDisplayName("CT_Table_Test");
t.createColumn("Column 1");
t.createColumn("Column 2");
t.createColumn("Column 3");
t.setCellReferences(wb.getCreationHelper().createAreaReference(
new CellReference(c1), new CellReference(c6)
));

// Save and re-load
XSSFWorkbook wb2 = XSSFTestDataSamples.writeOutAndReadBack(wb);
IOUtils.closeQuietly(wb);
s = wb2.getSheetAt(0);

// Check
assertEquals(1, s.getTables().size());
t = s.getTables().get(0);
assertEquals("A1", t.getStartCellReference().formatAsString());
assertEquals("C2", t.getEndCellReference().formatAsString());

// TODO Nicer column fetching
assertEquals("12", t.getCTTable().getTableColumns().getTableColumnArray(0).getName());
assertEquals("34.56", t.getCTTable().getTableColumns().getTableColumnArray(1).getName());
assertEquals("ABCD", t.getCTTable().getTableColumns().getTableColumnArray(2).getName());

// Done
IOUtils.closeQuietly(wb2);
}
}
}

+ 18
- 16
src/ooxml/testcases/org/apache/poi/xssf/usermodel/charts/TestXSSFChartAxis.java View File

@@ -17,6 +17,7 @@

package org.apache.poi.xssf.usermodel.charts;

import java.io.IOException;
import java.util.List;

import org.apache.poi.xddf.usermodel.chart.AxisPosition;
@@ -46,7 +47,7 @@ public final class TestXSSFChartAxis extends TestCase {
axis = chart.createValueAxis(AxisPosition.BOTTOM);
}

public void testLogBaseIllegalArgument() throws Exception {
public void testLogBaseIllegalArgument() {
IllegalArgumentException iae = null;
try {
axis.setLogBase(0.0);
@@ -64,12 +65,12 @@ public final class TestXSSFChartAxis extends TestCase {
assertNotNull(iae);
}

public void testLogBaseLegalArgument() throws Exception {
public void testLogBaseLegalArgument() {
axis.setLogBase(Math.E);
assertTrue(Math.abs(axis.getLogBase() - Math.E) < EPSILON);
}

public void testNumberFormat() throws Exception {
public void testNumberFormat() {
final String numberFormat = "General";
axis.setNumberFormat(numberFormat);
assertEquals(numberFormat, axis.getNumberFormat());
@@ -121,19 +122,20 @@ public final class TestXSSFChartAxis extends TestCase {
assertEquals(AxisTickMark.CROSS, axis.getMinorTickMark());
}

public void testGetChartAxisBug57362() {
public void testGetChartAxisBug57362() throws IOException {
//Load existing excel with some chart on it having primary and secondary axis.
final XSSFWorkbook workbook = XSSFTestDataSamples.openSampleWorkbook("57362.xlsx");
final XSSFSheet sh = workbook.getSheetAt(0);
final XSSFDrawing drawing = sh.createDrawingPatriarch();
final XSSFChart chart = drawing.getCharts().get(0);

final List<? extends XDDFChartAxis> axisList = chart.getAxes();

assertEquals(4, axisList.size());
assertNotNull(axisList.get(0));
assertNotNull(axisList.get(1));
assertNotNull(axisList.get(2));
assertNotNull(axisList.get(3));
try (final XSSFWorkbook workbook = XSSFTestDataSamples.openSampleWorkbook("57362.xlsx")) {
final XSSFSheet sh = workbook.getSheetAt(0);
final XSSFDrawing drawing = sh.createDrawingPatriarch();
final XSSFChart chart = drawing.getCharts().get(0);

final List<? extends XDDFChartAxis> axisList = chart.getAxes();

assertEquals(4, axisList.size());
assertNotNull(axisList.get(0));
assertNotNull(axisList.get(1));
assertNotNull(axisList.get(2));
assertNotNull(axisList.get(3));
}
}
}

+ 32
- 27
src/ooxml/testcases/org/apache/poi/xssf/usermodel/extensions/TestXSSFCellFill.java View File

@@ -67,7 +67,9 @@ public class TestXSSFCellFill {
XSSFCellFill cellFill = new XSSFCellFill(ctFill, null);
CTPatternFill ctPatternFill = ctFill.addNewPatternFill();
ctPatternFill.setPatternType(STPatternType.SOLID);
assertEquals(FillPatternType.SOLID_FOREGROUND.ordinal(), cellFill.getPatternType().intValue()-1);
STPatternType.Enum patternType = cellFill.getPatternType();
assertNotNull(patternType);
assertEquals(FillPatternType.SOLID_FOREGROUND.ordinal(), patternType.intValue()-1);
}

@Test
@@ -76,38 +78,41 @@ public class TestXSSFCellFill {
XSSFCellFill cellFill = new XSSFCellFill(ctFill, null);
CTPatternFill ctPatternFill = ctFill.addNewPatternFill();
ctPatternFill.setPatternType(STPatternType.DARK_DOWN);
assertEquals(8, cellFill.getPatternType().intValue());
STPatternType.Enum patternType = cellFill.getPatternType();
assertNotNull(patternType);
assertEquals(8, patternType.intValue());
}

@Test
public void testColorFromTheme() throws IOException {
XSSFWorkbook wb = XSSFTestDataSamples.openSampleWorkbook("styles.xlsx");
XSSFCell cellWithThemeColor = wb.getSheetAt(0).getRow(10).getCell(0);
//color RGB will be extracted from theme
XSSFColor foregroundColor = cellWithThemeColor.getCellStyle().getFillForegroundXSSFColor();
byte[] rgb = foregroundColor.getRGB();
byte[] rgbWithTint = foregroundColor.getRGBWithTint();
// Dk2
assertEquals(rgb[0],31);
assertEquals(rgb[1],73);
assertEquals(rgb[2],125);
// Dk2, lighter 40% (tint is about 0.39998)
// 31 * (1.0 - 0.39998) + (255 - 255 * (1.0 - 0.39998)) = 120.59552 => 120 (byte)
// 73 * (1.0 - 0.39998) + (255 - 255 * (1.0 - 0.39998)) = 145.79636 => -111 (byte)
// 125 * (1.0 - 0.39998) + (255 - 255 * (1.0 - 0.39998)) = 176.99740 => -80 (byte)
assertEquals(rgbWithTint[0],120);
assertEquals(rgbWithTint[1],-111);
assertEquals(rgbWithTint[2],-80);
wb.close();
try (XSSFWorkbook wb = XSSFTestDataSamples.openSampleWorkbook("styles.xlsx")) {
XSSFCell cellWithThemeColor = wb.getSheetAt(0).getRow(10).getCell(0);
//color RGB will be extracted from theme
XSSFColor foregroundColor = cellWithThemeColor.getCellStyle().getFillForegroundXSSFColor();
byte[] rgb = foregroundColor.getRGB();
byte[] rgbWithTint = foregroundColor.getRGBWithTint();
// Dk2
assertEquals(rgb[0], 31);
assertEquals(rgb[1], 73);
assertEquals(rgb[2], 125);
// Dk2, lighter 40% (tint is about 0.39998)
// 31 * (1.0 - 0.39998) + (255 - 255 * (1.0 - 0.39998)) = 120.59552 => 120 (byte)
// 73 * (1.0 - 0.39998) + (255 - 255 * (1.0 - 0.39998)) = 145.79636 => -111 (byte)
// 125 * (1.0 - 0.39998) + (255 - 255 * (1.0 - 0.39998)) = 176.99740 => -80 (byte)
assertEquals(rgbWithTint[0], 120);
assertEquals(rgbWithTint[1], -111);
assertEquals(rgbWithTint[2], -80);
}
}
@Test
public void testFillWithoutColors() {
XSSFWorkbook wb = XSSFTestDataSamples.openSampleWorkbook("FillWithoutColor.xlsx");
XSSFCell cellWithFill = wb.getSheetAt(0).getRow(5).getCell(1);
XSSFCellStyle style = cellWithFill.getCellStyle();
assertNotNull(style);
assertNull("had an empty background color", style.getFillBackgroundColorColor());
assertNull("had an empty background color", style.getFillBackgroundXSSFColor());
public void testFillWithoutColors() throws IOException {
try (XSSFWorkbook wb = XSSFTestDataSamples.openSampleWorkbook("FillWithoutColor.xlsx")) {
XSSFCell cellWithFill = wb.getSheetAt(0).getRow(5).getCell(1);
XSSFCellStyle style = cellWithFill.getCellStyle();
assertNotNull(style);
assertNull("had an empty background color", style.getFillBackgroundColorColor());
assertNull("had an empty background color", style.getFillBackgroundXSSFColor());
}
}
}

+ 65
- 57
src/ooxml/testcases/org/apache/poi/xwpf/TestAllExtendedProperties.java View File

@@ -17,17 +17,23 @@

package org.apache.poi.xwpf;

import java.io.IOException;

import junit.framework.TestCase;
import org.apache.poi.ooxml.POIXMLProperties.CoreProperties;
import org.apache.poi.openxml4j.opc.PackageProperties;
import org.apache.poi.xwpf.usermodel.XWPFDocument;
import org.junit.Test;
import org.openxmlformats.schemas.officeDocument.x2006.extendedProperties.CTDigSigBlob;
import org.openxmlformats.schemas.officeDocument.x2006.extendedProperties.CTProperties;
import org.openxmlformats.schemas.officeDocument.x2006.extendedProperties.CTVectorLpstr;
import org.openxmlformats.schemas.officeDocument.x2006.extendedProperties.CTVectorVariant;

import java.io.IOException;

import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertNull;
import static org.junit.Assert.assertTrue;

/**
* Tests if the {@link CoreProperties#getKeywords()} method. This test has been
* submitted because even though the
@@ -40,66 +46,68 @@ import org.openxmlformats.schemas.officeDocument.x2006.extendedProperties.CTVect
*
* @author Antoni Mylka
*/
public final class TestAllExtendedProperties extends TestCase {
public final class TestAllExtendedProperties {
@Test
public void testGetAllExtendedProperties() throws IOException {
XWPFDocument doc = XWPFTestDataSamples.openSampleDocument("TestPoiXMLDocumentCorePropertiesGetKeywords.docx");
CTProperties ctProps = doc.getProperties().getExtendedProperties().getUnderlyingProperties();
assertEquals("Microsoft Office Word", ctProps.getApplication());
assertEquals("14.0000", ctProps.getAppVersion());
assertEquals(57, ctProps.getCharacters());
assertEquals(66, ctProps.getCharactersWithSpaces());
assertEquals("", ctProps.getCompany());
assertNull(ctProps.getDigSig());
assertEquals(0, ctProps.getDocSecurity());
assertNotNull(ctProps.getDomNode());
try (XWPFDocument doc = XWPFTestDataSamples.openSampleDocument("TestPoiXMLDocumentCorePropertiesGetKeywords.docx")) {
CTProperties ctProps = doc.getProperties().getExtendedProperties().getUnderlyingProperties();
assertEquals("Microsoft Office Word", ctProps.getApplication());
assertEquals("14.0000", ctProps.getAppVersion());
assertEquals(57, ctProps.getCharacters());
assertEquals(66, ctProps.getCharactersWithSpaces());
assertEquals("", ctProps.getCompany());
assertNull(ctProps.getDigSig());
assertEquals(0, ctProps.getDocSecurity());
assertNotNull(ctProps.getDomNode());

CTVectorVariant vec = ctProps.getHeadingPairs();
assertEquals(2, vec.getVector().sizeOfVariantArray());
assertEquals("Title", vec.getVector().getVariantArray(0).getLpstr());
assertEquals(1, vec.getVector().getVariantArray(1).getI4());
CTVectorVariant vec = ctProps.getHeadingPairs();
assertEquals(2, vec.getVector().sizeOfVariantArray());
assertEquals("Title", vec.getVector().getVariantArray(0).getLpstr());
assertEquals(1, vec.getVector().getVariantArray(1).getI4());

assertFalse(ctProps.isSetHiddenSlides());
assertEquals(0, ctProps.getHiddenSlides());
assertFalse(ctProps.isSetHLinks());
assertNull(ctProps.getHLinks());
assertNull(ctProps.getHyperlinkBase());
assertTrue(ctProps.isSetHyperlinksChanged());
assertFalse(ctProps.getHyperlinksChanged());
assertEquals(1, ctProps.getLines());
assertTrue(ctProps.isSetLinksUpToDate());
assertFalse(ctProps.getLinksUpToDate());
assertNull(ctProps.getManager());
assertFalse(ctProps.isSetMMClips());
assertEquals(0, ctProps.getMMClips());
assertFalse(ctProps.isSetNotes());
assertEquals(0, ctProps.getNotes());
assertEquals(1, ctProps.getPages());
assertEquals(1, ctProps.getParagraphs());
assertNull(ctProps.getPresentationFormat());
assertTrue(ctProps.isSetScaleCrop());
assertFalse(ctProps.getScaleCrop());
assertTrue(ctProps.isSetSharedDoc());
assertFalse(ctProps.getSharedDoc());
assertFalse(ctProps.isSetSlides());
assertEquals(0, ctProps.getSlides());
assertEquals("Normal.dotm", ctProps.getTemplate());
assertFalse(ctProps.isSetHiddenSlides());
assertEquals(0, ctProps.getHiddenSlides());
assertFalse(ctProps.isSetHLinks());
assertNull(ctProps.getHLinks());
assertNull(ctProps.getHyperlinkBase());
assertTrue(ctProps.isSetHyperlinksChanged());
assertFalse(ctProps.getHyperlinksChanged());
assertEquals(1, ctProps.getLines());
assertTrue(ctProps.isSetLinksUpToDate());
assertFalse(ctProps.getLinksUpToDate());
assertNull(ctProps.getManager());
assertFalse(ctProps.isSetMMClips());
assertEquals(0, ctProps.getMMClips());
assertFalse(ctProps.isSetNotes());
assertEquals(0, ctProps.getNotes());
assertEquals(1, ctProps.getPages());
assertEquals(1, ctProps.getParagraphs());
assertNull(ctProps.getPresentationFormat());
assertTrue(ctProps.isSetScaleCrop());
assertFalse(ctProps.getScaleCrop());
assertTrue(ctProps.isSetSharedDoc());
assertFalse(ctProps.getSharedDoc());
assertFalse(ctProps.isSetSlides());
assertEquals(0, ctProps.getSlides());
assertEquals("Normal.dotm", ctProps.getTemplate());

CTVectorLpstr vec2 = ctProps.getTitlesOfParts();
assertEquals(1, vec2.getVector().sizeOfLpstrArray());
assertEquals("Example Word 2010 Document", vec2.getVector().getLpstrArray(0));
CTVectorLpstr vec2 = ctProps.getTitlesOfParts();
assertEquals(1, vec2.getVector().sizeOfLpstrArray());
assertEquals("Example Word 2010 Document", vec2.getVector().getLpstrArray(0));

assertEquals(3, ctProps.getTotalTime());
assertEquals(10, ctProps.getWords());
assertEquals(3, ctProps.getTotalTime());
assertEquals(10, ctProps.getWords());

// Check the digital signature part
// Won't be there in this file, but we
// need to do this check so that the
// appropriate parts end up in the
// smaller ooxml schemas file
CTDigSigBlob blob = ctProps.getDigSig();
assertNull(blob);
// Check the digital signature part
// Won't be there in this file, but we
// need to do this check so that the
// appropriate parts end up in the
// smaller ooxml schemas file
CTDigSigBlob blob = ctProps.getDigSig();
assertNull(blob);

blob = CTDigSigBlob.Factory.newInstance();
blob.setBlob(new byte[]{2, 6, 7, 2, 3, 4, 5, 1, 2, 3});
blob = CTDigSigBlob.Factory.newInstance();
blob.setBlob(new byte[]{2, 6, 7, 2, 3, 4, 5, 1, 2, 3});
}
}
}

+ 8
- 7
src/ooxml/testcases/org/apache/poi/xwpf/TestPackageCorePropertiesGetKeywords.java View File

@@ -38,13 +38,14 @@ import org.apache.poi.xwpf.usermodel.XWPFDocument;
*/
public final class TestPackageCorePropertiesGetKeywords extends TestCase {
public void testGetSetKeywords() throws IOException {
XWPFDocument doc = XWPFTestDataSamples.openSampleDocument("TestPoiXMLDocumentCorePropertiesGetKeywords.docx");
String keywords = doc.getProperties().getCoreProperties().getKeywords();
assertEquals("extractor, test, rdf", keywords);
try (XWPFDocument doc = XWPFTestDataSamples.openSampleDocument("TestPoiXMLDocumentCorePropertiesGetKeywords.docx")) {
String keywords = doc.getProperties().getCoreProperties().getKeywords();
assertEquals("extractor, test, rdf", keywords);

doc.getProperties().getCoreProperties().setKeywords("test, keywords");
doc = XWPFTestDataSamples.writeOutAndReadBack(doc);
keywords = doc.getProperties().getCoreProperties().getKeywords();
assertEquals("test, keywords", keywords);
doc.getProperties().getCoreProperties().setKeywords("test, keywords");
XWPFDocument docBack = XWPFTestDataSamples.writeOutAndReadBack(doc);
keywords = docBack.getProperties().getCoreProperties().getKeywords();
assertEquals("test, keywords", keywords);
}
}
}

+ 297
- 288
src/ooxml/testcases/org/apache/poi/xwpf/extractor/TestXWPFWordExtractor.java View File

@@ -39,272 +39,274 @@ public class TestXWPFWordExtractor extends TestCase {

/**
* Get text out of the simple file
*
* @throws IOException
*/
public void testGetSimpleText() throws IOException {
XWPFDocument doc = XWPFTestDataSamples.openSampleDocument("sample.docx");
XWPFWordExtractor extractor = new XWPFWordExtractor(doc);
try (XWPFDocument doc = XWPFTestDataSamples.openSampleDocument("sample.docx")) {
XWPFWordExtractor extractor = new XWPFWordExtractor(doc);

String text = extractor.getText();
assertTrue(text.length() > 0);
String text = extractor.getText();
assertTrue(text.length() > 0);

// Check contents
assertStartsWith(text,
"Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Nunc at risus vel erat tempus posuere. Aenean non ante. Suspendisse vehicula dolor sit amet odio."
);
assertEndsWith(text,
"Phasellus ultricies mi nec leo. Sed tempus. In sit amet lorem at velit faucibus vestibulum.\n"
);
// Check contents
assertStartsWith(text,
"Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Nunc at risus vel erat tempus posuere. Aenean non ante. Suspendisse vehicula dolor sit amet odio."
);
assertEndsWith(text,
"Phasellus ultricies mi nec leo. Sed tempus. In sit amet lorem at velit faucibus vestibulum.\n"
);

// Check number of paragraphs by counting number of newlines
int numberOfParagraphs = StringUtil.countMatches(text, '\n');
assertEquals(3, numberOfParagraphs);
// Check number of paragraphs by counting number of newlines
int numberOfParagraphs = StringUtil.countMatches(text, '\n');
assertEquals(3, numberOfParagraphs);

extractor.close();
extractor.close();
}
}

/**
* Tests getting the text out of a complex file
*
* @throws IOException
*/
public void testGetComplexText() throws IOException {
XWPFDocument doc = XWPFTestDataSamples.openSampleDocument("IllustrativeCases.docx");
XWPFWordExtractor extractor = new XWPFWordExtractor(doc);
try (XWPFDocument doc = XWPFTestDataSamples.openSampleDocument("IllustrativeCases.docx")) {
XWPFWordExtractor extractor = new XWPFWordExtractor(doc);

String text = extractor.getText();
assertTrue(text.length() > 0);
String text = extractor.getText();
assertTrue(text.length() > 0);

char euro = '\u20ac';
char euro = '\u20ac';
// System.err.println("'"+text.substring(text.length() - 40) + "'");

// Check contents
assertStartsWith(text,
" \n(V) ILLUSTRATIVE CASES\n\n"
);
assertContains(text,
"As well as gaining " + euro + "90 from child benefit increases, he will also receive the early childhood supplement of " + euro + "250 per quarter for Vincent for the full four quarters of the year.\n\n\n\n"// \n\n\n"
);
assertEndsWith(text,
"11.4%\t\t90\t\t\t\t\t250\t\t1,310\t\n\n \n\n\n"
);

// Check number of paragraphs by counting number of newlines
int numberOfParagraphs = StringUtil.countMatches(text, '\n');
assertEquals(134, numberOfParagraphs);

extractor.close();
// Check contents
assertStartsWith(text,
" \n(V) ILLUSTRATIVE CASES\n\n"
);
assertContains(text,
"As well as gaining " + euro + "90 from child benefit increases, he will also receive the early childhood supplement of " + euro + "250 per quarter for Vincent for the full four quarters of the year.\n\n\n\n"// \n\n\n"
);
assertEndsWith(text,
"11.4%\t\t90\t\t\t\t\t250\t\t1,310\t\n\n \n\n\n"
);

// Check number of paragraphs by counting number of newlines
int numberOfParagraphs = StringUtil.countMatches(text, '\n');
assertEquals(134, numberOfParagraphs);

extractor.close();
}
}

public void testGetWithHyperlinks() throws IOException {
XWPFDocument doc = XWPFTestDataSamples.openSampleDocument("TestDocument.docx");
XWPFWordExtractor extractor = new XWPFWordExtractor(doc);

// Now check contents
extractor.setFetchHyperlinks(false);
assertEquals(
"This is a test document.\nThis bit is in bold and italic\n" +
"Back to normal\n" +
"This contains BOLD, ITALIC and BOTH, as well as RED and YELLOW text.\n" +
"We have a hyperlink here, and another.\n",
extractor.getText()
);

// One hyperlink is a real one, one is just to the top of page
extractor.setFetchHyperlinks(true);
assertEquals(
"This is a test document.\nThis bit is in bold and italic\n" +
"Back to normal\n" +
"This contains BOLD, ITALIC and BOTH, as well as RED and YELLOW text.\n" +
"We have a hyperlink <http://poi.apache.org/> here, and another.\n",
extractor.getText()
);

extractor.close();
try (XWPFDocument doc = XWPFTestDataSamples.openSampleDocument("TestDocument.docx")) {
XWPFWordExtractor extractor = new XWPFWordExtractor(doc);

// Now check contents
extractor.setFetchHyperlinks(false);
assertEquals(
"This is a test document.\nThis bit is in bold and italic\n" +
"Back to normal\n" +
"This contains BOLD, ITALIC and BOTH, as well as RED and YELLOW text.\n" +
"We have a hyperlink here, and another.\n",
extractor.getText()
);

// One hyperlink is a real one, one is just to the top of page
extractor.setFetchHyperlinks(true);
assertEquals(
"This is a test document.\nThis bit is in bold and italic\n" +
"Back to normal\n" +
"This contains BOLD, ITALIC and BOTH, as well as RED and YELLOW text.\n" +
"We have a hyperlink <http://poi.apache.org/> here, and another.\n",
extractor.getText()
);

extractor.close();
}
}

public void testHeadersFooters() throws IOException {
XWPFDocument doc = XWPFTestDataSamples.openSampleDocument("ThreeColHeadFoot.docx");
XWPFWordExtractor extractor = new XWPFWordExtractor(doc);

assertEquals(
"First header column!\tMid header\tRight header!\n" +
"This is a sample word document. It has two pages. It has a three column heading, and a three column footer\n" +
"\n" +
"HEADING TEXT\n" +
"\n" +
"More on page one\n" +
"\n\n" +
"End of page 1\n\n\n" +
"This is page two. It also has a three column heading, and a three column footer.\n" +
"Footer Left\tFooter Middle\tFooter Right\n",
extractor.getText()
);

// Now another file, expect multiple headers
// and multiple footers
doc = XWPFTestDataSamples.openSampleDocument("DiffFirstPageHeadFoot.docx");
extractor.close();

extractor = new XWPFWordExtractor(doc);
extractor.close();

extractor =
new XWPFWordExtractor(doc);
extractor.getText();

assertEquals(
"I am the header on the first page, and I" + '\u2019' + "m nice and simple\n" +
"First header column!\tMid header\tRight header!\n" +
"This is a sample word document. It has two pages. It has a simple header and footer, which is different to all the other pages.\n" +
"\n" +
"HEADING TEXT\n" +
"\n" +
"More on page one\n" +
"\n\n" +
"End of page 1\n\n\n" +
"This is page two. It also has a three column heading, and a three column footer.\n" +
"The footer of the first page\n" +
"Footer Left\tFooter Middle\tFooter Right\n",
extractor.getText()
);

extractor.close();
try (XWPFDocument doc = XWPFTestDataSamples.openSampleDocument("ThreeColHeadFoot.docx")) {
XWPFWordExtractor extractor = new XWPFWordExtractor(doc);

assertEquals(
"First header column!\tMid header\tRight header!\n" +
"This is a sample word document. It has two pages. It has a three column heading, and a three column footer\n" +
"\n" +
"HEADING TEXT\n" +
"\n" +
"More on page one\n" +
"\n\n" +
"End of page 1\n\n\n" +
"This is page two. It also has a three column heading, and a three column footer.\n" +
"Footer Left\tFooter Middle\tFooter Right\n",
extractor.getText()
);

// Now another file, expect multiple headers
// and multiple footers
XWPFDocument doc2 = XWPFTestDataSamples.openSampleDocument("DiffFirstPageHeadFoot.docx");
extractor.close();

extractor = new XWPFWordExtractor(doc2);
extractor.close();

extractor =
new XWPFWordExtractor(doc2);
extractor.getText();

assertEquals(
"I am the header on the first page, and I" + '\u2019' + "m nice and simple\n" +
"First header column!\tMid header\tRight header!\n" +
"This is a sample word document. It has two pages. It has a simple header and footer, which is different to all the other pages.\n" +
"\n" +
"HEADING TEXT\n" +
"\n" +
"More on page one\n" +
"\n\n" +
"End of page 1\n\n\n" +
"This is page two. It also has a three column heading, and a three column footer.\n" +
"The footer of the first page\n" +
"Footer Left\tFooter Middle\tFooter Right\n",
extractor.getText()
);

extractor.close();
}
}

public void testFootnotes() throws IOException {
XWPFDocument doc = XWPFTestDataSamples.openSampleDocument("footnotes.docx");
XWPFWordExtractor extractor = new XWPFWordExtractor(doc);
String text = extractor.getText();
assertContains(text,"snoska");
assertContains(text,"Eto ochen prostoy[footnoteRef:1] text so snoskoy");
try (XWPFDocument doc = XWPFTestDataSamples.openSampleDocument("footnotes.docx")) {
XWPFWordExtractor extractor = new XWPFWordExtractor(doc);
String text = extractor.getText();
assertContains(text, "snoska");
assertContains(text, "Eto ochen prostoy[footnoteRef:1] text so snoskoy");

extractor.close();
extractor.close();
}
}


public void testTableFootnotes() throws IOException {
XWPFDocument doc = XWPFTestDataSamples.openSampleDocument("table_footnotes.docx");
XWPFWordExtractor extractor = new XWPFWordExtractor(doc);
try (XWPFDocument doc = XWPFTestDataSamples.openSampleDocument("table_footnotes.docx")) {
XWPFWordExtractor extractor = new XWPFWordExtractor(doc);

assertContains(extractor.getText(),"snoska");
assertContains(extractor.getText(), "snoska");

extractor.close();
extractor.close();
}
}

public void testFormFootnotes() throws IOException {
XWPFDocument doc = XWPFTestDataSamples.openSampleDocument("form_footnotes.docx");
XWPFWordExtractor extractor = new XWPFWordExtractor(doc);
try (XWPFDocument doc = XWPFTestDataSamples.openSampleDocument("form_footnotes.docx")) {
XWPFWordExtractor extractor = new XWPFWordExtractor(doc);

String text = extractor.getText();
assertContains(text,"testdoc");
assertContains(text,"test phrase");
String text = extractor.getText();
assertContains(text, "testdoc");
assertContains(text, "test phrase");

extractor.close();
extractor.close();
}
}

public void testEndnotes() throws IOException {
XWPFDocument doc = XWPFTestDataSamples.openSampleDocument("endnotes.docx");
XWPFWordExtractor extractor = new XWPFWordExtractor(doc);
String text = extractor.getText();
assertContains(text,"XXX");
assertContains(text,"tilaka [endnoteRef:2]or 'tika'");
try (XWPFDocument doc = XWPFTestDataSamples.openSampleDocument("endnotes.docx")) {
XWPFWordExtractor extractor = new XWPFWordExtractor(doc);
String text = extractor.getText();
assertContains(text, "XXX");
assertContains(text, "tilaka [endnoteRef:2]or 'tika'");

extractor.close();
extractor.close();
}
}

public void testInsertedDeletedText() throws IOException {
XWPFDocument doc = XWPFTestDataSamples.openSampleDocument("delins.docx");
XWPFWordExtractor extractor = new XWPFWordExtractor(doc);
try (XWPFDocument doc = XWPFTestDataSamples.openSampleDocument("delins.docx")) {
XWPFWordExtractor extractor = new XWPFWordExtractor(doc);

assertContains(extractor.getText(),"pendant worn");
assertContains(extractor.getText(),"extremely well");
assertContains(extractor.getText(), "pendant worn");
assertContains(extractor.getText(), "extremely well");

extractor.close();
extractor.close();
}
}

public void testParagraphHeader() throws IOException {
XWPFDocument doc = XWPFTestDataSamples.openSampleDocument("Headers.docx");
XWPFWordExtractor extractor = new XWPFWordExtractor(doc);
try (XWPFDocument doc = XWPFTestDataSamples.openSampleDocument("Headers.docx")) {
XWPFWordExtractor extractor = new XWPFWordExtractor(doc);

assertContains(extractor.getText(),"Section 1");
assertContains(extractor.getText(),"Section 2");
assertContains(extractor.getText(),"Section 3");
assertContains(extractor.getText(), "Section 1");
assertContains(extractor.getText(), "Section 2");
assertContains(extractor.getText(), "Section 3");

extractor.close();
extractor.close();
}
}

/**
* Test that we can open and process .docm
* (macro enabled) docx files (bug #45690)
*
* @throws IOException
*/
public void testDOCMFiles() throws IOException {
XWPFDocument doc = XWPFTestDataSamples.openSampleDocument("45690.docm");
XWPFWordExtractor extractor = new XWPFWordExtractor(doc);
try (XWPFDocument doc = XWPFTestDataSamples.openSampleDocument("45690.docm")) {
XWPFWordExtractor extractor = new XWPFWordExtractor(doc);

assertContains(extractor.getText(),"2004");
assertContains(extractor.getText(),"2008");
assertContains(extractor.getText(),"(120 ");
assertContains(extractor.getText(), "2004");
assertContains(extractor.getText(), "2008");
assertContains(extractor.getText(), "(120 ");

extractor.close();
extractor.close();
}
}

/**
* Test that we handle things like tabs and
* carriage returns properly in the text that
* we're extracting (bug #49189)
*
* @throws IOException
*/
public void testDocTabs() throws IOException {
XWPFDocument doc = XWPFTestDataSamples.openSampleDocument("WithTabs.docx");
XWPFWordExtractor extractor = new XWPFWordExtractor(doc);
try (XWPFDocument doc = XWPFTestDataSamples.openSampleDocument("WithTabs.docx")) {
XWPFWordExtractor extractor = new XWPFWordExtractor(doc);

// Check bits
assertContains(extractor.getText(),"a");
assertContains(extractor.getText(),"\t");
assertContains(extractor.getText(),"b");
// Check bits
assertContains(extractor.getText(), "a");
assertContains(extractor.getText(), "\t");
assertContains(extractor.getText(), "b");

// Now check the first paragraph in total
assertContains(extractor.getText(),"a\tb\n");
// Now check the first paragraph in total
assertContains(extractor.getText(), "a\tb\n");

extractor.close();
extractor.close();
}
}

/**
* The output should not contain field codes, e.g. those specified in the
* w:instrText tag (spec sec. 17.16.23)
*
* @throws IOException
*/
public void testNoFieldCodes() throws IOException {
XWPFDocument doc = XWPFTestDataSamples.openSampleDocument("FieldCodes.docx");
XWPFWordExtractor extractor = new XWPFWordExtractor(doc);
String text = extractor.getText();
assertTrue(text.length() > 0);
assertFalse(text.contains("AUTHOR"));
assertFalse(text.contains("CREATEDATE"));

extractor.close();
try (XWPFDocument doc = XWPFTestDataSamples.openSampleDocument("FieldCodes.docx")) {
XWPFWordExtractor extractor = new XWPFWordExtractor(doc);
String text = extractor.getText();
assertTrue(text.length() > 0);
assertFalse(text.contains("AUTHOR"));
assertFalse(text.contains("CREATEDATE"));

extractor.close();
}
}

/**
* The output should contain the values of simple fields, those specified
* with the fldSimple element (spec sec. 17.16.19)
*
* @throws IOException
*/
public void testFldSimpleContent() throws IOException {
XWPFDocument doc = XWPFTestDataSamples.openSampleDocument("FldSimple.docx");
XWPFWordExtractor extractor = new XWPFWordExtractor(doc);
String text = extractor.getText();
assertTrue(text.length() > 0);
assertContains(text,"FldSimple.docx");
try (XWPFDocument doc = XWPFTestDataSamples.openSampleDocument("FldSimple.docx")) {
XWPFWordExtractor extractor = new XWPFWordExtractor(doc);
String text = extractor.getText();
assertTrue(text.length() > 0);
assertContains(text, "FldSimple.docx");

extractor.close();
extractor.close();
}
}

/**
@@ -312,152 +314,159 @@ public class TestXWPFWordExtractor extends TestCase {
* NoClassDefFoundError for CTAnchor in XWPFRun
*/
public void testDrawings() throws IOException {
XWPFDocument doc = XWPFTestDataSamples.openSampleDocument("drawing.docx");
XWPFWordExtractor extractor = new XWPFWordExtractor(doc);
String text = extractor.getText();
assertTrue(text.length() > 0);
try (XWPFDocument doc = XWPFTestDataSamples.openSampleDocument("drawing.docx")) {
XWPFWordExtractor extractor = new XWPFWordExtractor(doc);
String text = extractor.getText();
assertTrue(text.length() > 0);

extractor.close();
extractor.close();
}
}

/**
* Test for basic extraction of SDT content
*
* @throws IOException
*/
public void testSimpleControlContent() throws IOException {
XWPFDocument doc = XWPFTestDataSamples.openSampleDocument("Bug54849.docx");
String[] targs = new String[]{
"header_rich_text",
"rich_text",
"rich_text_pre_table\nrich_text_cell1\t\t\t\n\t\t\t\n\t\t\t\n\nrich_text_post_table",
"plain_text_no_newlines",
"plain_text_with_newlines1\nplain_text_with_newlines2\n",
"watermelon\n",
"dirt\n",
"4/16/2013\n",
"rich_text_in_cell",
"abc",
"rich_text_in_paragraph_in_cell",
"footer_rich_text",
"footnote_sdt",
"endnote_sdt"
};
XWPFWordExtractor ex = new XWPFWordExtractor(doc);
String s = ex.getText().toLowerCase(Locale.ROOT);
int hits = 0;

for (String targ : targs) {
boolean hit = false;
if (s.contains(targ)) {
hit = true;
hits++;
try (XWPFDocument doc = XWPFTestDataSamples.openSampleDocument("Bug54849.docx")) {
String[] targs = new String[]{
"header_rich_text",
"rich_text",
"rich_text_pre_table\nrich_text_cell1\t\t\t\n\t\t\t\n\t\t\t\n\nrich_text_post_table",
"plain_text_no_newlines",
"plain_text_with_newlines1\nplain_text_with_newlines2\n",
"watermelon\n",
"dirt\n",
"4/16/2013\n",
"rich_text_in_cell",
"abc",
"rich_text_in_paragraph_in_cell",
"footer_rich_text",
"footnote_sdt",
"endnote_sdt"
};
XWPFWordExtractor ex = new XWPFWordExtractor(doc);
String s = ex.getText().toLowerCase(Locale.ROOT);
int hits = 0;

for (String targ : targs) {
boolean hit = false;
if (s.contains(targ)) {
hit = true;
hits++;
}
assertTrue("controlled content loading-" + targ, hit);
}
assertEquals("controlled content loading-" + targ, true, hit);
}
assertEquals("controlled content loading hit count", targs.length, hits);
ex.close();


doc = XWPFTestDataSamples.openSampleDocument("Bug54771a.docx");
targs = new String[]{
"bb",
"test subtitle\n",
"test user\n",
};
ex = new XWPFWordExtractor(doc);
s = ex.getText().toLowerCase(Locale.ROOT);

//At one point in development there were three copies of the text.
//This ensures that there is only one copy.
for (String targ : targs) {
Matcher m = Pattern.compile(targ).matcher(s);
assertEquals("controlled content loading hit count", targs.length, hits);
ex.close();


XWPFDocument doc2 = XWPFTestDataSamples.openSampleDocument("Bug54771a.docx");
targs = new String[]{
"bb",
"test subtitle\n",
"test user\n",
};
ex = new XWPFWordExtractor(doc2);
s = ex.getText().toLowerCase(Locale.ROOT);

//At one point in development there were three copies of the text.
//This ensures that there is only one copy.
for (String targ : targs) {
Matcher m = Pattern.compile(targ).matcher(s);
int hit = 0;
while (m.find()) {
hit++;
}
assertEquals("controlled content loading-" + targ, 1, hit);
}
//"test\n" appears twice: once as the "title" and once in the text.
//This also happens when you save this document as text from MSWord.
Matcher m = Pattern.compile("test\n").matcher(s);
int hit = 0;
while (m.find()) {
hit++;
}
assertEquals("controlled content loading-" + targ, 1, hit);
}
//"test\n" appears twice: once as the "title" and once in the text.
//This also happens when you save this document as text from MSWord.
Matcher m = Pattern.compile("test\n").matcher(s);
int hit = 0;
while (m.find()) {
hit++;
assertEquals("test<N>", 2, hit);
ex.close();
}
assertEquals("test<N>", 2, hit);
ex.close();
}

/**
* No Header or Footer in document
*/
public void testBug55733() throws Exception {
XWPFDocument doc = XWPFTestDataSamples.openSampleDocument("55733.docx");
XWPFWordExtractor extractor = new XWPFWordExtractor(doc);
try (XWPFDocument doc = XWPFTestDataSamples.openSampleDocument("55733.docx")) {
XWPFWordExtractor extractor = new XWPFWordExtractor(doc);

// Check it gives text without error
extractor.getText();
extractor.close();
// Check it gives text without error
extractor.getText();
extractor.close();
}
}

public void testCheckboxes() throws IOException {
XWPFDocument doc = XWPFTestDataSamples.openSampleDocument("checkboxes.docx");
XWPFWordExtractor extractor = new XWPFWordExtractor(doc);

assertEquals("This is a small test for checkboxes \nunchecked: |_| \n" +
"Or checked: |X|\n\n\n\n\n" +
"Test a checkbox within a textbox: |_| -> |X|\n\n\n" +
"In Table:\n|_|\t|X|\n\n\n" +
"In Sequence:\n|X||_||X|\n", extractor.getText());
extractor.close();
try (XWPFDocument doc = XWPFTestDataSamples.openSampleDocument("checkboxes.docx")) {
XWPFWordExtractor extractor = new XWPFWordExtractor(doc);

assertEquals("This is a small test for checkboxes \nunchecked: |_| \n" +
"Or checked: |X|\n\n\n\n\n" +
"Test a checkbox within a textbox: |_| -> |X|\n\n\n" +
"In Table:\n|_|\t|X|\n\n\n" +
"In Sequence:\n|X||_||X|\n", extractor.getText());
extractor.close();
}
}
public void testMultipleBodyBug() throws IOException {
XWPFDocument doc = XWPFTestDataSamples.openSampleDocument("MultipleBodyBug.docx");
XWPFWordExtractor extractor = new XWPFWordExtractor(doc);
assertEquals("START BODY 1 The quick, brown fox jumps over a lazy dog. END BODY 1.\n"
+ "START BODY 2 The quick, brown fox jumps over a lazy dog. END BODY 2.\n"
+ "START BODY 3 The quick, brown fox jumps over a lazy dog. END BODY 3.\n",
extractor.getText());
extractor.close();
try (XWPFDocument doc = XWPFTestDataSamples.openSampleDocument("MultipleBodyBug.docx")) {
XWPFWordExtractor extractor = new XWPFWordExtractor(doc);
assertEquals("START BODY 1 The quick, brown fox jumps over a lazy dog. END BODY 1.\n"
+ "START BODY 2 The quick, brown fox jumps over a lazy dog. END BODY 2.\n"
+ "START BODY 3 The quick, brown fox jumps over a lazy dog. END BODY 3.\n",
extractor.getText());
extractor.close();
}
}

public void testPhonetic() throws IOException {
XWPFDocument doc = XWPFTestDataSamples.openSampleDocument("61470.docx");
XWPFWordExtractor extractor = new XWPFWordExtractor(doc);
//expect: baseText (phoneticText)
assertEquals("\u6771\u4EAC (\u3068\u3046\u304D\u3087\u3046)", extractor.getText().trim());
extractor.close();
extractor = new XWPFWordExtractor(doc);
extractor.setConcatenatePhoneticRuns(false);
assertEquals("\u6771\u4EAC", extractor.getText().trim());
try (XWPFDocument doc = XWPFTestDataSamples.openSampleDocument("61470.docx")) {
XWPFWordExtractor extractor = new XWPFWordExtractor(doc);
//expect: baseText (phoneticText)
assertEquals("\u6771\u4EAC (\u3068\u3046\u304D\u3087\u3046)", extractor.getText().trim());
extractor.close();
extractor = new XWPFWordExtractor(doc);
extractor.setConcatenatePhoneticRuns(false);
assertEquals("\u6771\u4EAC", extractor.getText().trim());
}
}

public void testCTPictureBase() throws IOException {
//This forces ctpicturebase to be included in the poi-ooxml-schemas jar
XWPFDocument doc = XWPFTestDataSamples.openSampleDocument("61991.docx");
XWPFWordExtractor extractor = new XWPFWordExtractor(doc);
String txt = extractor.getText();
assertContains(txt, "Sequencing data");
extractor.close();
try (XWPFDocument doc = XWPFTestDataSamples.openSampleDocument("61991.docx")) {
XWPFWordExtractor extractor = new XWPFWordExtractor(doc);
String txt = extractor.getText();
assertContains(txt, "Sequencing data");
extractor.close();
}
}

public void testGlossary() throws IOException {
XWPFDocument doc = XWPFTestDataSamples.openSampleDocument("60316.dotx");
XWPFWordExtractor extractor = new XWPFWordExtractor(doc);
String txt = extractor.getText();
assertContains(txt, "Getting the perfect");
//this content appears only in the glossary document
//once we add processing for this, we can change this to contains
assertNotContained(txt, "table rows");
try (XWPFDocument doc = XWPFTestDataSamples.openSampleDocument("60316.dotx")) {
XWPFWordExtractor extractor = new XWPFWordExtractor(doc);
String txt = extractor.getText();
assertContains(txt, "Getting the perfect");
//this content appears only in the glossary document
//once we add processing for this, we can change this to contains
assertNotContained(txt, "table rows");
}
}

public void testPartsInTemplate() throws IOException {
XWPFDocument doc = XWPFTestDataSamples.openSampleDocument("60316b.dotx");
XWPFWordExtractor extractor = new XWPFWordExtractor(doc);
String txt = extractor.getText();
assertContains(txt, "header 2");
assertContains(txt, "footer 1");
try (XWPFDocument doc = XWPFTestDataSamples.openSampleDocument("60316b.dotx")) {
XWPFWordExtractor extractor = new XWPFWordExtractor(doc);
String txt = extractor.getText();
assertContains(txt, "header 2");
assertContains(txt, "footer 1");
}
}
}

+ 19
- 4
src/ooxml/testcases/org/apache/poi/xwpf/model/TestXWPFDecorators.java View File

@@ -19,27 +19,41 @@ package org.apache.poi.xwpf.model;

import java.io.IOException;

import junit.framework.TestCase;
import org.apache.poi.xwpf.XWPFTestDataSamples;
import org.apache.poi.xwpf.usermodel.XWPFDocument;
import org.apache.poi.xwpf.usermodel.XWPFHyperlinkRun;
import org.apache.poi.xwpf.usermodel.XWPFParagraph;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;

import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertTrue;

/**
* Tests for the various XWPF decorators
*/
public class TestXWPFDecorators extends TestCase {
public class TestXWPFDecorators {
private XWPFDocument simple;
private XWPFDocument hyperlink;
private XWPFDocument comments;

@Override
protected void setUp() throws IOException {
@Before
public void setUp() throws IOException {
simple = XWPFTestDataSamples.openSampleDocument("SampleDoc.docx");
hyperlink = XWPFTestDataSamples.openSampleDocument("TestDocument.docx");
comments = XWPFTestDataSamples.openSampleDocument("WordWithAttachments.docx");
}

@After
public void tearDown() throws IOException {
simple.close();
hyperlink.close();
comments.close();
}

@Test
public void testHyperlink() {
XWPFParagraph ps;
XWPFParagraph ph;
@@ -66,6 +80,7 @@ public class TestXWPFDecorators extends TestCase {
assertEquals("http://poi.apache.org/", link.getHyperlink(hyperlink).getURL());
}

@Test
public void testComments() {
int numComments = 0;
for (XWPFParagraph p : comments.getParagraphs()) {

+ 77
- 77
src/ooxml/testcases/org/apache/poi/xwpf/usermodel/TestXWPFBugs.java View File

@@ -37,80 +37,79 @@ public class TestXWPFBugs {
"\nK\u0131rm\u0131z\u0131 don,\n" +
"\ngel bizim bah\u00e7eye kon,\n" +
"\nsar\u0131 limon";
XWPFDocument doc = new XWPFDocument();
XWPFRun run = doc.createParagraph().createRun();
try (XWPFDocument doc = new XWPFDocument()) {
XWPFRun run = doc.createParagraph().createRun();

for (String str : blabla.split("\n")) {
run.setText(str);
run.addBreak();
}
for (String str : blabla.split("\n")) {
run.setText(str);
run.addBreak();
}

run.setFontFamily("Times New Roman");
run.setFontSize(20);
assertEquals(run.getFontFamily(), "Times New Roman");
assertEquals(run.getFontFamily(FontCharRange.cs), "Times New Roman");
assertEquals(run.getFontFamily(FontCharRange.eastAsia), "Times New Roman");
assertEquals(run.getFontFamily(FontCharRange.hAnsi), "Times New Roman");
run.setFontFamily("Arial", FontCharRange.hAnsi);
assertEquals(run.getFontFamily(FontCharRange.hAnsi), "Arial");
doc.close();
run.setFontFamily("Times New Roman");
run.setFontSize(20);
assertEquals(run.getFontFamily(), "Times New Roman");
assertEquals(run.getFontFamily(FontCharRange.cs), "Times New Roman");
assertEquals(run.getFontFamily(FontCharRange.eastAsia), "Times New Roman");
assertEquals(run.getFontFamily(FontCharRange.hAnsi), "Times New Roman");
run.setFontFamily("Arial", FontCharRange.hAnsi);
assertEquals(run.getFontFamily(FontCharRange.hAnsi), "Arial");
}
}

@Test
public void bug57312_NullPointException() throws IOException {
XWPFDocument doc = XWPFTestDataSamples.openSampleDocument("57312.docx");
assertNotNull(doc);
try (XWPFDocument doc = XWPFTestDataSamples.openSampleDocument("57312.docx")) {
assertNotNull(doc);

for (IBodyElement bodyElement : doc.getBodyElements()) {
BodyElementType elementType = bodyElement.getElementType();
for (IBodyElement bodyElement : doc.getBodyElements()) {
BodyElementType elementType = bodyElement.getElementType();

if (elementType == BodyElementType.PARAGRAPH) {
XWPFParagraph paragraph = (XWPFParagraph) bodyElement;
if (elementType == BodyElementType.PARAGRAPH) {
XWPFParagraph paragraph = (XWPFParagraph) bodyElement;

for (IRunElement iRunElem : paragraph.getIRuns()) {
for (IRunElement iRunElem : paragraph.getIRuns()) {

if (iRunElem instanceof XWPFRun) {
XWPFRun runElement = (XWPFRun) iRunElem;
if (iRunElem instanceof XWPFRun) {
XWPFRun runElement = (XWPFRun) iRunElem;

UnderlinePatterns underline = runElement.getUnderline();
assertNotNull(underline);
UnderlinePatterns underline = runElement.getUnderline();
assertNotNull(underline);

//System.out.println("Found: " + underline + ": " + runElement.getText(0));
//System.out.println("Found: " + underline + ": " + runElement.getText(0));
}
}
}
}
}
doc.close();
}

@Test
public void bug57495_getTableArrayInDoc() throws IOException {
XWPFDocument doc =new XWPFDocument();
//let's create a few tables for the test
for(int i=0;i<3;i++) {
doc.createTable(2, 2);
try (XWPFDocument doc = new XWPFDocument()) {
//let's create a few tables for the test
for (int i = 0; i < 3; i++) {
doc.createTable(2, 2);
}
XWPFTable table = doc.getTableArray(0);
assertNotNull(table);
//let's check also that returns the correct table
XWPFTable same = doc.getTables().get(0);
assertEquals(table, same);
}
XWPFTable table = doc.getTableArray(0);
assertNotNull(table);
//let's check also that returns the correct table
XWPFTable same = doc.getTables().get(0);
assertEquals(table, same);
doc.close();
}

@Test
public void bug57495_getParagraphArrayInTableCell() throws IOException {
XWPFDocument doc =new XWPFDocument();
//let's create a table for the test
XWPFTable table = doc.createTable(2, 2);
assertNotNull(table);
XWPFParagraph p = table.getRow(0).getCell(0).getParagraphArray(0);
assertNotNull(p);
//let's check also that returns the correct paragraph
XWPFParagraph same = table.getRow(0).getCell(0).getParagraphs().get(0);
assertEquals(p, same);
doc.close();
try (XWPFDocument doc = new XWPFDocument()) {
//let's create a table for the test
XWPFTable table = doc.createTable(2, 2);
assertNotNull(table);
XWPFParagraph p = table.getRow(0).getCell(0).getParagraphArray(0);
assertNotNull(p);
//let's check also that returns the correct paragraph
XWPFParagraph same = table.getRow(0).getCell(0).getParagraphs().get(0);
assertEquals(p, same);
}
}
@Test
@@ -123,9 +122,9 @@ public class TestXWPFBugs {

@Test
public void test56392() throws IOException {
XWPFDocument doc = XWPFTestDataSamples.openSampleDocument("56392.docx");
assertNotNull(doc);
doc.close();
try (XWPFDocument doc = XWPFTestDataSamples.openSampleDocument("56392.docx")) {
assertNotNull(doc);
}
}

/**
@@ -133,15 +132,15 @@ public class TestXWPFBugs {
*/
@Test
public void test57829() throws IOException {
XWPFDocument doc = XWPFTestDataSamples.openSampleDocument("sample.docx");
assertNotNull(doc);
assertEquals(3, doc.getParagraphs().size());
try (XWPFDocument doc = XWPFTestDataSamples.openSampleDocument("sample.docx")) {
assertNotNull(doc);
assertEquals(3, doc.getParagraphs().size());

for (XWPFParagraph paragraph : doc.getParagraphs()) {
paragraph.removeRun(0);
assertNotNull(paragraph.getText());
for (XWPFParagraph paragraph : doc.getParagraphs()) {
paragraph.removeRun(0);
assertNotNull(paragraph.getText());
}
}
doc.close();
}
/**
@@ -149,29 +148,30 @@ public class TestXWPFBugs {
*/
@Test
public void test58618() throws IOException {
XWPFDocument doc = XWPFTestDataSamples.openSampleDocument("58618.docx");
XWPFParagraph para = (XWPFParagraph)doc.getBodyElements().get(0);
assertNotNull(para);
assertEquals("Some text some hyper links link link and some text.....", para.getText());
XWPFRun run = para.insertNewRun(para.getRuns().size());
run.setText("New Text");
assertEquals("Some text some hyper links link link and some text.....New Text", para.getText());
para.removeRun(para.getRuns().size() -2);
assertEquals("Some text some hyper links link linkNew Text", para.getText());
doc.close();
try (XWPFDocument doc = XWPFTestDataSamples.openSampleDocument("58618.docx")) {
XWPFParagraph para = (XWPFParagraph) doc.getBodyElements().get(0);
assertNotNull(para);
assertEquals("Some text some hyper links link link and some text.....", para.getText());
XWPFRun run = para.insertNewRun(para.getRuns().size());
run.setText("New Text");
assertEquals("Some text some hyper links link link and some text.....New Text", para.getText());
para.removeRun(para.getRuns().size() - 2);
assertEquals("Some text some hyper links link linkNew Text", para.getText());
}
}

@Test
public void test59378() throws IOException {
XWPFDocument doc = XWPFTestDataSamples.openSampleDocument("59378.docx");
ByteArrayOutputStream out = new ByteArrayOutputStream();
doc.write(out);
out.close();
try (XWPFDocument doc = XWPFTestDataSamples.openSampleDocument("59378.docx")) {
ByteArrayOutputStream out = new ByteArrayOutputStream();
doc.write(out);
out.close();

XWPFDocument doc2 = new XWPFDocument(new ByteArrayInputStream(out.toByteArray()));
doc2.close();
XWPFDocument doc2 = new XWPFDocument(new ByteArrayInputStream(out.toByteArray()));
doc2.close();

XWPFDocument docBack = XWPFTestDataSamples.writeOutAndReadBack(doc);
docBack.close();
XWPFDocument docBack = XWPFTestDataSamples.writeOutAndReadBack(doc);
docBack.close();
}
}
}

Loading…
Cancel
Save