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 }