You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@poi.apache.org by ug...@apache.org on 2008/02/13 18:34:59 UTC

svn commit: r627544 [2/2] - in /poi/branches/ooxml: ./ src/documentation/content/xdocs/ src/documentation/content/xdocs/getinvolved/ src/documentation/content/xdocs/hssf/ src/examples/src/org/apache/poi/hssf/usermodel/examples/ src/java/org/apache/poi/...

Modified: poi/branches/ooxml/src/testcases/org/apache/poi/hssf/record/TestHyperlinkRecord.java
URL: http://svn.apache.org/viewvc/poi/branches/ooxml/src/testcases/org/apache/poi/hssf/record/TestHyperlinkRecord.java?rev=627544&r1=627543&r2=627544&view=diff
==============================================================================
--- poi/branches/ooxml/src/testcases/org/apache/poi/hssf/record/TestHyperlinkRecord.java (original)
+++ poi/branches/ooxml/src/testcases/org/apache/poi/hssf/record/TestHyperlinkRecord.java Wed Feb 13 09:34:43 2008
@@ -18,114 +18,311 @@
 
 import java.io.ByteArrayInputStream;
 import java.net.URL;
+import java.util.Arrays;
 
 import junit.framework.TestCase;
 
+/**
+ * Test HyperlinkRecord
+ *
+ * @author Nick Burch
+ * @author Yegor Kozlov
+ */
 public class TestHyperlinkRecord extends TestCase {
-	protected void setUp() throws Exception {
-		super.setUp();
-	}
-
-	private byte[] data = new byte[] { 
-		-72, 1, 110, 0,
-		// ??, Row, col, xf
-		6, 0, 3, 0,	2, 0, 2, 0, 
-		
-		// ??
-		-48, -55, -22, 121, -7, -70, -50, 17, 
-		-116, -126, 0, -86, 0, 75, -87, 11, 
-		2, 0, 0, 0, 
-		
-		// URL length
-		23, 0, 0, 0, 
-		
-		// Label length
-		4, 0, 0, 0,
-		
-		// Label
-		76, 0, 44, 0, 65, 0, 0, 0, 
-		
-		// ??
-		-32, -55, -22, 121, -7, -70, -50, 17,
-		-116, -126, 0, -86, 0, 75, -87, 11, 
-		46, 0, 0, 0,
-		
-		// URL
-		104, 0, 116, 0, 116, 0, 112, 0, 58, 0, 47, 0, 47, 0, 119,
-		0, 119, 0, 119, 0, 46, 0, 108, 0, 97, 0, 107, 0, 105,
-		0, 110, 0, 103, 0, 115, 0, 46, 0, 99, 0, 111, 0,
-		109, 0, 
-		0, 0 };
-	
-	private byte[] data2 = new byte[] {
-		-72, 1, -126, 0,
-		// ??, Row, col, xf
-		2, 0, 2, 0, 4, 0, 4, 0,
-
-		// ??
-		-48, -55, -22, 121, -7, -70, -50, 17,
-		-116, -126, 0, -86, 0, 75, -87, 11,
-		2, 0, 0, 0,
-		
-		// URL and Label lengths
-		23, 0, 0, 0,
-		15, 0, 0, 0,
-
-		// Label
-		83, 0, 116, 0, 97, 0, 99, 0, 105, 0,
-		101, 0, 64, 0, 65, 0, 66, 0, 67, 0,
-		46, 0, 99, 0, 111, 0, 109, 0, 0, 0,
-
-		// ??
-		-32, -55, -22, 121, -7, -70, -50, 17,
-		-116, -126, 0, -86, 0, 75, -87, 11,
-		44, 0, 0, 0,
-
-		// URL
-		109, 0, 97, 0, 105, 0, 108, 0, 116, 0,
-		111, 0, 58, 0, 83, 0, 116, 0, 97, 0,
-		99, 0, 105, 0, 101, 0, 64, 0, 65, 0,
-		66, 0, 67, 0, 46, 0, 99, 0, 111, 0,
-		109, 0, 0, 0 };
-
-	public void testRecordParsing() throws Exception {
-        RecordInputStream inp = new RecordInputStream(
-                new ByteArrayInputStream(data)
-        );
-        inp.nextRecord();
-
-        HyperlinkRecord r = new HyperlinkRecord(inp);
-        
-        assertEquals(3, r.getRow());
-        assertEquals(2, r.getColumn());
-        assertEquals(2, r.getXFIndex());
-        
-        assertEquals("L,A", r.getLabel());
-        assertEquals("http://www.lakings.com", r.getUrlString());
-        assertEquals(new URL("http://www.lakings.com"), r.getUrl());
-        
-        // Check it serialises as expected
-        assertEquals(data.length, r.getRecordSize());
-        byte[] d = r.serialize();
-        assertEquals(data.length, d.length);
-        for(int i=0; i<data.length; i++) {
-        	assertEquals(data[i], d[i]);
+
+    //link to http://www.lakings.com/
+    byte[] data1 = { 0x02, 0x00,    //First row of the hyperlink
+                     0x02, 0x00,    //Last row of the hyperlink
+                     0x00, 0x00,    //First column of the hyperlink
+                     0x00, 0x00,    //Last column of the hyperlink
+
+                     //16-byte GUID. Seems to be always the same. Does not depend on the hyperlink type
+                     (byte)0xD0, (byte)0xC9, (byte)0xEA, 0x79, (byte)0xF9, (byte)0xBA, (byte)0xCE, 0x11,
+                     (byte)0x8C, (byte)0x82, 0x00, (byte)0xAA, 0x00, 0x4B, (byte)0xA9, 0x0B,
+
+                    0x02, 0x00, 0x00, 0x00, //integer, always 2
+
+                    // flags. Define the type of the hyperlink:
+                    // HyperlinkRecord.HLINK_URL | HyperlinkRecord.HLINK_ABS | HyperlinkRecord.HLINK_LABEL
+                    0x17, 0x00, 0x00, 0x00,
+
+                    0x08, 0x00, 0x00, 0x00, //length of the label including the trailing '\0'
+
+                    //label:
+                    0x4D, 0x00, 0x79, 0x00, 0x20, 0x00, 0x4C, 0x00, 0x69, 0x00, 0x6E, 0x00, 0x6B, 0x00, 0x00, 0x00,
+
+                    //16-byte link moniker: HyperlinkRecord.URL_MONIKER
+                    (byte)0xE0, (byte)0xC9, (byte)0xEA, 0x79, (byte)0xF9, (byte)0xBA, (byte)0xCE,  0x11,
+                    (byte)0x8C, (byte)0x82, 0x00, (byte)0xAA, 0x00, 0x4B, (byte)0xA9, 0x0B,
+
+                    //count of bytes in the address including the tail
+                    0x48, 0x00, 0x00, 0x00, //integer
+
+                    //the actual link, terminated by '\u0000'
+                    0x68, 0x00, 0x74, 0x00, 0x74, 0x00, 0x70, 0x00, 0x3A, 0x00, 0x2F, 0x00,
+                    0x2F, 0x00, 0x77, 0x00, 0x77, 0x00, 0x77, 0x00, 0x2E, 0x00, 0x6C, 0x00,
+                    0x61, 0x00, 0x6B, 0x00, 0x69, 0x00, 0x6E, 0x00, 0x67, 0x00, 0x73, 0x00,
+                    0x2E, 0x00, 0x63, 0x00, 0x6F, 0x00, 0x6D, 0x00, 0x2F, 0x00, 0x00, 0x00,
+
+                    //standard 24-byte tail of a URL link. Seems to always be the same for all URL HLINKs
+                    0x79, 0x58, (byte)0x81, (byte)0xF4, 0x3B, 0x1D, 0x7F, 0x48, (byte)0xAF, 0x2C,
+                    (byte)0x82, 0x5D, (byte)0xC4, (byte)0x85, 0x27, 0x63, 0x00, 0x00, 0x00,
+                    0x00, (byte)0xA5, (byte)0xAB, 0x00, 0x00};
+
+    //link to a file in the current directory: link1.xls
+    byte[] data2 =  {0x00, 0x00,
+                     0x00, 0x00,
+                     0x00, 0x00,
+                     0x00, 0x00,
+                     //16-bit GUID. Seems to be always the same. Does not depend on the hyperlink type
+                     (byte)0xD0, (byte)0xC9, (byte)0xEA, 0x79, (byte)0xF9, (byte)0xBA, (byte)0xCE, 0x11,
+                     (byte)0x8C, (byte)0x82, 0x00, (byte)0xAA, 0x00, 0x4B, (byte)0xA9, 0x0B,
+
+                     0x02, 0x00, 0x00, 0x00,    //integer, always 2
+
+                     0x15, 0x00, 0x00, 0x00,    //options: HyperlinkRecord.HLINK_URL | HyperlinkRecord.HLINK_LABEL
+
+                     0x05, 0x00, 0x00, 0x00,    //length of the label
+                     //label
+                     0x66, 0x00, 0x69, 0x00, 0x6C, 0x00, 0x65, 0x00, 0x00, 0x00,
+
+                     //16-byte link moniker: HyperlinkRecord.FILE_MONIKER
+                     0x03, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, (byte)0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46,
+
+                     0x00, 0x00,    //level
+                     0x0A, 0x00, 0x00, 0x00,    //length of the path )
+
+                     //path to the file (plain ISO-8859 bytes, NOT UTF-16LE!)
+                     0x6C, 0x69, 0x6E, 0x6B, 0x31, 0x2E, 0x78, 0x6C, 0x73, 0x00,
+
+                     //standard 28-byte tail of a file link
+                     (byte)0xFF, (byte)0xFF, (byte)0xAD, (byte)0xDE, 0x00, 0x00, 0x00, 0x00,
+                     0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+                     0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00};
+
+    // mailto:ebgans@mail.ru?subject=Hello,%20Ebgans!
+    byte[] data3 = {0x01, 0x00,
+                    0x01, 0x00,
+                    0x00, 0x00,
+                    0x00, 0x00,
+
+                    //16-bit GUID. Seems to be always the same. Does not depend on the hyperlink type
+                    (byte)0xD0, (byte)0xC9, (byte)0xEA, 0x79, (byte)0xF9, (byte)0xBA, (byte)0xCE, 0x11,
+                    (byte)0x8C, (byte)0x82, 0x00, (byte)0xAA, 0x00, 0x4B, (byte)0xA9, 0x0B,
+
+                    0x02, 0x00, 0x00, 0x00, //integer, always 2
+
+                    0x17, 0x00, 0x00, 0x00,  //options: HyperlinkRecord.HLINK_URL | HyperlinkRecord.HLINK_ABS | HyperlinkRecord.HLINK_LABEL
+
+                    0x06, 0x00, 0x00, 0x00,     //length of the label
+                    0x65, 0x00, 0x6D, 0x00, 0x61, 0x00, 0x69, 0x00, 0x6C, 0x00, 0x00, 0x00, //label
+
+                    //16-byte link moniker: HyperlinkRecord.URL_MONIKER
+                    (byte)0xE0, (byte)0xC9, (byte)0xEA, 0x79, (byte)0xF9, (byte)0xBA, (byte)0xCE, 0x11,
+                    (byte)0x8C, (byte)0x82, 0x00, (byte)0xAA, 0x00, 0x4B, (byte)0xA9, 0x0B,
+
+                    //length of the address including the tail.
+                    0x76, 0x00, 0x00, 0x00,
+
+                    //the address is terminated by '\u0000'
+                    0x6D, 0x00, 0x61, 0x00, 0x69, 0x00, 0x6C, 0x00, 0x74, 0x00, 0x6F, 0x00,
+                    0x3A, 0x00, 0x65, 0x00, 0x62, 0x00, 0x67, 0x00, 0x61, 0x00, 0x6E, 0x00,
+                    0x73, 0x00, 0x40, 0x00, 0x6D, 0x00, 0x61, 0x00, 0x69, 0x00, 0x6C, 0x00,
+                    0x2E, 0x00, 0x72, 0x00, 0x75, 0x00, 0x3F, 0x00, 0x73, 0x00, 0x75, 0x00,
+                    0x62, 0x00, 0x6A, 0x00, 0x65, 0x00, 0x63, 0x00, 0x74, 0x00, 0x3D, 0x00,
+                    0x48, 0x00, 0x65, 0x00, 0x6C, 0x00, 0x6C, 0x00, 0x6F, 0x00, 0x2C, 0x00,
+                    0x25, 0x00, 0x32, 0x00, 0x30, 0x00, 0x45, 0x00, 0x62, 0x00, 0x67, 0x00,
+                    0x61, 0x00, 0x6E, 0x00, 0x73, 0x00, 0x21, 0x00, 0x00, 0x00,
+
+                    //standard 24-byte tail of a URL link
+                    0x79, 0x58, (byte)0x81, (byte)0xF4, 0x3B, 0x1D, 0x7F, 0x48, (byte)0xAF, (byte)0x2C,
+                    (byte)0x82, 0x5D, (byte)0xC4, (byte)0x85, 0x27, 0x63, 0x00, 0x00, 0x00,
+                    0x00, (byte)0xA5, (byte)0xAB, 0x00, 0x00
+    };
+
+    //link to a place in worksheet: Sheet1!A1
+    byte[] data4 = {0x03, 0x00,
+                    0x03, 0x00,
+                    0x00, 0x00,
+                    0x00, 0x00,
+
+                    //16-bit GUID. Seems to be always the same. Does not depend on the hyperlink type
+                    (byte)0xD0, (byte)0xC9, (byte)0xEA, 0x79, (byte)0xF9, (byte)0xBA, (byte)0xCE, 0x11,
+                    (byte)0x8C, (byte)0x82, 0x00, (byte)0xAA, 0x00, 0x4B, (byte)0xA9, 0x0B,
+
+                    0x02, 0x00, 0x00, 0x00, //integer, always 2
+
+                    0x1C, 0x00, 0x00, 0x00, //flags: HyperlinkRecord.HLINK_LABEL | HyperlinkRecord.HLINK_PLACE
+
+                    0x06, 0x00, 0x00, 0x00, //length of the label
+
+                    0x70, 0x00, 0x6C, 0x00, 0x61, 0x00, 0x63, 0x00, 0x65, 0x00, 0x00, 0x00, //label
+
+                    0x0A, 0x00, 0x00, 0x00, //length of the document link including trailing zero
+
+                    //link: Sheet1!A1
+                    0x53, 0x00, 0x68, 0x00, 0x65, 0x00, 0x65, 0x00, 0x74, 0x00, 0x31, 0x00, 0x21,
+                    0x00, 0x41, 0x00, 0x31, 0x00, 0x00, 0x00};
+
+    public void testReadURLLink(){
+        RecordInputStream is = new TestcaseRecordInputStream((short)HyperlinkRecord.sid, (short)data1.length, data1);
+        HyperlinkRecord link = new HyperlinkRecord(is);
+        assertEquals(2, link.getFirstRow());
+        assertEquals(2, link.getLastRow());
+        assertEquals(0, link.getFirstColumn());
+        assertEquals(0, link.getLastColumn());
+        assertTrue(Arrays.equals(HyperlinkRecord.STD_MONIKER, link.getGuid()));
+        assertTrue(Arrays.equals(HyperlinkRecord.URL_MONIKER, link.getMoniker()));
+        assertEquals(2, link.getLabelOptions());
+        int opts = HyperlinkRecord.HLINK_URL | HyperlinkRecord.HLINK_ABS | HyperlinkRecord.HLINK_LABEL;
+        assertEquals(0x17, opts);
+        assertEquals(opts, link.getLinkOptions());
+        assertEquals(0, link.getFileOptions());
+
+        assertEquals("My Link", link.getLabel());
+        assertEquals("http://www.lakings.com/", link.getAddress());
+    }
+
+    public void testReadFileLink(){
+        RecordInputStream is = new TestcaseRecordInputStream((short)HyperlinkRecord.sid, (short)data2.length, data2);
+        HyperlinkRecord link = new HyperlinkRecord(is);
+        assertEquals(0, link.getFirstRow());
+        assertEquals(0, link.getLastRow());
+        assertEquals(0, link.getFirstColumn());
+        assertEquals(0, link.getLastColumn());
+        assertTrue(Arrays.equals(HyperlinkRecord.STD_MONIKER, link.getGuid()));
+        assertTrue(Arrays.equals(HyperlinkRecord.FILE_MONIKER, link.getMoniker()));
+        assertEquals(2, link.getLabelOptions());
+        int opts = HyperlinkRecord.HLINK_URL | HyperlinkRecord.HLINK_LABEL;
+        assertEquals(0x15, opts);
+        assertEquals(opts, link.getLinkOptions());
+
+        assertEquals("file", link.getLabel());
+        assertEquals("link1.xls", link.getAddress());
+    }
+
+    public void testReadEmailLink(){
+        RecordInputStream is = new TestcaseRecordInputStream((short)HyperlinkRecord.sid, (short)data3.length, data3);
+        HyperlinkRecord link = new HyperlinkRecord(is);
+        assertEquals(1, link.getFirstRow());
+        assertEquals(1, link.getLastRow());
+        assertEquals(0, link.getFirstColumn());
+        assertEquals(0, link.getLastColumn());
+        assertTrue(Arrays.equals(HyperlinkRecord.STD_MONIKER, link.getGuid()));
+        assertTrue(Arrays.equals(HyperlinkRecord.URL_MONIKER, link.getMoniker()));
+        assertEquals(2, link.getLabelOptions());
+        int opts = HyperlinkRecord.HLINK_URL | HyperlinkRecord.HLINK_ABS | HyperlinkRecord.HLINK_LABEL;
+        assertEquals(0x17, opts);
+        assertEquals(opts, link.getLinkOptions());
+
+        assertEquals("email", link.getLabel());
+        assertEquals("mailto:ebgans@mail.ru?subject=Hello,%20Ebgans!", link.getAddress());
+    }
+
+    public void testReadDocumentLink(){
+        RecordInputStream is = new TestcaseRecordInputStream((short)HyperlinkRecord.sid, (short)data4.length, data4);
+        HyperlinkRecord link = new HyperlinkRecord(is);
+        assertEquals(3, link.getFirstRow());
+        assertEquals(3, link.getLastRow());
+        assertEquals(0, link.getFirstColumn());
+        assertEquals(0, link.getLastColumn());
+        assertTrue(Arrays.equals(HyperlinkRecord.STD_MONIKER, link.getGuid()));
+        assertEquals(2, link.getLabelOptions());
+        int opts = HyperlinkRecord.HLINK_LABEL | HyperlinkRecord.HLINK_PLACE;
+        assertEquals(0x1C, opts);
+        assertEquals(opts, link.getLinkOptions());
+
+        assertEquals("place", link.getLabel());
+        assertEquals("Sheet1!A1", link.getAddress());
+    }
+
+    private void serialize(byte[] data){
+        RecordInputStream is = new TestcaseRecordInputStream((short)HyperlinkRecord.sid, (short)data.length, data);
+        HyperlinkRecord link = new HyperlinkRecord(is);
+        byte[] bytes1 = link.serialize();
+        is = new RecordInputStream(new ByteArrayInputStream(bytes1));
+        is.nextRecord();
+        link = new HyperlinkRecord(is);
+        byte[] bytes2 = link.serialize();
+        assertEquals(bytes1.length, bytes2.length);
+        assertTrue(Arrays.equals(bytes1, bytes2));
+    }
+
+    public void testSerialize(){
+        serialize(data1);
+        serialize(data2);
+        serialize(data3);
+        serialize(data4);
+    }
+
+    public void testCreateURLRecord() throws Exception {
+        HyperlinkRecord link = new HyperlinkRecord();
+        link.newUrlLink();
+        link.setFirstRow((short)2);
+        link.setLastRow((short)2);
+        link.setLabel("My Link");
+        link.setAddress("http://www.lakings.com/");
+
+        byte[] tmp = link.serialize();
+        byte[] ser = new byte[tmp.length-4];
+        System.arraycopy(tmp, 4, ser, 0, ser.length);
+        assertEquals(data1.length, ser.length);
+        assertTrue(Arrays.equals(data1, ser));
+    }
+
+    public void testCreateFileRecord() throws Exception {
+        HyperlinkRecord link = new HyperlinkRecord();
+        link.newFileLink();
+        link.setFirstRow((short)0);
+        link.setLastRow((short)0);
+        link.setLabel("file");
+        link.setAddress("link1.xls");
+
+        byte[] tmp = link.serialize();
+        byte[] ser = new byte[tmp.length-4];
+        System.arraycopy(tmp, 4, ser, 0, ser.length);
+        assertEquals(data2.length, ser.length);
+        assertTrue(Arrays.equals(data2, ser));
+    }
+
+    public void testCreateDocumentRecord() throws Exception {
+        HyperlinkRecord link = new HyperlinkRecord();
+        link.newDocumentLink();
+        link.setFirstRow((short)3);
+        link.setLastRow((short)3);
+        link.setLabel("place");
+        link.setAddress("Sheet1!A1");
+
+        byte[] tmp = link.serialize();
+        byte[] ser = new byte[tmp.length-4];
+        System.arraycopy(tmp, 4, ser, 0, ser.length);
+        assertEquals(data4.length, ser.length);
+        assertTrue(Arrays.equals(data4, ser));
+    }
+
+    public void testCreateEmailtRecord() throws Exception {
+        HyperlinkRecord link = new HyperlinkRecord();
+        link.newUrlLink();
+        link.setFirstRow((short)1);
+        link.setLastRow((short)1);
+        link.setLabel("email");
+        link.setAddress("mailto:ebgans@mail.ru?subject=Hello,%20Ebgans!");
+
+        byte[] tmp = link.serialize();
+        byte[] ser = new byte[tmp.length-4];
+        System.arraycopy(tmp, 4, ser, 0, ser.length);
+        assertEquals(data3.length, ser.length);
+        assertTrue(Arrays.equals(data3, ser));
+    }
+
+    public void testClone() throws Exception {
+        byte[][] data = {data1, data2, data3, data4};
+        for (int i = 0; i < data.length; i++) {
+            RecordInputStream is = new TestcaseRecordInputStream((short)HyperlinkRecord.sid, (short)data[i].length, data[i]);
+            HyperlinkRecord link = new HyperlinkRecord(is);
+            HyperlinkRecord clone = (HyperlinkRecord)link.clone();
+            assertTrue(Arrays.equals(link.serialize(), clone.serialize()));
         }
-	}
 
-	public void testSecondRecord() throws Exception {
-        RecordInputStream inp = new RecordInputStream(
-                new ByteArrayInputStream(data2)
-        );
-        inp.nextRecord();
-
-        HyperlinkRecord r = new HyperlinkRecord(inp);
-        
-        assertEquals(2, r.getRow());
-        assertEquals(4, r.getColumn());
-        assertEquals(4, r.getXFIndex());
-        
-		assertEquals("Stacie@ABC.com", r.getLabel());
-		assertEquals("mailto:Stacie@ABC.com", r.getUrlString());
-	}
+    }
 }

Modified: poi/branches/ooxml/src/testcases/org/apache/poi/hssf/usermodel/TestBugs.java
URL: http://svn.apache.org/viewvc/poi/branches/ooxml/src/testcases/org/apache/poi/hssf/usermodel/TestBugs.java?rev=627544&r1=627543&r2=627544&view=diff
==============================================================================
--- poi/branches/ooxml/src/testcases/org/apache/poi/hssf/usermodel/TestBugs.java (original)
+++ poi/branches/ooxml/src/testcases/org/apache/poi/hssf/usermodel/TestBugs.java Wed Feb 13 09:34:43 2008
@@ -1010,6 +1010,48 @@
         assertTrue("No Exceptions while reading file", true);
     }
 
