2002-07-22 08:25:19 +00:00
|
|
|
/* ====================================================================
|
2004-04-09 13:05:39 +00:00
|
|
|
Copyright 2002-2004 Apache Software Foundation
|
|
|
|
|
|
|
|
|
|
Licensed 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.
|
|
|
|
|
==================================================================== */
|
|
|
|
|
|
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;
|
2003-08-23 15:14:39 +00:00
|
|
|
import java.io.FileFilter;
|
2003-07-26 06:57:33 +00:00
|
|
|
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.Assert;
|
|
|
|
|
import junit.framework.TestCase;
|
|
|
|
|
|
|
|
|
|
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)
|
|
|
|
|
* @since 2002-07-20
|
|
|
|
|
* @version $Id$
|
|
|
|
|
*/
|
|
|
|
|
public class TestBasic extends TestCase
|
|
|
|
|
{
|
|
|
|
|
|
2003-07-26 06:57:33 +00:00
|
|
|
static final String POI_FS = "TestGermanWord90.doc";
|
|
|
|
|
static final String[] POI_FILES = new String[]
|
|
|
|
|
{
|
|
|
|
|
"\005SummaryInformation",
|
|
|
|
|
"\005DocumentSummaryInformation",
|
|
|
|
|
"WordDocument",
|
|
|
|
|
"\001CompObj",
|
|
|
|
|
"1Table"
|
|
|
|
|
};
|
|
|
|
|
static final int BYTE_ORDER = 0xfffe;
|
|
|
|
|
static final int FORMAT = 0x0000;
|
|
|
|
|
static final int OS_VERSION = 0x00020A04;
|
|
|
|
|
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
|
|
|
|
|
};
|
|
|
|
|
static final int[] SECTION_COUNT =
|
2002-07-22 08:25:19 +00:00
|
|
|
{1, 2};
|
2003-07-26 06:57:33 +00:00
|
|
|
static final boolean[] IS_SUMMARY_INFORMATION =
|
2002-07-22 08:25:19 +00:00
|
|
|
{true, false};
|
2003-07-26 06:57:33 +00:00
|
|
|
static final boolean[] IS_DOCUMENT_SUMMARY_INFORMATION =
|
|
|
|
|
{false, true};
|
2002-07-22 08:25:19 +00:00
|
|
|
|
|
|
|
|
POIFile[] poiFiles;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2003-08-30 09:11:59 +00:00
|
|
|
/**
|
|
|
|
|
* <p>Test case constructor.</p>
|
|
|
|
|
*
|
|
|
|
|
* @param name The test case's name.
|
|
|
|
|
*/
|
2003-07-26 06:57:33 +00:00
|
|
|
public TestBasic(final String name)
|
2002-07-22 08:25:19 +00:00
|
|
|
{
|
|
|
|
|
super(name);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* <p>Read a the test file from the "data" directory.</p>
|
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
|
|
|
*/
|
|
|
|
|
public void setUp() throws FileNotFoundException, IOException
|
|
|
|
|
{
|
2003-07-26 06:57:33 +00:00
|
|
|
final File dataDir =
|
|
|
|
|
new File(System.getProperty("HPSF.testdata.path"));
|
|
|
|
|
final File data = new File(dataDir, POI_FS);
|
|
|
|
|
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++)
|
|
|
|
|
Assert.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>
|
2003-08-30 09:11:59 +00:00
|
|
|
*
|
2004-06-22 16:16:33 +00:00
|
|
|
* @exception IOException if an I/O exception occurs.
|
|
|
|
|
*
|
|
|
|
|
* @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
|
|
|
{
|
2003-07-26 06:57:33 +00:00
|
|
|
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();
|
2006-03-03 16:57:55 +00:00
|
|
|
Assert.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>
|
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));
|
|
|
|
|
Assert.assertEquals(ps.getByteOrder(), BYTE_ORDER);
|
|
|
|
|
Assert.assertEquals(ps.getFormat(), FORMAT);
|
|
|
|
|
Assert.assertEquals(ps.getOSVersion(), OS_VERSION);
|
|
|
|
|
Assert.assertEquals(new String(ps.getClassID().getBytes()),
|
|
|
|
|
new String(CLASS_ID));
|
|
|
|
|
Assert.assertEquals(ps.getSectionCount(), SECTION_COUNT[i]);
|
|
|
|
|
Assert.assertEquals(ps.isSummaryInformation(),
|
|
|
|
|
IS_SUMMARY_INFORMATION[i]);
|
|
|
|
|
Assert.assertEquals(ps.isDocumentSummaryInformation(),
|
|
|
|
|
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>
|
|
|
|
|
*
|
|
|
|
|
* @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()));
|
|
|
|
|
final List sections = si.getSections();
|
|
|
|
|
final Section s = (Section) sections.get(0);
|
|
|
|
|
Assert.assertTrue(org.apache.poi.hpsf.Util.equal
|
|
|
|
|
(s.getFormatID().getBytes(), SectionIDMap.SUMMARY_INFORMATION_ID));
|
|
|
|
|
Assert.assertNotNull(s.getProperties());
|
|
|
|
|
Assert.assertEquals(17, s.getPropertyCount());
|
|
|
|
|
Assert.assertEquals("Titel", s.getProperty(2));
|
2006-03-03 16:57:55 +00:00
|
|
|
Assert.assertEquals(1748, s.getSize());
|
2003-09-13 12:32:11 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2003-08-23 15:14:39 +00:00
|
|
|
/**
|
|
|
|
|
* <p>This test methods reads all property set streams from all POI
|
|
|
|
|
* filesystems in the "data" directory.</p>
|
|
|
|
|
*/
|
|
|
|
|
public void testReadAllFiles()
|
|
|
|
|
{
|
|
|
|
|
final File dataDir =
|
|
|
|
|
new File(System.getProperty("HPSF.testdata.path"));
|
|
|
|
|
final File[] fileList = dataDir.listFiles(new FileFilter()
|
|
|
|
|
{
|
|
|
|
|
public boolean accept(final File f)
|
|
|
|
|
{
|
|
|
|
|
return f.isFile();
|
|
|
|
|
}
|
|
|
|
|
});
|
|
|
|
|
try
|
|
|
|
|
{
|
|
|
|
|
for (int i = 0; i < fileList.length; i++)
|
|
|
|
|
{
|
|
|
|
|
File f = fileList[i];
|
|
|
|
|
/* Read the POI filesystem's property set streams: */
|
|
|
|
|
final POIFile[] psf1 = Util.readPropertySets(f);
|
|
|
|
|
|
|
|
|
|
for (int j = 0; j < psf1.length; j++)
|
|
|
|
|
{
|
|
|
|
|
final InputStream in =
|
|
|
|
|
new ByteArrayInputStream(psf1[j].getBytes());
|
2003-09-18 18:56:35 +00:00
|
|
|
PropertySetFactory.create(in);
|
2003-08-23 15:14:39 +00:00
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
catch (Throwable t)
|
|
|
|
|
{
|
2003-09-04 20:15:24 +00:00
|
|
|
final String s = org.apache.poi.hpsf.Util.toString(t);
|
2003-08-30 09:11:59 +00:00
|
|
|
fail(s);
|
2003-08-23 15:14:39 +00:00
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2002-07-22 08:25:19 +00:00
|
|
|
/**
|
|
|
|
|
* <p>Runs the test cases stand-alone.</p>
|
2003-08-23 15:14:39 +00:00
|
|
|
*
|
|
|
|
|
* @param args Command-line arguments (ignored)
|
|
|
|
|
*
|
|
|
|
|
* @exception Throwable if any sort of exception or error occurs
|
2002-07-22 08:25:19 +00:00
|
|
|
*/
|
2003-07-26 06:57:33 +00:00
|
|
|
public static void main(final String[] args) throws Throwable
|
2002-07-22 08:25:19 +00:00
|
|
|
{
|
2003-07-26 06:57:33 +00:00
|
|
|
System.setProperty("HPSF.testdata.path",
|
|
|
|
|
"./src/testcases/org/apache/poi/hpsf/data");
|
|
|
|
|
junit.textui.TestRunner.run(TestBasic.class);
|
2002-07-22 08:25:19 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
}
|