202 lines
7.4 KiB
Java
202 lines
7.4 KiB
Java
/* ====================================================================
|
|
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.hpsf.basic;
|
|
|
|
import static org.junit.Assert.assertArrayEquals;
|
|
import static org.junit.Assert.assertEquals;
|
|
import static org.junit.Assert.assertNotNull;
|
|
import static org.junit.Assert.assertTrue;
|
|
|
|
import java.io.ByteArrayInputStream;
|
|
import java.io.File;
|
|
import java.io.FileNotFoundException;
|
|
import java.io.IOException;
|
|
import java.io.InputStream;
|
|
import java.io.UnsupportedEncodingException;
|
|
import java.util.List;
|
|
|
|
import org.apache.poi.POIDataSamples;
|
|
import org.apache.poi.hpsf.DocumentSummaryInformation;
|
|
import org.apache.poi.hpsf.HPSFException;
|
|
import org.apache.poi.hpsf.MarkUnsupportedException;
|
|
import org.apache.poi.hpsf.NoPropertySetStreamException;
|
|
import org.apache.poi.hpsf.PropertySet;
|
|
import org.apache.poi.hpsf.PropertySetFactory;
|
|
import org.apache.poi.hpsf.Section;
|
|
import org.apache.poi.hpsf.SummaryInformation;
|
|
import org.apache.poi.hpsf.wellknown.SectionIDMap;
|
|
import org.junit.Before;
|
|
import org.junit.Test;
|
|
|
|
/**
|
|
* <p>Tests the basic HPSF functionality.</p>
|
|
*/
|
|
public final class TestBasic {
|
|
|
|
private static final String POI_FS = "TestGermanWord90.doc";
|
|
private static final String[] POI_FILES = new String[]
|
|
{
|
|
"\005SummaryInformation",
|
|
"\005DocumentSummaryInformation",
|
|
"WordDocument",
|
|
"\001CompObj",
|
|
"1Table"
|
|
};
|
|
private static final int BYTE_ORDER = 0xfffe;
|
|
private static final int FORMAT = 0x0000;
|
|
private static final int OS_VERSION = 0x00020A04;
|
|
private static final byte[] CLASS_ID =
|
|
{
|
|
(byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00,
|
|
(byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00,
|
|
(byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00,
|
|
(byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00
|
|
};
|
|
private static final int[] SECTION_COUNT =
|
|
{1, 2};
|
|
private static final boolean[] IS_SUMMARY_INFORMATION =
|
|
{true, false};
|
|
private static final boolean[] IS_DOCUMENT_SUMMARY_INFORMATION =
|
|
{false, true};
|
|
|
|
private POIFile[] poiFiles;
|
|
|
|
|
|
/**
|
|
* <p>Read a the test file from the "data" directory.</p>
|
|
*
|
|
* @exception FileNotFoundException if the file to be read does not exist.
|
|
* @exception IOException if any other I/O exception occurs.
|
|
*/
|
|
@Before
|
|
public void setUp() throws IOException
|
|
{
|
|
POIDataSamples samples = POIDataSamples.getHPSFInstance();
|
|
final File data = samples.getFile(POI_FS);
|
|
poiFiles = Util.readPOIFiles(data);
|
|
}
|
|
|
|
/**
|
|
* <p>Checks the names of the files in the POI filesystem. They
|
|
* are expected to be in a certain order.</p>
|
|
*/
|
|
@Test
|
|
public void testReadFiles()
|
|
{
|
|
String[] expected = POI_FILES;
|
|
for (int i = 0; i < expected.length; i++)
|
|
assertEquals(poiFiles[i].getName(), expected[i]);
|
|
}
|
|
|
|
/**
|
|
* <p>Tests whether property sets can be created from the POI
|
|
* files in the POI file system. This test case expects the first
|
|
* file to be a {@link SummaryInformation}, the second file to be
|
|
* a {@link DocumentSummaryInformation} and the rest to be no
|
|
* property sets. In the latter cases a {@link
|
|
* NoPropertySetStreamException} will be thrown when trying to
|
|
* create a {@link PropertySet}.</p>
|
|
*
|
|
* @exception IOException if an I/O exception occurs.
|
|
*
|
|
* @exception UnsupportedEncodingException if a character encoding is not
|
|
* supported.
|
|
*/
|
|
@Test
|
|
public void testCreatePropertySets()
|
|
throws UnsupportedEncodingException, IOException
|
|
{
|
|
Class<?>[] expected = new Class[]
|
|
{
|
|
SummaryInformation.class,
|
|
DocumentSummaryInformation.class,
|
|
NoPropertySetStreamException.class,
|
|
NoPropertySetStreamException.class,
|
|
NoPropertySetStreamException.class
|
|
};
|
|
for (int i = 0; i < expected.length; i++)
|
|
{
|
|
InputStream in = new ByteArrayInputStream(poiFiles[i].getBytes());
|
|
Object o;
|
|
try
|
|
{
|
|
o = PropertySetFactory.create(in);
|
|
}
|
|
catch (NoPropertySetStreamException ex)
|
|
{
|
|
o = ex;
|
|
}
|
|
catch (MarkUnsupportedException ex)
|
|
{
|
|
o = ex;
|
|
}
|
|
in.close();
|
|
assertEquals(expected[i], o.getClass());
|
|
}
|
|
}
|
|
|
|
/**
|
|
* <p>Tests the {@link PropertySet} methods. The test file has two
|
|
* property sets: the first one is a {@link SummaryInformation},
|
|
* the second one is a {@link DocumentSummaryInformation}.</p>
|
|
*
|
|
* @exception IOException if an I/O exception occurs
|
|
* @exception HPSFException if any HPSF exception occurs
|
|
*/
|
|
@Test
|
|
public void testPropertySetMethods() throws IOException, HPSFException
|
|
{
|
|
/* Loop over the two property sets. */
|
|
for (int i = 0; i < 2; i++)
|
|
{
|
|
byte[] b = poiFiles[i].getBytes();
|
|
PropertySet ps = PropertySetFactory.create(new ByteArrayInputStream(b));
|
|
assertEquals(BYTE_ORDER, ps.getByteOrder());
|
|
assertEquals(FORMAT, ps.getFormat());
|
|
assertEquals(OS_VERSION, ps.getOSVersion());
|
|
assertArrayEquals(CLASS_ID, ps.getClassID().getBytes());
|
|
assertEquals(SECTION_COUNT[i], ps.getSectionCount());
|
|
assertEquals(IS_SUMMARY_INFORMATION[i], ps.isSummaryInformation());
|
|
assertEquals(IS_DOCUMENT_SUMMARY_INFORMATION[i], ps.isDocumentSummaryInformation());
|
|
}
|
|
}
|
|
|
|
/**
|
|
* <p>Tests the {@link Section} methods. The test file has two
|
|
* property sets: the first one is a {@link SummaryInformation},
|
|
* the second one is a {@link DocumentSummaryInformation}.</p>
|
|
*
|
|
* @exception IOException if an I/O exception occurs
|
|
* @exception HPSFException if any HPSF exception occurs
|
|
*/
|
|
@Test
|
|
public void testSectionMethods() throws IOException, HPSFException
|
|
{
|
|
final SummaryInformation si = (SummaryInformation)
|
|
PropertySetFactory.create(new ByteArrayInputStream
|
|
(poiFiles[0].getBytes()));
|
|
final List<Section> sections = si.getSections();
|
|
final Section s = sections.get(0);
|
|
assertArrayEquals(s.getFormatID().getBytes(), SectionIDMap.SUMMARY_INFORMATION_ID);
|
|
assertNotNull(s.getProperties());
|
|
assertEquals(17, s.getPropertyCount());
|
|
assertEquals("Titel", s.getProperty(2));
|
|
assertEquals(1764, s.getSize());
|
|
}
|
|
}
|