+    /**
+     * Bug 42564: Some files from Access were giving a RecordFormatException
+     *  when reading the BOFRecord
+     */
+    public void test42564() throws Exception {
+        FileInputStream in = new FileInputStream(new File(cwd, "42564.xls"));
+        HSSFWorkbook wb = new HSSFWorkbook(in);
+        in.close();
+
+        assertTrue("No Exceptions while reading file", true);
+
+        //serialize and read again
+        ByteArrayOutputStream out = new ByteArrayOutputStream();
+        wb.write(out);
+        out.close();
+
+        wb = new HSSFWorkbook(new ByteArrayInputStream(out.toByteArray()));
+        assertTrue("No Exceptions while reading file", true);
+    }
+    
+    /**
+     * Bug 42564: Some files from Access also have issues
+     *  with the NameRecord, once you get past the BOFRecord
+     *  issue.
+     * TODO - still broken
+     */
+    public void DISABLEDtest42564Alt() throws Exception {
+        FileInputStream in = new FileInputStream(new File(cwd, "42564-2.xls"));
+        HSSFWorkbook wb = new HSSFWorkbook(in);
+        in.close();
+
+        assertTrue("No Exceptions while reading file", true);
+
+        //serialize and read again
+        ByteArrayOutputStream out = new ByteArrayOutputStream();
+        wb.write(out);
+        out.close();
+
+        wb = new HSSFWorkbook(new ByteArrayInputStream(out.toByteArray()));
+        assertTrue("No Exceptions while reading file", true);
+    }
+
 	/**
 	 * Bug 42618: RecordFormatException reading a file containing
 	 * 	=CHOOSE(2,A2,A3,A4)

Modified: poi/branches/ooxml/src/testcases/org/apache/poi/hssf/usermodel/TestCellStyle.java
URL: http://svn.apache.org/viewvc/poi/branches/ooxml/src/testcases/org/apache/poi/hssf/usermodel/TestCellStyle.java?rev=627544&r1=627543&r2=627544&view=diff
==============================================================================
--- poi/branches/ooxml/src/testcases/org/apache/poi/hssf/usermodel/TestCellStyle.java (original)
+++ poi/branches/ooxml/src/testcases/org/apache/poi/hssf/usermodel/TestCellStyle.java Wed Feb 13 09:34:43 2008
@@ -137,6 +137,35 @@
         assertEquals("FIRST ROW ", 0, s.getFirstRowNum());
 
     }
+    
+    public void testHashEquals() {
+        HSSFWorkbook     wb   = new HSSFWorkbook();
+        HSSFSheet        s    = wb.createSheet();
+        HSSFCellStyle    cs1  = wb.createCellStyle();
+        HSSFCellStyle    cs2  = wb.createCellStyle();
+        HSSFRow row = s.createRow((short)0);
+        HSSFCell cell1 = row.createCell((short)1);
+        HSSFCell cell2 = row.createCell((short)2);
+        
+        cs1.setDataFormat(HSSFDataFormat.getBuiltinFormat("m/d/yy"));
+        cs2.setDataFormat(HSSFDataFormat.getBuiltinFormat("m/dd/yy"));
+        
+        cell1.setCellStyle(cs1);
+        cell1.setCellValue(new Date());
+        
+        cell2.setCellStyle(cs2);
+        cell2.setCellValue(new Date());
+        
+        assertEquals(cs1.hashCode(), cs1.hashCode());
+        assertEquals(cs2.hashCode(), cs2.hashCode());
+        assertTrue(cs1.equals(cs1));
+        assertTrue(cs2.equals(cs2));
+        
+        // Change cs1, hash will alter
+        int hash1 = cs1.hashCode();
+        cs1.setDataFormat(HSSFDataFormat.getBuiltinFormat("m/dd/yy"));
+        assertFalse(hash1 == cs1.hashCode());
+    }
 
     /**
      * TEST NAME:  Test Write Sheet Style <P>

Modified: poi/branches/ooxml/src/testcases/org/apache/poi/hssf/usermodel/TestHSSFCell.java
URL: http://svn.apache.org/viewvc/poi/branches/ooxml/src/testcases/org/apache/poi/hssf/usermodel/TestHSSFCell.java?rev=627544&r1=627543&r2=627544&view=diff
==============================================================================
--- poi/branches/ooxml/src/testcases/org/apache/poi/hssf/usermodel/TestHSSFCell.java (original)
+++ poi/branches/ooxml/src/testcases/org/apache/poi/hssf/usermodel/TestHSSFCell.java Wed Feb 13 09:34:43 2008
@@ -320,8 +320,8 @@
 
         assertEquals("Foo", link.getLabel());
         assertEquals("http://poi.apache.org/", link.getAddress());
-        assertEquals(4, link.getRow());
-        assertEquals(0, link.getColumn());
+        assertEquals(4, link.getFirstRow());
+        assertEquals(0, link.getFirstColumn());
     }
     
     /**
@@ -339,16 +339,16 @@
         assertNotNull(link1);
         assertEquals("Foo", link1.getLabel());
         assertEquals("http://poi.apache.org/", link1.getAddress());
-        assertEquals(4, link1.getRow());
-        assertEquals(0, link1.getColumn());
+        assertEquals(4, link1.getFirstRow());
+        assertEquals(0, link1.getFirstColumn());
 
         HSSFCell cell2 = sheet.getRow(8).getCell((short)1);
         HSSFHyperlink link2 = cell2.getHyperlink();
         assertNotNull(link2);
         assertEquals("Bar", link2.getLabel());
-        assertEquals("http://poi.apache.org/", link2.getAddress());
-        assertEquals(8, link2.getRow());
-        assertEquals(1, link2.getColumn());
+        assertEquals("http://poi.apache.org/hssf/", link2.getAddress());
+        assertEquals(8, link2.getFirstRow());
+        assertEquals(1, link2.getFirstColumn());
 
     }
     

Modified: poi/branches/ooxml/src/testcases/org/apache/poi/hssf/usermodel/TestHSSFDateUtil.java
URL: http://svn.apache.org/viewvc/poi/branches/ooxml/src/testcases/org/apache/poi/hssf/usermodel/TestHSSFDateUtil.java?rev=627544&r1=627543&r2=627544&view=diff
==============================================================================
--- poi/branches/ooxml/src/testcases/org/apache/poi/hssf/usermodel/TestHSSFDateUtil.java (original)
+++ poi/branches/ooxml/src/testcases/org/apache/poi/hssf/usermodel/TestHSSFDateUtil.java Wed Feb 13 09:34:43 2008
@@ -197,6 +197,29 @@
     }
     
     /**
+     * Tests that we deal with timezones properly
+     */
+    public void testCalendarConversion() {
+        GregorianCalendar date = new GregorianCalendar(2002, 0, 1, 12, 1, 1);
+        Date expected = date.getTime();
+        double expectedExcel = HSSFDateUtil.getExcelDate(expected);
+
+        // Iteratating over the hours exposes any rounding issues.
+        for (int hour = -12; hour <= 12; hour++)
+        {
+            String id = "GMT" + (hour < 0 ? "" : "+") + hour + ":00";
+            date.setTimeZone(TimeZone.getTimeZone(id));
+            date.set(Calendar.HOUR_OF_DAY, 12);
+            double excelDate = HSSFDateUtil.getExcelDate(date, false);
+            Date javaDate = HSSFDateUtil.getJavaDate(excelDate);
+
+            // Should match despite timezone
+            assertEquals("Checking timezone " + id, expected.getTime(), javaDate.getTime());
+        }
+    }
+    
+    
+    /**
      * Tests that we correctly detect date formats as such
      */
     public void testIdentifyDateFormats() {
@@ -228,6 +251,7 @@
     			"yyyy-mm-dd", "yyyy/mm/dd", "yy/mm/dd", "yy/mmm/dd",
     			"dd/mm/yy", "dd/mm/yyyy", "dd/mmm/yy",
     			"dd-mm-yy", "dd-mm-yyyy",
+    			"DD-MM-YY", "DD-mm-YYYY",
     			"dd\\-mm\\-yy", // Sometimes escaped
     			
     			// These crazy ones are valid
@@ -242,15 +266,33 @@
     		assertTrue( HSSFDateUtil.isADateFormat(formatId, formats[i]) );
     	}
     	
+    	// Then time based ones too
+    	formats = new String[] {
+    			"yyyy-mm-dd hh:mm:ss", "yyyy/mm/dd HH:MM:SS", 
+    			"mm/dd HH:MM", "yy/mmm/dd SS",
+    	};
+    	for(int i=0; i<formats.length; i++) {
+    		assertTrue( HSSFDateUtil.isADateFormat(formatId, formats[i]) );
+    	}
+    	
     	// Then invalid ones
     	formats = new String[] {
-    			"yyyy:mm:dd", 
+    			"yyyy*mm*dd", 
     			"0.0", "0.000",
     			"0%", "0.0%",
     			"", null
     	};
     	for(int i=0; i<formats.length; i++) {
     		assertFalse( HSSFDateUtil.isADateFormat(formatId, formats[i]) );
+    	}
+    	
+    	// And these are ones we probably shouldn't allow,
+    	//  but would need a better regexp
+    	formats = new String[] {
+    			"yyyy:mm:dd", 
+    	};
+    	for(int i=0; i<formats.length; i++) {
+    	//	assertFalse( HSSFDateUtil.isADateFormat(formatId, formats[i]) );
     	}
     }
 



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