You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@poi.apache.org by jo...@apache.org on 2008/09/12 09:43:21 UTC

svn commit: r694631 [2/2] - in /poi/trunk/src: documentation/content/xdocs/ java/org/apache/poi/hssf/extractor/ java/org/apache/poi/hssf/record/ java/org/apache/poi/hssf/record/aggregates/ java/org/apache/poi/hssf/usermodel/ testcases/org/apache/poi/hs...

Modified: poi/trunk/src/testcases/org/apache/poi/hssf/usermodel/TestBugs.java
URL: http://svn.apache.org/viewvc/poi/trunk/src/testcases/org/apache/poi/hssf/usermodel/TestBugs.java?rev=694631&r1=694630&r2=694631&view=diff
==============================================================================
--- poi/trunk/src/testcases/org/apache/poi/hssf/usermodel/TestBugs.java (original)
+++ poi/trunk/src/testcases/org/apache/poi/hssf/usermodel/TestBugs.java Fri Sep 12 00:43:20 2008
@@ -961,7 +961,7 @@
         writeOutAndReadBack(wb);
         assertTrue("no errors writing sample xls", true);
     }
-    
+
     /**
      * Problems with extracting check boxes from
      *  HSSFObjectData
@@ -973,35 +973,35 @@
         // Take a look at the embeded objects
         List objects = wb.getAllEmbeddedObjects();
         assertEquals(1, objects.size());
-        
+
         HSSFObjectData obj = (HSSFObjectData)objects.get(0);
         assertNotNull(obj);
-        
+
         // Peek inside the underlying record
         EmbeddedObjectRefSubRecord rec = obj.findObjectRecord();
         assertNotNull(rec);
-        
+
         assertEquals(32, rec.field_1_stream_id_offset);
         assertEquals(0, rec.field_6_stream_id); // WRONG!
         assertEquals("Forms.CheckBox.1", rec.field_5_ole_classname);
         assertEquals(12, rec.remainingBytes.length);
-        
+
         // Doesn't have a directory
         assertFalse(obj.hasDirectoryEntry());
         assertNotNull(obj.getObjectData());
         assertEquals(12, obj.getObjectData().length);
         assertEquals("Forms.CheckBox.1", obj.getOLE2ClassName());
-        
+
         try {
             obj.getDirectory();
             fail();
         } catch(FileNotFoundException e) {
-        	// expectd during successful test
+            // expectd during successful test
         } catch (IOException e) {
-			throw new RuntimeException(e);
-		}
+            throw new RuntimeException(e);
+        }
     }
-    
+
     /**
      * Test that we can delete sheets without
      *  breaking the build in named ranges
@@ -1011,73 +1011,73 @@
         HSSFWorkbook wb = openSample("30978-alt.xls");
         assertEquals(1, wb.getNumberOfNames());
         assertEquals(3, wb.getNumberOfSheets());
-        
+
         // Check all names fit within range, and use
         //  DeletedArea3DPtg
         Workbook w = wb.getWorkbook();
         for(int i=0; i<w.getNumNames(); i++) {
             NameRecord r = w.getNameRecord(i);
             assertTrue(r.getSheetNumber() <= wb.getNumberOfSheets());
-            
+
             Ptg[] nd = r.getNameDefinition();
             assertEquals(1, nd.length);
             assertTrue(nd[0] instanceof DeletedArea3DPtg);
         }
-        
-        
+
+
         // Delete the 2nd sheet
         wb.removeSheetAt(1);
-        
-        
+
+
         // Re-check
         assertEquals(1, wb.getNumberOfNames());
         assertEquals(2, wb.getNumberOfSheets());
-        
+
         for(int i=0; i<w.getNumNames(); i++) {
             NameRecord r = w.getNameRecord(i);
             assertTrue(r.getSheetNumber() <= wb.getNumberOfSheets());
-            
+
             Ptg[] nd = r.getNameDefinition();
             assertEquals(1, nd.length);
             assertTrue(nd[0] instanceof DeletedArea3DPtg);
         }
-        
-        
+
+
         // Save and re-load
         wb = writeOutAndReadBack(wb);
         w = wb.getWorkbook();
-        
+
         assertEquals(1, wb.getNumberOfNames());
         assertEquals(2, wb.getNumberOfSheets());
-        
+
         for(int i=0; i<w.getNumNames(); i++) {
             NameRecord r = w.getNameRecord(i);
             assertTrue(r.getSheetNumber() <= wb.getNumberOfSheets());
-            
+
             Ptg[] nd = r.getNameDefinition();
             assertEquals(1, nd.length);
             assertTrue(nd[0] instanceof DeletedArea3DPtg);
         }
     }
-    
+
     /**
      * Test that fonts get added properly
      */
     public void test45338() {
         HSSFWorkbook wb = new HSSFWorkbook();
         assertEquals(4, wb.getNumberOfFonts());
-        
+
         HSSFSheet s = wb.createSheet();
         s.createRow(0);
         s.createRow(1);
         HSSFCell c1 = s.getRow(0).createCell(0);
         HSSFCell c2 = s.getRow(1).createCell(0);
-        
+
         assertEquals(4, wb.getNumberOfFonts());
-        
+
         HSSFFont f1 = wb.getFontAt((short)0);
         assertEquals(400, f1.getBoldweight());
-        
+
         // Check that asking for the same font
         //  multiple times gives you the same thing.
         // Otherwise, our tests wouldn't work!
@@ -1094,22 +1094,22 @@
                 !=
                 wb.getFontAt((short)2)
         );
