Apply patch to fix bug 57495: getTableArray method can not get 0 pos table

git-svn-id: https://svn.apache.org/repos/asf/poi/trunk@1734694 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
Dominik Stadler 2016-03-12 11:45:34 +00:00
parent 06083f85f4
commit 2b28cd97a3
6 changed files with 252 additions and 196 deletions

View File

@ -48,11 +48,20 @@ public class Units {
/**
* Converts points to EMUs
* @param points points
* @return emus
* @return EMUs
*/
public static int toEMU(double points){
return (int)Math.rint(EMU_PER_POINT*points);
}
/**
* Converts pixels to EMUs
* @param pixels pixels
* @return EMUs
*/
public static int pixelToEMU(int pixels) {
return pixels*EMU_PER_PIXEL;
}
/**
* Converts EMUs to points

View File

@ -335,7 +335,7 @@ public class XWPFDocument extends POIXMLDocument implements Document, IBody {
*/
@Override
public XWPFTable getTableArray(int pos) {
if (pos > 0 && pos < tables.size()) {
if (pos >= 0 && pos < tables.size()) {
return tables.get(pos);
}
return null;
@ -349,7 +349,10 @@ public class XWPFDocument extends POIXMLDocument implements Document, IBody {
}
public XWPFFooter getFooterArray(int pos) {
return footers.get(pos);
if(pos >=0 && pos < footers.size()) {
return footers.get(pos);
}
return null;
}
/**
@ -360,7 +363,10 @@ public class XWPFDocument extends POIXMLDocument implements Document, IBody {
}
public XWPFHeader getHeaderArray(int pos) {
return headers.get(pos);
if(pos >=0 && pos < headers.size()) {
return headers.get(pos);
}
return null;
}
public String getTblStyle(XWPFTable table) {

View File

@ -1,32 +1,33 @@
/* ====================================================================
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.apache.poi.xwpf.usermodel;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import org.apache.poi.POIXMLDocumentPart;
import org.apache.xmlbeans.XmlCursor;
import org.apache.xmlbeans.XmlObject;
import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTFtnEdn;
import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTP;
import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTRow;
import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTSdtBlock;
/* ====================================================================
/* ====================================================================
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.apache.poi.xwpf.usermodel;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import org.apache.poi.POIXMLDocumentPart;
import org.apache.xmlbeans.XmlCursor;
import org.apache.xmlbeans.XmlObject;
import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTFtnEdn;
import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTP;
import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTRow;
import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTSdtBlock;
import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTTbl;
import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTTc;
@ -36,8 +37,8 @@ public class XWPFFootnote implements Iterable<XWPFParagraph>, IBody {
private List<XWPFPictureData> pictures = new ArrayList<XWPFPictureData>();
private List<IBodyElement> bodyElements = new ArrayList<IBodyElement>();
private CTFtnEdn ctFtnEdn;
private XWPFFootnotes footnotes;
private CTFtnEdn ctFtnEdn;
private XWPFFootnotes footnotes;
private XWPFDocument document;
public XWPFFootnote(CTFtnEdn note, XWPFFootnotes xFootnotes) {
@ -85,16 +86,16 @@ public class XWPFFootnote implements Iterable<XWPFParagraph>, IBody {
return paragraphs.iterator();
}
public List<XWPFTable> getTables() {
return tables;
}
public List<XWPFPictureData> getPictures() {
return pictures;
}
public List<IBodyElement> getBodyElements() {
return bodyElements;
public List<XWPFTable> getTables() {
return tables;
}
public List<XWPFPictureData> getPictures() {
return pictures;
}
public List<IBodyElement> getBodyElements() {
return bodyElements;
}
public CTFtnEdn getCTFtnEdn() {
@ -106,16 +107,16 @@ public class XWPFFootnote implements Iterable<XWPFParagraph>, IBody {
}
/**
* @param pos in table array
* @return The table at position pos
* @param pos in table array
* @return The table at position pos
* @see org.apache.poi.xwpf.usermodel.IBody#getTableArray(int)
*/
public XWPFTable getTableArray(int pos) {
if (pos > 0 && pos < tables.size()) {
if (pos >= 0 && pos < tables.size()) {
return tables.get(pos);
}
return null;
}
}
/**
* inserts an existing XWPFTable to the arrays bodyElements and tables
@ -123,8 +124,8 @@ public class XWPFFootnote implements Iterable<XWPFParagraph>, IBody {
* @param pos
* @param table
* @see org.apache.poi.xwpf.usermodel.IBody#insertTable(int pos, XWPFTable table)
*/
public void insertTable(int pos, XWPFTable table) {
*/
public void insertTable(int pos, XWPFTable table) {
bodyElements.add(pos, table);
int i = 0;
for (CTTbl tbl : ctFtnEdn.getTblArray()) {
@ -132,11 +133,11 @@ public class XWPFFootnote implements Iterable<XWPFParagraph>, IBody {
break;
}
i++;
}
tables.add(i, table);
}
}
tables.add(i, table);
}
/**
* if there is a corresponding {@link XWPFTable} of the parameter ctTable in the tableList of this header
* the method will return this table
@ -153,8 +154,8 @@ public class XWPFFootnote implements Iterable<XWPFParagraph>, IBody {
return table;
}
return null;
}
}
/**
* if there is a corresponding {@link XWPFParagraph} of the parameter ctTable in the paragraphList of this header or footer
* the method will return this paragraph
@ -171,7 +172,7 @@ public class XWPFFootnote implements Iterable<XWPFParagraph>, IBody {
return paragraph;
}
return null;
}
}
/**
* Returns the paragraph that holds
@ -180,9 +181,11 @@ public class XWPFFootnote implements Iterable<XWPFParagraph>, IBody {
* @see org.apache.poi.xwpf.usermodel.IBody#getParagraphArray(int pos)
*/
public XWPFParagraph getParagraphArray(int pos) {
return paragraphs.get(pos);
}
if(pos >=0 && pos < paragraphs.size()) {
return paragraphs.get(pos);
}
return null;
}
/**
* get the TableCell which belongs to the TableCell
@ -190,7 +193,7 @@ public class XWPFFootnote implements Iterable<XWPFParagraph>, IBody {
* @param cell
* @see org.apache.poi.xwpf.usermodel.IBody#getTableCell(CTTc cell)
*/
public XWPFTableCell getTableCell(CTTc cell) {
public XWPFTableCell getTableCell(CTTc cell) {
XmlCursor cursor = cell.newCursor();
cursor.toParent();
XmlObject o = cursor.getObject();
@ -210,8 +213,11 @@ public class XWPFFootnote implements Iterable<XWPFParagraph>, IBody {
return null;
}
XWPFTableRow tableRow = table.getRow(row);
if(tableRow == null){
return null;
}
return tableRow.getTableCell(cell);
}
}
/**
* verifies that cursor is on the right position
@ -263,12 +269,12 @@ public class XWPFFootnote implements Iterable<XWPFParagraph>, IBody {
i++;
}
bodyElements.add(i, newT);
cursor = t.newCursor();
cursor.toEndToken();
return newT;
}
return null;
}
cursor = t.newCursor();
cursor.toEndToken();
return newT;
}
return null;
}
/**
* add a new paragraph at position of the cursor
@ -303,12 +309,12 @@ public class XWPFFootnote implements Iterable<XWPFParagraph>, IBody {
i++;
}
bodyElements.add(i, newP);
cursor.toCursor(p.newCursor());
cursor.toEndToken();
return newP;
}
return null;
}
cursor.toCursor(p.newCursor());
cursor.toEndToken();
return newP;
}
return null;
}
/**
* add a new table to the end of the footnote
@ -316,13 +322,13 @@ public class XWPFFootnote implements Iterable<XWPFParagraph>, IBody {
* @param table
* @return the added XWPFTable
*/
public XWPFTable addNewTbl(CTTbl table) {
CTTbl newTable = ctFtnEdn.addNewTbl();
newTable.set(table);
XWPFTable xTable = new XWPFTable(newTable, this);
tables.add(xTable);
return xTable;
}
public XWPFTable addNewTbl(CTTbl table) {
CTTbl newTable = ctFtnEdn.addNewTbl();
newTable.set(table);
XWPFTable xTable = new XWPFTable(newTable, this);
tables.add(xTable);
return xTable;
}
/**
* add a new paragraph to the end of the footnote
@ -330,14 +336,14 @@ public class XWPFFootnote implements Iterable<XWPFParagraph>, IBody {
* @param paragraph
* @return the added XWPFParagraph
*/
public XWPFParagraph addNewParagraph(CTP paragraph) {
CTP newPara = ctFtnEdn.addNewP();
newPara.set(paragraph);
XWPFParagraph xPara = new XWPFParagraph(newPara, this);
paragraphs.add(xPara);
return xPara;
}
public XWPFParagraph addNewParagraph(CTP paragraph) {
CTP newPara = ctFtnEdn.addNewP();
newPara.set(paragraph);
XWPFParagraph xPara = new XWPFParagraph(newPara, this);
paragraphs.add(xPara);
return xPara;
}
/**
* @see org.apache.poi.xwpf.usermodel.IBody#getXWPFDocument()
*/
@ -351,8 +357,8 @@ public class XWPFFootnote implements Iterable<XWPFParagraph>, IBody {
* @see org.apache.poi.xwpf.usermodel.IBody#getPart()
*/
public POIXMLDocumentPart getPart() {
return footnotes;
}
return footnotes;
}
/**
* get the PartType of the body
@ -360,6 +366,6 @@ public class XWPFFootnote implements Iterable<XWPFParagraph>, IBody {
* @see org.apache.poi.xwpf.usermodel.IBody#getPartType()
*/
public BodyType getPartType() {
return BodyType.FOOTNOTE;
}
}
return BodyType.FOOTNOTE;
}
}

