2002-07-22 08:25:19 +00:00
|
|
|
/* ====================================================================
|
2006-12-22 19:18:16 +00:00
|
|
|
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
|
2004-04-09 13:05:39 +00:00
|
|
|
|
|
|
|
|
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.
|
|
|
|
|
==================================================================== */
|
2002-07-22 08:25:19 +00:00
|
|
|
|
|
|
|
|
package org.apache.poi.hpsf.basic;
|
|
|
|
|
|
2003-07-26 06:57:33 +00:00
|
|
|
import java.io.ByteArrayInputStream;
|
|
|
|
|
import java.io.File;
|
|
|
|
|
import java.io.FileNotFoundException;
|
|
|
|
|
import java.io.IOException;
|
|
|
|
|
import java.io.InputStream;
|
2004-06-22 16:16:33 +00:00
|
|
|
import java.io.UnsupportedEncodingException;
|
2003-09-13 12:32:11 +00:00
|
|
|
import java.util.List;
|
2003-07-26 06:57:33 +00:00
|
|
|
|
|
|
|
|
import junit.framework.TestCase;
|
2014-12-28 09:16:57 +00:00
|
|
|
|
2011-10-02 08:37:15 +00:00
|
|
|
import org.apache.poi.POIDataSamples;
|
2003-07-26 06:57:33 +00:00
|
|
|
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;
|
2003-09-13 12:32:11 +00:00
|
|
|
import org.apache.poi.hpsf.Section;
|
2003-07-26 06:57:33 +00:00
|
|
|
import org.apache.poi.hpsf.SummaryInformation;
|
2003-09-13 12:32:11 +00:00
|
|
|
import org.apache.poi.hpsf.wellknown.SectionIDMap;
|
2002-07-22 08:25:19 +00:00
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* <p>Tests the basic HPSF functionality.</p>
|
|
|
|
|
*
|
|
|
|
|
* @author Rainer Klute (klute@rainer-klute.de)
|
|
|
|
|
*/
|
2009-06-12 21:53:17 +00:00
|
|
|
public final class TestBasic extends TestCase {
|
2002-07-22 08:25:19 +00:00
|
|
|
|
2009-06-12 21:53:17 +00:00
|
|
|
private static final String POI_FS = "TestGermanWord90.doc";
|
|
|
|
|
private static final String[] POI_FILES = new String[]
|
2003-07-26 06:57:33 +00:00
|
|
|
{
|
|
|
|
|
"\005SummaryInformation",
|
|
|
|
|
"\005DocumentSummaryInformation",
|
|
|
|
|
"WordDocument",
|
|
|
|
|
"\001CompObj",
|
|
|
|
|
"1Table"
|
|
|
|
|
};
|
2009-06-12 21:53:17 +00:00
|
|
|
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 =
|
2003-07-26 06:57:33 +00:00
|
|
|
{
|
|
|
|
|
(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
|
|
|
|
|
};
|
2009-06-12 21:53:17 +00:00
|
|
|
private static final int[] SECTION_COUNT =
|
2002-07-22 08:25:19 +00:00
|
|
|
{1, 2};
|
2009-06-12 21:53:17 +00:00
|
|
|
private static final boolean[] IS_SUMMARY_INFORMATION =
|
2002-07-22 08:25:19 +00:00
|
|
|
{true, false};
|
2009-06-12 21:53:17 +00:00
|
|
|
private static final boolean[] IS_DOCUMENT_SUMMARY_INFORMATION =
|
|
|
|
|
{false, true};
|
2002-07-22 08:25:19 +00:00
|
|
|
|
2009-06-12 21:53:17 +00:00
|
|
|
private POIFile[] poiFiles;
|
2002-07-22 08:25:19 +00:00
|
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* <p>Read a the test file from the "data" directory.</p>
|
2009-06-12 21:53:17 +00:00
|
|
|
*
|
2003-08-30 09:11:59 +00:00
|
|
|
* @exception FileNotFoundException if the file to be read does not exist.
|
|
|
|
|
* @exception IOException if any other I/O exception occurs.
|
2002-07-22 08:25:19 +00:00
|
|
|
*/
|
2009-08-23 12:34:24 +00:00
|
|
|
public void setUp() throws IOException
|
2002-07-22 08:25:19 +00:00
|
|
|
{
|
2009-08-23 12:34:24 +00:00
|
|
|
POIDataSamples samples = POIDataSamples.getHPSFInstance();
|
|
|
|
|
final File data = samples.getFile(POI_FS);
|
2003-07-26 06:57:33 +00:00
|
|
|
poiFiles = Util.readPOIFiles(data);
|
2002-07-22 08:25:19 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* <p>Checks the names of the files in the POI filesystem. They
|
|
|
|
|
* are expected to be in a certain order.</p>
|
|
|
|
|
*/
|
2006-03-03 16:57:55 +00:00
|
|
|
public void testReadFiles()
|
2002-07-22 08:25:19 +00:00
|
|
|
{
|
2003-07-26 06:57:33 +00:00
|
|
|
String[] expected = POI_FILES;
|
|
|
|
|
for (int i = 0; i < expected.length; i++)
|
2014-12-28 09:16:57 +00:00
|
|
|
assertEquals(poiFiles[i].getName(), expected[i]);
|
2002-07-22 08:25:19 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* <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>
|
2009-06-12 21:53:17 +00:00
|
|
|
*
|
2004-06-22 16:16:33 +00:00
|
|
|
* @exception IOException if an I/O exception occurs.
|
2009-06-12 21:53:17 +00:00
|
|
|
*
|
2004-06-22 16:16:33 +00:00
|
|
|
* @exception UnsupportedEncodingException if a character encoding is not
|
|
|
|
|
* supported.
|
2002-07-22 08:25:19 +00:00
|
|
|
*/
|
2004-06-22 16:16:33 +00:00
|
|
|
public void testCreatePropertySets()
|
|
|
|
|
throws UnsupportedEncodingException, IOException
|
2002-07-22 08:25:19 +00:00
|
|
|
{
|
2014-12-28 09:16:57 +00:00
|
|
|
Class<?>[] expected = new Class[]
|
2003-07-26 06:57:33 +00:00
|
|
|
{
|
|
|
|
|
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();
|
2014-12-28 09:16:57 +00:00
|
|
|
assertEquals(expected[i], o.getClass());
|
2003-07-26 06:57:33 +00:00
|
|
|
}
|
2002-07-22 08:25:19 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* <p>Tests the {@link PropertySet} methods. The test file has two
|
2002-12-10 06:15:20 +00:00
|
|
|
* property sets: the first one is a {@link SummaryInformation},
|
2002-07-22 08:25:19 +00:00
|
|
|
* the second one is a {@link DocumentSummaryInformation}.</p>
|
2009-06-12 21:53:17 +00:00
|
|
|
*
|
2003-08-30 09:11:59 +00:00
|
|
|
* @exception IOException if an I/O exception occurs
|
|
|
|
|
* @exception HPSFException if any HPSF exception occurs
|
2002-07-22 08:25:19 +00:00
|
|
|
*/
|
|
|
|
|
public void testPropertySetMethods() throws IOException, HPSFException
|
|
|
|
|
{
|
2003-07-26 06:57:33 +00:00
|
|
|
/* 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));
|
2014-12-28 09:16:57 +00:00
|
|
|
assertEquals(ps.getByteOrder(), BYTE_ORDER);
|
|
|
|
|
assertEquals(ps.getFormat(), FORMAT);
|
|
|
|
|
assertEquals(ps.getOSVersion(), OS_VERSION);
|
|
|
|
|
assertEquals(new String(ps.getClassID().getBytes()),
|
2003-07-26 06:57:33 +00:00
|
|
|
new String(CLASS_ID));
|
2014-12-28 09:16:57 +00:00
|
|
|
assertEquals(ps.getSectionCount(), SECTION_COUNT[i]);
|
|
|
|
|
assertEquals(ps.isSummaryInformation(),
|
2003-07-26 06:57:33 +00:00
|
|
|
IS_SUMMARY_INFORMATION[i]);
|
2014-12-28 09:16:57 +00:00
|
|
|
assertEquals(ps.isDocumentSummaryInformation(),
|
2003-07-26 06:57:33 +00:00
|
|
|
IS_DOCUMENT_SUMMARY_INFORMATION[i]);
|
|
|
|
|
}
|
2002-07-22 08:25:19 +00:00
|
|
|
}
|
|
|
|
|
|
2003-09-13 12:32:11 +00:00
|
|
|
/**
|
|
|
|
|
* <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>
|
2009-06-12 21:53:17 +00:00
|
|
|
*
|
2003-09-13 12:32:11 +00:00
|
|
|
* @exception IOException if an I/O exception occurs
|
|
|
|
|
* @exception HPSFException if any HPSF exception occurs
|
|
|
|
|
*/
|
|
|
|
|
public void testSectionMethods() throws IOException, HPSFException
|
|
|
|
|
{
|
|
|
|
|
final SummaryInformation si = (SummaryInformation)
|
|
|
|
|
PropertySetFactory.create(new ByteArrayInputStream
|
|
|
|
|
(poiFiles[0].getBytes()));
|
2014-12-28 09:16:57 +00:00
|
|
|
final List<Section> sections = si.getSections();
|
|
|
|
|
final Section s = sections.get(0);
|
|
|
|
|
assertTrue(org.apache.poi.hpsf.Util.equal
|
2003-09-13 12:32:11 +00:00
|
|
|
(s.getFormatID().getBytes(), SectionIDMap.SUMMARY_INFORMATION_ID));
|
2014-12-28 09:16:57 +00:00
|
|
|
assertNotNull(s.getProperties());
|
|
|
|
|
assertEquals(17, s.getPropertyCount());
|
|
|
|
|
assertEquals("Titel", s.getProperty(2));
|
|
|
|
|
assertEquals(1764, s.getSize());
|
2003-09-13 12:32:11 +00:00
|
|
|
}
|
2002-07-22 08:25:19 +00:00
|
|
|
}
|