-        
+
         // Look for a new font we have
         //  yet to add
         assertNull(
             wb.findFont(
-                (short)11, (short)123, (short)22, 
+                (short)11, (short)123, (short)22,
                 "Thingy", false, true, (short)2, (byte)2
             )
         );
-        
+
         HSSFFont nf = wb.createFont();
         assertEquals(5, wb.getNumberOfFonts());
-        
+
         assertEquals(5, nf.getIndex());
         assertEquals(nf, wb.getFontAt((short)5));
-        
+
         nf.setBoldweight((short)11);
         nf.setColor((short)123);
         nf.setFontHeight((short)22);
@@ -1118,32 +1118,32 @@
         nf.setStrikeout(true);
         nf.setTypeOffset((short)2);
         nf.setUnderline((byte)2);
-        
+
         assertEquals(5, wb.getNumberOfFonts());
         assertEquals(nf, wb.getFontAt((short)5));
-        
+
         // Find it now
         assertNotNull(
             wb.findFont(
-                (short)11, (short)123, (short)22, 
+                (short)11, (short)123, (short)22,
                 "Thingy", false, true, (short)2, (byte)2
             )
         );
         assertEquals(
             5,
             wb.findFont(
-                   (short)11, (short)123, (short)22, 
+                   (short)11, (short)123, (short)22,
                    "Thingy", false, true, (short)2, (byte)2
                ).getIndex()
         );
         assertEquals(nf,
                wb.findFont(
-                   (short)11, (short)123, (short)22, 
+                   (short)11, (short)123, (short)22,
                    "Thingy", false, true, (short)2, (byte)2
                )
         );
     }
