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 * @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}) 26 public 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 }