diff options
author | Dominik Stadler <centic@apache.org> | 2025-01-11 09:23:23 +0000 |
---|---|---|
committer | Dominik Stadler <centic@apache.org> | 2025-01-11 09:23:23 +0000 |
commit | 4f21f5280a8cefd0e04440498dc813a850f6669f (patch) | |
tree | 5d24183cd601fd0023b096409feeb677f3247a87 /poi/src/test/java/org | |
parent | 3aad12021af40a6c46f5c2773ed2ab5c2f386e07 (diff) | |
download | poi-4f21f5280a8cefd0e04440498dc813a850f6669f.tar.gz poi-4f21f5280a8cefd0e04440498dc813a850f6669f.zip |
Bug 69265: Add test which verifies that Hyperlink Type "Email" is not supported for HSSF
Also update JavaDoc slightly to describe
the special handling of HyperlinkType.EMAIL
git-svn-id: https://svn.apache.org/repos/asf/poi/trunk@1923050 13f79535-47bb-0310-9956-ffa450edef68
Diffstat (limited to 'poi/src/test/java/org')
-rw-r--r-- | poi/src/test/java/org/apache/poi/ss/usermodel/BaseTestHyperlink.java | 117 |
1 files changed, 117 insertions, 0 deletions
diff --git a/poi/src/test/java/org/apache/poi/ss/usermodel/BaseTestHyperlink.java b/poi/src/test/java/org/apache/poi/ss/usermodel/BaseTestHyperlink.java index e5ef5312d9..76f11890c0 100644 --- a/poi/src/test/java/org/apache/poi/ss/usermodel/BaseTestHyperlink.java +++ b/poi/src/test/java/org/apache/poi/ss/usermodel/BaseTestHyperlink.java @@ -21,11 +21,14 @@ import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertNotEquals; import static org.junit.jupiter.api.Assertions.assertNotSame; +import java.io.ByteArrayInputStream; +import java.io.ByteArrayOutputStream; import java.io.IOException; import java.util.List; import org.apache.poi.common.usermodel.HyperlinkType; import org.apache.poi.ss.ITestDataProvider; +import org.apache.poi.ss.SpreadsheetVersion; import org.junit.jupiter.api.Test; /** @@ -142,5 +145,119 @@ public abstract class BaseTestHyperlink { wb.close(); } + @Test + void testHyperlinkEmailType69265_https() throws IOException { + boolean isHSSF = _testDataProvider.getSpreadsheetVersion() == SpreadsheetVersion.EXCEL97; + + try (ByteArrayOutputStream out = new ByteArrayOutputStream()) { + try (Workbook workbook = _testDataProvider.createWorkbook()) { + Sheet sheet = workbook.createSheet("Hyperlink Example"); + + Row row = sheet.createRow(0); + Cell cell = row.createCell(0); + + // Create a hyperlink + CreationHelper createHelper = workbook.getCreationHelper(); + Hyperlink hyperlink = createHelper.createHyperlink(HyperlinkType.EMAIL); + hyperlink.setLabel("mylabel"); + hyperlink.setAddress("https://www.example.com"); + + // Set the label and the hyperlink + cell.setCellValue("Click here"); + cell.setHyperlink(hyperlink); + + // Get the cell value and hyperlink address + assertEquals("Click here", cell.getStringCellValue()); + Hyperlink cellHyperlink = cell.getHyperlink(); + assertEquals("https://www.example.com", cellHyperlink.getAddress()); + + // HSSF does not support Email, thus falls back to URL, HSSF also uses a hardcoded "label" + assertEquals( + isHSSF ? HyperlinkType.URL : HyperlinkType.EMAIL, + cellHyperlink.getType()); + assertEquals( + isHSSF ? "url" : "mylabel", + cellHyperlink.getLabel()); + + workbook.write(out); + } + + out.flush(); + + try (Workbook wbBack = WorkbookFactory.create(new ByteArrayInputStream(out.toByteArray()))) { + Sheet sheet = wbBack.getSheet("Hyperlink Example"); + Row row = sheet.getRow(0); + Cell cell = row.getCell(0); + + Hyperlink hyperlink = cell.getHyperlink(); + + // when not using "mailto:", it is reverted back to URL currently + assertEquals( + HyperlinkType.URL, + hyperlink.getType()); + assertEquals( + isHSSF ? "url" : "mylabel", + hyperlink.getLabel()); + } + } + } + + @Test + void testHyperlinkEmailType69265_mailto() throws IOException { + boolean isHSSF = _testDataProvider.getSpreadsheetVersion() == SpreadsheetVersion.EXCEL97; + + try (ByteArrayOutputStream out = new ByteArrayOutputStream()) { + try (Workbook workbook = _testDataProvider.createWorkbook()) { + Sheet sheet = workbook.createSheet("Hyperlink Example"); + + Row row = sheet.createRow(0); + Cell cell = row.createCell(0); + + // Create a hyperlink + CreationHelper createHelper = workbook.getCreationHelper(); + Hyperlink hyperlink = createHelper.createHyperlink(HyperlinkType.EMAIL); + hyperlink.setLabel("mylabel"); + hyperlink.setAddress("mailto://www.example.com"); + + // Set the label and the hyperlink + cell.setCellValue("Click here"); + cell.setHyperlink(hyperlink); + + // Get the cell value and hyperlink address + assertEquals("Click here", cell.getStringCellValue()); + Hyperlink cellHyperlink = cell.getHyperlink(); + assertEquals("mailto://www.example.com", cellHyperlink.getAddress()); + + // "mailto:" is converted to type "EMAIL" + assertEquals( + HyperlinkType.EMAIL, + cellHyperlink.getType()); + assertEquals( + isHSSF ? "url" : "mylabel", + cellHyperlink.getLabel()); + + workbook.write(out); + } + + out.flush(); + + try (Workbook wbBack = WorkbookFactory.create(new ByteArrayInputStream(out.toByteArray()))) { + Sheet sheet = wbBack.getSheet("Hyperlink Example"); + Row row = sheet.getRow(0); + Cell cell = row.getCell(0); + + Hyperlink hyperlink = cell.getHyperlink(); + + // "mailto:" is converted to type "EMAIL" + assertEquals( + HyperlinkType.EMAIL, + hyperlink.getType()); + assertEquals( + isHSSF ? "url" : "mylabel", + hyperlink.getLabel()); + } + } + } + public abstract Hyperlink copyHyperlink(Hyperlink link); } |