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")
test(String xml)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)
testInvalid(String xml)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")
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")
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 
getParser()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