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; /** *

Test case for OLE2 files with empty properties. An empty property's type * is {@link Variant.VT_EMPTY}.

* * @author Rainer Klute <klute@rainer-klute.de> * @since 2003-07-25 * @version $Id$ */ public class TestEmptyProperties extends TestCase { /** *

This test file's summary information stream contains some empty * properties.

*/ static final String POI_FS = "TestCorel.shw"; static final String[] POI_FILES = new String[] { "PerfectOffice_MAIN", "\005SummaryInformation", "Main" }; POIFile[] poiFiles; /** *

Constructor

* * @param name The name of the test case */ public TestEmptyProperties(final String name) { super(name); } /** *

Read a the test file from the "data" directory.

* * @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); } /** *

Checks the names of the files in the POI filesystem. They * are expected to be in a certain order.

* * @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]); } /** *

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}.

* * @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]); } } /** *

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}.

* * @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()); } /** *

Runs the test cases stand-alone.

* * @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); } }