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