mirror of https://github.com/apache/poi.git
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:
parent
2c1e400bc0
commit
58dd97257a
|
@ -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();
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -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");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue