From a9aa91a9ed443e73b39cf038bea9ea7a586661f8 Mon Sep 17 00:00:00 2001 From: PJ Fanning Date: Thu, 21 Sep 2023 12:15:20 +0000 Subject: [PATCH] [bug-67396] add tests for standalone flag git-svn-id: https://svn.apache.org/repos/asf/poi/trunk@1912456 13f79535-47bb-0310-9956-ffa450edef68 --- .../poi/openxml4j/opc/TestStreamHelper.java | 69 ++++++++++++++++++- 1 file changed, 68 insertions(+), 1 deletion(-) diff --git a/poi-ooxml/src/test/java/org/apache/poi/openxml4j/opc/TestStreamHelper.java b/poi-ooxml/src/test/java/org/apache/poi/openxml4j/opc/TestStreamHelper.java index af19cd38e8e..8096fd3a8c4 100644 --- a/poi-ooxml/src/test/java/org/apache/poi/openxml4j/opc/TestStreamHelper.java +++ b/poi-ooxml/src/test/java/org/apache/poi/openxml4j/opc/TestStreamHelper.java @@ -17,8 +17,17 @@ Licensed to the Apache Software Foundation (ASF) under one or more package org.apache.poi.openxml4j.opc; +import org.apache.commons.compress.archivers.ArchiveEntry; +import org.apache.commons.compress.archivers.zip.ZipArchiveInputStream; import org.apache.commons.io.output.UnsynchronizedByteArrayOutputStream; import org.apache.poi.ooxml.util.DocumentHelper; +import org.apache.poi.ss.usermodel.Cell; +import org.apache.poi.ss.usermodel.CellStyle; +import org.apache.poi.util.IOUtils; +import org.apache.poi.xssf.streaming.SXSSFSheet; +import org.apache.poi.xssf.streaming.SXSSFWorkbook; +import org.apache.poi.xssf.usermodel.XSSFSheet; +import org.apache.poi.xssf.usermodel.XSSFWorkbook; import org.junit.jupiter.api.Test; import org.w3c.dom.Document; import org.w3c.dom.Element; @@ -45,11 +54,69 @@ void testStandaloneFlag() throws IOException { elRun.appendChild(elText); elText.setTextContent("Hello Open XML !"); - try (UnsynchronizedByteArrayOutputStream bos = new UnsynchronizedByteArrayOutputStream()) { + try (UnsynchronizedByteArrayOutputStream bos = UnsynchronizedByteArrayOutputStream.builder().get()) { StreamHelper.saveXmlInStream(doc, bos); String xml = bos.toString(StandardCharsets.UTF_8); assertTrue(xml.contains("standalone=\"yes\""), "xml contains standalone=yes?"); assertTrue(xml.contains("encoding=\"UTF-8\""), "xml contains encoding=UTF-8?"); } } + + @Test + void testXSSF() throws IOException { + try( + XSSFWorkbook workbook = new XSSFWorkbook(); + UnsynchronizedByteArrayOutputStream bos = UnsynchronizedByteArrayOutputStream.builder().get() + ) { + XSSFSheet sheet = workbook.createSheet("testsheet"); + Cell cell = sheet.createRow(0).createCell(0); + cell.setCellValue("test-value"); + CellStyle style = workbook.createCellStyle(); + style.setWrapText(true); + cell.setCellStyle(style); + workbook.write(bos); + try(ZipArchiveInputStream zis = new ZipArchiveInputStream(bos.toInputStream())) { + ArchiveEntry entry; + final int maxSize = 1024 * 1024; + while((entry = zis.getNextEntry()) != null) { + final int entrySize = (int) entry.getSize(); + final byte[] data = (entrySize == -1) ? IOUtils.toByteArrayWithMaxLength(zis, maxSize) : + IOUtils.toByteArray(zis, entrySize, maxSize); + final String str = new String(data, StandardCharsets.UTF_8); + if (str.contains("standalone")) { + assertTrue(str.contains("standalone=\"yes\""), "unexpected XML standalone flag in " + entry.getName()); + } + } + } + } + } + + @Test + void testSXSSF() throws IOException { + try( + SXSSFWorkbook workbook = new SXSSFWorkbook(); + UnsynchronizedByteArrayOutputStream bos = UnsynchronizedByteArrayOutputStream.builder().get() + ) { + SXSSFSheet sheet = workbook.createSheet("testsheet"); + Cell cell = sheet.createRow(0).createCell(0); + cell.setCellValue("test-value"); + CellStyle style = workbook.createCellStyle(); + style.setWrapText(true); + cell.setCellStyle(style); + workbook.write(bos); + try(ZipArchiveInputStream zis = new ZipArchiveInputStream(bos.toInputStream())) { + ArchiveEntry entry; + final int maxSize = 1024 * 1024; + while((entry = zis.getNextEntry()) != null) { + final int entrySize = (int) entry.getSize(); + final byte[] data = (entrySize == -1) ? IOUtils.toByteArrayWithMaxLength(zis, maxSize) : + IOUtils.toByteArray(zis, entrySize, maxSize); + final String str = new String(data, StandardCharsets.UTF_8); + if (str.contains("standalone")) { + assertTrue(str.contains("standalone=\"yes\""), "unexpected XML standalone flag in " + entry.getName()); + } + } + } + } + } }