-    
+
     /**
      * From the mailing list - ensure we can handle a formula
      *  containing a zip code, eg ="70164"
@@ -1160,63 +1160,59 @@
         c1.setCellFormula("70164");
         c2.setCellFormula("\"70164\"");
         c3.setCellFormula("\"90210\"");
-        
+
         // Check the formulas
         assertEquals("70164.0", c1.getCellFormula());
         assertEquals("\"70164\"", c2.getCellFormula());
-        
+
         // And check the values - blank
-        assertEquals(0.0, c1.getNumericCellValue(), 0.00001);
-        assertEquals("", c1.getRichStringCellValue().getString());
-        assertEquals(0.0, c2.getNumericCellValue(), 0.00001);
-        assertEquals("", c2.getRichStringCellValue().getString());
-        assertEquals(0.0, c3.getNumericCellValue(), 0.00001);
-        assertEquals("", c3.getRichStringCellValue().getString());
-        
+        confirmCachedValue(0.0, c1);
+        confirmCachedValue(0.0, c2);
+        confirmCachedValue(0.0, c3);
+
         // Try changing the cached value on one of the string
         //  formula cells, so we can see it updates properly
         c3.setCellValue(new HSSFRichTextString("test"));
-        assertEquals(0.0, c3.getNumericCellValue(), 0.00001);
-        assertEquals("test", c3.getRichStringCellValue().getString());
-        
-        
+        confirmCachedValue("test", c3);
+        try {
+            c3.getNumericCellValue();
+            throw new AssertionFailedError("exception should have been thrown");
+        } catch (IllegalStateException e) {
+            assertEquals("Cannot get a numeric value from a text formula cell", e.getMessage());
+        }
+
+
         // Now evaluate, they should all be changed
         HSSFFormulaEvaluator eval = new HSSFFormulaEvaluator(s, wb);
         eval.evaluateFormulaCell(c1);
         eval.evaluateFormulaCell(c2);
         eval.evaluateFormulaCell(c3);
-        
+
         // Check that the cells now contain
         //  the correct values
-        assertEquals(70164.0, c1.getNumericCellValue(), 0.00001);
-        assertEquals("", c1.getRichStringCellValue().getString());
-        assertEquals(0.0, c2.getNumericCellValue(), 0.00001);
-        assertEquals("70164", c2.getRichStringCellValue().getString());
-        assertEquals(0.0, c3.getNumericCellValue(), 0.00001);
-        assertEquals("90210", c3.getRichStringCellValue().getString());
-  
-        
+        confirmCachedValue(70164.0, c1);
+        confirmCachedValue("70164", c2);
+        confirmCachedValue("90210", c3);
+
+
         // Write and read
         HSSFWorkbook nwb = writeOutAndReadBack(wb);
         HSSFSheet ns = nwb.getSheetAt(0);
         HSSFCell nc1 = ns.getRow(0).getCell(0);
         HSSFCell nc2 = ns.getRow(0).getCell(1);
         HSSFCell nc3 = ns.getRow(0).getCell(2);
-        
+
         // Re-check
-        assertEquals(70164.0, nc1.getNumericCellValue(), 0.00001);
-        assertEquals("", nc1.getRichStringCellValue().getString());
-        assertEquals(0.0, nc2.getNumericCellValue(), 0.00001);
-        assertEquals("70164", nc2.getRichStringCellValue().getString());
-        assertEquals(0.0, nc3.getNumericCellValue(), 0.00001);
-        assertEquals("90210", nc3.getRichStringCellValue().getString());
-        
+        confirmCachedValue(70164.0, nc1);
+        confirmCachedValue("70164", nc2);
+        confirmCachedValue("90210", nc3);
+
         CellValueRecordInterface[] cvrs = ns.getSheet().getValueRecords();
         for (int i = 0; i < cvrs.length; i++) {
             CellValueRecordInterface cvr = cvrs[i];
             if(cvr instanceof FormulaRecordAggregate) {
                 FormulaRecordAggregate fr = (FormulaRecordAggregate)cvr;
-                
+
                 if(i == 0) {
                     assertEquals(70164.0, fr.getFormulaRecord().getValue(), 0.0001);
                     assertNull(fr.getStringRecord());
@@ -1233,7 +1229,18 @@
         }
         assertEquals(3, cvrs.length);
     }
-    
+
+    private static void confirmCachedValue(double expectedValue, HSSFCell cell) {
+        assertEquals(HSSFCell.CELL_TYPE_FORMULA, cell.getCellType());
+        assertEquals(HSSFCell.CELL_TYPE_NUMERIC, cell.getCachedFormulaResultType());
+        assertEquals(expectedValue, cell.getNumericCellValue(), 0.0);
+    }
+    private static void confirmCachedValue(String expectedValue, HSSFCell cell) {
+        assertEquals(HSSFCell.CELL_TYPE_FORMULA, cell.getCellType());
+        assertEquals(HSSFCell.CELL_TYPE_STRING, cell.getCachedFormulaResultType());
+        assertEquals(expectedValue, cell.getRichStringCellValue().getString());
+    }
+
     /**
      * Problem with "Vector Rows", eg a whole
      *  column which is set to the result of
@@ -1242,37 +1249,37 @@
      *  {=sin(B1:B9){9,1)[rownum][0]
      * In this sample file, the vector column
      *  is C, and the data column is B.
-     *  
+     *
      * For now, blows up with an exception from ExtPtg
      *  Expected ExpPtg to be converted from Shared to Non-Shared...
      */
     public void DISABLEDtest43623() {
         HSSFWorkbook wb = openSample("43623.xls");
         assertEquals(1, wb.getNumberOfSheets());
-        
+
         HSSFSheet s1 = wb.getSheetAt(0);
-        
+
         HSSFCell c1 = s1.getRow(0).getCell(2);
         HSSFCell c2 = s1.getRow(1).getCell(2);
         HSSFCell c3 = s1.getRow(2).getCell(2);
-        
+
         // These formula contents are a guess...
         assertEquals("{=sin(B1:B9){9,1)[0][0]", c1.getCellFormula());
         assertEquals("{=sin(B1:B9){9,1)[1][0]", c2.getCellFormula());
         assertEquals("{=sin(B1:B9){9,1)[2][0]", c3.getCellFormula());
-        
+
         // Save and re-open, ensure it still works
         HSSFWorkbook nwb = writeOutAndReadBack(wb);
         HSSFSheet ns1 = nwb.getSheetAt(0);
         HSSFCell nc1 = ns1.getRow(0).getCell(2);
         HSSFCell nc2 = ns1.getRow(1).getCell(2);
         HSSFCell nc3 = ns1.getRow(2).getCell(2);
-        
+
         assertEquals("{=sin(B1:B9){9,1)[0][0]", nc1.getCellFormula());
         assertEquals("{=sin(B1:B9){9,1)[1][0]", nc2.getCellFormula());
         assertEquals("{=sin(B1:B9){9,1)[2][0]", nc3.getCellFormula());
     }
