diff --git a/poi-ooxml/src/test/java/org/apache/poi/ss/tests/util/TestXSSFCellUtilCopy.java b/poi-ooxml/src/test/java/org/apache/poi/ss/tests/util/TestXSSFCellUtilCopy.java index 24e53c68f9..720218ace6 100644 --- a/poi-ooxml/src/test/java/org/apache/poi/ss/tests/util/TestXSSFCellUtilCopy.java +++ b/poi-ooxml/src/test/java/org/apache/poi/ss/tests/util/TestXSSFCellUtilCopy.java @@ -17,8 +17,10 @@ package org.apache.poi.ss.tests.util; +import org.apache.poi.ss.usermodel.RichTextString; import org.apache.poi.ss.usermodel.Workbook; import org.apache.poi.ss.util.BaseTestCellUtilCopy; +import org.apache.poi.xssf.usermodel.XSSFRichTextString; import org.apache.poi.xssf.usermodel.XSSFWorkbook; public class TestXSSFCellUtilCopy extends BaseTestCellUtilCopy { @@ -27,4 +29,15 @@ public class TestXSSFCellUtilCopy extends BaseTestCellUtilCopy { protected Workbook createNewWorkbook() { return new XSSFWorkbook(); } + + @Override + protected boolean compareRichText(RichTextString rts1, RichTextString rts2) { + if (rts1 instanceof XSSFRichTextString && rts2 instanceof XSSFRichTextString) { + XSSFRichTextString xrts1 = (XSSFRichTextString)rts1; + XSSFRichTextString xrts2 = (XSSFRichTextString)rts2; + return xrts1.getCTRst().xmlText().equals(xrts2.getCTRst().xmlText()); + } else { + return super.compareRichText(rts1, rts2); + } + } } diff --git a/poi/src/test/java/org/apache/poi/ss/util/BaseTestCellUtilCopy.java b/poi/src/test/java/org/apache/poi/ss/util/BaseTestCellUtilCopy.java index 1396448a4c..ea214e815d 100644 --- a/poi/src/test/java/org/apache/poi/ss/util/BaseTestCellUtilCopy.java +++ b/poi/src/test/java/org/apache/poi/ss/util/BaseTestCellUtilCopy.java @@ -64,6 +64,26 @@ public abstract class BaseTestCellUtilCopy { assertEquals(CellType.NUMERIC, destCell.getCellType()); } + @Test + public final void testCopyCellFrom_CellCopyPolicy_richTextValue() { + setUp_testCopyCellFrom_CellCopyPolicy(); + Workbook wb = srcCell.getSheet().getWorkbook(); + CreationHelper creationHelper = wb.getCreationHelper(); + RichTextString rts = creationHelper.createRichTextString("text 123"); + Font font = wb.createFont(); + font.setFontHeight((short) 999); + font.setFontName("Muriel"); + rts.applyFont(0, 3, font); + srcCell.setCellFormula(null); + srcCell.setCellValue(rts); + + // Paste values only + final CellCopyPolicy policy = new CellCopyPolicy.Builder().cellFormula(false).build(); + CellUtil.copyCell(srcCell, destCell, policy, new CellCopyContext()); + assertEquals(CellType.STRING, destCell.getCellType()); + assertTrue(compareRichText(rts, destCell.getRichStringCellValue())); + } + @Test public final void testCopyCellFrom_CellCopyPolicy_formulaWithUnregisteredUDF() { setUp_testCopyCellFrom_CellCopyPolicy(); @@ -165,4 +185,7 @@ public abstract class BaseTestCellUtilCopy { protected abstract Workbook createNewWorkbook(); + protected boolean compareRichText(RichTextString rts1, RichTextString rts2) { + return rts1.getString().equals(rts2.getString()); + } }