From: Javen O'Neal Date: Fri, 10 Jun 2016 18:10:52 +0000 (+0000) Subject: bug 57840: add unit test for XSSFTable.findColumnIndex X-Git-Tag: REL_3_15_BETA2~172 X-Git-Url: https://source.dussan.org/?a=commitdiff_plain;h=6366074fff042feb6ac4e9fa11278d8c50c4c218;p=poi.git 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 --- diff --git a/src/ooxml/java/org/apache/poi/xssf/usermodel/XSSFTable.java b/src/ooxml/java/org/apache/poi/xssf/usermodel/XSSFTable.java index 03e4614221..f0cc0c61b5 100644 --- a/src/ooxml/java/org/apache/poi/xssf/usermodel/XSSFTable.java +++ b/src/ooxml/java/org/apache/poi/xssf/usermodel/XSSFTable.java @@ -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 -1 if column 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(); } diff --git a/src/ooxml/testcases/org/apache/poi/xssf/usermodel/TestXSSFTable.java b/src/ooxml/testcases/org/apache/poi/xssf/usermodel/TestXSSFTable.java index ba8ffd5d90..534cfd92de 100644 --- a/src/ooxml/testcases/org/apache/poi/xssf/usermodel/TestXSSFTable.java +++ b/src/ooxml/testcases/org/apache/poi/xssf/usermodel/TestXSSFTable.java @@ -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(); } -} \ No newline at end of file + @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(); + } + +}