Lines 17-29
Link Here
|
17 |
package org.apache.poi.hssf.model; |
17 |
package org.apache.poi.hssf.model; |
18 |
|
18 |
|
19 |
import junit.framework.TestCase; |
19 |
import junit.framework.TestCase; |
|
|
20 |
import org.apache.poi.ddf.EscherContainerRecord; |
20 |
import org.apache.poi.ddf.EscherDggRecord; |
21 |
import org.apache.poi.ddf.EscherDggRecord; |
|
|
22 |
import org.apache.poi.ddf.EscherRecord; |
21 |
import org.apache.poi.hssf.HSSFTestDataSamples; |
23 |
import org.apache.poi.hssf.HSSFTestDataSamples; |
22 |
import org.apache.poi.hssf.record.*; |
24 |
import org.apache.poi.hssf.record.*; |
23 |
import org.apache.poi.hssf.record.aggregates.RowRecordsAggregate; |
25 |
import org.apache.poi.hssf.record.aggregates.RowRecordsAggregate; |
24 |
import org.apache.poi.hssf.usermodel.HSSFSheet; |
26 |
import org.apache.poi.hssf.usermodel.*; |
25 |
import org.apache.poi.hssf.usermodel.HSSFTestHelper; |
|
|
26 |
import org.apache.poi.hssf.usermodel.HSSFWorkbook; |
27 |
import org.apache.poi.util.HexRead; |
27 |
import org.apache.poi.util.HexRead; |
28 |
|
28 |
|
29 |
import java.io.*; |
29 |
import java.io.*; |
Lines 35-53
Link Here
|
35 |
* @author Evgeniy Berlog |
35 |
* @author Evgeniy Berlog |
36 |
*/ |
36 |
*/ |
37 |
public class TestDrawingAggregate extends TestCase { |
37 |
public class TestDrawingAggregate extends TestCase { |
38 |
private static byte[] toByteArray(List<RecordBase> records){ |
38 |
|
|
|
39 |
private int spgrCount = 0; |
40 |
private int spCount = 0; |
41 |
private int shapeCount = 0; |
42 |
private int shGroupCount = 0; |
43 |
|
44 |
/* |
45 |
* EscherAggregate must have for each SpgrContainer HSSFShapeGroup and for each SpContainer HSSFShape |
46 |
*/ |
47 |
private void checkEscherAndShapesCount(EscherAggregate agg, HSSFSheet sheet) { |
48 |
HSSFPatriarch patriarch = HSSFTestHelper.createTestPatriarch(sheet, agg); |
49 |
agg.setPatriarch(patriarch); |
50 |
EscherAggregate.createShapeTree(EscherAggregate.getMainSpgrContainer(agg), agg.getPatriarch(), agg); |
51 |
EscherContainerRecord mainContainer = EscherAggregate.getMainSpgrContainer(agg); |
52 |
calculateShapesCount(agg.getPatriarch()); |
53 |
calculateEscherContainersCount(mainContainer); |
54 |
|
55 |
assertEquals(spgrCount, shGroupCount); |
56 |
assertEquals(spCount - spgrCount - 1, shapeCount); |
57 |
} |
58 |
|
59 |
private void calculateEscherContainersCount(EscherContainerRecord spgr) { |
60 |
for (EscherRecord record : spgr.getChildRecords()) { |
61 |
if (EscherContainerRecord.SP_CONTAINER == record.getRecordId()) { |
62 |
spCount++; |
63 |
continue; |
64 |
} |
65 |
if (EscherContainerRecord.SPGR_CONTAINER == record.getRecordId()) { |
66 |
spgrCount++; |
67 |
calculateEscherContainersCount((EscherContainerRecord) record); |
68 |
} |
69 |
} |
70 |
} |
71 |
|
72 |
private void calculateShapesCount(HSSFShapeContainer group) { |
73 |
for (HSSFShape shape : (List<HSSFShape>) group.getChildren()) { |
74 |
if (shape instanceof HSSFShapeGroup) { |
75 |
shGroupCount++; |
76 |
calculateShapesCount((HSSFShapeGroup) shape); |
77 |
} else { |
78 |
shapeCount++; |
79 |
} |
80 |
} |
81 |
} |
82 |
|
83 |
|
39 |
ByteArrayOutputStream out = new ByteArrayOutputStream(); |
84 |
private static byte[] toByteArray(List<RecordBase> records) { |
40 |
for(RecordBase rb : records) { |
85 |
ByteArrayOutputStream out = new ByteArrayOutputStream(); |
41 |
Record r = (Record)rb; |
86 |
for (RecordBase rb : records) { |
42 |
try { |
87 |
Record r = (Record) rb; |
43 |
out.write(r.serialize()); |
|
|
44 |
} catch (IOException e){ |
88 |
try { |
|
|
89 |
out.write(r.serialize()); |
45 |
throw new RuntimeException(e); |
90 |
} catch (IOException e) { |
46 |
} |
|
|
47 |
} |
48 |
return out.toByteArray(); |
49 |
} |
|
|
91 |
throw new RuntimeException(e); |
92 |
} |
93 |
} |
94 |
return out.toByteArray(); |
95 |
} |
50 |
|
96 |
|
|
|
97 |
public void testSolverContainerMustBeSavedDuringSerialization(){ |
98 |
HSSFWorkbook wb = HSSFTestDataSamples.openSampleWorkbook("SolverContainerAfterSPGR.xls"); |
99 |
HSSFSheet sh = wb.getSheetAt(0); |
100 |
InternalSheet ish = HSSFTestHelper.getSheetForTest(sh); |
101 |
sh.getDrawingPatriarch(); |
102 |
EscherAggregate agg = (EscherAggregate) ish.findFirstRecordBySid(EscherAggregate.sid); |
103 |
assertEquals(agg.getEscherRecords().get(0).getChildRecords().size(), 3); |
104 |
assertEquals(agg.getEscherRecords().get(0).getChild(2).getRecordId(), EscherContainerRecord.SOLVER_CONTAINER); |
105 |
wb = HSSFTestDataSamples.writeOutAndReadBack(wb); |
106 |
sh = wb.getSheetAt(0); |
107 |
sh.getDrawingPatriarch(); |
108 |
ish = HSSFTestHelper.getSheetForTest(sh); |
109 |
agg = (EscherAggregate) ish.findFirstRecordBySid(EscherAggregate.sid); |
110 |
assertEquals(agg.getEscherRecords().get(0).getChildRecords().size(), 3); |
111 |
assertEquals(agg.getEscherRecords().get(0).getChild(2).getRecordId(), EscherContainerRecord.SOLVER_CONTAINER); |
112 |
|
113 |
} |
114 |
|
51 |
/** |
115 |
/** |
52 |
* test reading drawing aggregate from a test file from Bugzilla 45129 |
116 |
* test reading drawing aggregate from a test file from Bugzilla 45129 |
53 |
*/ |
117 |
*/ |
Lines 107-112
Link Here
|
107 |
byte[] dgBytesAfterSave = agg.serialize(); |
171 |
byte[] dgBytesAfterSave = agg.serialize(); |
108 |
assertEquals("different size of drawing data before and after save", dgBytes.length, dgBytesAfterSave.length); |
172 |
assertEquals("different size of drawing data before and after save", dgBytes.length, dgBytesAfterSave.length); |
109 |
assertTrue("drawing data brefpore and after save is different", Arrays.equals(dgBytes, dgBytesAfterSave)); |
173 |
assertTrue("drawing data brefpore and after save is different", Arrays.equals(dgBytes, dgBytesAfterSave)); |
|
|
174 |
checkEscherAndShapesCount(agg, sh); |
110 |
} |
175 |
} |
111 |
|
176 |
|
112 |
/** |
177 |
/** |
Lines 174-180
Link Here
|
174 |
assertEquals("different size of drawing data before and after save", dgBytes.length, dgBytesAfterSave.length); |
239 |
assertEquals("different size of drawing data before and after save", dgBytes.length, dgBytesAfterSave.length); |
175 |
assertTrue("drawing data before and after save is different", Arrays.equals(dgBytes, dgBytesAfterSave)); |
240 |
assertTrue("drawing data before and after save is different", Arrays.equals(dgBytes, dgBytesAfterSave)); |
176 |
|
241 |
|
177 |
|
242 |
checkEscherAndShapesCount(agg, sh); |
178 |
} |
243 |
} |
179 |
|
244 |
|
180 |
|
245 |
|
Lines 185-205
Link Here
|
185 |
List<RecordBase> records = isheet.getRecords(); |
250 |
List<RecordBase> records = isheet.getRecords(); |
186 |
|
251 |
|
187 |
HSSFWorkbook wb2 = HSSFTestDataSamples.writeOutAndReadBack(wb); |
252 |
HSSFWorkbook wb2 = HSSFTestDataSamples.writeOutAndReadBack(wb); |
188 |
InternalSheet isheet2 = HSSFTestHelper.getSheetForTest( wb2.getSheetAt(0)); |
253 |
InternalSheet isheet2 = HSSFTestHelper.getSheetForTest(wb2.getSheetAt(0)); |
189 |
List<RecordBase> records2 = isheet2.getRecords(); |
254 |
List<RecordBase> records2 = isheet2.getRecords(); |
190 |
|
255 |
|
191 |
assertEquals(records.size(), records2.size()); |
256 |
assertEquals(records.size(), records2.size()); |
192 |
for(int i = 0; i < records.size(); i++) { |
257 |
for (int i = 0; i < records.size(); i++) { |
193 |
RecordBase r1 = records.get(i); |
258 |
RecordBase r1 = records.get(i); |
194 |
RecordBase r2 = records2.get(i); |
259 |
RecordBase r2 = records2.get(i); |
195 |
assertTrue(r1.getClass() == r2.getClass()); |
260 |
assertTrue(r1.getClass() == r2.getClass()); |
196 |
assertEquals(r1.getRecordSize(), r2.getRecordSize()); |
261 |
assertEquals(r1.getRecordSize(), r2.getRecordSize()); |
197 |
if(r1 instanceof Record ){ |
262 |
if (r1 instanceof Record) { |
198 |
assertEquals(((Record)r1).getSid(), ((Record)r2).getSid()); |
263 |
assertEquals(((Record) r1).getSid(), ((Record) r2).getSid()); |
199 |
assertTrue(Arrays.equals(((Record) r1).serialize(), ((Record) r2).serialize())); |
264 |
assertTrue(Arrays.equals(((Record) r1).serialize(), ((Record) r2).serialize())); |
200 |
} |
265 |
} |
201 |
} |
266 |
} |
202 |
|
|
|
203 |
} |
267 |
} |
204 |
|
268 |
|
205 |
public void testSerializeDrawingWithComments() throws IOException { |
269 |
public void testSerializeDrawingWithComments() throws IOException { |
Lines 257-262
Link Here
|
257 |
byte[] dgBytesAfterSave = agg.serialize(); |
321 |
byte[] dgBytesAfterSave = agg.serialize(); |
258 |
assertEquals("different size of drawing data before and after save", dgBytes.length, dgBytesAfterSave.length); |
322 |
assertEquals("different size of drawing data before and after save", dgBytes.length, dgBytesAfterSave.length); |
259 |
assertTrue("drawing data before and after save is different", Arrays.equals(dgBytes, dgBytesAfterSave)); |
323 |
assertTrue("drawing data before and after save is different", Arrays.equals(dgBytes, dgBytesAfterSave)); |
|
|
324 |
checkEscherAndShapesCount(agg, sh); |
260 |
} |
325 |
} |
261 |
|
326 |
|
262 |
|
327 |
|
Lines 314-320
Link Here
|
314 |
|
379 |
|
315 |
byte[] dgBytesAfterSave = agg.serialize(); |
380 |
byte[] dgBytesAfterSave = agg.serialize(); |
316 |
assertEquals("different size of drawing data before and after save", dgBytes.length, dgBytesAfterSave.length); |
381 |
assertEquals("different size of drawing data before and after save", dgBytes.length, dgBytesAfterSave.length); |
317 |
assertTrue("drawing data brefpore and after save is different", Arrays.equals(dgBytes, dgBytesAfterSave)); |
382 |
assertTrue("drawing data before and after save is different", Arrays.equals(dgBytes, dgBytesAfterSave)); |
|
|
383 |
checkEscherAndShapesCount(agg, sh); |
318 |
} |
384 |
} |
319 |
|
385 |
|
320 |
public void testUnhandledContinue() { |
386 |
public void testUnhandledContinue() { |