]> source.dussan.org Git - poi.git/commitdiff
bug 57840: add unit test for XSSFTable.findColumnIndex
authorJaven O'Neal <onealj@apache.org>
Fri, 10 Jun 2016 18:10:52 +0000 (18:10 +0000)
committerJaven O'Neal <onealj@apache.org>
Fri, 10 Jun 2016 18:10:52 +0000 (18:10 +0000)
git-svn-id: https://svn.apache.org/repos/asf/poi/trunk@1747762 13f79535-47bb-0310-9956-ffa450edef68

src/ooxml/java/org/apache/poi/xssf/usermodel/XSSFTable.java
src/ooxml/testcases/org/apache/poi/xssf/usermodel/TestXSSFTable.java

index 03e4614221506234ce5e67080202912f621c8743..f0cc0c61b5c95ed830e96291395a88375e156078 100644 (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();
     }
 
index ba8ffd5d90188c28171f1efc42803aec91035215..534cfd92dec238c1284b065e6391c826bf43415e 100644 (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();
     }
 
-}
\ 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();
+    }
+
+}