You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@poi.apache.org by ce...@apache.org on 2019/01/13 17:14:05 UTC

svn commit: r1851209 - in /poi/trunk/src: java/org/apache/poi/ss/util/AreaReference.java testcases/org/apache/poi/hssf/util/TestAreaReference.java testcases/org/apache/poi/ss/util/TestAreaReference.java

Author: centic
Date: Sun Jan 13 17:14:05 2019
New Revision: 1851209

URL: http://svn.apache.org/viewvc?rev=1851209&view=rev
Log:
Bug 62810: AreaReference ctor looses sheet name if rows or columns swapped

Modified:
    poi/trunk/src/java/org/apache/poi/ss/util/AreaReference.java
    poi/trunk/src/testcases/org/apache/poi/hssf/util/TestAreaReference.java
    poi/trunk/src/testcases/org/apache/poi/ss/util/TestAreaReference.java

Modified: poi/trunk/src/java/org/apache/poi/ss/util/AreaReference.java
URL: http://svn.apache.org/viewvc/poi/trunk/src/java/org/apache/poi/ss/util/AreaReference.java?rev=1851209&r1=1851208&r2=1851209&view=diff
==============================================================================
--- poi/trunk/src/java/org/apache/poi/ss/util/AreaReference.java (original)
+++ poi/trunk/src/java/org/apache/poi/ss/util/AreaReference.java Sun Jan 13 17:14:05 2019
@@ -113,6 +113,8 @@ public class AreaReference {
         boolean swapRows = topLeft.getRow() > botRight.getRow();
         boolean swapCols = topLeft.getCol() > botRight.getCol();
         if (swapRows || swapCols) {
+            String firstSheet;
+            String lastSheet;
             int firstRow; 
             int lastRow; 
             int firstColumn; 
@@ -133,18 +135,22 @@ public class AreaReference {
                 lastRowAbs = botRight.isRowAbsolute();
             }
             if (swapCols) {
+                firstSheet = botRight.getSheetName();
                 firstColumn = botRight.getCol();
                 firstColAbs = botRight.isColAbsolute();
+                lastSheet = topLeft.getSheetName();
                 lastColumn = topLeft.getCol();
                 lastColAbs = topLeft.isColAbsolute();
             } else {
+                firstSheet = topLeft.getSheetName();
                 firstColumn = topLeft.getCol();
                 firstColAbs = topLeft.isColAbsolute();
+                lastSheet = botRight.getSheetName();
                 lastColumn = botRight.getCol();
                 lastColAbs = botRight.isColAbsolute();
             }
-            _firstCell = new CellReference(firstRow, firstColumn, firstRowAbs, firstColAbs);
-            _lastCell = new CellReference(lastRow, lastColumn, lastRowAbs, lastColAbs);
+            _firstCell = new CellReference(firstSheet, firstRow, firstColumn, firstRowAbs, firstColAbs);
+            _lastCell = new CellReference(lastSheet, lastRow, lastColumn, lastRowAbs, lastColAbs);
         } else {
             _firstCell = topLeft;
             _lastCell = botRight;
@@ -220,7 +226,7 @@ public class AreaReference {
                     new AreaReference(st.nextToken(), version)
             );
         }
-        return refs.toArray(new AreaReference[refs.size()]);
+        return refs.toArray(new AreaReference[0]);
     }
 
     /**
@@ -271,7 +277,7 @@ public class AreaReference {
                 refs.add(ref);
             }
         }
-        return refs.toArray(new CellReference[refs.size()]);
+        return refs.toArray(new CellReference[0]);
     }
 
     /**
@@ -316,7 +322,7 @@ public class AreaReference {
         try {
             sb.append(formatAsString());
         } catch(Exception e) {
-            sb.append(e.toString());
+            sb.append(e);
         }
         sb.append(']');
         return sb.toString();

Modified: poi/trunk/src/testcases/org/apache/poi/hssf/util/TestAreaReference.java
URL: http://svn.apache.org/viewvc/poi/trunk/src/testcases/org/apache/poi/hssf/util/TestAreaReference.java?rev=1851209&r1=1851208&r2=1851209&view=diff
==============================================================================
--- poi/trunk/src/testcases/org/apache/poi/hssf/util/TestAreaReference.java (original)
+++ poi/trunk/src/testcases/org/apache/poi/hssf/util/TestAreaReference.java Sun Jan 13 17:14:05 2019
@@ -46,18 +46,18 @@ public final class TestAreaReference ext
         AreaReference ar = new AreaReference("$A$1:$B$2", SpreadsheetVersion.EXCEL97);
         assertFalse("Two cells expected", ar.isSingleCell());
         CellReference cf = ar.getFirstCell();
-        assertTrue("row is 4",cf.getRow()==0);
-        assertTrue("col is 1",cf.getCol()==0);
+        assertEquals("row is 4", 0, cf.getRow());
+        assertEquals("col is 1", 0, cf.getCol());
         assertTrue("row is abs",cf.isRowAbsolute());
         assertTrue("col is abs",cf.isColAbsolute());
-        assertTrue("string is $A$1",cf.formatAsString().equals("$A$1"));
+        assertEquals("string is $A$1", "$A$1", cf.formatAsString());
 
         cf = ar.getLastCell();
-        assertTrue("row is 4",cf.getRow()==1);
-        assertTrue("col is 1",cf.getCol()==1);
+        assertEquals("row is 4", 1, cf.getRow());
+        assertEquals("col is 1", 1, cf.getCol());
         assertTrue("row is abs",cf.isRowAbsolute());
         assertTrue("col is abs",cf.isColAbsolute());
-        assertTrue("string is $B$2",cf.formatAsString().equals("$B$2"));
+        assertEquals("string is $B$2", "$B$2", cf.formatAsString());
 
         CellReference[] refs = ar.getAllReferencedCells();
         assertEquals(4, refs.length);
@@ -225,11 +225,13 @@ public final class TestAreaReference ext
         HSSFName aNamedCell = wb.getNameAt(idx);
 
         // Should have 2 references
-        assertEquals(ref, aNamedCell.getRefersToFormula());
+        String formulaRefs = aNamedCell.getRefersToFormula();
+        assertNotNull(formulaRefs);
+        assertEquals(ref, formulaRefs);
 
         // Check the parsing of the reference into cells
-        assertFalse(AreaReference.isContiguous(aNamedCell.getRefersToFormula()));
-        AreaReference[] arefs = AreaReference.generateContiguous(SpreadsheetVersion.EXCEL97, aNamedCell.getRefersToFormula());
+        assertFalse(AreaReference.isContiguous(formulaRefs));
+        AreaReference[] arefs = AreaReference.generateContiguous(SpreadsheetVersion.EXCEL97, formulaRefs);
         assertEquals(2, arefs.length);
         assertEquals(refA, arefs[0].formatAsString());
         assertEquals(refB, arefs[1].formatAsString());

Modified: poi/trunk/src/testcases/org/apache/poi/ss/util/TestAreaReference.java
URL: http://svn.apache.org/viewvc/poi/trunk/src/testcases/org/apache/poi/ss/util/TestAreaReference.java?rev=1851209&r1=1851208&r2=1851209&view=diff
==============================================================================
--- poi/trunk/src/testcases/org/apache/poi/ss/util/TestAreaReference.java (original)
+++ poi/trunk/src/testcases/org/apache/poi/ss/util/TestAreaReference.java Sun Jan 13 17:14:05 2019
@@ -16,17 +16,24 @@
 ==================================================================== */
 package org.apache.poi.ss.util;
 
