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