mirror of https://github.com/apache/poi.git
Fix bug #61490, for some tables in documents, we should not remove the last cell
Check the expected number of cells to see if the last cell should be removed. git-svn-id: https://svn.apache.org/repos/asf/poi/trunk@1866055 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
parent
734d6911d8
commit
be52865b38
|
@ -174,7 +174,8 @@ public final class TableRow extends Range
|
||||||
cells.add( tableCell );
|
cells.add( tableCell );
|
||||||
}
|
}
|
||||||
|
|
||||||
if ( !cells.isEmpty() )
|
// sometimes there are "fake" cells which we need to exclude
|
||||||
|
if ( !cells.isEmpty() && cells.size() != expectedCellsCount )
|
||||||
{
|
{
|
||||||
TableCell lastCell = cells.get( cells.size() - 1 );
|
TableCell lastCell = cells.get( cells.size() - 1 );
|
||||||
if ( lastCell.numParagraphs() == 1
|
if ( lastCell.numParagraphs() == 1
|
||||||
|
@ -196,7 +197,7 @@ public final class TableRow extends Range
|
||||||
_tprops.setItcMac( (short) cells.size() );
|
_tprops.setItcMac( (short) cells.size() );
|
||||||
}
|
}
|
||||||
|
|
||||||
_cells = cells.toArray( new TableCell[cells.size()] );
|
_cells = cells.toArray(new TableCell[0]);
|
||||||
_cellsFound = true;
|
_cellsFound = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -20,6 +20,7 @@ import static org.apache.poi.POITestCase.assertContains;
|
||||||
import static org.apache.poi.POITestCase.assertNotContained;
|
import static org.apache.poi.POITestCase.assertNotContained;
|
||||||
import static org.junit.Assert.assertEquals;
|
import static org.junit.Assert.assertEquals;
|
||||||
import static org.junit.Assert.assertNotNull;
|
import static org.junit.Assert.assertNotNull;
|
||||||
|
import static org.junit.Assert.assertTrue;
|
||||||
|
|
||||||
import java.io.ByteArrayOutputStream;
|
import java.io.ByteArrayOutputStream;
|
||||||
import java.io.File;
|
import java.io.File;
|
||||||
|
@ -39,15 +40,17 @@ import org.apache.poi.hwpf.converter.AbstractWordUtils;
|
||||||
import org.apache.poi.hwpf.converter.WordToTextConverter;
|
import org.apache.poi.hwpf.converter.WordToTextConverter;
|
||||||
import org.apache.poi.hwpf.extractor.Word6Extractor;
|
import org.apache.poi.hwpf.extractor.Word6Extractor;
|
||||||
import org.apache.poi.hwpf.extractor.WordExtractor;
|
import org.apache.poi.hwpf.extractor.WordExtractor;
|
||||||
import org.apache.poi.hwpf.model.*;
|
import org.apache.poi.hwpf.model.FieldsDocumentPart;
|
||||||
|
import org.apache.poi.hwpf.model.FileInformationBlock;
|
||||||
|
import org.apache.poi.hwpf.model.PicturesTable;
|
||||||
|
import org.apache.poi.hwpf.model.PlexOfField;
|
||||||
|
import org.apache.poi.hwpf.model.SubdocumentType;
|
||||||
import org.apache.poi.poifs.filesystem.POIFSFileSystem;
|
import org.apache.poi.poifs.filesystem.POIFSFileSystem;
|
||||||
import org.apache.poi.util.IOUtils;
|
import org.apache.poi.util.IOUtils;
|
||||||
import org.apache.poi.util.POILogFactory;
|
import org.apache.poi.util.POILogFactory;
|
||||||
import org.apache.poi.util.POILogger;
|
import org.apache.poi.util.POILogger;
|
||||||
import org.junit.Test;
|
import org.junit.Test;
|
||||||
|
|
||||||
import junit.framework.TestCase;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Test different problems reported in the Apache Bugzilla
|
* Test different problems reported in the Apache Bugzilla
|
||||||
* against HWPF
|
* against HWPF
|
||||||
|
@ -61,7 +64,7 @@ public class TestBugs{
|
||||||
.replaceAll("\r", "\n").trim();
|
.replaceAll("\r", "\n").trim();
|
||||||
String newActual = actual.replaceAll("\r\n", "\n" )
|
String newActual = actual.replaceAll("\r\n", "\n" )
|
||||||
.replaceAll("\r", "\n").trim();
|
.replaceAll("\r", "\n").trim();
|
||||||
TestCase.assertEquals(newExpected, newActual);
|
assertEquals(newExpected, newActual);
|
||||||
}
|
}
|
||||||
|
|
||||||
private static void assertTableStructures(Range expected, Range actual ) {
|
private static void assertTableStructures(Range expected, Range actual ) {
|
||||||
|
@ -72,7 +75,7 @@ public class TestBugs{
|
||||||
Paragraph actParagraph = actual.getParagraph(p);
|
Paragraph actParagraph = actual.getParagraph(p);
|
||||||
|
|
||||||
assertEqualsIgnoreNewline(expParagraph.text(), actParagraph.text());
|
assertEqualsIgnoreNewline(expParagraph.text(), actParagraph.text());
|
||||||
assertEquals("Diffent isInTable flags for paragraphs #" + p
|
assertEquals("Different isInTable flags for paragraphs #" + p
|
||||||
+ " -- " + expParagraph + " -- " + actParagraph + ".",
|
+ " -- " + expParagraph + " -- " + actParagraph + ".",
|
||||||
expParagraph.isInTable(), actParagraph.isInTable());
|
expParagraph.isInTable(), actParagraph.isInTable());
|
||||||
assertEquals(expParagraph.isTableRowEnd(),
|
assertEquals(expParagraph.isTableRowEnd(),
|
||||||
|
@ -98,8 +101,8 @@ public class TestBugs{
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private String getText(String samplefile) throws IOException {
|
private String getText(String sampleFile) throws IOException {
|
||||||
HWPFDocument doc = HWPFTestDataSamples.openSampleFile(samplefile);
|
HWPFDocument doc = HWPFTestDataSamples.openSampleFile(sampleFile);
|
||||||
WordExtractor extractor = new WordExtractor(doc);
|
WordExtractor extractor = new WordExtractor(doc);
|
||||||
try {
|
try {
|
||||||
return extractor.getText();
|
return extractor.getText();
|
||||||
|
@ -667,7 +670,7 @@ public class TestBugs{
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Bug 52032 - [BUG] & [partial-PATCH] HWPF - ArrayIndexOutofBoundsException
|
* Bug 52032 - [BUG] & [partial-PATCH] HWPF - ArrayIndexOutOfBoundsException
|
||||||
* with no stack trace (broken after revision 1178063)
|
* with no stack trace (broken after revision 1178063)
|
||||||
*/
|
*/
|
||||||
@Test
|
@Test
|
||||||
|
@ -676,7 +679,7 @@ public class TestBugs{
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Bug 52032 - [BUG] & [partial-PATCH] HWPF - ArrayIndexOutofBoundsException
|
* Bug 52032 - [BUG] & [partial-PATCH] HWPF - ArrayIndexOutOfBoundsException
|
||||||
* with no stack trace (broken after revision 1178063)
|
* with no stack trace (broken after revision 1178063)
|
||||||
*/
|
*/
|
||||||
@Test
|
@Test
|
||||||
|
@ -685,7 +688,7 @@ public class TestBugs{
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Bug 52032 - [BUG] & [partial-PATCH] HWPF - ArrayIndexOutofBoundsException
|
* Bug 52032 - [BUG] & [partial-PATCH] HWPF - ArrayIndexOutOfBoundsException
|
||||||
* with no stack trace (broken after revision 1178063)
|
* with no stack trace (broken after revision 1178063)
|
||||||
*/
|
*/
|
||||||
@Test
|
@Test
|
||||||
|
@ -782,7 +785,7 @@ public class TestBugs{
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Save away and re-read the document to prove the chages are permanent
|
// Save away and re-read the document to prove the changes are permanent
|
||||||
document = HWPFTestDataSamples.writeOutAndReadBack(document);
|
document = HWPFTestDataSamples.writeOutAndReadBack(document);
|
||||||
overallRange = document.getOverallRange();
|
overallRange = document.getOverallRange();
|
||||||
numParas = overallRange.numParagraphs();
|
numParas = overallRange.numParagraphs();
|
||||||
|
@ -871,4 +874,22 @@ public class TestBugs{
|
||||||
|
|
||||||
document.close();
|
document.close();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void test61490CellCountInTable() throws Exception {
|
||||||
|
try(HWPFDocument doc = HWPFTestDataSamples.openSampleFile("61490.doc")){
|
||||||
|
Range range = doc.getRange();
|
||||||
|
|
||||||
|
System.out.println("print table");
|
||||||
|
TableIterator tableIter = new TableIterator(range);
|
||||||
|
assertTrue(tableIter.hasNext());
|
||||||
|
Table table = tableIter.next();
|
||||||
|
TableRow row = table.getRow(2);
|
||||||
|
assertEquals(3, row.numCells());
|
||||||
|
for(int cellIdx = 0;cellIdx < row.numCells(); cellIdx++) {
|
||||||
|
TableCell cell = row.getCell(cellIdx);
|
||||||
|
assertEquals("3" + (cellIdx+1), cell.text().trim());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
Binary file not shown.
Loading…
Reference in New Issue