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