-    
+
     /**
      * People are all getting confused about the last
      *  row and cell number
@@ -1280,48 +1287,48 @@
     public void test30635() {
         HSSFWorkbook wb = new HSSFWorkbook();
         HSSFSheet s = wb.createSheet();
-        
+
         // No rows, everything is 0
         assertEquals(0, s.getFirstRowNum());
         assertEquals(0, s.getLastRowNum());
         assertEquals(0, s.getPhysicalNumberOfRows());
-        
+
         // One row, most things are 0, physical is 1
         s.createRow(0);
         assertEquals(0, s.getFirstRowNum());
         assertEquals(0, s.getLastRowNum());
         assertEquals(1, s.getPhysicalNumberOfRows());
-        
+
         // And another, things change
         s.createRow(4);
         assertEquals(0, s.getFirstRowNum());
         assertEquals(4, s.getLastRowNum());
         assertEquals(2, s.getPhysicalNumberOfRows());
-        
-        
+
+
         // Now start on cells
         HSSFRow r = s.getRow(0);
         assertEquals(-1, r.getFirstCellNum());
         assertEquals(-1, r.getLastCellNum());
         assertEquals(0, r.getPhysicalNumberOfCells());
-        
+
         // Add a cell, things move off -1
         r.createCell(0);
         assertEquals(0, r.getFirstCellNum());
         assertEquals(1, r.getLastCellNum()); // last cell # + 1
         assertEquals(1, r.getPhysicalNumberOfCells());
-        
+
         r.createCell(1);
         assertEquals(0, r.getFirstCellNum());
         assertEquals(2, r.getLastCellNum()); // last cell # + 1
         assertEquals(2, r.getPhysicalNumberOfCells());
-        
+
         r.createCell(4);
         assertEquals(0, r.getFirstCellNum());
         assertEquals(5, r.getLastCellNum()); // last cell # + 1
         assertEquals(3, r.getPhysicalNumberOfCells());
     }
-    
+
     /**
      * Data Tables - ptg 0x2
      */
