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