+import org.apache.poi.hssf.usermodel.HSSFWorkbook;
 import org.apache.poi.ss.SpreadsheetVersion;
 
-import junit.framework.TestCase;
+import org.apache.poi.ss.usermodel.Sheet;
+import org.apache.poi.ss.usermodel.Workbook;
+import org.junit.Test;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertTrue;
 
 /**
  * Test for {@link AreaReference} handling of max rows.
  * 
  * @author David North
  */
-public class TestAreaReference extends TestCase {
-    
+public class TestAreaReference {
+    @Test
     public void testWholeColumn() {
         AreaReference oldStyle = AreaReference.getWholeColumn(SpreadsheetVersion.EXCEL97, "A", "B");
         assertEquals(0, oldStyle.getFirstCell().getCol());
@@ -48,7 +55,8 @@ public class TestAreaReference extends T
         AreaReference newStyleNonWholeColumn = new AreaReference("A1:B23", SpreadsheetVersion.EXCEL2007);
         assertFalse(newStyleNonWholeColumn.isWholeColumnReference());
     }
-    
+
+    @Test
     public void testWholeRow() {
         AreaReference oldStyle = AreaReference.getWholeRow(SpreadsheetVersion.EXCEL97, "1", "2");
         assertEquals(0, oldStyle.getFirstCell().getCol());
@@ -62,4 +70,20 @@ public class TestAreaReference extends T
         assertEquals(SpreadsheetVersion.EXCEL2007.getLastColumnIndex(), newStyle.getLastCell().getCol());
         assertEquals(1, newStyle.getLastCell().getRow());
     }
+
+    @Test
+    public void test62810() {
+        final Workbook wb = new HSSFWorkbook();
+        final Sheet sheet = wb.createSheet("Ctor test");
+        final String sheetName = sheet.getSheetName();
+        final CellReference topLeft = new CellReference(sheetName, 1, 1, true, true);
+        final CellReference bottomRight = new CellReference(sheetName, 5, 10, true, true);
+        final AreaReference goodAreaRef = new AreaReference(topLeft, bottomRight, SpreadsheetVersion.EXCEL2007);
+        final AreaReference badAreaRef = new AreaReference(bottomRight, topLeft, SpreadsheetVersion.EXCEL2007);
+
+        assertEquals("'Ctor test'!$B$2", topLeft.formatAsString());
+        assertEquals("'Ctor test'!$K$6", bottomRight.formatAsString());
+        assertEquals("'Ctor test'!$B$2:$K$6", goodAreaRef.formatAsString());
+        assertEquals("'Ctor test'!$B$2:$K$6", badAreaRef.formatAsString());
+    }
 }



---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@poi.apache.org
For additional commands, e-mail: commits-help@poi.apache.org