You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@poi.apache.org by ki...@apache.org on 2015/07/19 21:00:38 UTC

svn commit: r1691843 [27/30] - in /poi/branches/common_sl: ./ .settings/ legal/ osgi/ osgi/src/ src/examples/src/org/apache/poi/hpsf/examples/ src/examples/src/org/apache/poi/hssf/usermodel/examples/ src/examples/src/org/apache/poi/ss/examples/ src/exa...

Modified: poi/branches/common_sl/src/testcases/org/apache/poi/hssf/HSSFITestDataProvider.java
URL: http://svn.apache.org/viewvc/poi/branches/common_sl/src/testcases/org/apache/poi/hssf/HSSFITestDataProvider.java?rev=1691843&r1=1691842&r2=1691843&view=diff
==============================================================================
--- poi/branches/common_sl/src/testcases/org/apache/poi/hssf/HSSFITestDataProvider.java (original)
+++ poi/branches/common_sl/src/testcases/org/apache/poi/hssf/HSSFITestDataProvider.java Sun Jul 19 19:00:32 2015
@@ -17,6 +17,8 @@
 
 package org.apache.poi.hssf;
 
+import java.io.InputStream;
+
 import org.apache.poi.POIDataSamples;
 import org.apache.poi.hssf.usermodel.HSSFFormulaEvaluator;
 import org.apache.poi.hssf.usermodel.HSSFWorkbook;
@@ -38,6 +40,9 @@ public final class HSSFITestDataProvider
     public HSSFWorkbook openSampleWorkbook(String sampleFileName) {
         return HSSFTestDataSamples.openSampleWorkbook(sampleFileName);
     }
