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