1 package parsers; 2 3 import java.io.ByteArrayInputStream; 4 import javax.xml.parsers.SAXParser; 5 import javax.xml.parsers.SAXParserFactory; 6 7 import org.testng.annotations.DataProvider; 8 import org.testng.annotations.Listeners; 9 import org.testng.annotations.Test; 10 import org.xml.sax.SAXParseException; 11 import org.xml.sax.helpers.DefaultHandler; 12 13 /** 14 * @bug 8072081 15 * @summary verifies that supplementary characters are supported as character 16 * data in xml 1.0, and also names in xml 1.1. 17 * 18 * Joe Wang (huizhe.wang@oracle.com) 19 */ 20 21 @Listeners({jaxp.library.BasePolicy.class}) 22 public class SupplementaryChars { 23 24 @Test(dataProvider = "supported") 25 public void test(String xml) throws Exception { 26 ByteArrayInputStream stream = new ByteArrayInputStream(xml.getBytes("UTF-8")); 27 getParser().parse(stream, new DefaultHandler()); 28 stream.close(); 29 } 30 31 @Test(dataProvider = "unsupported", expectedExceptions = SAXParseException.class) 32 public void testInvalid(String xml) throws Exception { 33 ByteArrayInputStream stream = new ByteArrayInputStream(xml.getBytes("UTF-8")); 34 getParser().parse(stream, new DefaultHandler()); 35 stream.close(); 36 } 37 38 @DataProvider(name = "supported") 39 private Object[][] supported() { 40 41 return new Object[][] { 42 {"<?xml version=\"1.0\"?><tag>\uD840\uDC0B</tag>"}, 43 {"<?xml version=\"1.0\"?><!-- \uD840\uDC0B --><tag/>"}, 44 {"<?xml version=\"1.1\"?><tag\uD840\uDC0B>in tag name</tag\uD840\uDC0B>"}, 45 {"<?xml version=\"1.1\"?><tag attr\uD840\uDC0B=\"in attribute\">in attribute name</tag>"}, 46 {"<?xml version=\"1.1\"?><tag>\uD840\uDC0B</tag>"}, 47 {"<?xml version=\"1.1\"?><!-- \uD840\uDC0B --><dontCare/>"} 48 }; 49 } 50 51 @DataProvider(name = "unsupported") 52 private Object[][] unsupported() { 53 return new Object[][] { 54 {"<?xml version=\"1.0\"?><tag\uD840\uDC0B>in tag name</tag\uD840\uDC0B>"}, 55 {"<?xml version=\"1.0\"?><tag attr\uD840\uDC0B=\"in attribute\">in attribute name</tag>"} 56 }; 57 } 58 59 private SAXParser getParser() { 60 SAXParser parser = null; 61 try { 62 SAXParserFactory factory = SAXParserFactory.newInstance(); 63 parser = factory.newSAXParser(); 64 } catch (Exception e) { 65 throw new RuntimeException(e.getMessage()); 66 } 67 return parser; 68 } 69 }