+    public InputStream openWorkbookStream(String sampleFileName) {
+        return HSSFTestDataSamples.openSampleFileStream(sampleFileName);
+    }
     
     public HSSFWorkbook writeOutAndReadBack(Workbook original) {
         if(!(original instanceof HSSFWorkbook)) {

Modified: poi/branches/common_sl/src/testcases/org/apache/poi/hssf/dev/BaseXLSIteratingTest.java
URL: http://svn.apache.org/viewvc/poi/branches/common_sl/src/testcases/org/apache/poi/hssf/dev/BaseXLSIteratingTest.java?rev=1691843&r1=1691842&r2=1691843&view=diff
==============================================================================
--- poi/branches/common_sl/src/testcases/org/apache/poi/hssf/dev/BaseXLSIteratingTest.java (original)
+++ poi/branches/common_sl/src/testcases/org/apache/poi/hssf/dev/BaseXLSIteratingTest.java Sun Jul 19 19:00:32 2015
@@ -79,11 +79,11 @@ public abstract class BaseXLSIteratingTe
 			try {
 				runOneFile(dir, file, failed);
 			} catch (Exception e) {
-				System.out.println("Failed: " + file);
 				if(SILENT_EXCLUDED.contains(file)) {
 					continue;
 				}
 
+				System.out.println("Failed: " + file);
 				e.printStackTrace();
 				
 				// try to read it in HSSFWorkbook to quickly fail if we cannot read the file there at all and thus probably can use SILENT_EXCLUDED instead

Modified: poi/branches/common_sl/src/testcases/org/apache/poi/hssf/eventusermodel/TestHSSFEventFactory.java
URL: http://svn.apache.org/viewvc/poi/branches/common_sl/src/testcases/org/apache/poi/hssf/eventusermodel/TestHSSFEventFactory.java?rev=1691843&r1=1691842&r2=1691843&view=diff
==============================================================================
--- poi/branches/common_sl/src/testcases/org/apache/poi/hssf/eventusermodel/TestHSSFEventFactory.java (original)
+++ poi/branches/common_sl/src/testcases/org/apache/poi/hssf/eventusermodel/TestHSSFEventFactory.java Sun Jul 19 19:00:32 2015
@@ -22,107 +22,182 @@ import java.util.List;
 
 import junit.framework.TestCase;
 
+import org.apache.poi.EncryptedDocumentException;
 import org.apache.poi.hssf.HSSFTestDataSamples;
+import org.apache.poi.hssf.record.BoundSheetRecord;
 import org.apache.poi.hssf.record.ContinueRecord;
 import org.apache.poi.hssf.record.DVALRecord;
 import org.apache.poi.hssf.record.DVRecord;
 import org.apache.poi.hssf.record.EOFRecord;
 import org.apache.poi.hssf.record.FeatHdrRecord;
+import org.apache.poi.hssf.record.NumberRecord;
 import org.apache.poi.hssf.record.Record;
 import org.apache.poi.hssf.record.SelectionRecord;
 import org.apache.poi.hssf.record.WindowTwoRecord;
+import org.apache.poi.hssf.record.crypto.Biff8EncryptionKey;
 import org.apache.poi.poifs.filesystem.POIFSFileSystem;
+
 /**
- * 
+ * Testing for {@link HSSFEventFactory}
  */
 public final class TestHSSFEventFactory extends TestCase {
-	
-	private static final InputStream openSample(String sampleFileName) {
-		return HSSFTestDataSamples.openSampleFileStream(sampleFileName);
-	}
-
-	public void testWithMissingRecords() throws Exception {
-
-		HSSFRequest req = new HSSFRequest();
-		MockHSSFListener mockListen = new MockHSSFListener();
-		req.addListenerForAllRecords(mockListen);
-		
-		POIFSFileSystem fs = new POIFSFileSystem(openSample("SimpleWithSkip.xls"));
-		HSSFEventFactory factory = new HSSFEventFactory();
-		factory.processWorkbookEvents(req, fs);
-
-		Record[] recs = mockListen.getRecords();
-		// Check we got the records
-		assertTrue( recs.length > 100 );
-		
-		// Check that the last few records are as we expect
-		// (Makes sure we don't accidently skip the end ones)
-		int numRec = recs.length;
-		assertEquals(WindowTwoRecord.class, recs[numRec-3].getClass());
-		assertEquals(SelectionRecord.class, recs[numRec-2].getClass());
-		assertEquals(EOFRecord.class,	   recs[numRec-1].getClass());
-	}
-
-	public void testWithCrazyContinueRecords() throws Exception {
-		// Some files have crazy ordering of their continue records
-		// Check that we don't break on them (bug #42844)
-		
-		HSSFRequest req = new HSSFRequest();
-		MockHSSFListener mockListen = new MockHSSFListener();
-		req.addListenerForAllRecords(mockListen);
-		
-		POIFSFileSystem fs = new POIFSFileSystem(openSample("ContinueRecordProblem.xls"));
-		HSSFEventFactory factory = new HSSFEventFactory();
-		factory.processWorkbookEvents(req, fs);
-
-		Record[] recs = mockListen.getRecords();
-		// Check we got the records
-		assertTrue( recs.length > 100 );
-
-		// And none of them are continue ones
-		for(int i=0; i<recs.length; i++) {
-			assertFalse( recs[i] instanceof ContinueRecord );
-		}
-		
-		// Check that the last few records are as we expect
-		// (Makes sure we don't accidently skip the end ones)
-		int numRec = recs.length;
-		assertEquals(DVALRecord.class,    recs[numRec-4].getClass());
-		assertEquals(DVRecord.class,      recs[numRec-3].getClass());
-		assertEquals(FeatHdrRecord.class, recs[numRec-2].getClass());
-		assertEquals(EOFRecord.class,     recs[numRec-1].getClass());
-	}
-
-	/**
-	 * Unknown records can be continued.
-	 * Check that HSSFEventFactory doesn't break on them.
-	 * (the test file was provided in a reopen of bug #42844)
-	 */
-	public void testUnknownContinueRecords() throws Exception {
-
-		HSSFRequest req = new HSSFRequest();
-		MockHSSFListener mockListen = new MockHSSFListener();
-		req.addListenerForAllRecords(mockListen);
-
-		POIFSFileSystem fs = new POIFSFileSystem(openSample("42844.xls"));
-		HSSFEventFactory factory = new HSSFEventFactory();
-		factory.processWorkbookEvents(req, fs);
-
-		assertTrue("no errors while processing the file", true);
-	}
-
-	private static class MockHSSFListener implements HSSFListener {
-		private final List<Record> records = new ArrayList<Record>();
-
-		public MockHSSFListener() {}
-		public Record[] getRecords() {
-			Record[] result = new Record[records.size()];
-			records.toArray(result);
-			return result;
-		}
-
-		public void processRecord(Record record) {
-			records.add(record);
-		}
-	}
+    private static final InputStream openSample(String sampleFileName) {
+        return HSSFTestDataSamples.openSampleFileStream(sampleFileName);
+    }
+
+    public void testWithMissingRecords() throws Exception {
+
+        HSSFRequest req = new HSSFRequest();
+        MockHSSFListener mockListen = new MockHSSFListener();
+        req.addListenerForAllRecords(mockListen);
+
+        POIFSFileSystem fs = new POIFSFileSystem(openSample("SimpleWithSkip.xls"));
+        HSSFEventFactory factory = new HSSFEventFactory();
+        factory.processWorkbookEvents(req, fs);
+
+        Record[] recs = mockListen.getRecords();
+        // Check we got the records
+        assertTrue( recs.length > 100 );
+
+        // Check that the last few records are as we expect
+        // (Makes sure we don't accidently skip the end ones)
+        int numRec = recs.length;
+        assertEquals(WindowTwoRecord.class, recs[numRec-3].getClass());
+        assertEquals(SelectionRecord.class, recs[numRec-2].getClass());
+        assertEquals(EOFRecord.class,	   recs[numRec-1].getClass());
+    }
+
+    public void testWithCrazyContinueRecords() throws Exception {
+        // Some files have crazy ordering of their continue records
+        // Check that we don't break on them (bug #42844)
+
+        HSSFRequest req = new HSSFRequest();
+        MockHSSFListener mockListen = new MockHSSFListener();
+        req.addListenerForAllRecords(mockListen);
+
+        POIFSFileSystem fs = new POIFSFileSystem(openSample("ContinueRecordProblem.xls"));
+        HSSFEventFactory factory = new HSSFEventFactory();
+        factory.processWorkbookEvents(req, fs);
+
+        Record[] recs = mockListen.getRecords();
+        // Check we got the records
+        assertTrue( recs.length > 100 );
+
+        // And none of them are continue ones
+        for(int i=0; i<recs.length; i++) {
+            assertFalse( recs[i] instanceof ContinueRecord );
+        }
+
+        // Check that the last few records are as we expect
+        // (Makes sure we don't accidently skip the end ones)
+        int numRec = recs.length;
+        assertEquals(DVALRecord.class,    recs[numRec-4].getClass());
+        assertEquals(DVRecord.class,      recs[numRec-3].getClass());
+        assertEquals(FeatHdrRecord.class, recs[numRec-2].getClass());
+        assertEquals(EOFRecord.class,     recs[numRec-1].getClass());
+    }
+
+    /**
+     * Unknown records can be continued.
+     * Check that HSSFEventFactory doesn't break on them.
+     * (the test file was provided in a reopen of bug #42844)
+     */
+    public void testUnknownContinueRecords() throws Exception {
+
+        HSSFRequest req = new HSSFRequest();
+        MockHSSFListener mockListen = new MockHSSFListener();
+        req.addListenerForAllRecords(mockListen);
+
+        POIFSFileSystem fs = new POIFSFileSystem(openSample("42844.xls"));
+        HSSFEventFactory factory = new HSSFEventFactory();
+        factory.processWorkbookEvents(req, fs);
+    }
+
+    private static class MockHSSFListener implements HSSFListener {
+        private final List<Record> records = new ArrayList<Record>();
+
+        public MockHSSFListener() {}
+        public Record[] getRecords() {
+            Record[] result = new Record[records.size()];
+            records.toArray(result);
+            return result;
+        }
+
+        public void processRecord(Record record) {
+            records.add(record);
+        }
+    }
+
+    public void testWithDifferentWorkbookName() throws Exception {
+        HSSFRequest req = new HSSFRequest();
+        MockHSSFListener mockListen = new MockHSSFListener();
+        req.addListenerForAllRecords(mockListen);
+
+        POIFSFileSystem fs = new POIFSFileSystem(openSample("BOOK_in_capitals.xls"));
+        HSSFEventFactory factory = new HSSFEventFactory();
+        factory.processWorkbookEvents(req, fs);
+
+        fs = new POIFSFileSystem(openSample("WORKBOOK_in_capitals.xls"));
+        factory = new HSSFEventFactory();
+        factory.processWorkbookEvents(req, fs);
+    }
+
+    public void testWithPasswordProtectedWorkbooks() throws Exception {
+        HSSFRequest req = new HSSFRequest();
+        MockHSSFListener mockListen = new MockHSSFListener();
+        req.addListenerForAllRecords(mockListen);
+
+        // Without a password, can't be read
+        Biff8EncryptionKey.setCurrentUserPassword(null);
+        POIFSFileSystem fs = new POIFSFileSystem(openSample("xor-encryption-abc.xls"));
+
+        HSSFEventFactory factory = new HSSFEventFactory();
+        try {
+            factory.processWorkbookEvents(req, fs);
+            fail("Shouldn't be able to process protected workbook without the password");
+        } catch (EncryptedDocumentException e) {}
+
+
+        // With the password, is properly processed
+        Biff8EncryptionKey.setCurrentUserPassword("abc");
+
+        req = new HSSFRequest();
+        mockListen = new MockHSSFListener();
+        req.addListenerForAllRecords(mockListen);
+        factory.processWorkbookEvents(req, fs);
+
+        // Check we got the sheet and the contents
+        Record[] recs = mockListen.getRecords();
+        assertTrue( recs.length > 50 );
+
+        // Has one sheet, with values 1,2,3 in column A rows 1-3
+        boolean hasSheet=false, hasA1=false, hasA2=false, hasA3=false;
+        for (Record r : recs) {
+            if (r instanceof BoundSheetRecord) {
+                BoundSheetRecord bsr = (BoundSheetRecord)r;
+                assertEquals("Sheet1", bsr.getSheetname());
+                hasSheet = true;
+            }
+            if (r instanceof NumberRecord) {
+                NumberRecord nr = (NumberRecord)r;
+                if (nr.getColumn() == 0 && nr.getRow() == 0) {
+                    assertEquals(1, (int)nr.getValue());
+                    hasA1 = true;
+                }
+                if (nr.getColumn() == 0 && nr.getRow() == 1) {
+                    assertEquals(2, (int)nr.getValue());
+                    hasA2 = true;
+                }
+                if (nr.getColumn() == 0 && nr.getRow() == 2) {
+                    assertEquals(3, (int)nr.getValue());
+                    hasA3 = true;
+                }
+            }
+        }
+
+        assertTrue("Sheet record not found", hasSheet);
+        assertTrue("Numeric record for A1 not found", hasA1);
+        assertTrue("Numeric record for A2 not found", hasA2);
+        assertTrue("Numeric record for A3 not found", hasA3);
+    }
 }	

Modified: poi/branches/common_sl/src/testcases/org/apache/poi/hssf/extractor/TestExcelExtractor.java
URL: http://svn.apache.org/viewvc/poi/branches/common_sl/src/testcases/org/apache/poi/hssf/extractor/TestExcelExtractor.java?rev=1691843&r1=1691842&r2=1691843&view=diff
==============================================================================
--- poi/branches/common_sl/src/testcases/org/apache/poi/hssf/extractor/TestExcelExtractor.java (original)
+++ poi/branches/common_sl/src/testcases/org/apache/poi/hssf/extractor/TestExcelExtractor.java Sun Jul 19 19:00:32 2015
@@ -46,15 +46,18 @@ public final class TestExcelExtractor ex
 	}
 
 
-	public void testSimple() {
-
+	public void testSimple() throws IOException {
 		ExcelExtractor extractor = createExtractor("Simple.xls");
 
-		assertEquals("Sheet1\nreplaceMe\nSheet2\nSheet3\n", extractor.getText());
-
-		// Now turn off sheet names
-		extractor.setIncludeSheetNames(false);
-		assertEquals("replaceMe\n", extractor.getText());
+		try {
+    		assertEquals("Sheet1\nreplaceMe\nSheet2\nSheet3\n", extractor.getText());
+    
+    		// Now turn off sheet names
+    		extractor.setIncludeSheetNames(false);
+    		assertEquals("replaceMe\n", extractor.getText());
+		} finally {
+		    extractor.close();
+		}
 	}
 
 	public void testNumericFormula() {
@@ -126,45 +129,47 @@ public final class TestExcelExtractor ex
 
 
 	public void testEventExtractor() throws Exception {
-		EventBasedExcelExtractor extractor;
-
 		// First up, a simple file with string
 		//  based formulas in it
-		extractor = new EventBasedExcelExtractor(
+		EventBasedExcelExtractor extractor = new EventBasedExcelExtractor(
 				new POIFSFileSystem(
 						HSSFTestDataSamples.openSampleFileStream("SimpleWithFormula.xls")
 				)
 		);
-		extractor.setIncludeSheetNames(true);
-
-		String text = extractor.getText();
-		assertEquals("Sheet1\nreplaceme\nreplaceme\nreplacemereplaceme\nSheet2\nSheet3\n", text);
-
-		extractor.setIncludeSheetNames(false);
-		extractor.setFormulasNotResults(true);
-
-		text = extractor.getText();
-		assertEquals("replaceme\nreplaceme\nCONCATENATE(A1,A2)\n", text);
-
-
-		// Now, a slightly longer file with numeric formulas
-		extractor = new EventBasedExcelExtractor(
-				new POIFSFileSystem(
-						HSSFTestDataSamples.openSampleFileStream("sumifformula.xls")
-				)
-		);
-		extractor.setIncludeSheetNames(false);
-		extractor.setFormulasNotResults(true);
-
-		text = extractor.getText();
-		assertEquals(
-				"1000\t1\tSUMIF(A1:A5,\">4000\",B1:B5)\n" +
-				"2000\t2\n" +
-				"3000\t3\n" +
-				"4000\t4\n" +
-				"5000\t5\n",
-				text
-		);
+		try {
+    		extractor.setIncludeSheetNames(true);
+    
+    		String text = extractor.getText();
+    		assertEquals("Sheet1\nreplaceme\nreplaceme\nreplacemereplaceme\nSheet2\nSheet3\n", text);
+    
+    		extractor.setIncludeSheetNames(false);
+    		extractor.setFormulasNotResults(true);
+    
+    		text = extractor.getText();
+    		assertEquals("replaceme\nreplaceme\nCONCATENATE(A1,A2)\n", text);
+    
+    
+    		// Now, a slightly longer file with numeric formulas
+    		extractor = new EventBasedExcelExtractor(
+    				new POIFSFileSystem(
+    						HSSFTestDataSamples.openSampleFileStream("sumifformula.xls")
+    				)
+    		);
+    		extractor.setIncludeSheetNames(false);
+    		extractor.setFormulasNotResults(true);
+    
+    		text = extractor.getText();
+    		assertEquals(
+    				"1000\t1\tSUMIF(A1:A5,\">4000\",B1:B5)\n" +
+    				"2000\t2\n" +
+    				"3000\t3\n" +
+    				"4000\t4\n" +
+    				"5000\t5\n",
+    				text
+    		);
+		} finally {
+		    extractor.close();
+		}
 	}
 
 	public void testWithComments() {
@@ -272,15 +277,22 @@ public final class TestExcelExtractor ex
 		HSSFWorkbook wbB = new HSSFWorkbook(dirB, fs, true);
 
 		ExcelExtractor exA = new ExcelExtractor(wbA);
-		ExcelExtractor exB = new ExcelExtractor(wbB);
-
-		assertEquals("Sheet1\nTest excel file\nThis is the first file\nSheet2\nSheet3\n",
-				exA.getText());
-		assertEquals("Sample Excel", exA.getSummaryInformation().getTitle());
-
-		assertEquals("Sheet1\nAnother excel file\nThis is the second file\nSheet2\nSheet3\n",
-				exB.getText());
-		assertEquals("Sample Excel 2", exB.getSummaryInformation().getTitle());
+		try {
+    		ExcelExtractor exB = new ExcelExtractor(wbB);
+    		try {
+        		assertEquals("Sheet1\nTest excel file\nThis is the first file\nSheet2\nSheet3\n",
+        				exA.getText());
+        		assertEquals("Sample Excel", exA.getSummaryInformation().getTitle());
+        
+        		assertEquals("Sheet1\nAnother excel file\nThis is the second file\nSheet2\nSheet3\n",
+        				exB.getText());
+        		assertEquals("Sample Excel 2", exB.getSummaryInformation().getTitle());
+    		} finally {
+    		    exB.close();
+    		}
+		} finally {
+		    exA.close();
+		}
 	}
 
 	/**
@@ -299,21 +311,32 @@ public final class TestExcelExtractor ex
 		HSSFWorkbook wbB = new HSSFWorkbook(dirB, fs, true);
 
 		ExcelExtractor exA = new ExcelExtractor(wbA);
-		ExcelExtractor exB = new ExcelExtractor(wbB);
-
-		assertEquals("Sheet1\nTest excel file\nThis is the first file\nSheet2\nSheet3\n",
-				exA.getText());
-		assertEquals("Sample Excel", exA.getSummaryInformation().getTitle());
-
-		assertEquals("Sheet1\nAnother excel file\nThis is the second file\nSheet2\nSheet3\n",
-				exB.getText());
-		assertEquals("Sample Excel 2", exB.getSummaryInformation().getTitle());
-
-		// And the base file too
-		ExcelExtractor ex = new ExcelExtractor(fs);
-		assertEquals("Sheet1\nI have lots of embeded files in me\nSheet2\nSheet3\n",
-				ex.getText());
-		assertEquals("Excel With Embeded", ex.getSummaryInformation().getTitle());
+		try {
+    		ExcelExtractor exB = new ExcelExtractor(wbB);
+    		try {
+        		assertEquals("Sheet1\nTest excel file\nThis is the first file\nSheet2\nSheet3\n",
+        				exA.getText());
+        		assertEquals("Sample Excel", exA.getSummaryInformation().getTitle());
+        
+        		assertEquals("Sheet1\nAnother excel file\nThis is the second file\nSheet2\nSheet3\n",
+        				exB.getText());
+        		assertEquals("Sample Excel 2", exB.getSummaryInformation().getTitle());
+        
+        		// And the base file too
+        		ExcelExtractor ex = new ExcelExtractor(fs);
+        		try {
+            		assertEquals("Sheet1\nI have lots of embeded files in me\nSheet2\nSheet3\n",
+            				ex.getText());
+            		assertEquals("Excel With Embeded", ex.getSummaryInformation().getTitle());
+        		} finally {
+        		    ex.close();
+        		}
+            } finally {
+                exB.close();
+            }
+        } finally {
+            exA.close();
+        }
 	}
 
 	/**
@@ -340,4 +363,10 @@ public final class TestExcelExtractor ex
 
 		assertTrue(text.contains("ZIP"));
 	}
+
+	public void testNullPointerException() {
+		ExcelExtractor extractor = createExtractor("ar.org.apsme.www_Form%20Inscripcion%20Curso%20NO%20Socios.xls");
+		assertNotNull(extractor);
+		assertNotNull(extractor.getText());
+	}
 }

Modified: poi/branches/common_sl/src/testcases/org/apache/poi/hssf/model/TestDrawingAggregate.java
URL: http://svn.apache.org/viewvc/poi/branches/common_sl/src/testcases/org/apache/poi/hssf/model/TestDrawingAggregate.java?rev=1691843&r1=1691842&r2=1691843&view=diff
==============================================================================
--- poi/branches/common_sl/src/testcases/org/apache/poi/hssf/model/TestDrawingAggregate.java (original)
+++ poi/branches/common_sl/src/testcases/org/apache/poi/hssf/model/TestDrawingAggregate.java Sun Jul 19 19:00:32 2015
@@ -51,8 +51,6 @@ import org.apache.poi.util.HexRead;
  * @author Evgeniy Berlog
  */
 public class TestDrawingAggregate extends TestCase {
-
-
     /**
      *  information about drawing aggregate in a worksheet
      */
@@ -189,7 +187,15 @@ public class TestDrawingAggregate extend
                 // System.out.println("[WARN]  Cannot read " + file.getName());
                 continue;
             }
-            assertWriteAndReadBack(wb);
+            try {
+                assertWriteAndReadBack(wb);
+            } catch (Exception e) {
+                String filename = file.getName();
+                System.out.println("Drawing Aggregate re-write test failed for " + filename);
+                e.printStackTrace(System.out);
+                
+                fail("Error when writing and re-reading workbook " + filename + "\n" + e);
+            }
         }
     }
 

Modified: poi/branches/common_sl/src/testcases/org/apache/poi/hssf/model/TestShapes.java
URL: http://svn.apache.org/viewvc/poi/branches/common_sl/src/testcases/org/apache/poi/hssf/model/TestShapes.java?rev=1691843&r1=1691842&r2=1691843&view=diff
==============================================================================
--- poi/branches/common_sl/src/testcases/org/apache/poi/hssf/model/TestShapes.java (original)
+++ poi/branches/common_sl/src/testcases/org/apache/poi/hssf/model/TestShapes.java Sun Jul 19 19:00:32 2015
@@ -20,6 +20,7 @@
 package org.apache.poi.hssf.model;
 
 import junit.framework.TestCase;
+
 import org.apache.poi.hssf.record.CommonObjectDataSubRecord;
 import org.apache.poi.hssf.usermodel.HSSFClientAnchor;
 import org.apache.poi.hssf.usermodel.HSSFComment;
@@ -37,7 +38,8 @@ public final class TestShapes extends Te
      *
      * See Bug 51332
      */
-    public void testShapeId(){
+    @SuppressWarnings("deprecation")
+	public void testShapeId(){
 
         HSSFClientAnchor anchor = new HSSFClientAnchor();
         AbstractShape shape;

Modified: poi/branches/common_sl/src/testcases/org/apache/poi/hssf/record/TestCFHeaderRecord.java
URL: http://svn.apache.org/viewvc/poi/branches/common_sl/src/testcases/org/apache/poi/hssf/record/TestCFHeaderRecord.java?rev=1691843&r1=1691842&r2=1691843&view=diff
==============================================================================
--- poi/branches/common_sl/src/testcases/org/apache/poi/hssf/record/TestCFHeaderRecord.java (original)
+++ poi/branches/common_sl/src/testcases/org/apache/poi/hssf/record/TestCFHeaderRecord.java Sun Jul 19 19:00:32 2015
@@ -23,16 +23,11 @@ import junit.framework.TestCase;
 import org.apache.poi.ss.util.CellRangeAddress;
 
 /**
- * Tests the serialization and deserialization of the TestCFHeaderRecord
- * class works correctly.  
- *
- * @author Dmitriy Kumshayev 
+ * Tests the serialization and deserialization of the {@link CFHeaderRecord}
+ *  and {@link CFHeader12Record} classes works correctly.  
  */
-public final class TestCFHeaderRecord extends TestCase
-{
-
-	public void testCreateCFHeaderRecord () 
-	{
+public final class TestCFHeaderRecord extends TestCase {
+	public void testCreateCFHeaderRecord () {
 		CFHeaderRecord record = new CFHeaderRecord();
 		CellRangeAddress[] ranges = {
 			new CellRangeAddress(0,0xFFFF,5,5),
@@ -50,12 +45,52 @@ public final class TestCFHeaderRecord ex
 		assertEquals(65535, enclosingCellRange.getLastRow());
 		assertEquals(0, enclosingCellRange.getFirstColumn());
 		assertEquals(6, enclosingCellRange.getLastColumn());
+		
+		assertEquals(false, record.getNeedRecalculation());
+		assertEquals(0, record.getID());
+		
 		record.setNeedRecalculation(true);
-		assertTrue(record.getNeedRecalculation());
+        assertEquals(true, record.getNeedRecalculation());
+        assertEquals(0, record.getID());
+        
+        record.setID(7);
 		record.setNeedRecalculation(false);
-		assertFalse(record.getNeedRecalculation());
+        assertEquals(false, record.getNeedRecalculation());
+        assertEquals(7, record.getID());
 	}
 	
+    public void testCreateCFHeader12Record () {
+        CFHeader12Record record = new CFHeader12Record();
+        CellRangeAddress[] ranges = {
+            new CellRangeAddress(0,0xFFFF,5,5),
+            new CellRangeAddress(0,0xFFFF,6,6),
+            new CellRangeAddress(0,1,0,1),
+            new CellRangeAddress(0,1,2,3),
+            new CellRangeAddress(2,3,0,1),
+            new CellRangeAddress(2,3,2,3),
+        };
+        record.setCellRanges(ranges);
+        ranges = record.getCellRanges();
+        assertEquals(6,ranges.length);
+        CellRangeAddress enclosingCellRange = record.getEnclosingCellRange();
+        assertEquals(0, enclosingCellRange.getFirstRow());
+        assertEquals(65535, enclosingCellRange.getLastRow());
+        assertEquals(0, enclosingCellRange.getFirstColumn());
+        assertEquals(6, enclosingCellRange.getLastColumn());
+
+        assertEquals(false, record.getNeedRecalculation());
+        assertEquals(0, record.getID());
+        
+        record.setNeedRecalculation(true);
+        assertEquals(true, record.getNeedRecalculation());
+        assertEquals(0, record.getID());
+        
+        record.setID(7);
+        record.setNeedRecalculation(false);
+        assertEquals(false, record.getNeedRecalculation());
+        assertEquals(7, record.getID());
+    }
+    
 	public void testSerialization() {
 		byte[] recordData = 
 		{

Modified: poi/branches/common_sl/src/testcases/org/apache/poi/hssf/record/TestCFRuleRecord.java
URL: http://svn.apache.org/viewvc/poi/branches/common_sl/src/testcases/org/apache/poi/hssf/record/TestCFRuleRecord.java?rev=1691843&r1=1691842&r2=1691843&view=diff
==============================================================================
--- poi/branches/common_sl/src/testcases/org/apache/poi/hssf/record/TestCFRuleRecord.java (original)
+++ poi/branches/common_sl/src/testcases/org/apache/poi/hssf/record/TestCFRuleRecord.java Sun Jul 19 19:00:32 2015
@@ -21,7 +21,8 @@ import static org.junit.Assert.assertArr
 import junit.framework.AssertionFailedError;
 import junit.framework.TestCase;
 
-import org.apache.poi.hssf.record.CFRuleRecord.ComparisonOperator;
+import org.apache.poi.hssf.HSSFITestDataProvider;
+import org.apache.poi.hssf.record.CFRuleBase.ComparisonOperator;
 import org.apache.poi.hssf.record.cf.BorderFormatting;
 import org.apache.poi.hssf.record.cf.FontFormatting;
 import org.apache.poi.hssf.record.cf.PatternFormatting;
@@ -31,14 +32,15 @@ import org.apache.poi.hssf.util.HSSFColo
 import org.apache.poi.ss.formula.ptg.Ptg;
 import org.apache.poi.ss.formula.ptg.RefNPtg;
 import org.apache.poi.ss.formula.ptg.RefPtg;
+import org.apache.poi.ss.usermodel.ConditionalFormattingThreshold.RangeType;
+import org.apache.poi.ss.usermodel.IconMultiStateFormatting.IconSet;
 import org.apache.poi.util.LittleEndian;
 
 /**
  * Tests the serialization and deserialization of the TestCFRuleRecord
  * class works correctly.
- *
- * @author Dmitriy Kumshayev
  */
+@SuppressWarnings("resource")
 public final class TestCFRuleRecord extends TestCase {
     public void testConstructors () {
         HSSFWorkbook workbook = new HSSFWorkbook();
@@ -91,19 +93,77 @@ public final class TestCFRuleRecord exte
         }
     }
 
-    private void testCFRuleRecord(CFRuleRecord record) {
-        FontFormatting fontFormatting = new FontFormatting();
-        testFontFormattingAccessors(fontFormatting);
-        assertFalse(record.containsFontFormattingBlock());
-        record.setFontFormatting(fontFormatting);
-        assertTrue(record.containsFontFormattingBlock());
+    public void testCreateCFRule12Record() {
+        HSSFWorkbook workbook = new HSSFWorkbook();
+        HSSFSheet sheet = workbook.createSheet();
+        CFRule12Record record = CFRule12Record.create(sheet, "7");
+        testCFRule12Record(record);
 
-        BorderFormatting borderFormatting = new BorderFormatting();
-        testBorderFormattingAccessors(borderFormatting);
-        assertFalse(record.containsBorderFormattingBlock());
-        record.setBorderFormatting(borderFormatting);
-        assertTrue(record.containsBorderFormattingBlock());
+        // Serialize
+        byte [] serializedRecord = record.serialize();
+
+        // Strip header
+        byte [] recordData = new byte[serializedRecord.length-4];
+        System.arraycopy(serializedRecord, 4, recordData, 0, recordData.length);
+
+        // Deserialize
+        record = new CFRule12Record(TestcaseRecordInputStream.create(CFRule12Record.sid, recordData));
+
+        // Serialize again
+        byte[] output = record.serialize();
+
+        // Compare
+        assertEquals("Output size", recordData.length+4, output.length); //includes sid+recordlength
+
+        for (int i = 0; i < recordData.length;i++)
+        {
+            assertEquals("CFRule12Record doesn't match", recordData[i], output[i+4]);
+        }
+    }
+
+    public void testCreateIconCFRule12Record() {
+        HSSFWorkbook workbook = new HSSFWorkbook();
+        HSSFSheet sheet = workbook.createSheet();
+        CFRule12Record record = CFRule12Record.create(sheet, IconSet.GREY_5_ARROWS);
+        record.getMultiStateFormatting().getThresholds()[1].setType(RangeType.PERCENT.id);
+        record.getMultiStateFormatting().getThresholds()[1].setValue(10d);
+        record.getMultiStateFormatting().getThresholds()[2].setType(RangeType.NUMBER.id);
+        record.getMultiStateFormatting().getThresholds()[2].setValue(-4d);
+        
+        // Check it 
+        testCFRule12Record(record);
+        assertEquals(IconSet.GREY_5_ARROWS, record.getMultiStateFormatting().getIconSet());
+        assertEquals(5, record.getMultiStateFormatting().getThresholds().length);
+
+        // Serialize
+        byte [] serializedRecord = record.serialize();
+
+        // Strip header
+        byte [] recordData = new byte[serializedRecord.length-4];
+        System.arraycopy(serializedRecord, 4, recordData, 0, recordData.length);
 
+        // Deserialize
+        record = new CFRule12Record(TestcaseRecordInputStream.create(CFRule12Record.sid, recordData));
+        
+        // Check it has the icon, and the right number of thresholds
+        assertEquals(IconSet.GREY_5_ARROWS, record.getMultiStateFormatting().getIconSet());
+        assertEquals(5, record.getMultiStateFormatting().getThresholds().length);
+
+        // Serialize again
+        byte[] output = record.serialize();
+
+        // Compare
+        assertEquals("Output size", recordData.length+4, output.length); //includes sid+recordlength
+
+        for (int i = 0; i < recordData.length;i++)
+        {
+            assertEquals("CFRule12Record doesn't match", recordData[i], output[i+4]);
+        }
+    }
+    
+    private void testCFRuleRecord(CFRuleRecord record) {
+        testCFRuleBase(record);
+        
         assertFalse(record.isLeftBorderModified());
         record.setLeftBorderModified(true);
         assertTrue(record.isLeftBorderModified());
@@ -129,12 +189,6 @@ public final class TestCFRuleRecord exte
         assertTrue(record.isBottomLeftTopRightBorderModified());
 
 
-        PatternFormatting patternFormatting = new PatternFormatting();
-        testPatternFormattingAccessors(patternFormatting);
-        assertFalse(record.containsPatternFormattingBlock());
-        record.setPatternFormatting(patternFormatting);
-        assertTrue(record.containsPatternFormattingBlock());
-
         assertFalse(record.isPatternBackgroundColorModified());
         record.setPatternBackgroundColorModified(true);
         assertTrue(record.isPatternBackgroundColorModified());
@@ -147,6 +201,30 @@ public final class TestCFRuleRecord exte
         record.setPatternStyleModified(true);
         assertTrue(record.isPatternStyleModified());
     }
+    private void testCFRule12Record(CFRule12Record record) {
+        assertEquals(CFRule12Record.sid, record.getFutureRecordType());
+        assertEquals("A1", record.getAssociatedRange().formatAsString());
+        testCFRuleBase(record);
+    }
+    private void testCFRuleBase(CFRuleBase record) {
+        FontFormatting fontFormatting = new FontFormatting();
+        testFontFormattingAccessors(fontFormatting);
+        assertFalse(record.containsFontFormattingBlock());
+        record.setFontFormatting(fontFormatting);
+        assertTrue(record.containsFontFormattingBlock());
+
+        BorderFormatting borderFormatting = new BorderFormatting();
+        testBorderFormattingAccessors(borderFormatting);
+        assertFalse(record.containsBorderFormattingBlock());
+        record.setBorderFormatting(borderFormatting);
+        assertTrue(record.containsBorderFormattingBlock());
+
+        PatternFormatting patternFormatting = new PatternFormatting();
+        testPatternFormattingAccessors(patternFormatting);
+        assertFalse(record.containsPatternFormattingBlock());
+        record.setPatternFormatting(patternFormatting);
+        assertTrue(record.containsPatternFormattingBlock());
+    }
 
     private void testPatternFormattingAccessors(PatternFormatting patternFormatting) {
         patternFormatting.setFillBackgroundColor(HSSFColor.GREEN.index);
@@ -365,4 +443,11 @@ public final class TestCFRuleRecord exte
         byte [] serializedClone = clone.serialize();
         assertArrayEquals(serializedRecord, serializedClone);
     }
+    
+    public void testBug57231_rewrite() {
+        HSSFWorkbook wb = HSSFITestDataProvider.instance.openSampleWorkbook("57231_MixedGasReport.xls");
+        assertEquals(7, wb.getNumberOfSheets());
+        wb = HSSFITestDataProvider.instance.writeOutAndReadBack(wb);
+        assertEquals(7, wb.getNumberOfSheets());
+    }
 }

Modified: poi/branches/common_sl/src/testcases/org/apache/poi/hssf/record/TestNameRecord.java
URL: http://svn.apache.org/viewvc/poi/branches/common_sl/src/testcases/org/apache/poi/hssf/record/TestNameRecord.java?rev=1691843&r1=1691842&r2=1691843&view=diff
==============================================================================
--- poi/branches/common_sl/src/testcases/org/apache/poi/hssf/record/TestNameRecord.java (original)
+++ poi/branches/common_sl/src/testcases/org/apache/poi/hssf/record/TestNameRecord.java Sun Jul 19 19:00:32 2015
@@ -17,15 +17,19 @@
 
 package org.apache.poi.hssf.record;
 
+import java.io.IOException;
+
+import junit.framework.TestCase;
+
 import org.apache.poi.hssf.usermodel.HSSFName;
 import org.apache.poi.hssf.usermodel.HSSFWorkbook;
+import org.apache.poi.ss.formula.ptg.Area3DPtg;
 import org.apache.poi.ss.formula.ptg.ArrayPtg;
+import org.apache.poi.ss.formula.ptg.NamePtg;
 import org.apache.poi.ss.formula.ptg.Ptg;
+import org.apache.poi.ss.formula.ptg.Ref3DPtg;
 import org.apache.poi.util.HexRead;
 
-import junit.framework.AssertionFailedError;
-import junit.framework.TestCase;
-
 /**
  * Tests the NameRecord serializes/deserializes correctly
  * 
@@ -60,7 +64,8 @@ public final class TestNameRecord extend
 		byte[] data2 = nr.serialize();
 		TestcaseRecordInputStream.confirmRecordEncoding(NameRecord.sid, data, data2);
 	}
-	public void testFormulaRelAbs_bug46174() {
+
+	public void testFormulaRelAbs_bug46174() throws IOException {
 		// perhaps this testcase belongs on TestHSSFName
 		HSSFWorkbook wb = new HSSFWorkbook();
 		HSSFName name = wb.createName();
@@ -68,11 +73,13 @@ public final class TestNameRecord extend
 		name.setNameName("test");
 		name.setRefersToFormula("Sheet1!$B$3");
 		if (name.getRefersToFormula().equals("Sheet1!B3")) {
-			throw new AssertionFailedError("Identified bug 46174");
+			fail("Identified bug 46174");
 		}
 		assertEquals("Sheet1!$B$3", name.getRefersToFormula());
+	    wb.close();
 	}
-	public void testFormulaGeneral() {
+
+	public void testFormulaGeneral() throws IOException {
 		// perhaps this testcase belongs on TestHSSFName
 		HSSFWorkbook wb = new HSSFWorkbook();
 		HSSFName name = wb.createName();
@@ -82,6 +89,8 @@ public final class TestNameRecord extend
 		assertEquals("Sheet1!A1+Sheet1!A2", name.getRefersToFormula());
 		name.setRefersToFormula("5*6");
 		assertEquals("5*6", name.getRefersToFormula());
+		
+		wb.close();
 	}
 
     /**
@@ -687,4 +696,22 @@ public final class TestNameRecord extend
         assertEquals("1.T20.001", vals[0][0]);
         assertEquals("1.T20.010", vals[vals.length - 1][0]);
     }
+
+    public void testBug57923() {
+        NameRecord record = new NameRecord();
+        assertEquals(0, record.getExternSheetNumber());
+        
+        record.setNameDefinition(new Ptg[] {});
+        assertEquals(0, record.getExternSheetNumber());
+        
+        record.setNameDefinition(new Ptg[] {new NamePtg(1)});
+        assertEquals(0, record.getExternSheetNumber());
+
+        record.setNameDefinition(new Ptg[] {new Area3DPtg("area", 1)});
+        assertEquals(1, record.getExternSheetNumber());
+
+        record.setNameDefinition(new Ptg[] {new Ref3DPtg("A1", 1)});
+        assertEquals(1, record.getExternSheetNumber());
+    }
+    
 }

Modified: poi/branches/common_sl/src/testcases/org/apache/poi/hssf/record/TestRecordInputStream.java
URL: http://svn.apache.org/viewvc/poi/branches/common_sl/src/testcases/org/apache/poi/hssf/record/TestRecordInputStream.java?rev=1691843&r1=1691842&r2=1691843&view=diff
==============================================================================
--- poi/branches/common_sl/src/testcases/org/apache/poi/hssf/record/TestRecordInputStream.java (original)
+++ poi/branches/common_sl/src/testcases/org/apache/poi/hssf/record/TestRecordInputStream.java Sun Jul 19 19:00:32 2015
@@ -94,4 +94,12 @@ public final class TestRecordInputStream
 		String actual = in.readString();
 		assertEquals("Multilingual - \u591A\u8A00\u8A9E", actual);
 	}
+
+	public void testLeftoverDataException() {
+	    // just ensure that the exception is created correctly, even with unknown sids
+	    new RecordInputStream.LeftoverDataException(1, 200);
+	    new RecordInputStream.LeftoverDataException(0, 200);
+        new RecordInputStream.LeftoverDataException(999999999, 200);
+	    new RecordInputStream.LeftoverDataException(HeaderRecord.sid, 200);
+	}
 }

Modified: poi/branches/common_sl/src/testcases/org/apache/poi/hssf/record/aggregates/TestCFRecordsAggregate.java
URL: http://svn.apache.org/viewvc/poi/branches/common_sl/src/testcases/org/apache/poi/hssf/record/aggregates/TestCFRecordsAggregate.java?rev=1691843&r1=1691842&r2=1691843&view=diff
==============================================================================
--- poi/branches/common_sl/src/testcases/org/apache/poi/hssf/record/aggregates/TestCFRecordsAggregate.java (original)
+++ poi/branches/common_sl/src/testcases/org/apache/poi/hssf/record/aggregates/TestCFRecordsAggregate.java Sun Jul 19 19:00:32 2015
@@ -26,107 +26,133 @@ import junit.framework.AssertionFailedEr
 import junit.framework.TestCase;
 
 import org.apache.poi.hssf.model.RecordStream;
+import org.apache.poi.hssf.record.CFHeaderBase;
 import org.apache.poi.hssf.record.CFHeaderRecord;
+import org.apache.poi.hssf.record.CFRule12Record;
+import org.apache.poi.hssf.record.CFRuleBase;
+import org.apache.poi.hssf.record.CFRuleBase.ComparisonOperator;
 import org.apache.poi.hssf.record.CFRuleRecord;
+import org.apache.poi.hssf.record.Record;
 import org.apache.poi.hssf.record.RecordFactory;
-import org.apache.poi.hssf.record.CFRuleRecord.ComparisonOperator;
-import org.apache.poi.hssf.usermodel.HSSFWorkbook;
 import org.apache.poi.hssf.usermodel.HSSFSheet;
+import org.apache.poi.hssf.usermodel.HSSFWorkbook;
 import org.apache.poi.ss.util.CellRangeAddress;
 import org.apache.poi.util.LittleEndian;
 
 /**
  * Tests the serialization and deserialization of the CFRecordsAggregate
  * class works correctly.  
- *
- * @author Dmitriy Kumshayev 
  */
-public final class TestCFRecordsAggregate extends TestCase
-{
-
-	public void testCFRecordsAggregate() 
-	{
-		HSSFWorkbook workbook = new HSSFWorkbook();
+@SuppressWarnings("resource")
+public final class TestCFRecordsAggregate extends TestCase {
+    public void testCFRecordsAggregate() {
+        HSSFWorkbook workbook = new HSSFWorkbook();
         HSSFSheet sheet = workbook.createSheet();
 
-        List recs = new ArrayList();
-		CFHeaderRecord header = new CFHeaderRecord();
-		CFRuleRecord rule1 = CFRuleRecord.create(sheet, "7");
-		CFRuleRecord rule2 = CFRuleRecord.create(sheet, ComparisonOperator.BETWEEN, "2", "5");
-		CFRuleRecord rule3 = CFRuleRecord.create(sheet, ComparisonOperator.GE, "100", null);
-		header.setNumberOfConditionalFormats(3);
-		CellRangeAddress[] cellRanges = {
-				new CellRangeAddress(0,1,0,0),
-				new CellRangeAddress(0,1,2,2),
-		};
-		header.setCellRanges(cellRanges);
-		recs.add(header);
-		recs.add(rule1);
-		recs.add(rule2);
-		recs.add(rule3);
-		CFRecordsAggregate record;
-		record = CFRecordsAggregate.createCFAggregate(new RecordStream(recs, 0));
-
-		// Serialize
-		byte [] serializedRecord = new byte[record.getRecordSize()];
-		record.serialize(0, serializedRecord);
-		InputStream in = new ByteArrayInputStream(serializedRecord);
-
-		//Parse
-		recs = RecordFactory.createRecords(in);
-
-		// Verify
-		assertNotNull(recs);
-		assertEquals(4, recs.size());
-
-		header = (CFHeaderRecord)recs.get(0);
-		rule1 = (CFRuleRecord)recs.get(1);
-		rule2 = (CFRuleRecord)recs.get(2);
-		rule3 = (CFRuleRecord)recs.get(3);
-		cellRanges = header.getCellRanges();
-
-		assertEquals(2, cellRanges.length);
-		assertEquals(3, header.getNumberOfConditionalFormats());
-
-		record = CFRecordsAggregate.createCFAggregate(new RecordStream(recs, 0));
-
-		record = record.cloneCFAggregate();
-
-		assertNotNull(record.getHeader());
-		assertEquals(3,record.getNumberOfRules());
-
-		header = record.getHeader();
-		rule1 = record.getRule(0);
-		rule2 = record.getRule(1);
-		rule3 = record.getRule(2);
-		cellRanges = header.getCellRanges();
-
-		assertEquals(2, cellRanges.length);
-		assertEquals(3, header.getNumberOfConditionalFormats());
-	}
-	
-	/**
-	 * Make sure that the CF Header record is properly updated with the number of rules
-	 */
-	public void testNRules() {
-		HSSFWorkbook workbook = new HSSFWorkbook();
+        List<Record> recs = new ArrayList<Record>();
+        CFHeaderBase header = new CFHeaderRecord();
+        CFRuleBase rule1 = CFRuleRecord.create(sheet, "7");
+        CFRuleBase rule2 = CFRuleRecord.create(sheet, ComparisonOperator.BETWEEN, "2", "5");
+        CFRuleBase rule3 = CFRuleRecord.create(sheet, ComparisonOperator.GE, "100", null);
+        header.setNumberOfConditionalFormats(3);
+        CellRangeAddress[] cellRanges = {
+                new CellRangeAddress(0,1,0,0),
+                new CellRangeAddress(0,1,2,2),
+        };
+        header.setCellRanges(cellRanges);
+        recs.add(header);
+        recs.add(rule1);
+        recs.add(rule2);
+        recs.add(rule3);
+        CFRecordsAggregate record;
+        record = CFRecordsAggregate.createCFAggregate(new RecordStream(recs, 0));
+
+        // Serialize
+        byte [] serializedRecord = new byte[record.getRecordSize()];
+        record.serialize(0, serializedRecord);
+        InputStream in = new ByteArrayInputStream(serializedRecord);
+
+        //Parse
+        recs = RecordFactory.createRecords(in);
+
+        // Verify
+        assertNotNull(recs);
+        assertEquals(4, recs.size());
+
+        header = (CFHeaderRecord)recs.get(0);
+        rule1 = (CFRuleRecord)recs.get(1);
+        rule2 = (CFRuleRecord)recs.get(2);
+        rule3 = (CFRuleRecord)recs.get(3);
+        cellRanges = header.getCellRanges();
+
+        assertEquals(2, cellRanges.length);
+        assertEquals(3, header.getNumberOfConditionalFormats());
+
+        record = CFRecordsAggregate.createCFAggregate(new RecordStream(recs, 0));
+
+        record = record.cloneCFAggregate();
+
+        assertNotNull(record.getHeader());
+        assertEquals(3,record.getNumberOfRules());
+
+        header = record.getHeader();
+        rule1 = record.getRule(0);
+        rule2 = record.getRule(1);
+        rule3 = record.getRule(2);
+        cellRanges = header.getCellRanges();
+
+        assertEquals(2, cellRanges.length);
+        assertEquals(3, header.getNumberOfConditionalFormats());
+    }
+
+    /**
+     * Make sure that the CF Header record is properly updated with the number of rules
+     */
+    public void testNRules() {
+        HSSFWorkbook workbook = new HSSFWorkbook();
+        HSSFSheet sheet = workbook.createSheet();
+        CellRangeAddress[] cellRanges = {
+                new CellRangeAddress(0,1,0,0),
+                new CellRangeAddress(0,1,2,2),
+        };
+        CFRuleRecord[] rules = {
+                CFRuleRecord.create(sheet, "7"),
+                CFRuleRecord.create(sheet, ComparisonOperator.BETWEEN, "2", "5"),
+        };
+        CFRecordsAggregate agg = new CFRecordsAggregate(cellRanges, rules);
+        byte[] serializedRecord = new byte[agg.getRecordSize()];
+        agg.serialize(0, serializedRecord);
+
+        int nRules = LittleEndian.getUShort(serializedRecord, 4);
+        if (nRules == 0) {
+            throw new AssertionFailedError("Identified bug 45682 b");
+        }
+        assertEquals(rules.length, nRules);
+    }
+    
+    public void testCantMixTypes() {
+        HSSFWorkbook workbook = new HSSFWorkbook();
         HSSFSheet sheet = workbook.createSheet();
-		CellRangeAddress[] cellRanges = {
-				new CellRangeAddress(0,1,0,0),
-				new CellRangeAddress(0,1,2,2),
-		};
-		CFRuleRecord[] rules = {
-			CFRuleRecord.create(sheet, "7"),
-			CFRuleRecord.create(sheet, ComparisonOperator.BETWEEN, "2", "5"),
-		};
-		CFRecordsAggregate agg = new CFRecordsAggregate(cellRanges, rules);
-		byte[] serializedRecord = new byte[agg.getRecordSize()];
-		agg.serialize(0, serializedRecord);
-		
-		int nRules = LittleEndian.getUShort(serializedRecord, 4);
-		if (nRules == 0) {
-			throw new AssertionFailedError("Identified bug 45682 b");
-		}
-		assertEquals(rules.length, nRules);
-	}
+        CellRangeAddress[] cellRanges = {
+                new CellRangeAddress(0,1,0,0),
+                new CellRangeAddress(0,1,2,2),
+        };
+        CFRuleBase[] rules = {
+                CFRuleRecord.create(sheet, "7"),
+                CFRule12Record.create(sheet, ComparisonOperator.BETWEEN, "2", "5"),
+        };
+        try {
+            new CFRecordsAggregate(cellRanges, rules);
+            fail("Shouldn't be able to mix between types");
+        } catch (IllegalArgumentException e) {}
+        
+        
+        rules = new CFRuleBase[] { CFRuleRecord.create(sheet, "7") };
+        CFRecordsAggregate agg = new CFRecordsAggregate(cellRanges, rules);
+        
+        try {
+            agg.addRule(CFRule12Record.create(sheet, "7"));
+            fail("Shouldn't be able to mix between types");
+        } catch (IllegalArgumentException e) {}
+    }
 }

Modified: poi/branches/common_sl/src/testcases/org/apache/poi/hssf/record/crypto/TestBiff8DecryptingStream.java
URL: http://svn.apache.org/viewvc/poi/branches/common_sl/src/testcases/org/apache/poi/hssf/record/crypto/TestBiff8DecryptingStream.java?rev=1691843&r1=1691842&r2=1691843&view=diff
==============================================================================
--- poi/branches/common_sl/src/testcases/org/apache/poi/hssf/record/crypto/TestBiff8DecryptingStream.java (original)
+++ poi/branches/common_sl/src/testcases/org/apache/poi/hssf/record/crypto/TestBiff8DecryptingStream.java Sun Jul 19 19:00:32 2015
@@ -96,9 +96,21 @@ public final class TestBiff8DecryptingSt
 		}
 
 		public void confirmShort(int expVal) {
-			cmp(HexDump.shortToHex(expVal), HexDump.shortToHex(_bds.readUShort()));
+			cmp(HexDump.shortToHex(expVal), HexDump.shortToHex(_bds.readShort()));
 		}
 
+        public void confirmUShort(int expVal) {
+            cmp(HexDump.shortToHex(expVal), HexDump.shortToHex(_bds.readUShort()));
+        }
+        
+        public short readShort() {
+            return _bds.readShort();
+        }
+
+        public int readUShort() {
+            return _bds.readUShort();
+        }
+
 		public void confirmInt(int expVal) {
 			cmp(HexDump.intToHex(expVal), HexDump.intToHex(_bds.readInt()));
 		}
@@ -106,7 +118,7 @@ public final class TestBiff8DecryptingSt
 		public void confirmLong(long expVal) {
 			cmp(HexDump.longToHex(expVal), HexDump.longToHex(_bds.readLong()));
 		}
-
+		
 		private void cmp(char[] exp, char[] act) {
 			if (Arrays.equals(exp, act)) {
 				return;
@@ -166,6 +178,15 @@ public final class TestBiff8DecryptingSt
 		st.rollForward(0x0C04, 0x0FF8);
 		st.confirmLong(0x6AA2D5F6B975D10CL);
 		st.confirmLong(0x34248ADF7ED4F029L);
+		// check for signed/unsigned shorts #58069
+		st.rollForward(0x1008, 0x7213);
+		st.confirmUShort(0xFFFF);
+		st.rollForward(0x7215, 0x1B9AD);
+        st.confirmShort(-1);
+        st.rollForward(0x1B9AF, 0x37D99);
+        assertEquals(0xFFFF, st.readUShort());
+        st.rollForward(0x37D9B, 0x4A6F2);
+        assertEquals(-1, st.readShort());
 		st.assertNoErrors();
 	}
 
@@ -229,7 +250,7 @@ public final class TestBiff8DecryptingSt
 		st.confirmData("01 C2 4E 55");  // first 4 bytes in next block
 		st.assertNoErrors();
 	}
-    
+
 	private static StreamTester createStreamTester(int mockStreamStartVal, String keyDigestHex, int expectedFirstInt) {
 		return new StreamTester(new MockStream(mockStreamStartVal), keyDigestHex, expectedFirstInt);
 	}

Modified: poi/branches/common_sl/src/testcases/org/apache/poi/hssf/usermodel/StreamUtility.java
URL: http://svn.apache.org/viewvc/poi/branches/common_sl/src/testcases/org/apache/poi/hssf/usermodel/StreamUtility.java?rev=1691843&r1=1691842&r2=1691843&view=diff
==============================================================================
--- poi/branches/common_sl/src/testcases/org/apache/poi/hssf/usermodel/StreamUtility.java (original)
+++ poi/branches/common_sl/src/testcases/org/apache/poi/hssf/usermodel/StreamUtility.java Sun Jul 19 19:00:32 2015
@@ -82,7 +82,7 @@ public final class StreamUtility {
 	private static int[] diffInternal(InputStream isA, InputStream isB, int[] allowableDifferenceRegions)
 			throws IOException {
 		int offset = 0;
-		List temp = new ArrayList();
+		List<Integer> temp = new ArrayList<Integer>();
 		while (true) {
 			int b = isA.read();
 			int b2 = isB.read();
@@ -114,7 +114,7 @@ public final class StreamUtility {
 		return false;
 	}
 
-	private static int[] toPrimitiveIntArray(List temp) {
+	private static int[] toPrimitiveIntArray(List<Integer> temp) {
 		int nItems = temp.size();
 		if(nItems < 1) {
 			return null;



---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@poi.apache.org
For additional commands, e-mail: commits-help@poi.apache.org