From 95c799cfcec7a31861a213aa2ed19a1acd8b8d1d Mon Sep 17 00:00:00 2001 From: PJ Fanning Date: Fri, 19 Aug 2022 13:14:00 +0000 Subject: [PATCH] [bug-65473] extra test git-svn-id: https://svn.apache.org/repos/asf/poi/trunk@1903574 13f79535-47bb-0310-9956-ffa450edef68 --- .../apache/poi/xslf/TestXSLFSlideCopy.java | 138 ++++++++++++++++++ test-data/slideshow/copy-slide-demo.pptx | Bin 0 -> 31301 bytes 2 files changed, 138 insertions(+) create mode 100644 poi-ooxml/src/test/java/org/apache/poi/xslf/TestXSLFSlideCopy.java create mode 100644 test-data/slideshow/copy-slide-demo.pptx diff --git a/poi-ooxml/src/test/java/org/apache/poi/xslf/TestXSLFSlideCopy.java b/poi-ooxml/src/test/java/org/apache/poi/xslf/TestXSLFSlideCopy.java new file mode 100644 index 0000000000..130238153b --- /dev/null +++ b/poi-ooxml/src/test/java/org/apache/poi/xslf/TestXSLFSlideCopy.java @@ -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 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 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 textParagraphs = textShape.getTextParagraphs(); + for (XSLFTextParagraph textParagraph : textParagraphs) { + List 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 textParagraphs = textShape.getTextParagraphs(); + for (XSLFTextParagraph textParagraph : textParagraphs) { + List textRuns = textParagraph.getTextRuns(); + for (XSLFTextRun textRun : textRuns) { + textRun.setText(value); + } + } + } + + private static XSLFSlide copySlide(XMLSlideShow ppt, int index) { + XSLFSlideLayout defaultSlideLayout = null; + List 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 slides = ppt.getSlides(); + for (XSLFSlide slide : slides) { + List 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 shapes = slide.getShapes(); + for (XSLFShape shape : shapes) { + if (shape.getShapeName().equals(shapeName)) { + return shape; + } + } + throw new InvalidParameterException("shape not exist in slide"); + } +} diff --git a/test-data/slideshow/copy-slide-demo.pptx b/test-data/slideshow/copy-slide-demo.pptx new file mode 100644 index 0000000000000000000000000000000000000000..c091de3d708c946c6b5fa9000172c07e52cbffde GIT binary patch literal 31301 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