diff options
Diffstat (limited to 'src/scratchpad/testcases/org/apache/poi/hslf/dev/BaseTestPPTIterating.java')
-rw-r--r-- | src/scratchpad/testcases/org/apache/poi/hslf/dev/BaseTestPPTIterating.java | 133 |
1 files changed, 133 insertions, 0 deletions
diff --git a/src/scratchpad/testcases/org/apache/poi/hslf/dev/BaseTestPPTIterating.java b/src/scratchpad/testcases/org/apache/poi/hslf/dev/BaseTestPPTIterating.java new file mode 100644 index 0000000000..869b96e4b8 --- /dev/null +++ b/src/scratchpad/testcases/org/apache/poi/hslf/dev/BaseTestPPTIterating.java @@ -0,0 +1,133 @@ +/* ==================================================================== + 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.hslf.dev; + +import static org.junit.jupiter.api.Assertions.assertNotNull; +import static org.junit.jupiter.api.Assertions.assertThrows; + +import java.io.File; +import java.io.PrintStream; +import java.io.UnsupportedEncodingException; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.HashSet; +import java.util.List; +import java.util.Locale; +import java.util.Map; +import java.util.Set; +import java.util.stream.Stream; + +import org.apache.poi.POIDataSamples; +import org.apache.poi.hslf.exceptions.EncryptedPowerPointFileException; +import org.apache.poi.hslf.exceptions.OldPowerPointFormatException; +import org.apache.poi.util.IOUtils; +import org.apache.poi.util.NullPrintStream; +import org.junit.jupiter.api.AfterEach; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.params.ParameterizedTest; +import org.junit.jupiter.params.provider.Arguments; +import org.junit.jupiter.params.provider.MethodSource; + +public abstract class BaseTestPPTIterating { + protected static final Set<String> OLD_FILES = new HashSet<>(); + static { + OLD_FILES.add("PPT95.ppt"); + OLD_FILES.add("pp40only.ppt"); + } + + protected static final Set<String> ENCRYPTED_FILES = new HashSet<>(); + static { + ENCRYPTED_FILES.add("cryptoapi-proc2356.ppt"); + ENCRYPTED_FILES.add("Password_Protected-np-hello.ppt"); + ENCRYPTED_FILES.add("Password_Protected-56-hello.ppt"); + ENCRYPTED_FILES.add("Password_Protected-hello.ppt"); + } + + protected static final Map<String,Class<? extends Throwable>> EXCLUDED = + new HashMap<>(); + + public static Stream<Arguments> files() { + String dataDirName = System.getProperty(POIDataSamples.TEST_PROPERTY); + if(dataDirName == null) { + dataDirName = "test-data"; + } + + List<Arguments> files = new ArrayList<>(); + findFile(files, dataDirName + "/slideshow"); + + return files.stream(); + } + + private final PrintStream save = System.out; + + @BeforeEach + void setUpBase() throws UnsupportedEncodingException { + // set a higher max allocation limit as some test-files require more + IOUtils.setByteArrayMaxOverride(5*1024*1024); + + // redirect standard out during the test to avoid spamming the console with output + System.setOut(new NullPrintStream()); + } + + @AfterEach + void tearDownBase() { + System.setOut(save); + + // reset + IOUtils.setByteArrayMaxOverride(-1); + } + + private static void findFile(List<Arguments> list, String dir) { + String[] files = new File(dir).list((arg0, arg1) -> arg1.toLowerCase(Locale.ROOT).endsWith(".ppt")); + + assertNotNull(files, "Did not find any ppt files in directory " + dir); + + for(String file : files) { + list.add(Arguments.of(new File(dir, file))); + } + } + + @ParameterizedTest + @MethodSource("files") + void testAllFiles(File file) throws Exception { + String fileName = file.getName(); + Class<? extends Throwable> t = null; + if (EXCLUDED.containsKey(fileName)) { + t = EXCLUDED.get(fileName); + } else if (getFailedOldFiles().contains(fileName)) { + t = OldPowerPointFormatException.class; + } else if (getFailedEncryptedFiles().contains(fileName)) { + t = EncryptedPowerPointFileException.class; + } + + if (t == null) { + runOneFile(file); + } else { + assertThrows(t, () -> runOneFile(file)); + } + } + + abstract void runOneFile(File pFile) throws Exception; + + protected Set<String> getFailedEncryptedFiles() { + return ENCRYPTED_FILES; + } + + protected Set<String> getFailedOldFiles() { + return OLD_FILES; + } +} |