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