bug 57840: add unit test for XSSFTable.findColumnIndex

git-svn-id: https://svn.apache.org/repos/asf/poi/trunk@1747762 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
Javen O'Neal 2016-06-10 18:10:52 +00:00
parent a6f21296cc
commit 71e3aa52fd
2 changed files with 30 additions and 3 deletions

View File

@ -335,12 +335,15 @@ public class XSSFTable extends POIXMLDocumentPart implements Table {
* The column index is relative to the left-most column in the table, 0-indexed.
* Returns <code>-1</code> if <code>column</code> is not a header name in table.
*
* Column Header names are case-insensitive
*
* Note: this function caches column names for performance. To flush the cache (because columns
* have been moved or column headers have been changed), {@link #updateHeaders()} must be called.
*
* @since 3.15 beta 2
*/
public int findColumnIndex(String column) {
public int findColumnIndex(String columnHeader) {
if (columnHeader == null) return -1;
if (columnMap == null) {
// FIXME: replace with org.apache.commons.collections.map.CaseInsensitiveMap
int count = getTableColumns().length;
@ -353,7 +356,7 @@ public class XSSFTable extends POIXMLDocumentPart implements Table {
}
// Table column names with special characters need a single quote escape
// but the escape is not present in the column definition
Integer idx = columnMap.get(caseInsensitive(column.replace("'", "")));
Integer idx = columnMap.get(caseInsensitive(columnHeader.replace("'", "")));
return idx == null ? -1 : idx.intValue();
}

View File

@ -18,6 +18,7 @@
package org.apache.poi.xssf.usermodel;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertTrue;
import java.io.File;
@ -110,4 +111,27 @@ public final class TestXSSFTable {
outputWorkbook.close();
}
@Test
public void findColumnIndex() throws IOException {
XSSFWorkbook wb = XSSFTestDataSamples.openSampleWorkbook("StructuredReferences.xlsx");
// FIXME: use a worksheet where upper left cell of table is not A1 so that we test
// that XSSFTable.findColumnIndex returns the column index relative to the first
// column in the table, not the column number in the sheet
XSSFTable table = wb.getTable("\\_Prime.1");
assertNotNull(table);
assertEquals(0, table.findColumnIndex("calc='#*'#"));
assertEquals(1, table.findColumnIndex("Name"));
assertEquals(2, table.findColumnIndex("Number"));
assertEquals("case insensitive", 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"));
wb.close();
}
}