@@ -1330,25 +1337,25 @@
         HSSFSheet s;
         HSSFRow r;
         HSSFCell c;
-        
+
         // Check the contents of the formulas
-        
+
         // E4 to G9 of sheet 4 make up the table
         s = wb.getSheet("OneVariable Table Completed");
         r = s.getRow(3);
         c = r.getCell(4);
         assertEquals(HSSFCell.CELL_TYPE_FORMULA, c.getCellType());
-        
+
         // TODO - check the formula once tables and
         //  arrays are properly supported
 
-        
+
         // E4 to H9 of sheet 5 make up the table
         s = wb.getSheet("TwoVariable Table Example");
         r = s.getRow(3);
         c = r.getCell(4);
         assertEquals(HSSFCell.CELL_TYPE_FORMULA, c.getCellType());
-        
+
         // TODO - check the formula once tables and
         //  arrays are properly supported
     }
@@ -1361,7 +1368,7 @@
         HSSFSheet sh = wb.getSheetAt(0);
         for(short i=0; i < 30; i++) sh.autoSizeColumn(i);
      }
-    
+
     /**
      * We used to add too many UncalcRecords to sheets
      *  with diagrams on. Don't any more
@@ -1371,41 +1378,41 @@
         wb.getSheetAt(0).setForceFormulaRecalculation(true);
         wb.getSheetAt(1).setForceFormulaRecalculation(false);
         wb.getSheetAt(2).setForceFormulaRecalculation(true);
-        
+
         // Write out and back in again
         // This used to break
         HSSFWorkbook nwb = writeOutAndReadBack(wb);
-        
+
         // Check now set as it should be
         assertTrue(nwb.getSheetAt(0).getForceFormulaRecalculation());
         assertFalse(nwb.getSheetAt(1).getForceFormulaRecalculation());
         assertTrue(nwb.getSheetAt(2).getForceFormulaRecalculation());
     }
-    
+
     /**
      * Very hidden sheets not displaying as such
      */
     public void test45761() {
-    	HSSFWorkbook wb = openSample("45761.xls");
-    	assertEquals(3, wb.getNumberOfSheets());
-    	
-    	assertFalse(wb.isSheetHidden(0));
-    	assertFalse(wb.isSheetVeryHidden(0));
-    	assertTrue(wb.isSheetHidden(1));
-    	assertFalse(wb.isSheetVeryHidden(1));
-    	assertFalse(wb.isSheetHidden(2));
-    	assertTrue(wb.isSheetVeryHidden(2));
-    	
-    	// Change 0 to be very hidden, and re-load
-    	wb.setSheetHidden(0, 2);
-    	
+        HSSFWorkbook wb = openSample("45761.xls");
+        assertEquals(3, wb.getNumberOfSheets());
+
+        assertFalse(wb.isSheetHidden(0));
+        assertFalse(wb.isSheetVeryHidden(0));
+        assertTrue(wb.isSheetHidden(1));
+        assertFalse(wb.isSheetVeryHidden(1));
+        assertFalse(wb.isSheetHidden(2));
+        assertTrue(wb.isSheetVeryHidden(2));
+
+        // Change 0 to be very hidden, and re-load
+        wb.setSheetHidden(0, 2);
+
         HSSFWorkbook nwb = writeOutAndReadBack(wb);
 
-    	assertFalse(nwb.isSheetHidden(0));
-    	assertTrue(nwb.isSheetVeryHidden(0));
-    	assertTrue(nwb.isSheetHidden(1));
-    	assertFalse(nwb.isSheetVeryHidden(1));
-    	assertFalse(nwb.isSheetHidden(2));
-    	assertTrue(nwb.isSheetVeryHidden(2));
+        assertFalse(nwb.isSheetHidden(0));
+        assertTrue(nwb.isSheetVeryHidden(0));
+        assertTrue(nwb.isSheetHidden(1));
+        assertFalse(nwb.isSheetVeryHidden(1));
+        assertFalse(nwb.isSheetHidden(2));
+        assertTrue(nwb.isSheetVeryHidden(2));
     }
 }



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