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  * @bug 8072081
  15  * @summary verifies that supplementary characters are supported as character
  16  * data in xml 1.0, and also names in xml 1.1.
  17  *
  18  * Joe Wang (huizhe.wang@oracle.com)
  19  */
  20 
  21 @Listeners({jaxp.library.BasePolicy.class})
  22 public class SupplementaryChars {
  23 
  24     @Test(dataProvider = "supported")
  25     public void test(String xml) throws Exception {
  26         ByteArrayInputStream stream = new ByteArrayInputStream(xml.getBytes("UTF-8"));
  27         getParser().parse(stream, new DefaultHandler());
  28         stream.close();
  29     }
  30 
  31     @Test(dataProvider = "unsupported", expectedExceptions = SAXParseException.class)
  32     public void testInvalid(String xml) throws Exception {
  33         ByteArrayInputStream stream = new ByteArrayInputStream(xml.getBytes("UTF-8"));
  34         getParser().parse(stream, new DefaultHandler());
  35         stream.close();
  36     }
  37 
  38     @DataProvider(name = "supported")
  39     private Object[][] supported() {
  40 
  41         return new Object[][] {
  42             {"<?xml version=\"1.0\"?><tag>\uD840\uDC0B</tag>"},
  43             {"<?xml version=\"1.0\"?><!-- \uD840\uDC0B --><tag/>"},
  44             {"<?xml version=\"1.1\"?><tag\uD840\uDC0B>in tag name</tag\uD840\uDC0B>"},
  45             {"<?xml version=\"1.1\"?><tag attr\uD840\uDC0B=\"in attribute\">in attribute name</tag>"},
  46             {"<?xml version=\"1.1\"?><tag>\uD840\uDC0B</tag>"},
  47             {"<?xml version=\"1.1\"?><!-- \uD840\uDC0B --><dontCare/>"}
  48         };
  49     }
  50 
  51     @DataProvider(name = "unsupported")
  52     private Object[][] unsupported() {
  53         return new Object[][] {
  54             {"<?xml version=\"1.0\"?><tag\uD840\uDC0B>in tag name</tag\uD840\uDC0B>"},
  55             {"<?xml version=\"1.0\"?><tag attr\uD840\uDC0B=\"in attribute\">in attribute name</tag>"}
  56         };
  57     }
  58 
  59     private SAXParser getParser() {
  60         SAXParser parser = null;
  61         try {
  62             SAXParserFactory factory = SAXParserFactory.newInstance();
  63             parser = factory.newSAXParser();
  64         } catch (Exception e) {
  65             throw new RuntimeException(e.getMessage());
  66         }
  67         return parser;
  68     }
  69 }