| package parsers; |
| |
| import java.io.ByteArrayInputStream; |
| import javax.xml.parsers.SAXParser; |
| import javax.xml.parsers.SAXParserFactory; |
| |
| import org.testng.annotations.DataProvider; |
| import org.testng.annotations.Listeners; |
| import org.testng.annotations.Test; |
| import org.xml.sax.SAXParseException; |
| import org.xml.sax.helpers.DefaultHandler; |
| |
| /** |
| * @test |
| * @bug 8072081 |
| * @library /javax/xml/jaxp/libs /javax/xml/jaxp/unittest |
| * @run testng/othervm -DrunSecMngr=true parsers.SupplementaryChars |
| * @run testng/othervm parsers.SupplementaryChars |
| * @summary verifies that supplementary characters are supported as character |
| * data in xml 1.0, and also names in xml 1.1. |
| * |
| * Joe Wang (huizhe.wang@oracle.com) |
| */ |
| |
| @Listeners({jaxp.library.BasePolicy.class}) |
| public class SupplementaryChars { |
| |
| @Test(dataProvider = "supported") |
| public void test(String xml) throws Exception { |
| ByteArrayInputStream stream = new ByteArrayInputStream(xml.getBytes("UTF-8")); |
| getParser().parse(stream, new DefaultHandler()); |
| stream.close(); |
| } |
| |
| @Test(dataProvider = "unsupported", expectedExceptions = SAXParseException.class) |
| public void testInvalid(String xml) throws Exception { |
| ByteArrayInputStream stream = new ByteArrayInputStream(xml.getBytes("UTF-8")); |
| getParser().parse(stream, new DefaultHandler()); |
| stream.close(); |
| } |
| |
| @DataProvider(name = "supported") |
| public Object[][] supported() { |
| |
| return new Object[][] { |
| {"<?xml version=\"1.0\"?><tag>\uD840\uDC0B</tag>"}, |
| {"<?xml version=\"1.0\"?><!-- \uD840\uDC0B --><tag/>"}, |
| {"<?xml version=\"1.1\"?><tag\uD840\uDC0B>in tag name</tag\uD840\uDC0B>"}, |
| {"<?xml version=\"1.1\"?><tag attr\uD840\uDC0B=\"in attribute\">in attribute name</tag>"}, |
| {"<?xml version=\"1.1\"?><tag>\uD840\uDC0B</tag>"}, |
| {"<?xml version=\"1.1\"?><!-- \uD840\uDC0B --><dontCare/>"} |
| }; |
| } |
| |
| @DataProvider(name = "unsupported") |
| public Object[][] unsupported() { |
| return new Object[][] { |
| {"<?xml version=\"1.0\"?><tag\uD840\uDC0B>in tag name</tag\uD840\uDC0B>"}, |
| {"<?xml version=\"1.0\"?><tag attr\uD840\uDC0B=\"in attribute\">in attribute name</tag>"} |
| }; |
| } |
| |
| private SAXParser getParser() { |
| SAXParser parser = null; |
| try { |
| SAXParserFactory factory = SAXParserFactory.newInstance(); |
| parser = factory.newSAXParser(); |
| } catch (Exception e) { |
| throw new RuntimeException(e.getMessage()); |
| } |
| return parser; |
| } |
| } |