View File

@ -212,8 +212,10 @@ public abstract class XWPFHeaderFooter extends POIXMLDocumentPart implements IBo
* the text of the header or footer.
*/
public XWPFParagraph getParagraphArray(int pos) {
return paragraphs.get(pos);
if(pos >= 0 && pos<paragraphs.size()){
return paragraphs.get(pos);
}
return null;
}
/**
@ -431,8 +433,7 @@ public abstract class XWPFHeaderFooter extends POIXMLDocumentPart implements IBo
* @see org.apache.poi.xwpf.usermodel.IBody#getTableArray(int)
*/
public XWPFTable getTableArray(int pos) {
if (pos > 0 && pos < tables.size()) {
if (pos >= 0 && pos < tables.size()) {
return tables.get(pos);
}
return null;

View File

@ -1,42 +1,42 @@
/* ====================================================================
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.apache.poi.xwpf.usermodel;
import java.util.ArrayList;
import java.util.Collections;
import java.util.EnumMap;
import java.util.HashMap;
import java.util.List;
import org.apache.poi.POIXMLDocumentPart;
import org.apache.poi.util.Internal;
import org.apache.xmlbeans.XmlCursor;
import org.apache.xmlbeans.XmlObject;
import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTP;
import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTRow;
import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTSdtBlock;
import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTSdtRun;
import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTShd;
import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTTbl;
import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTTc;
import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTTcPr;
import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTVerticalJc;
import org.openxmlformats.schemas.wordprocessingml.x2006.main.STShd;
import org.openxmlformats.schemas.wordprocessingml.x2006.main.STVerticalJc;
/* ====================================================================
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.apache.poi.xwpf.usermodel;
import java.util.ArrayList;
import java.util.Collections;
import java.util.EnumMap;
import java.util.HashMap;
import java.util.List;
import org.apache.poi.POIXMLDocumentPart;
import org.apache.poi.util.Internal;
import org.apache.xmlbeans.XmlCursor;
import org.apache.xmlbeans.XmlObject;
import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTP;
import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTRow;
import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTSdtBlock;
import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTSdtRun;
import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTShd;
import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTTbl;
import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTTc;
import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTTcPr;
import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTVerticalJc;
import org.openxmlformats.schemas.wordprocessingml.x2006.main.STShd;
import org.openxmlformats.schemas.wordprocessingml.x2006.main.STVerticalJc;
/**
* Represents a Cell within a {@link XWPFTable}. The
@ -46,20 +46,20 @@ public class XWPFTableCell implements IBody, ICell {
private static EnumMap<XWPFVertAlign, STVerticalJc.Enum> alignMap;
// Create a map from the STVerticalJc.Enum values to the XWPF-level enums
private static HashMap<Integer, XWPFVertAlign> stVertAlignTypeMap;
static {
// populate enum maps
alignMap = new EnumMap<XWPFVertAlign, STVerticalJc.Enum>(XWPFVertAlign.class);
alignMap.put(XWPFVertAlign.TOP, STVerticalJc.Enum.forInt(STVerticalJc.INT_TOP));
alignMap.put(XWPFVertAlign.CENTER, STVerticalJc.Enum.forInt(STVerticalJc.INT_CENTER));
alignMap.put(XWPFVertAlign.BOTH, STVerticalJc.Enum.forInt(STVerticalJc.INT_BOTH));
alignMap.put(XWPFVertAlign.BOTTOM, STVerticalJc.Enum.forInt(STVerticalJc.INT_BOTTOM));
stVertAlignTypeMap = new HashMap<Integer, XWPFVertAlign>();
stVertAlignTypeMap.put(STVerticalJc.INT_TOP, XWPFVertAlign.TOP);
stVertAlignTypeMap.put(STVerticalJc.INT_CENTER, XWPFVertAlign.CENTER);
stVertAlignTypeMap.put(STVerticalJc.INT_BOTH, XWPFVertAlign.BOTH);
stVertAlignTypeMap.put(STVerticalJc.INT_BOTTOM, XWPFVertAlign.BOTTOM);
static {
// populate enum maps
alignMap = new EnumMap<XWPFVertAlign, STVerticalJc.Enum>(XWPFVertAlign.class);
alignMap.put(XWPFVertAlign.TOP, STVerticalJc.Enum.forInt(STVerticalJc.INT_TOP));
alignMap.put(XWPFVertAlign.CENTER, STVerticalJc.Enum.forInt(STVerticalJc.INT_CENTER));
alignMap.put(XWPFVertAlign.BOTH, STVerticalJc.Enum.forInt(STVerticalJc.INT_BOTH));
alignMap.put(XWPFVertAlign.BOTTOM, STVerticalJc.Enum.forInt(STVerticalJc.INT_BOTTOM));
stVertAlignTypeMap = new HashMap<Integer, XWPFVertAlign>();
stVertAlignTypeMap.put(STVerticalJc.INT_TOP, XWPFVertAlign.TOP);
stVertAlignTypeMap.put(STVerticalJc.INT_CENTER, XWPFVertAlign.CENTER);
stVertAlignTypeMap.put(STVerticalJc.INT_BOTH, XWPFVertAlign.BOTH);
stVertAlignTypeMap.put(STVerticalJc.INT_BOTTOM, XWPFVertAlign.BOTTOM);
}
@ -75,8 +75,8 @@ public class XWPFTableCell implements IBody, ICell {
/**
* If a table cell does not include at least one block-level element, then this document shall be considered corrupt
*/
public XWPFTableCell(CTTc cell, XWPFTableRow tableRow, IBody part) {
this.ctTc = cell;
public XWPFTableCell(CTTc cell, XWPFTableRow tableRow, IBody part) {
this.ctTc = cell;
this.part = part;
this.tableRow = tableRow;
// NB: If a table cell does not include at least one block-level element, then this document shall be considered corrupt.
@ -84,10 +84,10 @@ public class XWPFTableCell implements IBody, ICell {
cell.addNewP();
bodyElements = new ArrayList<IBodyElement>();
paragraphs = new ArrayList<XWPFParagraph>();
tables = new ArrayList<XWPFTable>();
XmlCursor cursor = ctTc.newCursor();
cursor.selectPath("./*");
tables = new ArrayList<XWPFTable>();
XmlCursor cursor = ctTc.newCursor();
cursor.selectPath("./*");
while (cursor.toNextSelection()) {
XmlObject o = cursor.getObject();
if (o instanceof CTP) {
@ -116,7 +116,7 @@ public class XWPFTableCell implements IBody, ICell {
@Internal
public CTTc getCTTc() {
return ctTc;
}
}
/**
* returns an Iterator with paragraphs and tables
@ -130,10 +130,10 @@ public class XWPFTableCell implements IBody, ICell {
public void setParagraph(XWPFParagraph p) {
if (ctTc.sizeOfPArray() == 0) {
ctTc.addNewP();
}
ctTc.setPArray(0, p.getCTP());
}
}
ctTc.setPArray(0, p.getCTP());
}
/**
* returns a list of paragraphs
*/
@ -224,23 +224,23 @@ public class XWPFTableCell implements IBody, ICell {
ctshd.setFill(rgbStr);
}
/**
* Get the vertical alignment of the cell.
*
* @return the cell alignment enum value or <code>null</code>
* if no vertical alignment is set.
*/
public XWPFVertAlign getVerticalAlignment() {
XWPFVertAlign vAlign = null;
CTTcPr tcpr = ctTc.getTcPr();
if (tcpr != null) {
CTVerticalJc va = tcpr.getVAlign();
if (va != null && va.getVal() != null) {
vAlign = stVertAlignTypeMap.get(va.getVal().intValue());
}
}
return vAlign;
}
/**
* Get the vertical alignment of the cell.
*
* @return the cell alignment enum value or <code>null</code>
* if no vertical alignment is set.
*/
public XWPFVertAlign getVerticalAlignment() {
XWPFVertAlign vAlign = null;
CTTcPr tcpr = ctTc.getTcPr();
if (tcpr != null) {
CTVerticalJc va = tcpr.getVAlign();
if (va != null && va.getVal() != null) {
vAlign = stVertAlignTypeMap.get(va.getVal().intValue());
}
}
return vAlign;
}
/**
* Set the vertical alignment of the cell.
@ -343,7 +343,7 @@ public class XWPFTableCell implements IBody, ICell {
* @see org.apache.poi.xwpf.usermodel.IBody#getParagraphArray(int)
*/
public XWPFParagraph getParagraphArray(int pos) {
if (pos > 0 && pos < paragraphs.size()) {
if (pos >= 0 && pos < paragraphs.size()) {
return paragraphs.get(pos);
}
return null;
@ -381,7 +381,7 @@ public class XWPFTableCell implements IBody, ICell {
* @see org.apache.poi.xwpf.usermodel.IBody#getTableArray(int)
*/
public XWPFTable getTableArray(int pos) {
if (pos > 0 && pos < tables.size()) {
if(pos >= 0 && pos < tables.size()) {
return tables.get(pos);
}
return null;
@ -399,15 +399,15 @@ public class XWPFTableCell implements IBody, ICell {
*
* @see org.apache.poi.xwpf.usermodel.IBody#insertTable(int, org.apache.poi.xwpf.usermodel.XWPFTable)
*/
public void insertTable(int pos, XWPFTable table) {
bodyElements.add(pos, table);
int i = 0;
for (CTTbl tbl : ctTc.getTblArray()) {
if (tbl == table.getCTTbl()) {
break;
}
i++;
}
public void insertTable(int pos, XWPFTable table) {
bodyElements.add(pos, table);
int i = 0;
for (CTTbl tbl : ctTc.getTblArray()) {
if (tbl == table.getCTTbl()) {
break;
}
i++;
}
tables.add(i, table);
}
@ -466,9 +466,9 @@ public class XWPFTableCell implements IBody, ICell {
text.append('\t');
}
}
}
/**
}
/**
* get the TableCell which belongs to the TableCell
*/
public XWPFTableCell getTableCell(CTTc cell) {

View File

@ -21,6 +21,7 @@ import static org.junit.Assert.assertNotNull;
import java.io.IOException;
import org.apache.poi.util.Units;
import org.apache.poi.openxml4j.exceptions.OpenXML4JException;
import org.apache.poi.xwpf.XWPFTestDataSamples;
import org.apache.poi.xwpf.usermodel.XWPFRun.FontCharRange;
@ -55,7 +56,6 @@ public class TestXWPFBugs {
doc.close();
}
@Test
public void bug57312_NullPointException() throws IOException {
XWPFDocument doc = XWPFTestDataSamples.openSampleDocument("57312.docx");
@ -82,6 +82,40 @@ public class TestXWPFBugs {
}
}
@Test
public void bug57495_getTableArrayInDoc() {
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);
}
@Test
public void bug57495_getParagraphArrayInTableCell() {
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
public void bug57495_convertPixelsToEMUs() {
int pixels = 100;
int expectedEMU = 952500;
int result = Units.pixelToEMU(pixels);
assertEquals(expectedEMU, result);
}
@Test
public void test56392() throws IOException, OpenXML4JException {