Preparation for fix for bug 46009. (Bug visible on ooxml branch, but this change will expose the problem)

git-svn-id: https://svn.apache.org/repos/asf/poi/trunk@708286 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
Josh Micich 2008-10-27 19:24:42 +00:00
parent 2c1e400bc0
commit 58dd97257a
2 changed files with 51 additions and 23 deletions

View 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();
}
}

View File

@ -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 @@ 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();
/**
* 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());
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");
}
}
}