123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115 |
- /* ====================================================================
- 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.hssf.usermodel;
-
- import static org.junit.Assert.assertEquals;
- import static org.junit.Assert.assertNotNull;
-
- import java.io.ByteArrayInputStream;
- import java.io.ByteArrayOutputStream;
- import java.io.IOException;
- import java.io.InputStream;
-
- import org.apache.poi.hpsf.*;
- import org.apache.poi.hssf.HSSFTestDataSamples;
- import org.apache.poi.poifs.filesystem.POIFSFileSystem;
- import org.apache.poi.util.HexDump;
- import org.junit.Test;
-
- /**
- * Old-style setting of POIFS properties doesn't work with POI 3.0.2
- */
- public class TestPOIFSProperties {
- private static final String title = "Testing POIFS properties";
-
- @Test
- public void testFail() throws Exception {
- ByteArrayOutputStream out = new ByteArrayOutputStream();
- { // read the workbook, adjust the SummaryInformation and write the data to a byte array
- POIFSFileSystem fs = openFileSystem();
-
- HSSFWorkbook wb = new HSSFWorkbook(fs);
-
- //set POIFS properties after constructing HSSFWorkbook
- //(a piece of code that used to work up to POI 3.0.2)
- setTitle(fs);
-
- //save the workbook and read the property
- wb.write(out);
- out.close();
- wb.close();
- }
-
- // process the byte array
- checkFromByteArray(out.toByteArray());
- }
-
- @Test
- public void testOK() throws Exception {
- ByteArrayOutputStream out = new ByteArrayOutputStream();
- { // read the workbook, adjust the SummaryInformation and write the data to a byte array
- POIFSFileSystem fs = openFileSystem();
-
- //set POIFS properties before constructing HSSFWorkbook
- setTitle(fs);
-
- HSSFWorkbook wb = new HSSFWorkbook(fs);
-
- wb.write(out);
- out.close();
- wb.close();
- }
-
- // process the byte array
- checkFromByteArray(out.toByteArray());
- }
-
- private POIFSFileSystem openFileSystem() throws IOException {
- InputStream is = HSSFTestDataSamples.openSampleFileStream("Simple.xls");
- POIFSFileSystem fs = new POIFSFileSystem(is);
- is.close();
- return fs;
- }
-
- private void setTitle(POIFSFileSystem fs) throws NoPropertySetStreamException, MarkUnsupportedException, IOException, WritingNotSupportedException {
- SummaryInformation summary1 = (SummaryInformation) PropertySetFactory.create(fs.createDocumentInputStream(SummaryInformation.DEFAULT_STREAM_NAME));
- assertNotNull(summary1);
-
- summary1.setTitle(title);
- //write the modified property back to POIFS
- fs.getRoot().getEntry(SummaryInformation.DEFAULT_STREAM_NAME).delete();
- fs.createDocument(summary1.toInputStream(), SummaryInformation.DEFAULT_STREAM_NAME);
-
- // check that the information was added successfully to the filesystem object
- SummaryInformation summaryCheck = (SummaryInformation) PropertySetFactory.create(fs.createDocumentInputStream(SummaryInformation.DEFAULT_STREAM_NAME));
- assertNotNull(summaryCheck);
- }
-
- private void checkFromByteArray(byte[] bytes) throws IOException, NoPropertySetStreamException, MarkUnsupportedException {
- // on some environments in CI we see strange failures, let's verify that the size is exactly right
- // this can be removed again after the problem is identified
- assertEquals("Had: " + HexDump.toHex(bytes), 5120, bytes.length);
-
- POIFSFileSystem fs2 = new POIFSFileSystem(new ByteArrayInputStream(bytes));
- SummaryInformation summary2 = (SummaryInformation) PropertySetFactory.create(fs2.createDocumentInputStream(SummaryInformation.DEFAULT_STREAM_NAME));
- assertNotNull(summary2);
-
- assertEquals(title, summary2.getTitle());
- fs2.close();
- }
- }
|