diff options
author | Javen O'Neal <onealj@apache.org> | 2015-10-23 11:17:06 +0000 |
---|---|---|
committer | Javen O'Neal <onealj@apache.org> | 2015-10-23 11:17:06 +0000 |
commit | 45e79a04099a48b59fe36db7b4afeb6a48b0b530 (patch) | |
tree | 9aaef19fd8bf8fb4815ac2c193d3eaff32e50885 | |
parent | 4780d329ef1e24329bdb9b84a411e2edb009fd2f (diff) | |
download | poi-45e79a04099a48b59fe36db7b4afeb6a48b0b530.tar.gz poi-45e79a04099a48b59fe36db7b4afeb6a48b0b530.zip |
bug 58441: define equals method for CellRangeAddressBase
git-svn-id: https://svn.apache.org/repos/asf/poi/trunk@1710172 13f79535-47bb-0310-9956-ffa450edef68
-rw-r--r-- | src/java/org/apache/poi/ss/util/CellRangeAddressBase.java | 32 | ||||
-rw-r--r-- | src/testcases/org/apache/poi/ss/util/TestCellRangeAddress.java | 45 |
2 files changed, 76 insertions, 1 deletions
diff --git a/src/java/org/apache/poi/ss/util/CellRangeAddressBase.java b/src/java/org/apache/poi/ss/util/CellRangeAddressBase.java index 4b5b104244..9561cb9f5b 100644 --- a/src/java/org/apache/poi/ss/util/CellRangeAddressBase.java +++ b/src/java/org/apache/poi/ss/util/CellRangeAddressBase.java @@ -164,4 +164,36 @@ public abstract class CellRangeAddressBase { CellReference crB = new CellReference(_lastRow, _lastCol); return getClass().getName() + " [" + crA.formatAsString() + ":" + crB.formatAsString() +"]"; } + + // In case _firstRow > _lastRow or _firstCol > _lastCol + protected int getMinRow() { + return Math.min(_firstRow, _lastRow); + } + protected int getMaxRow() { + return Math.max(_firstRow, _lastRow); + } + protected int getMinColumn() { + return Math.min(_firstCol, _lastCol); + } + protected int getMaxColumn() { + return Math.max(_firstCol, _lastCol); + } + + @Override + public boolean equals(Object other) { + if (other instanceof CellRangeAddressBase) { + CellRangeAddressBase o = (CellRangeAddressBase) other; + return ((getMinRow() == o.getMinRow()) && + (getMaxRow() == o.getMaxRow()) && + (getMinColumn() == o.getMinColumn()) && + (getMaxColumn() == o.getMaxColumn())); + } + return false; + } + + @Override + public int hashCode() { + final int[] values = new int[]{getMinRow(), getMaxRow(), getMinColumn(), getMaxColumn()}; + return values.hashCode(); + } } diff --git a/src/testcases/org/apache/poi/ss/util/TestCellRangeAddress.java b/src/testcases/org/apache/poi/ss/util/TestCellRangeAddress.java index c5a163394c..5616f79f38 100644 --- a/src/testcases/org/apache/poi/ss/util/TestCellRangeAddress.java +++ b/src/testcases/org/apache/poi/ss/util/TestCellRangeAddress.java @@ -20,7 +20,9 @@ package org.apache.poi.ss.util; import java.io.ByteArrayOutputStream; import java.io.IOException; -import junit.framework.TestCase; +//TODO: replace junit3 with junit4 code +import junit.framework.TestCase; //junit3 +import static org.junit.Assert.assertNotEquals; //junit4 import org.apache.poi.hssf.record.TestcaseRecordInputStream; import org.apache.poi.util.LittleEndianOutputStream; @@ -190,4 +192,45 @@ public final class TestCellRangeAddress extends TestCase { ref = new CellRangeAddress(-1, -1, -1, -1); assertEquals(":", ref.formatAsString()); } + + public void testEquals() { + final CellRangeAddress ref1 = new CellRangeAddress(1, 2, 3, 4); + final CellRangeAddress ref2 = new CellRangeAddress(1, 2, 3, 4); + assertEquals(ref1, ref2); + + // Invert first/last row, but refer to same area + ref2.setFirstRow(2); + ref2.setLastRow(1); + assertEquals(ref1, ref2); + + // Invert first/last column, but refer to same area + ref2.setFirstColumn(4); + ref2.setLastColumn(3); + assertEquals(ref1, ref2); + + // Refer to a different area + assertNotEquals(ref1, new CellRangeAddress(3, 4, 1, 2)); + } + + public void testGetMinMaxRow() { + final CellRangeAddress ref = new CellRangeAddress(1, 2, 3, 4); + assertEquals(1, ref.getMinRow()); + assertEquals(2, ref.getMaxRow()); + + ref.setFirstRow(10); + //now ref is CellRangeAddress(10, 2, 3, 4) + assertEquals(2, ref.getMinRow()); + assertEquals(10, ref.getMaxRow()); + } + + public void testGetMinMaxColumn() { + final CellRangeAddress ref = new CellRangeAddress(1, 2, 3, 4); + assertEquals(3, ref.getMinColumn()); + assertEquals(4, ref.getMaxColumn()); + + ref.setFirstColumn(10); + //now ref is CellRangeAddress(1, 2, 10, 4) + assertEquals(4, ref.getMinColumn()); + assertEquals(10, ref.getMaxColumn()); + } } |