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
e11be8a729
commit
007bc16d69
@ -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();
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -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;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -28,25 +35,45 @@ import org.apache.poi.hssf.util.CellRangeAddress;
|
|||||||
*/
|
*/
|
||||||
public final class TestMergeCellsRecord extends TestCase {
|
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() {
|
||||||
public void testCloneReferences() throws Exception {
|
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();
|
|
||||||
|
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);
|
assertFalse(merge.getAreaAt(0) == clone.getAreaAt(0));
|
||||||
|
}
|
||||||
CellRangeAddress mergeRegion = merge.getAreaAt(0);
|
|
||||||
CellRangeAddress cloneRegion = clone.getAreaAt(0);
|
private static final RecordVisitor dummyRecordVisitor = new RecordVisitor() {
|
||||||
assertNotSame("Should not point to same objects when cloning", mergeRegion, cloneRegion);
|
public void visitRecord(Record r) {
|
||||||
assertEquals("New Clone Row From doesnt match", mergeRegion.getFirstRow(), cloneRegion.getFirstRow());
|
// do nothing
|
||||||
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());
|
public void testMCTable_bug46009() {
|
||||||
|
MergedCellsTable mct = new MergedCellsTable();
|
||||||
assertFalse(merge.getAreaAt(0) == clone.getAreaAt(0));
|
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…
x
Reference in New Issue
Block a user