You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

TestDrawingShapes.java 29KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653
  1. package org.apache.poi.hssf.model;
  2. import junit.framework.TestCase;
  3. import org.apache.poi.ddf.*;
  4. import org.apache.poi.hssf.HSSFTestDataSamples;
  5. import org.apache.poi.hssf.record.CommonObjectDataSubRecord;
  6. import org.apache.poi.hssf.record.EscherAggregate;
  7. import org.apache.poi.hssf.record.ObjRecord;
  8. import org.apache.poi.hssf.usermodel.*;
  9. import org.apache.poi.ss.usermodel.Workbook;
  10. import org.apache.poi.util.HexDump;
  11. import java.io.IOException;
  12. import java.util.Arrays;
  13. import static junit.framework.Assert.assertEquals;
  14. /**
  15. * @author Evgeniy Berlog
  16. * date: 12.06.12
  17. */
  18. public class TestDrawingShapes extends TestCase {
  19. /**
  20. * HSSFShape tree bust be built correctly
  21. * Check file with such records structure:
  22. * -patriarch
  23. * --shape
  24. * --group
  25. * ---group
  26. * ----shape
  27. * ----shape
  28. * ---shape
  29. * ---group
  30. * ----shape
  31. * ----shape
  32. */
  33. public void testDrawingGroups() {
  34. HSSFWorkbook wb = HSSFTestDataSamples.openSampleWorkbook("drawings.xls");
  35. HSSFSheet sheet = wb.getSheet("groups");
  36. HSSFPatriarch patriarch = sheet.getDrawingPatriarch();
  37. assertEquals(patriarch.getChildren().size(), 2);
  38. HSSFShapeGroup group = (HSSFShapeGroup) patriarch.getChildren().get(1);
  39. assertEquals(3, group.getChildren().size());
  40. HSSFShapeGroup group1 = (HSSFShapeGroup) group.getChildren().get(0);
  41. assertEquals(2, group1.getChildren().size());
  42. group1 = (HSSFShapeGroup) group.getChildren().get(2);
  43. assertEquals(2, group1.getChildren().size());
  44. }
  45. public void testHSSFShapeCompatibility() {
  46. HSSFSimpleShape shape = new HSSFSimpleShape(null, new HSSFClientAnchor());
  47. shape.setShapeType(HSSFSimpleShape.OBJECT_TYPE_LINE);
  48. assertEquals(0x08000040, shape.getLineStyleColor());
  49. assertEquals(0x08000009, shape.getFillColor());
  50. assertEquals(HSSFShape.LINEWIDTH_DEFAULT, shape.getLineWidth());
  51. assertEquals(HSSFShape.LINESTYLE_SOLID, shape.getLineStyle());
  52. assertFalse(shape.isNoFill());
  53. AbstractShape sp = AbstractShape.createShape(shape, 1);
  54. EscherContainerRecord spContainer = sp.getSpContainer();
  55. EscherOptRecord opt =
  56. spContainer.getChildById(EscherOptRecord.RECORD_ID);
  57. assertEquals(7, opt.getEscherProperties().size());
  58. assertEquals(true,
  59. ((EscherBoolProperty) opt.lookup(EscherProperties.TEXT__SIZE_TEXT_TO_FIT_SHAPE)).isTrue());
  60. assertEquals(0x00000004,
  61. ((EscherSimpleProperty) opt.lookup(EscherProperties.GEOMETRY__SHAPEPATH)).getPropertyValue());
  62. assertEquals(0x08000009,
  63. ((EscherSimpleProperty) opt.lookup(EscherProperties.FILL__FILLCOLOR)).getPropertyValue());
  64. assertEquals(true,
  65. ((EscherBoolProperty) opt.lookup(EscherProperties.FILL__NOFILLHITTEST)).isTrue());
  66. assertEquals(0x08000040,
  67. ((EscherSimpleProperty) opt.lookup(EscherProperties.LINESTYLE__COLOR)).getPropertyValue());
  68. assertEquals(true,
  69. ((EscherBoolProperty) opt.lookup(EscherProperties.LINESTYLE__NOLINEDRAWDASH)).isTrue());
  70. assertEquals(true,
  71. ((EscherBoolProperty) opt.lookup(EscherProperties.GROUPSHAPE__PRINT)).isTrue());
  72. }
  73. public void testDefaultPictureSettings() {
  74. HSSFPicture picture = new HSSFPicture(null, new HSSFClientAnchor());
  75. assertEquals(picture.getLineWidth(), HSSFShape.LINEWIDTH_DEFAULT);
  76. assertEquals(picture.getFillColor(), HSSFShape.FILL__FILLCOLOR_DEFAULT);
  77. assertEquals(picture.getLineStyle(), HSSFShape.LINESTYLE_NONE);
  78. assertEquals(picture.getLineStyleColor(), HSSFShape.LINESTYLE__COLOR_DEFAULT);
  79. assertEquals(picture.isNoFill(), false);
  80. assertEquals(picture.getPictureIndex(), -1);//not set yet
  81. }
  82. /**
  83. * No NullPointerException should appear
  84. */
  85. public void testDefaultSettingsWithEmptyContainer() {
  86. EscherContainerRecord container = new EscherContainerRecord();
  87. EscherOptRecord opt = new EscherOptRecord();
  88. opt.setRecordId(EscherOptRecord.RECORD_ID);
  89. container.addChildRecord(opt);
  90. ObjRecord obj = new ObjRecord();
  91. CommonObjectDataSubRecord cod = new CommonObjectDataSubRecord();
  92. cod.setObjectType(HSSFSimpleShape.OBJECT_TYPE_PICTURE);
  93. obj.addSubRecord(cod);
  94. HSSFPicture picture = new HSSFPicture(container, obj);
  95. assertEquals(picture.getLineWidth(), HSSFShape.LINEWIDTH_DEFAULT);
  96. assertEquals(picture.getFillColor(), HSSFShape.FILL__FILLCOLOR_DEFAULT);
  97. assertEquals(picture.getLineStyle(), HSSFShape.LINESTYLE_DEFAULT);
  98. assertEquals(picture.getLineStyleColor(), HSSFShape.LINESTYLE__COLOR_DEFAULT);
  99. assertEquals(picture.isNoFill(), HSSFShape.NO_FILL_DEFAULT);
  100. assertEquals(picture.getPictureIndex(), -1);//not set yet
  101. }
  102. /**
  103. * create a rectangle, save the workbook, read back and verify that all shape properties are there
  104. */
  105. public void testReadWriteRectangle() throws IOException {
  106. HSSFWorkbook wb = new HSSFWorkbook();
  107. HSSFSheet sheet = wb.createSheet();
  108. HSSFPatriarch drawing = sheet.createDrawingPatriarch();
  109. HSSFClientAnchor anchor = new HSSFClientAnchor(10, 10, 200, 200, (short) 2, 2, (short) 15, 15);
  110. anchor.setAnchorType(2);
  111. assertEquals(anchor.getAnchorType(), 2);
  112. HSSFSimpleShape rectangle = drawing.createSimpleShape(anchor);
  113. rectangle.setShapeType(HSSFSimpleShape.OBJECT_TYPE_RECTANGLE);
  114. rectangle.setLineWidth(10000);
  115. rectangle.setFillColor(777);
  116. assertEquals(rectangle.getFillColor(), 777);
  117. assertEquals(10000, rectangle.getLineWidth());
  118. rectangle.setLineStyle(10);
  119. assertEquals(10, rectangle.getLineStyle());
  120. rectangle.setLineStyleColor(1111);
  121. rectangle.setNoFill(true);
  122. rectangle.setString(new HSSFRichTextString("teeeest"));
  123. assertEquals(rectangle.getLineStyleColor(), 1111);
  124. assertEquals(((EscherSimpleProperty)((EscherOptRecord)rectangle.getEscherContainer().getChildById(EscherOptRecord.RECORD_ID))
  125. .lookup(EscherProperties.TEXT__TEXTID)).getPropertyValue(), "teeeest".hashCode());
  126. assertEquals(rectangle.isNoFill(), true);
  127. assertEquals(rectangle.getString().getString(), "teeeest");
  128. wb = HSSFTestDataSamples.writeOutAndReadBack(wb);
  129. sheet = wb.getSheetAt(0);
  130. drawing = sheet.getDrawingPatriarch();
  131. assertEquals(1, drawing.getChildren().size());
  132. HSSFSimpleShape rectangle2 =
  133. (HSSFSimpleShape) drawing.getChildren().get(0);
  134. assertEquals(HSSFSimpleShape.OBJECT_TYPE_RECTANGLE,
  135. rectangle2.getShapeType());
  136. assertEquals(10000, rectangle2.getLineWidth());
  137. assertEquals(10, rectangle2.getLineStyle());
  138. assertEquals(anchor, rectangle2.getAnchor());
  139. assertEquals(rectangle2.getLineStyleColor(), 1111);
  140. assertEquals(rectangle2.getFillColor(), 777);
  141. assertEquals(rectangle2.isNoFill(), true);
  142. assertEquals(rectangle2.getString().getString(), "teeeest");
  143. rectangle2.setFillColor(3333);
  144. rectangle2.setLineStyle(9);
  145. rectangle2.setLineStyleColor(4444);
  146. rectangle2.setNoFill(false);
  147. rectangle2.setLineWidth(77);
  148. rectangle2.getAnchor().setDx1(2);
  149. rectangle2.getAnchor().setDx2(3);
  150. rectangle2.getAnchor().setDy1(4);
  151. rectangle2.getAnchor().setDy2(5);
  152. rectangle2.setString(new HSSFRichTextString("test22"));
  153. wb = HSSFTestDataSamples.writeOutAndReadBack(wb);
  154. sheet = wb.getSheetAt(0);
  155. drawing = sheet.getDrawingPatriarch();
  156. assertEquals(1, drawing.getChildren().size());
  157. rectangle2 = (HSSFSimpleShape) drawing.getChildren().get(0);
  158. assertEquals(HSSFSimpleShape.OBJECT_TYPE_RECTANGLE, rectangle2.getShapeType());
  159. assertEquals(77, rectangle2.getLineWidth());
  160. assertEquals(9, rectangle2.getLineStyle());
  161. assertEquals(rectangle2.getLineStyleColor(), 4444);
  162. assertEquals(rectangle2.getFillColor(), 3333);
  163. assertEquals(rectangle2.getAnchor().getDx1(), 2);
  164. assertEquals(rectangle2.getAnchor().getDx2(), 3);
  165. assertEquals(rectangle2.getAnchor().getDy1(), 4);
  166. assertEquals(rectangle2.getAnchor().getDy2(), 5);
  167. assertEquals(rectangle2.isNoFill(), false);
  168. assertEquals(rectangle2.getString().getString(), "test22");
  169. HSSFSimpleShape rect3 = drawing.createSimpleShape(new HSSFClientAnchor());
  170. rect3.setShapeType(HSSFSimpleShape.OBJECT_TYPE_RECTANGLE);
  171. wb = HSSFTestDataSamples.writeOutAndReadBack(wb);
  172. drawing = wb.getSheetAt(0).getDrawingPatriarch();
  173. assertEquals(drawing.getChildren().size(), 2);
  174. }
  175. public void testReadExistingImage() {
  176. HSSFWorkbook wb = HSSFTestDataSamples.openSampleWorkbook("drawings.xls");
  177. HSSFSheet sheet = wb.getSheet("pictures");
  178. HSSFPatriarch drawing = sheet.getDrawingPatriarch();
  179. assertEquals(1, drawing.getChildren().size());
  180. HSSFPicture picture = (HSSFPicture) drawing.getChildren().get(0);
  181. assertEquals(picture.getPictureIndex(), 2);
  182. assertEquals(picture.getLineStyleColor(), HSSFShape.LINESTYLE__COLOR_DEFAULT);
  183. assertEquals(picture.getFillColor(), 0x5DC943);
  184. assertEquals(picture.getLineWidth(), HSSFShape.LINEWIDTH_DEFAULT);
  185. assertEquals(picture.getLineStyle(), HSSFShape.LINESTYLE_DEFAULT);
  186. assertEquals(picture.isNoFill(), false);
  187. picture.setPictureIndex(2);
  188. assertEquals(picture.getPictureIndex(), 2);
  189. }
  190. /* assert shape properties when reading shapes from a existing workbook */
  191. public void testReadExistingRectangle() {
  192. HSSFWorkbook wb = HSSFTestDataSamples.openSampleWorkbook("drawings.xls");
  193. HSSFSheet sheet = wb.getSheet("rectangles");
  194. HSSFPatriarch drawing = sheet.getDrawingPatriarch();
  195. assertEquals(1, drawing.getChildren().size());
  196. HSSFSimpleShape shape = (HSSFSimpleShape) drawing.getChildren().get(0);
  197. assertEquals(shape.isNoFill(), false);
  198. assertEquals(shape.getLineStyle(), HSSFShape.LINESTYLE_DASHDOTGEL);
  199. assertEquals(shape.getLineStyleColor(), 0x616161);
  200. assertEquals(HexDump.toHex(shape.getFillColor()), shape.getFillColor(), 0x2CE03D);
  201. assertEquals(shape.getLineWidth(), HSSFShape.LINEWIDTH_ONE_PT * 2);
  202. assertEquals(shape.getString().getString(), "POItest");
  203. assertEquals(shape.getRotationDegree(), 27);
  204. }
  205. public void testShapeIds() {
  206. HSSFWorkbook wb = new HSSFWorkbook();
  207. HSSFSheet sheet1 = wb.createSheet();
  208. HSSFPatriarch patriarch1 = sheet1.createDrawingPatriarch();
  209. for (int i = 0; i < 2; i++) {
  210. patriarch1.createSimpleShape(new HSSFClientAnchor());
  211. }
  212. wb = HSSFTestDataSamples.writeOutAndReadBack(wb);
  213. sheet1 = wb.getSheetAt(0);
  214. patriarch1 = sheet1.getDrawingPatriarch();
  215. EscherAggregate agg1 = HSSFTestHelper.getEscherAggregate(patriarch1);
  216. // last shape ID cached in EscherDgRecord
  217. EscherDgRecord dg1 =
  218. agg1.getEscherContainer().getChildById(EscherDgRecord.RECORD_ID);
  219. assertEquals(1026, dg1.getLastMSOSPID());
  220. // iterate over shapes and check shapeId
  221. EscherContainerRecord spgrContainer =
  222. agg1.getEscherContainer().getChildContainers().get(0);
  223. // root spContainer + 2 spContainers for shapes
  224. assertEquals(3, spgrContainer.getChildRecords().size());
  225. EscherSpRecord sp0 =
  226. ((EscherContainerRecord) spgrContainer.getChild(0)).getChildById(EscherSpRecord.RECORD_ID);
  227. assertEquals(1024, sp0.getShapeId());
  228. EscherSpRecord sp1 =
  229. ((EscherContainerRecord) spgrContainer.getChild(1)).getChildById(EscherSpRecord.RECORD_ID);
  230. assertEquals(1025, sp1.getShapeId());
  231. EscherSpRecord sp2 =
  232. ((EscherContainerRecord) spgrContainer.getChild(2)).getChildById(EscherSpRecord.RECORD_ID);
  233. assertEquals(1026, sp2.getShapeId());
  234. }
  235. /**
  236. * Test get new id for shapes from existing file
  237. * File already have for 1 shape on each sheet, because document must contain EscherDgRecord for each sheet
  238. */
  239. public void testAllocateNewIds() {
  240. HSSFWorkbook wb = HSSFTestDataSamples.openSampleWorkbook("empty.xls");
  241. HSSFSheet sheet = wb.getSheetAt(0);
  242. HSSFPatriarch patriarch = sheet.getDrawingPatriarch();
  243. /**
  244. * 2048 - main SpContainer id
  245. * 2049 - existing shape id
  246. */
  247. assertEquals(HSSFTestHelper.allocateNewShapeId(patriarch), 2050);
  248. assertEquals(HSSFTestHelper.allocateNewShapeId(patriarch), 2051);
  249. assertEquals(HSSFTestHelper.allocateNewShapeId(patriarch), 2052);
  250. sheet = wb.getSheetAt(1);
  251. patriarch = sheet.getDrawingPatriarch();
  252. /**
  253. * 3072 - main SpContainer id
  254. * 3073 - existing shape id
  255. */
  256. assertEquals(HSSFTestHelper.allocateNewShapeId(patriarch), 3074);
  257. assertEquals(HSSFTestHelper.allocateNewShapeId(patriarch), 3075);
  258. assertEquals(HSSFTestHelper.allocateNewShapeId(patriarch), 3076);
  259. sheet = wb.getSheetAt(2);
  260. patriarch = sheet.getDrawingPatriarch();
  261. assertEquals(HSSFTestHelper.allocateNewShapeId(patriarch), 1026);
  262. assertEquals(HSSFTestHelper.allocateNewShapeId(patriarch), 1027);
  263. assertEquals(HSSFTestHelper.allocateNewShapeId(patriarch), 1028);
  264. }
  265. public void testOpt() throws Exception {
  266. HSSFWorkbook wb = new HSSFWorkbook();
  267. // create a sheet with a text box
  268. HSSFSheet sheet = wb.createSheet();
  269. HSSFPatriarch patriarch = sheet.createDrawingPatriarch();
  270. HSSFTextbox textbox = patriarch.createTextbox(new HSSFClientAnchor());
  271. EscherOptRecord opt1 = HSSFTestHelper.getOptRecord(textbox);
  272. EscherOptRecord opt2 = textbox.getEscherContainer().getChildById(EscherOptRecord.RECORD_ID);
  273. assertSame(opt1, opt2);
  274. }
  275. public void testCorrectOrderInOptRecord(){
  276. HSSFWorkbook wb = new HSSFWorkbook();
  277. HSSFSheet sheet = wb.createSheet();
  278. HSSFPatriarch patriarch = sheet.createDrawingPatriarch();
  279. HSSFTextbox textbox = patriarch.createTextbox(new HSSFClientAnchor());
  280. EscherOptRecord opt = HSSFTestHelper.getOptRecord(textbox);
  281. String opt1Str = opt.toXml();
  282. textbox.setFillColor(textbox.getFillColor());
  283. assertEquals(opt1Str, textbox.getEscherContainer().getChildById(EscherOptRecord.RECORD_ID).toXml());
  284. textbox.setLineStyle(textbox.getLineStyle());
  285. assertEquals(opt1Str, textbox.getEscherContainer().getChildById(EscherOptRecord.RECORD_ID).toXml());
  286. textbox.setLineWidth(textbox.getLineWidth());
  287. assertEquals(opt1Str, textbox.getEscherContainer().getChildById(EscherOptRecord.RECORD_ID).toXml());
  288. textbox.setLineStyleColor(textbox.getLineStyleColor());
  289. assertEquals(opt1Str, textbox.getEscherContainer().getChildById(EscherOptRecord.RECORD_ID).toXml());
  290. }
  291. public void testDgRecordNumShapes(){
  292. HSSFWorkbook wb = new HSSFWorkbook();
  293. HSSFSheet sheet = wb.createSheet();
  294. HSSFPatriarch patriarch = sheet.createDrawingPatriarch();
  295. EscherAggregate aggregate = HSSFTestHelper.getEscherAggregate(patriarch);
  296. EscherDgRecord dgRecord = (EscherDgRecord) aggregate.getEscherRecord(0).getChild(0);
  297. assertEquals(dgRecord.getNumShapes(), 1);
  298. }
  299. public void testTextForSimpleShape(){
  300. HSSFWorkbook wb = new HSSFWorkbook();
  301. HSSFSheet sheet = wb.createSheet();
  302. HSSFPatriarch patriarch = sheet.createDrawingPatriarch();
  303. HSSFSimpleShape shape = patriarch.createSimpleShape(new HSSFClientAnchor());
  304. shape.setShapeType(HSSFSimpleShape.OBJECT_TYPE_RECTANGLE);
  305. EscherAggregate agg = HSSFTestHelper.getEscherAggregate(patriarch);
  306. assertEquals(agg.getShapeToObjMapping().size(), 2);
  307. wb = HSSFTestDataSamples.writeOutAndReadBack(wb);
  308. sheet = wb.getSheetAt(0);
  309. patriarch = sheet.getDrawingPatriarch();
  310. shape = (HSSFSimpleShape) patriarch.getChildren().get(0);
  311. agg = HSSFTestHelper.getEscherAggregate(patriarch);
  312. assertEquals(agg.getShapeToObjMapping().size(), 2);
  313. shape.setString(new HSSFRichTextString("string1"));
  314. assertEquals(shape.getString().getString(), "string1");
  315. assertNotNull(shape.getEscherContainer().getChildById(EscherTextboxRecord.RECORD_ID));
  316. assertEquals(agg.getShapeToObjMapping().size(), 2);
  317. wb = HSSFTestDataSamples.writeOutAndReadBack(wb);
  318. wb = HSSFTestDataSamples.writeOutAndReadBack(wb);
  319. sheet = wb.getSheetAt(0);
  320. patriarch = sheet.getDrawingPatriarch();
  321. shape = (HSSFSimpleShape) patriarch.getChildren().get(0);
  322. assertNotNull(shape.getTextObjectRecord());
  323. assertEquals(shape.getString().getString(), "string1");
  324. assertNotNull(shape.getEscherContainer().getChildById(EscherTextboxRecord.RECORD_ID));
  325. assertEquals(agg.getShapeToObjMapping().size(), 2);
  326. }
  327. public void testComboboxRecords(){
  328. HSSFWorkbook wb = new HSSFWorkbook();
  329. HSSFSheet sheet = wb.createSheet();
  330. HSSFPatriarch patriarch = sheet.createDrawingPatriarch();
  331. HSSFCombobox combobox = new HSSFCombobox(null, new HSSFClientAnchor());
  332. HSSFTestHelper.setShapeId(combobox, 1024);
  333. ComboboxShape comboboxShape = new ComboboxShape(combobox, 1024);
  334. assertTrue(Arrays.equals(comboboxShape.getSpContainer().serialize(), combobox.getEscherContainer().serialize()));
  335. assertTrue(Arrays.equals(comboboxShape.getObjRecord().serialize(), combobox.getObjRecord().serialize()));
  336. }
  337. public void testRemoveShapes(){
  338. HSSFWorkbook wb = new HSSFWorkbook();
  339. HSSFSheet sheet = wb.createSheet();
  340. HSSFPatriarch patriarch = sheet.createDrawingPatriarch();
  341. HSSFSimpleShape rectangle = patriarch.createSimpleShape(new HSSFClientAnchor());
  342. rectangle.setShapeType(HSSFSimpleShape.OBJECT_TYPE_RECTANGLE);
  343. int idx = wb.addPicture(new byte[]{1,2,3}, Workbook.PICTURE_TYPE_JPEG);
  344. patriarch.createPicture(new HSSFClientAnchor(), idx);
  345. patriarch.createCellComment(new HSSFClientAnchor());
  346. HSSFPolygon polygon = patriarch.createPolygon(new HSSFClientAnchor());
  347. polygon.setPoints(new int[]{1,2}, new int[]{2,3});
  348. patriarch.createTextbox(new HSSFClientAnchor());
  349. HSSFShapeGroup group = patriarch.createGroup(new HSSFClientAnchor());
  350. group.createTextbox(new HSSFChildAnchor());
  351. group.createPicture(new HSSFChildAnchor(), idx);
  352. assertEquals(patriarch.getChildren().size(), 6);
  353. assertEquals(group.getChildren().size(), 2);
  354. assertEquals(HSSFTestHelper.getEscherAggregate(patriarch).getShapeToObjMapping().size(), 12);
  355. assertEquals(HSSFTestHelper.getEscherAggregate(patriarch).getTailRecords().size(), 1);
  356. wb = HSSFTestDataSamples.writeOutAndReadBack(wb);
  357. sheet = wb.getSheetAt(0);
  358. patriarch = sheet.getDrawingPatriarch();
  359. assertEquals(HSSFTestHelper.getEscherAggregate(patriarch).getShapeToObjMapping().size(), 12);
  360. assertEquals(HSSFTestHelper.getEscherAggregate(patriarch).getTailRecords().size(), 1);
  361. assertEquals(patriarch.getChildren().size(), 6);
  362. group = (HSSFShapeGroup) patriarch.getChildren().get(5);
  363. group.removeShape(group.getChildren().get(0));
  364. assertEquals(HSSFTestHelper.getEscherAggregate(patriarch).getShapeToObjMapping().size(), 10);
  365. assertEquals(HSSFTestHelper.getEscherAggregate(patriarch).getTailRecords().size(), 1);
  366. wb = HSSFTestDataSamples.writeOutAndReadBack(wb);
  367. sheet = wb.getSheetAt(0);
  368. patriarch = sheet.getDrawingPatriarch();
  369. assertEquals(HSSFTestHelper.getEscherAggregate(patriarch).getShapeToObjMapping().size(), 10);
  370. assertEquals(HSSFTestHelper.getEscherAggregate(patriarch).getTailRecords().size(), 1);
  371. group = (HSSFShapeGroup) patriarch.getChildren().get(5);
  372. patriarch.removeShape(group);
  373. assertEquals(HSSFTestHelper.getEscherAggregate(patriarch).getShapeToObjMapping().size(), 8);
  374. assertEquals(HSSFTestHelper.getEscherAggregate(patriarch).getTailRecords().size(), 1);
  375. wb = HSSFTestDataSamples.writeOutAndReadBack(wb);
  376. sheet = wb.getSheetAt(0);
  377. patriarch = sheet.getDrawingPatriarch();
  378. assertEquals(HSSFTestHelper.getEscherAggregate(patriarch).getShapeToObjMapping().size(), 8);
  379. assertEquals(HSSFTestHelper.getEscherAggregate(patriarch).getTailRecords().size(), 1);
  380. assertEquals(patriarch.getChildren().size(), 5);
  381. HSSFShape shape = patriarch.getChildren().get(0);
  382. patriarch.removeShape(shape);
  383. assertEquals(HSSFTestHelper.getEscherAggregate(patriarch).getShapeToObjMapping().size(), 6);
  384. assertEquals(HSSFTestHelper.getEscherAggregate(patriarch).getTailRecords().size(), 1);
  385. assertEquals(patriarch.getChildren().size(), 4);
  386. wb = HSSFTestDataSamples.writeOutAndReadBack(wb);
  387. sheet = wb.getSheetAt(0);
  388. patriarch = sheet.getDrawingPatriarch();
  389. assertEquals(HSSFTestHelper.getEscherAggregate(patriarch).getShapeToObjMapping().size(), 6);
  390. assertEquals(HSSFTestHelper.getEscherAggregate(patriarch).getTailRecords().size(), 1);
  391. assertEquals(patriarch.getChildren().size(), 4);
  392. HSSFPicture picture = (HSSFPicture) patriarch.getChildren().get(0);
  393. patriarch.removeShape(picture);
  394. assertEquals(HSSFTestHelper.getEscherAggregate(patriarch).getShapeToObjMapping().size(), 5);
  395. assertEquals(HSSFTestHelper.getEscherAggregate(patriarch).getTailRecords().size(), 1);
  396. assertEquals(patriarch.getChildren().size(), 3);
  397. wb = HSSFTestDataSamples.writeOutAndReadBack(wb);
  398. sheet = wb.getSheetAt(0);
  399. patriarch = sheet.getDrawingPatriarch();
  400. assertEquals(HSSFTestHelper.getEscherAggregate(patriarch).getShapeToObjMapping().size(), 5);
  401. assertEquals(HSSFTestHelper.getEscherAggregate(patriarch).getTailRecords().size(), 1);
  402. assertEquals(patriarch.getChildren().size(), 3);
  403. HSSFComment comment = (HSSFComment) patriarch.getChildren().get(0);
  404. patriarch.removeShape(comment);
  405. assertEquals(HSSFTestHelper.getEscherAggregate(patriarch).getShapeToObjMapping().size(), 3);
  406. assertEquals(HSSFTestHelper.getEscherAggregate(patriarch).getTailRecords().size(), 0);
  407. assertEquals(patriarch.getChildren().size(), 2);
  408. wb = HSSFTestDataSamples.writeOutAndReadBack(wb);
  409. sheet = wb.getSheetAt(0);
  410. patriarch = sheet.getDrawingPatriarch();
  411. assertEquals(HSSFTestHelper.getEscherAggregate(patriarch).getShapeToObjMapping().size(), 3);
  412. assertEquals(HSSFTestHelper.getEscherAggregate(patriarch).getTailRecords().size(), 0);
  413. assertEquals(patriarch.getChildren().size(), 2);
  414. polygon = (HSSFPolygon) patriarch.getChildren().get(0);
  415. patriarch.removeShape(polygon);
  416. assertEquals(HSSFTestHelper.getEscherAggregate(patriarch).getShapeToObjMapping().size(), 2);
  417. assertEquals(HSSFTestHelper.getEscherAggregate(patriarch).getTailRecords().size(), 0);
  418. assertEquals(patriarch.getChildren().size(), 1);
  419. wb = HSSFTestDataSamples.writeOutAndReadBack(wb);
  420. sheet = wb.getSheetAt(0);
  421. patriarch = sheet.getDrawingPatriarch();
  422. assertEquals(HSSFTestHelper.getEscherAggregate(patriarch).getShapeToObjMapping().size(), 2);
  423. assertEquals(HSSFTestHelper.getEscherAggregate(patriarch).getTailRecords().size(), 0);
  424. assertEquals(patriarch.getChildren().size(), 1);
  425. HSSFTextbox textbox = (HSSFTextbox) patriarch.getChildren().get(0);
  426. patriarch.removeShape(textbox);
  427. assertEquals(HSSFTestHelper.getEscherAggregate(patriarch).getShapeToObjMapping().size(), 0);
  428. assertEquals(HSSFTestHelper.getEscherAggregate(patriarch).getTailRecords().size(), 0);
  429. assertEquals(patriarch.getChildren().size(), 0);
  430. wb = HSSFTestDataSamples.writeOutAndReadBack(wb);
  431. sheet = wb.getSheetAt(0);
  432. patriarch = sheet.getDrawingPatriarch();
  433. assertEquals(HSSFTestHelper.getEscherAggregate(patriarch).getShapeToObjMapping().size(), 0);
  434. assertEquals(HSSFTestHelper.getEscherAggregate(patriarch).getTailRecords().size(), 0);
  435. assertEquals(patriarch.getChildren().size(), 0);
  436. }
  437. public void testShapeFlip(){
  438. HSSFWorkbook wb = new HSSFWorkbook();
  439. HSSFSheet sheet = wb.createSheet();
  440. HSSFPatriarch patriarch = sheet.createDrawingPatriarch();
  441. HSSFSimpleShape rectangle = patriarch.createSimpleShape(new HSSFClientAnchor());
  442. rectangle.setShapeType(HSSFSimpleShape.OBJECT_TYPE_RECTANGLE);
  443. assertEquals(rectangle.isFlipVertical(), false);
  444. assertEquals(rectangle.isFlipHorizontal(), false);
  445. rectangle.setFlipVertical(true);
  446. assertEquals(rectangle.isFlipVertical(), true);
  447. rectangle.setFlipHorizontal(true);
  448. assertEquals(rectangle.isFlipHorizontal(), true);
  449. wb = HSSFTestDataSamples.writeOutAndReadBack(wb);
  450. sheet = wb.getSheetAt(0);
  451. patriarch = sheet.getDrawingPatriarch();
  452. rectangle = (HSSFSimpleShape) patriarch.getChildren().get(0);
  453. assertEquals(rectangle.isFlipHorizontal(), true);
  454. rectangle.setFlipHorizontal(false);
  455. assertEquals(rectangle.isFlipHorizontal(), false);
  456. assertEquals(rectangle.isFlipVertical(), true);
  457. rectangle.setFlipVertical(false);
  458. assertEquals(rectangle.isFlipVertical(), false);
  459. wb = HSSFTestDataSamples.writeOutAndReadBack(wb);
  460. sheet = wb.getSheetAt(0);
  461. patriarch = sheet.getDrawingPatriarch();
  462. rectangle = (HSSFSimpleShape) patriarch.getChildren().get(0);
  463. assertEquals(rectangle.isFlipVertical(), false);
  464. assertEquals(rectangle.isFlipHorizontal(), false);
  465. }
  466. public void testRotation() {
  467. HSSFWorkbook wb = new HSSFWorkbook();
  468. HSSFSheet sheet = wb.createSheet();
  469. HSSFPatriarch patriarch = sheet.createDrawingPatriarch();
  470. HSSFSimpleShape rectangle = patriarch.createSimpleShape(new HSSFClientAnchor(0,0,100,100, (short) 0,0,(short)5,5));
  471. rectangle.setShapeType(HSSFSimpleShape.OBJECT_TYPE_RECTANGLE);
  472. assertEquals(rectangle.getRotationDegree(), 0);
  473. rectangle.setRotationDegree((short) 45);
  474. assertEquals(rectangle.getRotationDegree(), 45);
  475. rectangle.setFlipHorizontal(true);
  476. wb = HSSFTestDataSamples.writeOutAndReadBack(wb);
  477. sheet = wb.getSheetAt(0);
  478. patriarch = sheet.getDrawingPatriarch();
  479. rectangle = (HSSFSimpleShape) patriarch.getChildren().get(0);
  480. assertEquals(rectangle.getRotationDegree(), 45);
  481. rectangle.setRotationDegree((short) 30);
  482. assertEquals(rectangle.getRotationDegree(), 30);
  483. patriarch.setCoordinates(0, 0, 10, 10);
  484. rectangle.setString(new HSSFRichTextString("1234"));
  485. }
  486. public void testShapeContainerImplementsIterable(){
  487. HSSFWorkbook wb = new HSSFWorkbook();
  488. HSSFSheet sheet = wb.createSheet();
  489. HSSFPatriarch patriarch = sheet.createDrawingPatriarch();
  490. patriarch.createSimpleShape(new HSSFClientAnchor());
  491. patriarch.createSimpleShape(new HSSFClientAnchor());
  492. int i=2;
  493. for (HSSFShape shape: patriarch){
  494. i--;
  495. }
  496. assertEquals(i, 0);
  497. }
  498. public void testClearShapesForPatriarch(){
  499. HSSFWorkbook wb = new HSSFWorkbook();
  500. HSSFSheet sheet = wb.createSheet();
  501. HSSFPatriarch patriarch = sheet.createDrawingPatriarch();
  502. patriarch.createSimpleShape(new HSSFClientAnchor());
  503. patriarch.createSimpleShape(new HSSFClientAnchor());
  504. patriarch.createCellComment(new HSSFClientAnchor());
  505. EscherAggregate agg = HSSFTestHelper.getEscherAggregate(patriarch);
  506. assertEquals(agg.getShapeToObjMapping().size(), 6);
  507. assertEquals(agg.getTailRecords().size(), 1);
  508. assertEquals(patriarch.getChildren().size(), 3);
  509. patriarch.clear();
  510. assertEquals(agg.getShapeToObjMapping().size(), 0);
  511. assertEquals(agg.getTailRecords().size(), 0);
  512. assertEquals(patriarch.getChildren().size(), 0);
  513. wb = HSSFTestDataSamples.writeOutAndReadBack(wb);
  514. sheet = wb.getSheetAt(0);
  515. patriarch = sheet.getDrawingPatriarch();
  516. assertEquals(agg.getShapeToObjMapping().size(), 0);
  517. assertEquals(agg.getTailRecords().size(), 0);
  518. assertEquals(patriarch.getChildren().size(), 0);
  519. }
  520. }