--- /dev/null
+package org.apache.poi.hpsf.basic;
+
+import java.io.ByteArrayInputStream;
+import java.io.File;
+import java.io.FileNotFoundException;
+import java.io.IOException;
+import java.io.InputStream;
+
+import junit.framework.Assert;
+import junit.framework.TestCase;
+
+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.SummaryInformation;
+import org.apache.poi.hpsf.UnexpectedPropertySetTypeException;
+
+/**
+ * <p>Test case for OLE2 files with empty properties. An empty property's type
+ * is {@link Variant.VT_EMPTY}.</p>
+ *
+ * @author Rainer Klute <a
+ * href="mailto:klute@rainer-klute.de"><klute@rainer-klute.de></a>
+ * @since 2003-07-25
+ * @version $Id$
+ */
+public class TestEmptyProperties extends TestCase
+{
+
+ /**
+ * <p>This test file's summary information stream contains some empty
+ * properties.</p>
+ */
+ static final String POI_FS = "TestCorel.shw";
+
+ static final String[] POI_FILES = new String[]
+ {
+ "PerfectOffice_MAIN",
+ "\005SummaryInformation",
+ "Main"
+ };
+
+ POIFile[] poiFiles;
+
+
+
+ /**
+ * <p>Constructor</p>
+ *
+ * @param name The name of the test case
+ */
+ public TestEmptyProperties(final String name)
+ {
+ super(name);
+ }
+
+
+
+ /**
+ * <p>Read a the test file from the "data" directory.</p>
+ *
+ * @exception FileNotFoundException if the file containing the test data
+ * does not exist
+ * @exception IOException if an I/O exception occurs
+ */
+ public void setUp() throws FileNotFoundException, IOException
+ {
+ final File dataDir =
+ new File(System.getProperty("HPSF.testdata.path"));
+ final File data = new File(dataDir, 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>
+ *
+ * @exception IOException if an I/O exception occurs
+ */
+ public void testReadFiles() throws IOException
+ {
+ String[] expected = POI_FILES;
+ for (int i = 0; i < expected.length; i++)
+ Assert.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
+ */
+ public void testCreatePropertySets() throws IOException
+ {
+ Class[] expected = new Class[]
+ {
+ NoPropertySetStreamException.class,
+ SummaryInformation.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 (UnexpectedPropertySetTypeException ex)
+ {
+ o = ex;
+ }
+ catch (MarkUnsupportedException ex)
+ {
+ o = ex;
+ }
+ in.close();
+ Assert.assertEquals(o.getClass(), expected[i]);
+ }
+ }
+
+
+
+ /**
+ * <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 an HPSF operation fails
+ */
+ public void testPropertySetMethods() throws IOException, HPSFException
+ {
+ byte[] b = poiFiles[1].getBytes();
+ PropertySet ps =
+ PropertySetFactory.create(new ByteArrayInputStream(b));
+ SummaryInformation s = (SummaryInformation) ps;
+ assertNull(s.getTitle());
+ assertNull(s.getSubject());
+ assertNotNull(s.getAuthor());
+ assertNull(s.getKeywords());
+ assertNull(s.getComments());
+ assertNotNull(s.getTemplate());
+ assertNotNull(s.getLastAuthor());
+ assertNotNull(s.getRevNumber());
+ assertNull(s.getEditTime());
+ assertNull(s.getLastPrinted());
+ assertNull(s.getCreateDateTime());
+ assertNull(s.getLastSaveDateTime());
+ assertEquals(s.getPageCount(), 0);
+ assertEquals(s.getWordCount(), 0);
+ assertEquals(s.getCharCount(), 0);
+ assertNull(s.getThumbnail());
+ assertNull(s.getApplicationName());
+ }
+
+
+
+ /**
+ * <p>Runs the test cases stand-alone.</p>
+ *
+ * @param args the command-line arguments (unused)
+ *
+ * @exception Throwable if any exception or error occurs
+ */
+ public static void main(final String[] args) throws Throwable
+ {
+ System.setProperty("HPSF.testdata.path",
+ "./src/testcases/org/apache/poi/hpsf/data");
+ junit.textui.TestRunner.run(TestBasic.class);
+ }
+
+}