klute       2002/07/22 01:25:19

  Modified:    .        build.xml
               src/java/org/apache/poi/hpsf Property.java
               src/java/org/apache/poi/poifs/property
                        PropertyConstants.java
  Added:       src/testcases/org/apache/poi/hpsf/basic POIFile.java
                        TestBasic.java Util.java
  Log:
  First HPSF test cases added.
  
  Revision  Changes    Path
  1.34      +2 -0      jakarta-poi/build.xml
  
  Index: build.xml
  ===================================================================
  RCS file: /home/cvs/jakarta-poi/build.xml,v
  retrieving revision 1.33
  retrieving revision 1.34
  diff -u -r1.33 -r1.34
  --- build.xml 21 Jul 2002 04:28:09 -0000      1.33
  +++ build.xml 22 Jul 2002 08:25:18 -0000      1.34
  @@ -390,6 +390,8 @@
                           
value="${xlayout.source.test.dir}/org/apache/poi/util/data"/>
          <sysproperty key="HSSF.testdata.path"
                      value="${xlayout.source.test.dir}/org/apache/poi/hssf/data"/>
  +       <sysproperty key="HPSF.testdata.path"
  +                   value="${xlayout.source.test.dir}/org/apache/poi/hpsf/data"/>
           <classpath>
                <path>
                         <fileset dir="." casesensitive="yes"> 
  
  
  
  1.9       +7 -6      jakarta-poi/src/java/org/apache/poi/hpsf/Property.java
  
  Index: Property.java
  ===================================================================
  RCS file: /home/cvs/jakarta-poi/src/java/org/apache/poi/hpsf/Property.java,v
  retrieving revision 1.8
  retrieving revision 1.9
  diff -u -r1.8 -r1.9
  --- Property.java     18 Jul 2002 15:51:39 -0000      1.8
  +++ Property.java     22 Jul 2002 08:25:18 -0000      1.9
  @@ -75,15 +75,16 @@
    * <p>The property's <strong>type</strong> determines how its
    * <strong>value </strong> is interpreted. For example, if the type is
    * {@link Variant#VT_LPSTR} (byte string), the value consists of a
  - * {@link DWord} telling how many bytes the string contains. The bytes
  - * follow immediately, including any null bytes that terminate the
  + * DWord telling how many bytes the string contains. The bytes follow
  + * immediately, including any null bytes that terminate the
    * string. The type {@link Variant#VT_I4} denotes a four-byte integer
    * value, {@link Variant#VT_FILETIME} some date and time (of a
    * file).</p>
    *
  - * <p><strong>FIXME:</strong> Reading of other types than those
  - * mentioned above and the dictionary property is not yet
  - * implemented.</p>
  + * <p><strong>FIXME:</strong> Reading of other types than {@link
  + * Variant#VT_I4}, {@link Variant#VT_FILETIME}, {@link
  + * Variant#VT_LPSTR}, {@link Variant#VT_CF}, {@link Variant#VT_BOOL},
  + * and reading the dictionary property is not yet implemented.</p>
    *
    * @author Rainer Klute ([EMAIL PROTECTED])
    * @author Drew Varner (Drew.Varner InAndAround sc.edu)
  
  
  
  1.2       +0 -4      
jakarta-poi/src/java/org/apache/poi/poifs/property/PropertyConstants.java
  
  Index: PropertyConstants.java
  ===================================================================
  RCS file: 
/home/cvs/jakarta-poi/src/java/org/apache/poi/poifs/property/PropertyConstants.java,v
  retrieving revision 1.1
  retrieving revision 1.2
  diff -u -r1.1 -r1.2
  --- PropertyConstants.java    31 Jan 2002 02:23:45 -0000      1.1
  +++ PropertyConstants.java    22 Jul 2002 08:25:18 -0000      1.2
  @@ -57,10 +57,6 @@
   
   /**
    * Interface PropertyConstants
  - *
  - *
  - * @author
  - * @version %I%, %G%
    */
   
   public interface PropertyConstants
  
  
  
  1.1                  jakarta-poi/src/testcases/org/apache/poi/hpsf/basic/POIFile.java
  
  Index: POIFile.java
  ===================================================================
  /* ====================================================================
   * The Apache Software License, Version 1.1
   *
   * Copyright (c) 2002 The Apache Software Foundation.  All rights
   * reserved.
   *
   * Redistribution and use in source and binary forms, with or without
   * modification, are permitted provided that the following conditions
   * are met:
   *
   * 1. Redistributions of source code must retain the above copyright
   *    notice, this list of conditions and the following disclaimer.
   *
   * 2. Redistributions in binary form must reproduce the above copyright
   *    notice, this list of conditions and the following disclaimer in
   *    the documentation and/or other materials provided with the
   *    distribution.
   *
   * 3. The end-user documentation included with the redistribution,
   *    if any, must include the following acknowledgment:
   *       "This product includes software developed by the
   *        Apache Software Foundation (http://www.apache.org/)."
   *    Alternately, this acknowledgment may appear in the software itself,
   *    if and wherever such third-party acknowledgments normally appear.
   *
   * 4. The names "Apache" and "Apache Software Foundation" and
   *    "Apache POI" must not be used to endorse or promote products
   *    derived from this software without prior written permission. For
   *    written permission, please contact [EMAIL PROTECTED]
   *
   * 5. Products derived from this software may not be called "Apache",
   *    "Apache POI", nor may "Apache" appear in their name, without
   *    prior written permission of the Apache Software Foundation.
   *
   * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
   * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
   * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
   * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
   * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
   * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
   * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
   * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
   * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
   * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
   * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
   * SUCH DAMAGE.
   * ====================================================================
   *
   * This software consists of voluntary contributions made by many
   * individuals on behalf of the Apache Software Foundation.  For more
   * information on the Apache Software Foundation, please see
   * <http://www.apache.org/>.
   */
  
  package org.apache.poi.hpsf.basic;
  import org.apache.poi.poifs.filesystem.*;
  
  
  
  /**
   * <p>A POI file just for testing.</p>
   *
   * @author Rainer Klute ([EMAIL PROTECTED])
   * @since 2002-07-20
   * @version $Id: POIFile.java,v 1.1 2002/07/22 08:25:19 klute Exp $
   */
  public class POIFile
  {
  
      private String name;
      private POIFSDocumentPath path;
      private byte[] bytes;
  
      public void setName(final String name)
      {
        this.name = name;
      }
  
      public String getName()
      {
        return name;
      }
  
      public void setPath(final POIFSDocumentPath path)
      {
        this.path = path;
      }
  
      public POIFSDocumentPath getPath()
      {
        return path;
      }
  
      public void setBytes(final byte[] bytes)
      {
        this.bytes = bytes;
      }
  
      public byte[] getBytes()
      {
        return bytes;
      }
  
  }
  
  
  
  1.1                  
jakarta-poi/src/testcases/org/apache/poi/hpsf/basic/TestBasic.java
  
  Index: TestBasic.java
  ===================================================================
  /* ====================================================================
   * The Apache Software License, Version 1.1
   *
   * Copyright (c) 2002 The Apache Software Foundation.  All rights
   * reserved.
   *
   * Redistribution and use in source and binary forms, with or without
   * modification, are permitted provided that the following conditions
   * are met:
   *
   * 1. Redistributions of source code must retain the above copyright
   *    notice, this list of conditions and the following disclaimer.
   *
   * 2. Redistributions in binary form must reproduce the above copyright
   *    notice, this list of conditions and the following disclaimer in
   *    the documentation and/or other materials provided with the
   *    distribution.
   *
   * 3. The end-user documentation included with the redistribution,
   *    if any, must include the following acknowledgment:
   *       "This product includes software developed by the
   *        Apache Software Foundation (http://www.apache.org/)."
   *    Alternately, this acknowledgment may appear in the software itself,
   *    if and wherever such third-party acknowledgments normally appear.
   *
   * 4. The names "Apache" and "Apache Software Foundation" and
   *    "Apache POI" must not be used to endorse or promote products
   *    derived from this software without prior written permission. For
   *    written permission, please contact [EMAIL PROTECTED]
   *
   * 5. Products derived from this software may not be called "Apache",
   *    "Apache POI", nor may "Apache" appear in their name, without
   *    prior written permission of the Apache Software Foundation.
   *
   * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
   * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
   * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
   * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
   * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
   * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
   * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
   * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
   * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
   * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
   * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
   * SUCH DAMAGE.
   * ====================================================================
   *
   * This software consists of voluntary contributions made by many
   * individuals on behalf of the Apache Software Foundation.  For more
   * information on the Apache Software Foundation, please see
   * <http://www.apache.org/>.
   */
  
  package org.apache.poi.hpsf.basic;
  
  import java.io.*;
  import java.util.*;
  import junit.framework.*;
  import org.apache.poi.hpsf.*;
  
  
  
  /**
   * <p>Tests the basic HPSF functionality.</p>
   *
   * @author Rainer Klute ([EMAIL PROTECTED])
   * @since 2002-07-20
   * @version $Id: TestBasic.java,v 1.1 2002/07/22 08:25:19 klute Exp $
   */
  public class TestBasic extends TestCase
  {
  
      final static String POI_FS = "TestGermanWord90.doc";
      final static String[] POI_FILES = new String[]
        {
            "\005SummaryInformation",
            "\005DocumentSummaryInformation",
            "WordDocument",
            "\001CompObj",
            "1Table"
        };
      final static int BYTE_ORDER = 0xfffe;
      final static int FORMAT     = 0x0000;
      final static int OS_VERSION = 0x00020A04;
      final static 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
        };
      final static int[] SECTION_COUNT =
          {1, 2};
      final static boolean[] IS_SUMMARY_INFORMATION =
          {true, false};
      final static boolean[] IS_DOCUMENT_SUMMARY_INFORMATION =
          {false, true};            
  
      POIFile[] poiFiles;
  
  
  
      public TestBasic(String name)
      {
          super(name);
      }
  
  
  
      /**
       * <p>Read a the test file from the "data" directory.</p>
       */
      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>
       */
      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>
       */
      public void testCreatePropertySets() throws 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 (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 set: the first one is a {@link SummaryInformation},
       * the second one is a {@link DocumentSummaryInformation}.</p>
       */
      public void testPropertySetMethods() throws IOException, HPSFException
      {
        String[] expected = POI_FILES;
  
        /* 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]);
        }
      }
  
  
  
      /**
       * <p>Runs the test cases stand-alone.</p>
       */
      public static void main(String[] args)
      {
        System.setProperty("HPSF.testdata.path",
                           "./src/testcases/org/apache/poi/hpsf/data");
          junit.textui.TestRunner.run(TestBasic.class);
      }
  
  }
  
  
  
  1.1                  jakarta-poi/src/testcases/org/apache/poi/hpsf/basic/Util.java
  
  Index: Util.java
  ===================================================================
  /* ====================================================================
   * The Apache Software License, Version 1.1
   *
   * Copyright (c) 2002 The Apache Software Foundation.  All rights
   * reserved.
   *
   * Redistribution and use in source and binary forms, with or without
   * modification, are permitted provided that the following conditions
   * are met:
   *
   * 1. Redistributions of source code must retain the above copyright
   *    notice, this list of conditions and the following disclaimer.
   *
   * 2. Redistributions in binary form must reproduce the above copyright
   *    notice, this list of conditions and the following disclaimer in
   *    the documentation and/or other materials provided with the
   *    distribution.
   *
   * 3. The end-user documentation included with the redistribution,
   *    if any, must include the following acknowledgment:
   *       "This product includes software developed by the
   *        Apache Software Foundation (http://www.apache.org/)."
   *    Alternately, this acknowledgment may appear in the software itself,
   *    if and wherever such third-party acknowledgments normally appear.
   *
   * 4. The names "Apache" and "Apache Software Foundation" and
   *    "Apache POI" must not be used to endorse or promote products
   *    derived from this software without prior written permission. For
   *    written permission, please contact [EMAIL PROTECTED]
   *
   * 5. Products derived from this software may not be called "Apache",
   *    "Apache POI", nor may "Apache" appear in their name, without
   *    prior written permission of the Apache Software Foundation.
   *
   * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
   * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
   * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
   * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
   * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
   * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
   * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
   * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
   * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
   * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
   * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
   * SUCH DAMAGE.
   * ====================================================================
   *
   * This software consists of voluntary contributions made by many
   * individuals on behalf of the Apache Software Foundation.  For more
   * information on the Apache Software Foundation, please see
   * <http://www.apache.org/>.
   */
  
  package org.apache.poi.hpsf.basic;
  
  import java.io.*;
  import java.util.*;
  import org.apache.poi.poifs.eventfilesystem.*;
  
  
  
  /**
   * <p>Static utility methods needed by the HPSF test cases.</p>
   *
   * @author Rainer Klute ([EMAIL PROTECTED])
   * @since 2002-07-20
   * @version $Id: Util.java,v 1.1 2002/07/22 08:25:19 klute Exp $
   */
  public class Util
  {
  
      /**
       * <p>Reads bytes from an input stream and writes them to an
       * output stream until end of file is encountered.</p>
       */
      public static void copy(final InputStream in, final OutputStream out)
          throws IOException
      {
          final int BUF_SIZE = 1000;
          byte[] b = new byte[BUF_SIZE];
          int read;
          boolean eof = false;
          while (!eof)
          {
              try
              {
                  read = in.read(b, 0, BUF_SIZE);
                  if (read > 0)
                      out.write(b, 0, read);
                else
                    eof = true;
              }
              catch (EOFException ex)
              {
                  eof = true;
              }
          }
      }
  
  
  
      /**
       * <p>Reads all files from a POI filesystem and returns them as an
       * array of {@link POIFile} instances. This method loads all files
       * into memory and thus does not cope well with large POI
       * filessystems.</p>
       * 
       * @param file The name of the POI filesystem as seen by the
       * operating system. (This is the "filename".)
       *
       * @return The POI files. The elements are ordered in the same way
       * as the files in the POI filesystem.
       */
      public static POIFile[] readPOIFiles(final File poiFs)
        throws FileNotFoundException, IOException
      {
        final List files = new ArrayList();
        POIFSReader r = new POIFSReader();
        r.registerListener(new POIFSReaderListener()
            {
                public void processPOIFSReaderEvent(POIFSReaderEvent event)
                {
                    try
                    {
                        POIFile f = new POIFile();
                        f.setName(event.getName());
                        f.setPath(event.getPath());
                        InputStream in = event.getStream();
                        ByteArrayOutputStream out =
                            new ByteArrayOutputStream();
                        Util.copy(in, out);
                        out.close();
                        f.setBytes(out.toByteArray());
                        files.add(f);
                    }
                    catch (IOException ex)
                    {
                        ex.printStackTrace();
                        throw new RuntimeException(ex.getMessage());
                    }
                }
            });
        r.read(new FileInputStream(poiFs));
        POIFile[] result = new POIFile[files.size()];
        for (int i = 0; i < result.length; i++)
            result[i] = (POIFile) files.get(i);
        return result;
      }
  
  
  
      /**
       * <p>Prints the system properties to System.out.</p>
       */
      public static void printSystemProperties()
      {
        Properties p = System.getProperties();
        List names = new LinkedList();
        for (Iterator i = p.keySet().iterator(); i.hasNext();)
            names.add(i.next());
        Collections.sort(names);
        for (Iterator i = names.iterator(); i.hasNext();)
          {
            String name = (String) i.next();
            String value = (String) p.get(name);
            System.out.println(name + ": " + value);
        }
        System.out.println("Current directory: " +
                           System.getProperty("user.dir"));
      }
  
  }
  
  
  

--
To unsubscribe, e-mail:   <mailto:[EMAIL PROTECTED]>
For additional commands, e-mail: <mailto:[EMAIL PROTECTED]>

Reply via email to