]> source.dussan.org Git - poi.git/commitdiff
Preparation for fix for bug 46009. (Bug visible on ooxml branch, but this change...
authorJosh Micich <josh@apache.org>
Mon, 27 Oct 2008 19:24:42 +0000 (19:24 +0000)
committerJosh Micich <josh@apache.org>
Mon, 27 Oct 2008 19:24:42 +0000 (19:24 +0000)
git-svn-id: https://svn.apache.org/repos/asf/poi/trunk@708286 13f79535-47bb-0310-9956-ffa450edef68

src/java/org/apache/poi/hssf/record/aggregates/MergedCellsTable.java
src/testcases/org/apache/poi/hssf/record/TestMergeCellsRecord.java

index bbf5c4d0a04b39e06ddcf5bb93ebb38ac6a1ebc2..b11aee7d9f5114e3f8c298cc83fcfec24da22437 100644 (file)
@@ -51,7 +51,8 @@ public final class MergedCellsTable extends RecordAggregate {
                        MergeCellsRecord mcr = (MergeCellsRecord) rs.getNext();
                        int nRegions = mcr.getNumAreas();
                        for (int i = 0; i < nRegions; i++) {
-                               temp.add(mcr.getAreaAt(i));
+                               CellRangeAddress cra = mcr.getAreaAt(i);
+                               temp.add(cra);
                        }
                }
        }
@@ -102,7 +103,8 @@ public final class MergedCellsTable extends RecordAggregate {
        private void addMergeCellsRecord(MergeCellsRecord mcr) {
                int nRegions = mcr.getNumAreas();
                for (int i = 0; i < nRegions; i++) {
-                       _mergedRegions.add(mcr.getAreaAt(i));
+                       CellRangeAddress cra = mcr.getAreaAt(i);
+                       _mergedRegions.add(cra);
                }
        }
 
@@ -130,5 +132,4 @@ public final class MergedCellsTable extends RecordAggregate {
        public int getNumberOfMergedRegions() {
                return _mergedRegions.size();
        }
-
 }
index bbbe29ea510208ff10903c4ea2ff9600e0e96099..9fe084388c895f0185222f09267af27fbf3e6f19 100644 (file)
 
 package org.apache.poi.hssf.record;
 
+import java.util.ArrayList;
+import java.util.List;
+
+import junit.framework.AssertionFailedError;
 import junit.framework.TestCase;
 
+import org.apache.poi.hssf.model.RecordStream;
+import org.apache.poi.hssf.record.aggregates.MergedCellsTable;
+import org.apache.poi.hssf.record.aggregates.RecordAggregate.RecordVisitor;
 import org.apache.poi.hssf.util.CellRangeAddress;
 
 /**
@@ -28,25 +35,45 @@ import org.apache.poi.hssf.util.CellRangeAddress;
  */
 public final class TestMergeCellsRecord extends TestCase {
    
-   /**
-    * Make sure when a clone is called, we actually clone it.
-    * @throws Exception
-    */
-   public void testCloneReferences() throws Exception {
-      CellRangeAddress[] cras = { new CellRangeAddress(0, 1, 0, 2), };
-      MergeCellsRecord merge = new MergeCellsRecord(cras, 0, cras.length);
-      MergeCellsRecord clone = (MergeCellsRecord)merge.clone();
-      
-      assertNotSame("Merged and cloned objects are the same", merge, clone);
-      
-      CellRangeAddress mergeRegion = merge.getAreaAt(0);
-      CellRangeAddress cloneRegion = clone.getAreaAt(0);
-      assertNotSame("Should not point to same objects when cloning", mergeRegion, cloneRegion);
-      assertEquals("New Clone Row From doesnt match", mergeRegion.getFirstRow(), cloneRegion.getFirstRow());
-      assertEquals("New Clone Row To doesnt match", mergeRegion.getLastRow(), cloneRegion.getLastRow());
-      assertEquals("New Clone Col From doesnt match", mergeRegion.getFirstColumn(), cloneRegion.getFirstColumn());
-      assertEquals("New Clone Col To doesnt match", mergeRegion.getLastColumn(), cloneRegion.getLastColumn());      
+       /**
+        * Make sure when a clone is called, we actually clone it.
+        */
+       public void testCloneReferences() {
+               CellRangeAddress[] cras = { new CellRangeAddress(0, 1, 0, 2), };
+               MergeCellsRecord merge = new MergeCellsRecord(cras, 0, cras.length);
+               MergeCellsRecord clone = (MergeCellsRecord)merge.clone();
+
+               assertNotSame("Merged and cloned objects are the same", merge, clone);
+
+               CellRangeAddress mergeRegion = merge.getAreaAt(0);
+               CellRangeAddress cloneRegion = clone.getAreaAt(0);
+               assertNotSame("Should not point to same objects when cloning", mergeRegion, cloneRegion);
+               assertEquals("New Clone Row From doesnt match", mergeRegion.getFirstRow(), cloneRegion.getFirstRow());
+               assertEquals("New Clone Row To doesnt match", mergeRegion.getLastRow(), cloneRegion.getLastRow());
+               assertEquals("New Clone Col From doesnt match", mergeRegion.getFirstColumn(), cloneRegion.getFirstColumn());
+               assertEquals("New Clone Col To doesnt match", mergeRegion.getLastColumn(), cloneRegion.getLastColumn());      
       
-      assertFalse(merge.getAreaAt(0) == clone.getAreaAt(0));
-   }
+               assertFalse(merge.getAreaAt(0) == clone.getAreaAt(0));
+       }
+   
+       private static final RecordVisitor dummyRecordVisitor = new RecordVisitor() {
+               public void visitRecord(Record r) {
+                       // do nothing
+               }
+       };
+       public void testMCTable_bug46009() {
+               MergedCellsTable mct = new MergedCellsTable();
+               List recList = new ArrayList();
+               CellRangeAddress[] cras = new CellRangeAddress[] {
+                               new CellRangeAddress(0, 0, 0, 3), 
+               };
+               recList.add(new MergeCellsRecord(cras, 0, 1));
+               RecordStream rs = new RecordStream(recList, 0);
+               mct.read(rs);
+               try {
+                       mct.visitContainedRecords(dummyRecordVisitor);
+               } catch (ArrayStoreException e) {
+                       throw new AssertionFailedError("Identified bug 46009");
+               }
+       }
 }