Author: fanningpj
Date: Fri Aug 19 13:14:00 2022
New Revision: 1903574

URL: http://svn.apache.org/viewvc?rev=1903574&view=rev
Log:
[bug-65473] extra test

Added:
    
poi/trunk/poi-ooxml/src/test/java/org/apache/poi/xslf/TestXSLFSlideCopy.java   
(with props)
    poi/trunk/test-data/slideshow/copy-slide-demo.pptx   (with props)

Added: 
poi/trunk/poi-ooxml/src/test/java/org/apache/poi/xslf/TestXSLFSlideCopy.java
URL: 
http://svn.apache.org/viewvc/poi/trunk/poi-ooxml/src/test/java/org/apache/poi/xslf/TestXSLFSlideCopy.java?rev=1903574&view=auto
==============================================================================
--- 
poi/trunk/poi-ooxml/src/test/java/org/apache/poi/xslf/TestXSLFSlideCopy.java 
(added)
+++ 
poi/trunk/poi-ooxml/src/test/java/org/apache/poi/xslf/TestXSLFSlideCopy.java 
Fri Aug 19 13:14:00 2022
@@ -0,0 +1,138 @@
+/* ====================================================================
+   Licensed to the Apache Software Foundation (ASF) under one or more
+   contributor license agreements.  See the NOTICE file distributed with
+   this work for additional information regarding copyright ownership.
+   The ASF licenses this file to You under the Apache License, Version 2.0
+   (the "License"); you may not use this file except in compliance with
+   the License.  You may obtain a copy of the License at
+
+       http://www.apache.org/licenses/LICENSE-2.0
+
+   Unless required by applicable law or agreed to in writing, software
+   distributed under the License is distributed on an "AS IS" BASIS,
+   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+   See the License for the specific language governing permissions and
+   limitations under the License.
+==================================================================== */
+package org.apache.poi.xslf;
+
+import org.apache.commons.io.output.UnsynchronizedByteArrayOutputStream;
+import org.apache.poi.POIDataSamples;
+import org.apache.poi.xslf.usermodel.*;
+import org.junit.jupiter.api.Test;
+
+import java.io.IOException;
+import java.io.InputStream;
+import java.security.InvalidParameterException;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Objects;
+
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertInstanceOf;
+
+public class TestXSLFSlideCopy {
+    private static final POIDataSamples slTests = 
POIDataSamples.getSlideShowInstance();
+
+    @Test
+    public void testCopySlide() throws IOException {
+        final String shapeName = "title";
+        try (
+                InputStream stream = 
slTests.openResourceAsStream("copy-slide-demo.pptx");
+                XMLSlideShow slideShow = new XMLSlideShow(stream);
+                UnsynchronizedByteArrayOutputStream bos = new 
UnsynchronizedByteArrayOutputStream()
+        ) {
+            XSLFSlide defaultSlide = getSlideByShapeName(slideShow, shapeName);
+            int slideIndex = defaultSlide.getSlideNumber() - 1;
+            List<Integer> slideIndexList = new ArrayList<>();
+            for (int i = 0; i < 3; i ++) {
+                if (i == 0) {
+                    // pass
+                } else {
+                    XSLFSlide newSlide = copySlide(slideShow, slideIndex);
+                    slideIndex = newSlide.getSlideNumber() - 1;
+                }
+                slideIndexList.add(slideIndex);
+            }
+            for (Integer index : slideIndexList) {
+                XSLFSlide slide = slideShow.getSlides().get(index);
+                replaceText(slide, shapeName, "this is slide " + 
slide.getSlideNumber());
+            }
+            slideShow.write(bos);
+            try (XMLSlideShow slideShow1 = new 
XMLSlideShow(bos.toInputStream())) {
+                List<XSLFSlide> slides = slideShow1.getSlides();
+                assertEquals(3, slides.size());
+                for (XSLFSlide slide : slides) {
+                    XSLFShape shape = getShape(slide, shapeName);
+                    assertInstanceOf(XSLFTextShape.class, shape);
+                    XSLFTextShape textShape = (XSLFTextShape) shape;
+                    StringBuilder textBuffer = new StringBuilder();
+                    List<XSLFTextParagraph> textParagraphs = 
textShape.getTextParagraphs();
+                    for (XSLFTextParagraph textParagraph : textParagraphs) {
+                        List<XSLFTextRun> textRuns = 
textParagraph.getTextRuns();
+                        for (XSLFTextRun textRun : textRuns) {
+                            textBuffer.append(textRun.getRawText());
+                        }
+                    }
+                    assertEquals("this is slide " + slide.getSlideNumber(), 
textBuffer.toString());
+                }
+            }
+        }
+    }
+
+    private void replaceText(XSLFSlide slide, String shapeName, String value) {
+        XSLFShape shape = getShape(slide, shapeName);
+        if (shape == null) {
+            return;
+        }
+        assertInstanceOf(XSLFTextShape.class, shape);
+        XSLFTextShape textShape = (XSLFTextShape) shape;
+        List<XSLFTextParagraph> textParagraphs = textShape.getTextParagraphs();
+        for (XSLFTextParagraph textParagraph : textParagraphs) {
+            List<XSLFTextRun> textRuns = textParagraph.getTextRuns();
+            for (XSLFTextRun textRun : textRuns) {
+                textRun.setText(value);
+            }
+        }
+    }
+
+    private static XSLFSlide copySlide(XMLSlideShow ppt, int index) {
+        XSLFSlideLayout defaultSlideLayout = null;
+        List<XSLFSlideMaster> slideMasters = ppt.getSlideMasters();
+        for (XSLFSlideMaster slideMaster : slideMasters) {
+            for (XSLFSlideLayout slideLayout : slideMaster.getSlideLayouts()) {
+                if (Objects.equals(SlideLayout.TITLE_AND_CONTENT, 
slideLayout.getType())) {
+                    defaultSlideLayout = slideLayout;
+                    break;
+                }
+            }
+        }
+        XSLFSlide slide = ppt.getSlides().get(index);
+        XSLFSlide newSlide = 
ppt.createSlide(defaultSlideLayout).importContent(slide);
+        ppt.setSlideOrder(newSlide, slide.getSlideNumber());
+        return newSlide;
+    }
+
+    private static XSLFSlide getSlideByShapeName(XMLSlideShow  ppt, String 
shapeName) {
+        List<XSLFSlide> slides = ppt.getSlides();
+        for (XSLFSlide slide : slides) {
+            List<XSLFShape> shapes = slide.getShapes();
+            for (XSLFShape shape : shapes) {
+                if (shape.getShapeName().equals(shapeName)) {
+                    return slide;
+                }
+            }
+        }
+        throw new InvalidParameterException("shape not exist");
+    }
+
+    public XSLFShape getShape(XSLFSlide slide, String shapeName) {
+        List<XSLFShape> shapes = slide.getShapes();
+        for (XSLFShape shape : shapes) {
+            if (shape.getShapeName().equals(shapeName)) {
+                return shape;
+            }
+        }
+        throw new InvalidParameterException("shape not exist in slide");
+    }
+}

Propchange: 
poi/trunk/poi-ooxml/src/test/java/org/apache/poi/xslf/TestXSLFSlideCopy.java
------------------------------------------------------------------------------
    svn:eol-style = native

Added: poi/trunk/test-data/slideshow/copy-slide-demo.pptx
URL: 
http://svn.apache.org/viewvc/poi/trunk/test-data/slideshow/copy-slide-demo.pptx?rev=1903574&view=auto
==============================================================================
Binary file - no diff available.

Propchange: poi/trunk/test-data/slideshow/copy-slide-demo.pptx
------------------------------------------------------------------------------
--- svn:mime-type (added)
+++ svn:mime-type Fri Aug 19 13:14:00 2022
@@ -0,0 +1 @@
+application/vnd.openxmlformats-officedocument.presentationml.presentation



---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to