Hi Glen,

I'll be doing this as I see it anyhow but this:

               System.setProperty(
                   "HSSF.testdata.path",
                   "src/testcases/org/apache/poi/hssf/data");

should read

               System.setProperty(
                   "HSSF.testdata.path",
                   args[0]);

grabbing the first argument from the command prompt.  -- Include sanity 
checks for was there no argument or property -- there are examples to do 
that, but you get the idea.

-Andy

[EMAIL PROTECTED] wrote:

>glens       02/04/29 04:10:29
>
>  Modified:    src/java/org/apache/poi/hssf/model Workbook.java
>               src/java/org/apache/poi/hssf/util HSSFColor.java
>               src/testcases/org/apache/poi/hssf/usermodel
>                        TestCellStyle.java TestWorkbook.java
>  Added:       src/testcases/org/apache/poi/hssf/usermodel
>                        SanityChecker.java
>  Log:
>  Some testing related stuff.  The first shot at a sanity tester for XLS record 
>structure.  Needs heaps more checks but it's a start.
>  
>  Revision  Changes    Path
>  1.6       +5 -0      jakarta-poi/src/java/org/apache/poi/hssf/model/Workbook.java
>  
>  Index: Workbook.java
>  ===================================================================
>  RCS file: /home/cvs/jakarta-poi/src/java/org/apache/poi/hssf/model/Workbook.java,v
>  retrieving revision 1.5
>  retrieving revision 1.6
>  diff -u -r1.5 -r1.6
>  --- Workbook.java    23 Apr 2002 22:24:40 -0000      1.5
>  +++ Workbook.java    29 Apr 2002 11:10:29 -0000      1.6
>  @@ -1772,4 +1772,9 @@
>           }
>           return null;
>       }
>  +
>  +    public List getRecords()
>  +    {
>  +        return records;
>  +    }
>   }
>  
>  
>  
>  1.4       +4 -4      jakarta-poi/src/java/org/apache/poi/hssf/util/HSSFColor.java
>  
>  Index: HSSFColor.java
>  ===================================================================
>  RCS file: /home/cvs/jakarta-poi/src/java/org/apache/poi/hssf/util/HSSFColor.java,v
>  retrieving revision 1.3
>  retrieving revision 1.4
>  diff -u -r1.3 -r1.4
>  --- HSSFColor.java   7 Apr 2002 17:28:27 -0000       1.3
>  +++ HSSFColor.java   29 Apr 2002 11:10:29 -0000      1.4
>  @@ -87,7 +87,7 @@
>        * it takes to create it once per request but you will not hold onto it
>        * if you have none of those requests.
>        *
>  -     * @returns a hashtable containing all colors mapped to their gnumeric-like
>  +     * @return a hashtable containing all colors mapped to their gnumeric-like
>        * triplet string
>        */
>   
>  @@ -148,7 +148,7 @@
>       }
>   
>       /**
>  -     * @returns index to the standard palet
>  +     * @return index to the standard palet
>        */
>   
>       public short getIndex()
>  @@ -157,7 +157,7 @@
>       }
>   
>       /**
>  -     * @returns short[] triplet representation like that in Excel
>  +     * @return  triplet representation like that in Excel
>        */
>   
>       public short [] getTriplet()
>  @@ -168,7 +168,7 @@
>       // its a hack but its a good hack
>   
>       /**
>  -     * @returns a hex string exactly like a gnumeric triplet
>  +     * @return a hex string exactly like a gnumeric triplet
>        */
>   
>       public String getHexString()
>  
>  
>  
>  1.6       +9 -3      
>jakarta-poi/src/testcases/org/apache/poi/hssf/usermodel/TestCellStyle.java
>  
>  Index: TestCellStyle.java
>  ===================================================================
>  RCS file: 
>/home/cvs/jakarta-poi/src/testcases/org/apache/poi/hssf/usermodel/TestCellStyle.java,v
>  retrieving revision 1.5
>  retrieving revision 1.6
>  diff -u -r1.5 -r1.6
>  --- TestCellStyle.java       15 Mar 2002 02:47:56 -0000      1.5
>  +++ TestCellStyle.java       29 Apr 2002 11:10:29 -0000      1.6
>  @@ -127,7 +127,9 @@
>           }
>           wb.write(out);
>           out.close();
>  -        assertEquals("FILE LENGTH == 87040", file.length(), 87040);
>  +        SanityChecker sanityChecker = new SanityChecker();
>  +        sanityChecker.checkHSSFWorkbook(wb);
>  +        assertEquals("FILE LENGTH == 87040", file.length(), 87040);  // remove me
>           assertEquals("LAST ROW == 99", 99, s.getLastRowNum());
>           assertEquals("FIRST ROW == 0", 0, s.getFirstRowNum());
>   
>  @@ -164,8 +166,10 @@
>   
>           wb.write(out);
>           out.close();
>  +        SanityChecker sanityChecker = new SanityChecker();
>  +        sanityChecker.checkHSSFWorkbook(wb);
>   
>  -        assertEquals("FILE LENGTH ", 5632, file.length());
>  +        assertEquals("FILE LENGTH ", 5632, file.length());      // remove me
>           assertEquals("LAST ROW ", 0, s.getLastRowNum());
>           assertEquals("FIRST ROW ", 0, s.getFirstRowNum());
>   
>  @@ -226,7 +230,9 @@
>           }
>           wb.write(out);
>           out.close();
>  -        assertEquals("FILE LENGTH == 87040", file.length(), 87040);
>  +        SanityChecker sanityChecker = new SanityChecker();
>  +        sanityChecker.checkHSSFWorkbook(wb);
>  +        assertEquals("FILE LENGTH == 87040", file.length(), 87040);     // remove 
>me
>           assertEquals("LAST ROW == 99", 99, s.getLastRowNum());
>           assertEquals("FIRST ROW == 0", 0, s.getFirstRowNum());
>   
>  
>  
>  
>  1.2       +11 -25    
>jakarta-poi/src/testcases/org/apache/poi/hssf/usermodel/TestWorkbook.java
>  
>  Index: TestWorkbook.java
>  ===================================================================
>  RCS file: 
>/home/cvs/jakarta-poi/src/testcases/org/apache/poi/hssf/usermodel/TestWorkbook.java,v
>  retrieving revision 1.1
>  retrieving revision 1.2
>  diff -u -r1.1 -r1.2
>  --- TestWorkbook.java        31 Jan 2002 02:23:52 -0000      1.1
>  +++ TestWorkbook.java        29 Apr 2002 11:10:29 -0000      1.2
>  @@ -73,6 +73,8 @@
>    * Class to test Workbook functionality
>    *
>    * @author Andrew C. Oliver
>  + * @author Greg Merrill
>  + * @author Siggi Cherem
>    */
>   
>   public class TestWorkbook
>  @@ -88,6 +90,7 @@
>       private static final String LAST_NAME_VALUE      = "Bush";
>       private static final String FIRST_NAME_VALUE     = "George";
>       private static final String SSN_VALUE            = "555555555";
>  +    private SanityChecker sanityChecker = new SanityChecker();
>   
>       /**
>        * Constructor TestWorkbook
>  @@ -108,7 +111,6 @@
>        * FAILURE:    HSSF does not create a sheet or excepts.  Filesize does not 
>match the known good.
>        *             HSSFSheet last row or first row is incorrect.             <P>
>        *
>  -     * @author Andrew C. Oliver
>        */
>   
>       public void testWriteSheetSimple()
>  @@ -139,8 +141,9 @@
>           }
>           wb.write(out);
>           out.close();
>  +        sanityChecker.checkHSSFWorkbook(wb);
>           assertEquals("FILE LENGTH == 87040", 87040,
>  -                     file.length());   // changed because of new sheet behavior
>  +                     file.length());                            // remove me
>           assertEquals("LAST ROW == 99", 99, s.getLastRowNum());
>           assertEquals("FIRST ROW == 0", 0, s.getFirstRowNum());
>   
>  @@ -156,7 +159,6 @@
>        * FAILURE:    HSSF does not create a sheet or excepts.  Filesize does not 
>match the known good.
>        *             HSSFSheet last row or first row is incorrect.             <P>
>        *
>  -     * @author Andrew C. Oliver
>        */
>   
>       public void testWriteModifySheetSimple()
>  @@ -198,11 +200,9 @@
>           wb.write(out);
>           out.close();
>   
>  -        // System.out.println(file.length());
>  -        // assertEquals("FILE LENGTH == 87552",file.length(), 87552);
>  -        // System.out.println(s.getLastRowNum());
>  +        sanityChecker.checkHSSFWorkbook(wb);
>           assertEquals("FILE LENGTH == 45568", 45568,
>  -                     file.length());   // changed due to new sheet behavior (<3)
>  +                     file.length());   // remove
>           assertEquals("LAST ROW == 74", 74, s.getLastRowNum());
>           assertEquals("FIRST ROW == 25", 25, s.getFirstRowNum());
>       }
>  @@ -214,8 +214,6 @@
>        * FAILURE:    HSSF does not read a sheet or excepts.  HSSF cannot identify 
>values
>        *             in the sheet in their known positions.<P>
>        *
>  -     * @author Greg Merrill
>  -     * @author Andrew C. Oliver
>        */
>   
>       public void testReadSimple()
>  @@ -242,8 +240,6 @@
>        * FAILURE:    HSSF does not read a sheet or excepts.  HSSF cannot identify 
>values
>        *             in the sheet in their known positions.<P>
>        *
>  -     * @author Greg Merrill
>  -     * @author Andrew C. Oliver
>        */
>   
>       public void testReadEmployeeSimple()
>  @@ -283,8 +279,6 @@
>        *             HSSF does not re-read the sheet or excepts.  Upon re-reading 
>the sheet the value
>        *             is incorrect or has not been replaced. <P>
>        *
>  -     * @author Andrew C. Oliver
>  -     * @author Greg Merrill
>        */
>   
>       public void testModifySimple()
>  @@ -328,8 +322,6 @@
>        *             is incorrect or has not been replaced or the incorrect cell has 
>its value replaced
>        *             or is incorrect. <P>
>        *
>  -     * @author Andrew C. Oliver
>  -     * @author Greg Merrill
>        */
>   
>       public void testModifySimpleWithSkip()
>  @@ -381,8 +373,6 @@
>        *             HSSF does not re-read the sheet or excepts.  Upon re-reading 
>the sheet the value
>        *             is incorrect or has not been replaced. <P>
>        *
>  -     * @author Andrew C. Oliver
>  -     * @author Greg Merrill
>        */
>   
>       public void testModifySimpleWithStyling()
>  @@ -433,8 +423,6 @@
>        *             HSSF does not re-read the sheet or excepts.  Upon re-reading 
>the sheet the value
>        *             is incorrect or has not been replaced. <P>
>        *
>  -     * @author Andrew C. Oliver
>  -     * @author Greg Merrill
>        */
>   
>       public void testModifyEmployee()
>  @@ -487,8 +475,6 @@
>        * SUCCESS:    HSSF reads a sheet.  HSSF returns that the cell is a numeric 
>type cell.    <P>
>        * FAILURE:    HSSF does not read a sheet or excepts.  HSSF incorrectly 
>indentifies the cell<P>
>        *
>  -     * @author Siggi Cherem
>  -     * @author Andrew C. Oliver (acoliver at apache dot org)
>        */
>   
>       public void testReadSheetWithRK()
>  @@ -519,7 +505,6 @@
>        * FAILURE:    HSSF does not create a sheet or excepts.  Filesize does not 
>match the known good.
>        *             HSSFSheet last row or first row is incorrect.             <P>
>        *
>  -     * @author Andrew C. Oliver
>        */
>   
>       public void testWriteModifySheetMerged()
>  @@ -555,6 +540,7 @@
>                                        ( short ) 15));
>           wb.write(out);
>           out.close();
>  +        sanityChecker.checkHSSFWorkbook(wb);
>           in = new FileInputStream(file);
>           wb = new HSSFWorkbook(new POIFSFileSystem(in));
>           s  = wb.getSheetAt(0);
>  @@ -582,7 +568,7 @@
>           throws Exception
>       {
>           HSSFWorkbook wb       = new HSSFWorkbook();
>  -        HSSFSheet    s        = wb.createSheet();
>  +        wb.createSheet();
>           Workbook     workbook = wb.getWorkbook();
>           BackupRecord record   = workbook.getBackupRecord();
>   
>  @@ -629,12 +615,12 @@
>       {
>           String filename = System.getProperty("HSSF.testdata.path");
>   
>  -        // assume andy is running this in the debugger
>  +        // assume this is relative to basedir
>           if (filename == null)
>           {
>               System.setProperty(
>                   "HSSF.testdata.path",
>  -                
>"/home/andy/npoi3/poi/production/testcases/net/sourceforge/poi/hssf/data");
>  +                "src/testcases/org/apache/poi/hssf/data");
>           }
>           System.out
>               .println("Testing org.apache.poi.hssf.usermodel.HSSFWorkbook");
>  
>  
>  
>  1.1                  
>jakarta-poi/src/testcases/org/apache/poi/hssf/usermodel/SanityChecker.java
>  
>  Index: SanityChecker.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.hssf.usermodel;
>  
>  import junit.framework.Assert;
>  import org.apache.poi.hssf.model.Sheet;
>  import org.apache.poi.hssf.model.Workbook;
>  import org.apache.poi.hssf.record.*;
>  import org.apache.poi.hssf.usermodel.HSSFWorkbook;
>  
>  import java.util.List;
>  
>  /**
>   * Designed to check wither the records written actually make sense.
>   */
>  public class SanityChecker
>          extends Assert
>  {
>      private class CheckRecord
>      {
>          Class record;
>          char occurance;  // 1 = one time, M = many times
>  
>          public CheckRecord(Class record, char occurance)
>          {
>              this.record = record;
>              this.occurance = occurance;
>          }
>  
>          public Class getRecord()
>          {
>              return record;
>          }
>  
>          public char getOccurance()
>          {
>              return occurance;
>          }
>      }
>  
>      CheckRecord[] workbookRecords = new CheckRecord[] {
>          new CheckRecord(BOFRecord.class, '1'),
>          new CheckRecord(InterfaceHdrRecord.class, '1'),
>          new CheckRecord(MMSRecord.class, '1'),
>          new CheckRecord(InterfaceEndRecord.class, '1'),
>          new CheckRecord(WriteAccessRecord.class, '1'),
>          new CheckRecord(CodepageRecord.class, '1'),
>          new CheckRecord(DSFRecord.class, '1'),
>          new CheckRecord(TabIdRecord.class, '1'),
>          new CheckRecord(FnGroupCountRecord.class, '1'),
>          new CheckRecord(WindowProtectRecord.class, '1'),
>          new CheckRecord(ProtectRecord.class, '1'),
>          new CheckRecord(PasswordRev4Record.class, '1'),
>          new CheckRecord(WindowOneRecord.class, '1'),
>          new CheckRecord(BackupRecord.class, '1'),
>          new CheckRecord(HideObjRecord.class, '1'),
>          new CheckRecord(DateWindow1904Record.class, '1'),
>          new CheckRecord(PrecisionRecord.class, '1'),
>          new CheckRecord(RefreshAllRecord.class, '1'),
>          new CheckRecord(BookBoolRecord.class, '1'),
>          new CheckRecord(FontRecord.class, 'M'),
>          new CheckRecord(FormatRecord.class, 'M'),
>          new CheckRecord(ExtendedFormatRecord.class, 'M'),
>          new CheckRecord(StyleRecord.class, 'M'),
>          new CheckRecord(UseSelFSRecord.class, '1'),
>          new CheckRecord(BoundSheetRecord.class, '1'),   // Is this right?
>          new CheckRecord(CountryRecord.class, '1'),
>          new CheckRecord(SSTRecord.class, '1'),
>          new CheckRecord(ExtSSTRecord.class, '1'),
>          new CheckRecord(EOFRecord.class, '1'),
>      };
>  
>      CheckRecord[] sheetRecords = new CheckRecord[] {
>          new CheckRecord(BOFRecord.class, '1'),
>          new CheckRecord(CalcModeRecord.class, '1'),
>          new CheckRecord(RefModeRecord.class, '1'),
>          new CheckRecord(IterationRecord.class, '1'),
>          new CheckRecord(DeltaRecord.class, '1'),
>          new CheckRecord(SaveRecalcRecord.class, '1'),
>          new CheckRecord(PrintHeadersRecord.class, '1'),
>          new CheckRecord(PrintGridlinesRecord.class, '1'),
>          new CheckRecord(GridsetRecord.class, '1'),
>          new CheckRecord(GutsRecord.class, '1'),
>          new CheckRecord(DefaultRowHeightRecord.class, '1'),
>          new CheckRecord(WSBoolRecord.class, '1'),
>          new CheckRecord(HeaderRecord.class, '1'),
>          new CheckRecord(FooterRecord.class, '1'),
>          new CheckRecord(HCenterRecord.class, '1'),
>          new CheckRecord(VCenterRecord.class, '1'),
>          new CheckRecord(PrintSetupRecord.class, '1'),
>          new CheckRecord(DefaultColWidthRecord.class, '1'),
>          new CheckRecord(DimensionsRecord.class, '1'),
>          new CheckRecord(WindowTwoRecord.class, '1'),
>          new CheckRecord(SelectionRecord.class, '1'),
>          new CheckRecord(EOFRecord.class, '1')
>      };
>  
>      public void checkWorkbookRecords(Workbook workbook)
>      {
>          List records = workbook.getRecords();
>          assertTrue(records.get(0) instanceof BOFRecord);
>          assertTrue(records.get(records.size() - 1) instanceof EOFRecord);
>  
>          checkRecordOrder(records, workbookRecords);
>      }
>  
>      public void checkSheetRecords(Sheet sheet)
>      {
>          List records = sheet.getRecords();
>          assertTrue(records.get(0) instanceof BOFRecord);
>          assertTrue(records.get(records.size() - 1) instanceof EOFRecord);
>  
>          checkRecordOrder(records, sheetRecords);
>      }
>  
>      public void checkHSSFWorkbook(HSSFWorkbook wb)
>      {
>          checkWorkbookRecords(wb.getWorkbook());
>          for (int i = 0; i < wb.getNumberOfSheets(); i++)
>              checkSheetRecords(wb.getSheetAt(i).getSheet());
>  
>      }
>  
>      private void checkRecordOrder(List records, CheckRecord[] check)
>      {
>          int checkIndex = 0;
>          for (int recordIndex = 0; recordIndex < records.size(); recordIndex++)
>          {
>              Record record = (Record) records.get(recordIndex);
>              if (check[checkIndex].getRecord().isInstance(record))
>              {
>                  if (check[checkIndex].getOccurance() == 'M')
>                  {
>                      // skip over duplicate records if multiples are allowed
>                      while (recordIndex+1 < records.size() && 
>check[checkIndex].getRecord().isInstance(records.get(recordIndex+1)))
>                          recordIndex++;
>                  }
>                  checkIndex++;
>              }
>              if (checkIndex >= check.length)
>                  return;
>          }
>          fail("Could not find required record: " + check[checkIndex]);
>      }
>  
>  }
>  
>  
>  
>



Reply via email to