OpenJDK / jdk / hs
changeset 29721:8fe81a803610
8074297: substring in XSLT returns wrong character if string contains supplementary chars
Reviewed-by: joehw
author | aefimov |
---|---|
date | Mon, 30 Mar 2015 14:52:24 +0300 |
parents | 374070bf0fdf |
children | 7833837e1481 |
files | jdk/test/javax/xml/jaxp/transform/8062923/XslSubstringTest.java |
diffstat | 1 files changed, 35 insertions(+), 21 deletions(-) [+] |
line wrap: on
line diff
--- a/jdk/test/javax/xml/jaxp/transform/8062923/XslSubstringTest.java Mon Mar 30 16:31:18 2015 +0900 +++ b/jdk/test/javax/xml/jaxp/transform/8062923/XslSubstringTest.java Mon Mar 30 14:52:24 2015 +0300 @@ -23,10 +23,11 @@ /** * @test - * @bug 8062923 8062924 + * @bug 8062923 8062924 8074297 * @run testng XslSubstringTest * @summary Test xsl substring function with negative, Inf and - * NaN length and few other use cases + * NaN length and few other use cases. Also test proper + * processing of supplementary characters by substring function. */ import java.io.StringReader; @@ -39,6 +40,7 @@ import javax.xml.transform.stream.StreamSource; import static org.testng.Assert.assertEquals; +import org.testng.annotations.DataProvider; import org.testng.annotations.Test; public class XslSubstringTest { @@ -50,6 +52,31 @@ + "<xsl:template match='/'><t>"; final String xslPost = "</t></xsl:template></xsl:stylesheet>"; + @DataProvider(name = "GeneralTestsData") + private Object[][] xmls() { + return new Object[][] { + { "|<xsl:value-of select=\"substring('asdf',2, 1)\"/>|", "<t>|s|</t>"}, + { "|<xsl:value-of select=\"substring('asdf',2, 1 div 0)\"/>|", "<t>|sdf|</t>"}, + { "|<xsl:value-of select=\"substring('asdf',2, -0 div 0)\"/>|", "<t>||</t>" }, + { "|<xsl:value-of select=\"substring('asdf',2, 1 div 0)\"/>|", "<t>|sdf|</t>" }, + }; + } + + @DataProvider(name = "SupplementaryCharactersTestData") + private Object[][] bug8074297() { + return new Object[][] { + { "|<xsl:value-of select=\"substring('𠀋ABC', 3)\"/>|", "<t>|BC|</t>"}, + { "|<xsl:value-of select=\"substring('𠀋ABC', 3, 1)\"/>|", "<t>|B|</t>" }, + { "|<xsl:value-of select=\"substring('𠀋ABC', 2, 2)\"/>|", "<t>|AB|</t>"}, + { "|<xsl:value-of select=\"substring('𠀋ABC', 3, 2)\"/>|", "<t>|BC|</t>"}, + { "|<xsl:value-of select=\"substring('𠀋ABC', 3, 4)\"/>|", "<t>|BC|</t>"}, + { "|<xsl:value-of select=\"substring('𠀋ABC', 1, 1)\"/>|", "<t>|𠀋|</t>"}, + { "|<xsl:value-of select=\"substring('𠀋ABC', 2, 1)\"/>|", "<t>|A|</t>"}, + { "|<xsl:value-of select=\"substring('𠀋ABC', 1, 1 div 0)\"/>|", "<t>|𠀋ABC|</t>"}, + { "|<xsl:value-of select=\"substring('𠀋ABC', -10, 1 div 0)\"/>|", "<t>|𠀋ABC|</t>"}, + }; + } + private String testTransform(String xsl) throws Exception { //Prepare sources for transormation Source src = new StreamSource(new StringReader(xml)); @@ -78,27 +105,14 @@ "<t>||</t>"); } - @Test - public void testGeneral1() throws Exception { - assertEquals(testTransform("|<xsl:value-of select=\"substring('asdf',2, 1)\"/>|"), - "<t>|s|</t>"); - } - - @Test - public void testGeneral2() throws Exception { - assertEquals(testTransform("|<xsl:value-of select=\"substring('asdf',2, 1 div 0)\"/>|"), - "<t>|sdf|</t>"); + @Test(dataProvider = "GeneralTestsData") + public void testGeneralAll(String xsl, String result) throws Exception { + assertEquals(testTransform(xsl), result); } - @Test - public void testGeneral3() throws Exception { - assertEquals(testTransform("|<xsl:value-of select=\"substring('asdf',2, -0 div 0)\"/>|"), - "<t>||</t>"); + @Test(dataProvider = "SupplementaryCharactersTestData") + public void testSupplementCharacters(String xsl, String result) throws Exception { + assertEquals(testTransform(xsl), result); } - @Test - public void testGeneral4() throws Exception { - assertEquals(testTransform("|<xsl:value-of select=\"substring('asdf',2, 0 div 0)\"/>|"), - "<t>||</t>"); - } }