Browse Source

ooxml-schema: trigger loading stress-documents as part of the normal unit-tests

The integration-tests are not executed for determining the parts of the schema
to include in the "lite" package and so we need to have a normal unit-test as well.
Add more documents which drag in some more parts from the ooxml-schema

git-svn-id: https://svn.apache.org/repos/asf/poi/trunk@1885057 13f79535-47bb-0310-9956-ffa450edef68
tags/REL_5_0_0
Dominik Stadler 3 years ago
parent
commit
e08a1785c3

+ 1
- 0
src/integrationtest/org/apache/poi/stress/TestAllFiles.java View File

@@ -299,6 +299,7 @@ public class TestAllFiles {
"document/61612a.docx",
"document/word2.doc",
"spreadsheet/xlsx-corrupted.xlsx",
"integration/stress025.docx",

// old Excel files, which we only support simple text extraction of
"spreadsheet/testEXCEL_2.xls",

+ 155
- 0
src/ooxml/testcases/org/apache/poi/ooxml/TestTriggerCoverage.java View File

@@ -0,0 +1,155 @@
/* ====================================================================
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.ooxml;

import org.apache.poi.POIDataSamples;
import org.apache.poi.extractor.ExtractorFactory;
import org.apache.poi.extractor.POITextExtractor;
import org.apache.poi.sl.draw.Drawable;
import org.apache.poi.sl.usermodel.Slide;
import org.apache.poi.sl.usermodel.SlideShow;
import org.apache.poi.ss.extractor.EmbeddedData;
import org.apache.poi.ss.extractor.EmbeddedExtractor;
import org.apache.poi.ss.usermodel.Sheet;
import org.apache.poi.ss.usermodel.Workbook;
import org.apache.poi.xslf.usermodel.XMLSlideShow;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
import org.apache.poi.xwpf.usermodel.XWPFDocument;
import org.junit.jupiter.api.Assumptions;
import org.junit.jupiter.params.ParameterizedTest;
import org.junit.jupiter.params.provider.Arguments;
import org.junit.jupiter.params.provider.MethodSource;

import java.awt.Dimension;
import java.awt.Graphics2D;
import java.awt.RenderingHints;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.lang.ref.WeakReference;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.HashSet;
import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.stream.Stream;

import static org.junit.jupiter.api.Assertions.assertNotNull;

/**
* Test to trigger code-execution of various parts so
* that all required elements are inclueded in the ooxml-schema-lite package
*/
public class TestTriggerCoverage {
private static final Set<String> FAILING = new HashSet<>();
static {
FAILING.add("stress025.docx");
}

private 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 + "/integration");

return files.stream();
}

private static void findFile(List<Arguments> list, String dir) {
String[] files = new File(dir).list();
assertNotNull(files, "Did not find any files in directory " + dir);

for(String file : files) {
list.add(Arguments.of(new File(dir, file)));
}
}

@ParameterizedTest
@MethodSource("files")
public void testFile(File file) throws Exception {
try (InputStream stream = new FileInputStream(file)) {
if (file.getName().endsWith(".docx")) {
try (XWPFDocument doc = new XWPFDocument(stream)) {
assertNotNull(doc);
}
} else if (file.getName().endsWith(".xlsx")) {
try (XSSFWorkbook xls = new XSSFWorkbook(stream)) {
assertNotNull(xls);
extractEmbedded(xls);
}
} else if (file.getName().endsWith(".pptx")) {
try (XMLSlideShow ppt = new XMLSlideShow(stream)) {
assertNotNull(ppt);
renderSlides(ppt);
}
} else {
throw new IllegalArgumentException("Don't know how to handle file " + file);
}
} catch (Exception e) {
Assumptions.assumeFalse(FAILING.contains(file.getName()),
"File " + file + " is expected to fail");

throw e;
}

try (InputStream stream = new FileInputStream(file)) {
try (POITextExtractor extractor = ExtractorFactory.createExtractor(stream)) {
assertNotNull(extractor.getText());
}
}
}

private void extractEmbedded(Workbook wb) throws IOException {
EmbeddedExtractor ee = new EmbeddedExtractor();

for (Sheet s : wb) {
for (EmbeddedData ed : ee.extractAll(s)) {
assertNotNull(ed.getFilename());
assertNotNull(ed.getEmbeddedData());
assertNotNull(ed.getShape());
}
}
}

private void renderSlides(SlideShow<?,?> ss) {
Dimension pgSize = ss.getPageSize();

for (Slide<?,?> s : ss.getSlides()) {
BufferedImage img = new BufferedImage(pgSize.width, pgSize.height, BufferedImage.TYPE_INT_ARGB);
Graphics2D graphics = img.createGraphics();

// default rendering options
graphics.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
graphics.setRenderingHint(RenderingHints.KEY_RENDERING, RenderingHints.VALUE_RENDER_QUALITY);
graphics.setRenderingHint(RenderingHints.KEY_INTERPOLATION, RenderingHints.VALUE_INTERPOLATION_BICUBIC);
graphics.setRenderingHint(RenderingHints.KEY_FRACTIONALMETRICS, RenderingHints.VALUE_FRACTIONALMETRICS_ON);
graphics.setRenderingHint(Drawable.BUFFERED_IMAGE, new WeakReference<>(img));

// draw stuff
s.draw(graphics);

graphics.dispose();
img.flush();
}
}
}

BIN
test-data/integration/stress023.docx View File


BIN
test-data/integration/stress024.xlsx View File


BIN
test-data/integration/stress025.docx View File


Loading…
Cancel
Save