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 e11be8a729
commit 007bc16d69
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(); MergeCellsRecord mcr = (MergeCellsRecord) rs.getNext();
int nRegions = mcr.getNumAreas(); int nRegions = mcr.getNumAreas();
for (int i = 0; i < nRegions; i++) { 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) { private void addMergeCellsRecord(MergeCellsRecord mcr) {
int nRegions = mcr.getNumAreas(); int nRegions = mcr.getNumAreas();
for (int i = 0; i < nRegions; i++) { 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() { public int getNumberOfMergedRegions() {
return _mergedRegions.size(); return _mergedRegions.size();
} }
} }

View File

@ -17,8 +17,15 @@
package org.apache.poi.hssf.record; package org.apache.poi.hssf.record;
import java.util.ArrayList;
import java.util.List;
import junit.framework.AssertionFailedError;
import junit.framework.TestCase; 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; import org.apache.poi.hssf.util.CellRangeAddress;
/** /**
@ -30,9 +37,8 @@ public final class TestMergeCellsRecord extends TestCase {
/** /**
* Make sure when a clone is called, we actually clone it. * Make sure when a clone is called, we actually clone it.
* @throws Exception
*/ */
public void testCloneReferences() throws Exception { public void testCloneReferences() {
CellRangeAddress[] cras = { new CellRangeAddress(0, 1, 0, 2), }; CellRangeAddress[] cras = { new CellRangeAddress(0, 1, 0, 2), };
MergeCellsRecord merge = new MergeCellsRecord(cras, 0, cras.length); MergeCellsRecord merge = new MergeCellsRecord(cras, 0, cras.length);
MergeCellsRecord clone = (MergeCellsRecord)merge.clone(); MergeCellsRecord clone = (MergeCellsRecord)merge.clone();
@ -49,4 +55,25 @@ public final class TestMergeCellsRecord extends TestCase {
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");
}
}
} }