You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@poi.apache.org by jo...@apache.org on 2008/10/27 20:24:42 UTC

svn commit: r708286 - in /poi/trunk/src: java/org/apache/poi/hssf/record/aggregates/MergedCellsTable.java testcases/org/apache/poi/hssf/record/TestMergeCellsRecord.java

Author: josh
Date: Mon Oct 27 12:24:42 2008
New Revision: 708286

URL: http://svn.apache.org/viewvc?rev=708286&view=rev
Log:
Preparation for fix for bug 46009.  (Bug visible on ooxml branch, but this change will expose the problem)

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

Modified: poi/trunk/src/java/org/apache/poi/hssf/record/aggregates/MergedCellsTable.java
URL: http://svn.apache.org/viewvc/poi/trunk/src/java/org/apache/poi/hssf/record/aggregates/MergedCellsTable.java?rev=708286&r1=708285&r2=708286&view=diff
==============================================================================
--- poi/trunk/src/java/org/apache/poi/hssf/record/aggregates/MergedCellsTable.java (original)
+++ poi/trunk/src/java/org/apache/poi/hssf/record/aggregates/MergedCellsTable.java Mon Oct 27 12:24:42 2008
@@ -51,7 +51,8 @@
 			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 @@
 	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 int getNumberOfMergedRegions() {
 		return _mergedRegions.size();
 	}
-
 }

Modified: poi/trunk/src/testcases/org/apache/poi/hssf/record/TestMergeCellsRecord.java
URL: http://svn.apache.org/viewvc/poi/trunk/src/testcases/org/apache/poi/hssf/record/TestMergeCellsRecord.java?rev=708286&r1=708285&r2=708286&view=diff
==============================================================================
--- poi/trunk/src/testcases/org/apache/poi/hssf/record/TestMergeCellsRecord.java (original)
+++ poi/trunk/src/testcases/org/apache/poi/hssf/record/TestMergeCellsRecord.java Mon Oct 27 12:24:42 2008
@@ -17,8 +17,15 @@
 
 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 @@
  */
 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");
+		}
+	}
 }



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