Author: onealj
Date: Tue Mar 22 09:22:03 2016
New Revision: 1736165
URL: http://svn.apache.org/viewvc?rev=1736165&view=rev
Log:
bug 59212: Do not check for overlapping regions when adding merged regions to a
sheet
Modified:
poi/trunk/src/testcases/org/apache/poi/ss/usermodel/BaseTestSheet.java
Modified: poi/trunk/src/testcases/org/apache/poi/ss/usermodel/BaseTestSheet.java
URL:
http://svn.apache.org/viewvc/poi/trunk/src/testcases/org/apache/poi/ss/usermodel/BaseTestSheet.java?rev=1736165&r1=1736164&r2=1736165&view=diff
==============================================================================
--- poi/trunk/src/testcases/org/apache/poi/ss/usermodel/BaseTestSheet.java
(original)
+++ poi/trunk/src/testcases/org/apache/poi/ss/usermodel/BaseTestSheet.java Tue
Mar 22 09:22:03 2016
@@ -24,6 +24,7 @@ import static org.junit.Assert.assertNul
import static org.junit.Assert.assertSame;
import static org.junit.Assert.assertTrue;
import static org.junit.Assert.fail;
+import static org.junit.Assume.assumeTrue;
import java.io.IOException;
import java.util.Iterator;
@@ -442,6 +443,54 @@ public abstract class BaseTestSheet {
wb.close();
}
+ /**
+ * bug 58885: checking for overlapping merged regions when
+ * adding a merged region is safe, but runs in O(n).
+ * the check for merged regions when adding a merged region
+ * can be skipped (unsafe) and run in O(1).
+ */
+ @Test
+ public void addMergedRegionUnsafe() throws IOException {
+ Workbook wb = _testDataProvider.createWorkbook();
+ Sheet sh = wb.createSheet();
+ CellRangeAddress region1 = CellRangeAddress.valueOf("A1:B2");
+ CellRangeAddress region2 = CellRangeAddress.valueOf("B2:C3");
+ CellRangeAddress region3 = CellRangeAddress.valueOf("C3:D4");
+ CellRangeAddress region4 = CellRangeAddress.valueOf("J10:K11");
+ assumeTrue(region1.intersects(region2));
+ assumeTrue(region2.intersects(region3));
+
+ sh.addMergedRegionUnsafe(region1);
+ assertTrue(sh.getMergedRegions().contains(region1));
+
+ // adding a duplicate or overlapping merged region should not
+ // raise an exception with the unsafe version of addMergedRegion.
+
+ sh.addMergedRegionUnsafe(region2);
+
+ // the safe version of addMergedRegion should throw when trying to add
a merged region that overlaps an existing region
+ assertTrue(sh.getMergedRegions().contains(region2));
+ try {
+ sh.addMergedRegion(region3);
+ fail("Expected IllegalStateException. region3 overlaps already
added merged region2.");
+ } catch (final IllegalStateException e) {
+ // expected
+ assertFalse(sh.getMergedRegions().contains(region3));
+ }
+ // addMergedRegion should not re-validate previously-added merged
regions
+ sh.addMergedRegion(region4);
+
+ // validation methods should detect a problem with previously added
merged regions (runs in O(n^2) time)
+ try {
+ sh.validateMergedRegions();
+ fail("Expected validation to fail. Sheet contains merged regions
A1:B2 and B2:C3, which overlap at B2.");
+ } catch (final IllegalStateException e) {
+ // expected
+ }
+
+ wb.close();
+ }
+
/**
* Tests the display of gridlines, formulas, and rowcolheadings.
*/
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]