/** Test setText single paragraph to ensure backwards compatibility */
  public void testSetTextSingleParagraph() {
    XSSFWorkbook wb = new XSSFWorkbook();
    XSSFSheet sheet = wb.createSheet();
    XSSFDrawing drawing = sheet.createDrawingPatriarch();

    XSSFTextBox shape = drawing.createTextbox(new XSSFClientAnchor(0, 0, 0, 0, 2, 2, 3, 4));
    XSSFRichTextString rt = new XSSFRichTextString("Test String");

    XSSFFont font = wb.createFont();
    font.setColor(new XSSFColor(new Color(0, 255, 255)));
    font.setFontName("Arial");
    rt.applyFont(font);

    shape.setText(rt);

    List<XSSFTextParagraph> paras = shape.getTextParagraphs();
    assertEquals(1, paras.size());
    assertEquals("Test String", paras.get(0).getText());

    List<XSSFTextRun> runs = paras.get(0).getTextRuns();
    assertEquals(1, runs.size());
    assertEquals("Arial", runs.get(0).getFontFamily());

    Color clr = runs.get(0).getFontColor();
    assertArrayEquals(
        new int[] {0, 255, 255}, new int[] {clr.getRed(), clr.getGreen(), clr.getBlue()});

    assertNotNull(XSSFTestDataSamples.writeOutAndReadBack(wb));
  }
  /** Test setting the text, then adding multiple paragraphs and retrieve text */
  public void testSetAddMultipleParagraphs() {
    XSSFWorkbook wb = new XSSFWorkbook();
    XSSFSheet sheet = wb.createSheet();
    XSSFDrawing drawing = sheet.createDrawingPatriarch();

    XSSFTextBox shape = drawing.createTextbox(new XSSFClientAnchor(0, 0, 0, 0, 2, 2, 3, 4));

    shape.setText("Line 1");

    XSSFTextParagraph para = shape.addNewTextParagraph();
    para.addNewTextRun().setText("Line 2");

    para = shape.addNewTextParagraph();
    para.addNewTextRun().setText("Line 3");

    List<XSSFTextParagraph> paras = shape.getTextParagraphs();
    assertEquals(
        3,
        paras
            .size()); // this should be 3 as we overwrote the default paragraph with setText, then
                      // added 2 new paragraphs
    assertEquals("Line 1\nLine 2\nLine 3", shape.getText());

    assertNotNull(XSSFTestDataSamples.writeOutAndReadBack(wb));
  }
  /**
   * ensure that font and color rich text attributes defined in a XSSFRichTextString are passed to
   * XSSFSimpleShape.
   *
   * <p>See Bugzilla 54969.
   */
  public void testRichTextFontAndColor() {
    XSSFWorkbook wb = new XSSFWorkbook();
    XSSFSheet sheet = wb.createSheet();
    XSSFDrawing drawing = sheet.createDrawingPatriarch();

    XSSFTextBox shape = drawing.createTextbox(new XSSFClientAnchor(0, 0, 0, 0, 2, 2, 3, 4));
    XSSFRichTextString rt = new XSSFRichTextString("Test String");

    XSSFFont font = wb.createFont();
    font.setColor(new XSSFColor(new Color(0, 128, 128)));
    font.setFontName("Arial");
    rt.applyFont(font);

    shape.setText(rt);

    CTTextParagraph pr = shape.getCTShape().getTxBody().getPArray(0);
    assertEquals(1, pr.sizeOfRArray());

    CTTextCharacterProperties rPr = pr.getRArray(0).getRPr();
    assertEquals("Arial", rPr.getLatin().getTypeface());
    assertArrayEquals(
        new byte[] {0, (byte) 128, (byte) 128}, rPr.getSolidFill().getSrgbClr().getVal());

    assertNotNull(XSSFTestDataSamples.writeOutAndReadBack(wb));
  }
  public void testNew() throws Exception {
    XSSFWorkbook wb = new XSSFWorkbook();
    XSSFSheet sheet = wb.createSheet();
    // multiple calls of createDrawingPatriarch should return the same instance of XSSFDrawing
    XSSFDrawing dr1 = sheet.createDrawingPatriarch();
    XSSFDrawing dr2 = sheet.createDrawingPatriarch();
    assertSame(dr1, dr2);

    List<POIXMLDocumentPart> rels = sheet.getRelations();
    assertEquals(1, rels.size());
    assertTrue(rels.get(0) instanceof XSSFDrawing);

    XSSFDrawing drawing = (XSSFDrawing) rels.get(0);
    String drawingId = drawing.getPackageRelationship().getId();

    // there should be a relation to this drawing in the worksheet
    assertTrue(sheet.getCTWorksheet().isSetDrawing());
    assertEquals(drawingId, sheet.getCTWorksheet().getDrawing().getId());

    XSSFConnector c1 = drawing.createConnector(new XSSFClientAnchor(0, 0, 0, 0, 0, 0, 2, 2));
    c1.setLineWidth(2.5);
    c1.setLineStyle(1);

    XSSFShapeGroup c2 = drawing.createGroup(new XSSFClientAnchor(0, 0, 0, 0, 0, 0, 5, 5));
    assertNotNull(c2);

    XSSFSimpleShape c3 = drawing.createSimpleShape(new XSSFClientAnchor(0, 0, 0, 0, 2, 2, 3, 4));
    c3.setText(new XSSFRichTextString("Test String"));
    c3.setFillColor(128, 128, 128);

    XSSFTextBox c4 = drawing.createTextbox(new XSSFClientAnchor(0, 0, 0, 0, 4, 4, 5, 6));
    XSSFRichTextString rt = new XSSFRichTextString("Test String");
    rt.applyFont(0, 5, wb.createFont());
    rt.applyFont(5, 6, wb.createFont());
    c4.setText(rt);

    c4.setNoFill(true);
    assertEquals(4, drawing.getCTDrawing().sizeOfTwoCellAnchorArray());

    List<XSSFShape> shapes = drawing.getShapes();
    assertEquals(4, shapes.size());
    assertTrue(shapes.get(0) instanceof XSSFConnector);
    assertTrue(shapes.get(1) instanceof XSSFShapeGroup);
    assertTrue(shapes.get(2) instanceof XSSFSimpleShape);
    assertTrue(shapes.get(3) instanceof XSSFSimpleShape); //

    // Save and re-load it
    wb = XSSFTestDataSamples.writeOutAndReadBack(wb);
    sheet = wb.getSheetAt(0);

    // Check
    dr1 = sheet.createDrawingPatriarch();
    CTDrawing ctDrawing = dr1.getCTDrawing();

    // Connector, shapes and text boxes are all two cell anchors
    assertEquals(0, ctDrawing.sizeOfAbsoluteAnchorArray());
    assertEquals(0, ctDrawing.sizeOfOneCellAnchorArray());
    assertEquals(4, ctDrawing.sizeOfTwoCellAnchorArray());

    shapes = dr1.getShapes();
    assertEquals(4, shapes.size());
    assertTrue(shapes.get(0) instanceof XSSFConnector);
    assertTrue(shapes.get(1) instanceof XSSFShapeGroup);
    assertTrue(shapes.get(2) instanceof XSSFSimpleShape);
    assertTrue(shapes.get(3) instanceof XSSFSimpleShape); //

    // Ensure it got the right namespaces
    String xml = ctDrawing.toString();
    assertTrue(
        xml.contains(
            "xmlns:xdr=\"http://schemas.openxmlformats.org/drawingml/2006/spreadsheetDrawing\""));
    assertTrue(xml.contains("xmlns:a=\"http://schemas.openxmlformats.org/drawingml/2006/main\""));

    assertNotNull(XSSFTestDataSamples.writeOutAndReadBack(wb));
  }