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