1 /* 2 * Copyright (c) 1999, 2016, Oracle and/or its affiliates. All rights reserved. 3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. 4 * 5 * This code is free software; you can redistribute it and/or modify it 6 * under the terms of the GNU General Public License version 2 only, as 7 * published by the Free Software Foundation. 8 * 9 * This code is distributed in the hope that it will be useful, but WITHOUT 10 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or 11 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License 12 * version 2 for more details (a copy is included in the LICENSE file that 13 * accompanied this code). 14 * 15 * You should have received a copy of the GNU General Public License version 16 * 2 along with this work; if not, write to the Free Software Foundation, 17 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. 18 * 19 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA 20 * or visit www.oracle.com if you need additional information or have any 21 * questions. 22 */ 23 24 package javax.xml.parsers.ptests; 25 26 import static org.testng.Assert.assertFalse; 27 import static org.testng.Assert.assertNotNull; 28 import static org.testng.Assert.assertNull; 29 import static org.testng.Assert.assertTrue; 30 31 import javax.xml.parsers.SAXParser; 32 import javax.xml.parsers.SAXParserFactory; 33 34 import org.testng.annotations.DataProvider; 35 import org.testng.annotations.Listeners; 36 import org.testng.annotations.Test; 37 import org.xml.sax.SAXException; 38 import org.xml.sax.SAXNotSupportedException; 39 import org.xml.sax.ext.DeclHandler; 40 import org.xml.sax.ext.LexicalHandler; 41 42 /** 43 * Class contains the test cases for SAXParser API 44 */ 45 /* 46 * @test 47 * @library /javax/xml/jaxp/libs 48 * @run testng/othervm -DrunSecMngr=true javax.xml.parsers.ptests.SAXParserTest02 49 * @run testng/othervm javax.xml.parsers.ptests.SAXParserTest02 50 */ 51 @Listeners({jaxp.library.BasePolicy.class}) 52 public class SAXParserTest02 { 53 private static final String DOM_NODE = "http://xml.org/sax/properties/dom-node"; 54 private static final String XML_STRING = "http://xml.org/sax/properties/xml-string"; 55 private static final String DECL_HANDLER = "http://xml.org/sax/properties/declaration-handler"; 56 private static final String LEXICAL_HANDLER = "http://xml.org/sax/properties/lexical-handler"; 57 58 /** 59 * Provide SAXParser. 60 * 61 * @return a data provider contains a SAXParser instance. 62 * @throws Exception If any errors occur. 63 */ 64 @DataProvider(name = "parser-provider") 65 public Object[][] getParser() throws Exception { 66 SAXParserFactory spf = SAXParserFactory.newInstance(); 67 SAXParser saxparser = spf.newSAXParser(); 68 return new Object[][] { { saxparser } }; 69 } 70 71 /** 72 * Test to test the default functionality (No validation) of the parser. 73 * 74 * @param saxparser a SAXParser instance. 75 */ 76 @Test(dataProvider = "parser-provider") 77 public void testValidate01(SAXParser saxparser) { 78 assertFalse(saxparser.isValidating()); 79 } 80 81 /** 82 * Test to test the functionality of setValidating and isValidating 83 * methods. 84 * 85 * @throws Exception If any errors occur. 86 */ 87 @Test 88 public void testValidate02() throws Exception { 89 SAXParserFactory spf = SAXParserFactory.newInstance(); 90 spf.setValidating(true); 91 spf.newSAXParser(); 92 assertTrue(spf.isValidating()); 93 } 94 95 /** 96 * Test isNamespaceAware() method. By default, namespaces are 97 * not supported. 98 * 99 * @param saxparser a SAXParser instance. 100 */ 101 @Test(dataProvider = "parser-provider") 102 public void testNamespace01(SAXParser saxparser) { 103 assertFalse(saxparser.isNamespaceAware()); 104 } 105 106 /** 107 * Test case to test setnamespaceAware() method. 108 * 109 * @throws Exception If any errors occur. 110 */ 111 @Test 112 public void testNamespace02() throws Exception { 113 SAXParserFactory spf = SAXParserFactory.newInstance(); 114 spf.setNamespaceAware(true); 115 SAXParser saxparser = spf.newSAXParser(); 116 assertTrue(saxparser.isNamespaceAware()); 117 } 118 119 /** 120 * Test case to test if the getParser() method returns instance of Parser. 121 * 122 * @param saxparser a SAXParser instance. 123 * @throws SAXException If any parse errors occur. 124 */ 125 @Test(dataProvider = "parser-provider") 126 public void testParser01(SAXParser saxparser) throws SAXException { 127 assertNotNull(saxparser.getParser()); 128 } 129 130 /** 131 * Test case to test if the getXMLReader() method returns instance of 132 * XMLReader. 133 * 134 * @param saxparser a SAXParser instance. 135 * @throws SAXException If any parse errors occur. 136 */ 137 @Test(dataProvider = "parser-provider") 138 public void testXmlReader01(SAXParser saxparser) throws SAXException { 139 assertNotNull(saxparser.getXMLReader()); 140 } 141 142 /** 143 * Test whether the xml-string property is not supported. 144 * 145 * @param saxparser a SAXParser instance. 146 * @throws SAXException If any parse errors occur. 147 */ 148 @Test(expectedExceptions = SAXNotSupportedException.class, 149 dataProvider = "parser-provider") 150 public void testProperty01(SAXParser saxparser) throws SAXException { 151 saxparser.getProperty(XML_STRING); 152 } 153 154 /** 155 * Test whether the dom-node property is not supported. 156 * 157 * @param saxparser a SAXParser instance. 158 * @throws SAXException If any parse errors occur. 159 */ 160 @Test(expectedExceptions = SAXNotSupportedException.class, 161 dataProvider = "parser-provider") 162 public void testProperty02(SAXParser saxparser) throws SAXException { 163 saxparser.getProperty(DOM_NODE); 164 } 165 166 /** 167 * Test the default lexical-handler not exists. 168 * 169 * @param saxparser a SAXParser instance. 170 * @throws SAXException If any parse errors occur. 171 */ 172 @Test(dataProvider = "parser-provider") 173 public void testProperty03(SAXParser saxparser) throws SAXException { 174 assertNull(saxparser.getProperty(LEXICAL_HANDLER)); 175 } 176 177 /** 178 * Test the default declaration-handler not exists. 179 * 180 * @param saxparser a SAXParser instance. 181 * @throws SAXException If any parse errors occur. 182 */ 183 @Test(dataProvider = "parser-provider") 184 public void testProperty04(SAXParser saxparser) throws SAXException { 185 assertNull(saxparser.getProperty(DECL_HANDLER)); 186 } 187 188 /** 189 * Test to set and get the lexical-handler. 190 * 191 * @param saxparser a SAXParser instance. 192 * @throws SAXException If any parse errors occur. 193 */ 194 @Test(dataProvider = "parser-provider") 195 public void testProperty05(SAXParser saxparser) throws SAXException { 196 MyLexicalHandler myLexicalHandler = new MyLexicalHandler(); 197 saxparser.setProperty(LEXICAL_HANDLER, myLexicalHandler); 198 assertTrue(saxparser.getProperty(LEXICAL_HANDLER) instanceof LexicalHandler); 199 } 200 201 /** 202 * Test to set and get the declaration-handler. 203 * 204 * @param saxparser a SAXParser instance. 205 * @throws SAXException If any parse errors occur. 206 */ 207 @Test(dataProvider = "parser-provider") 208 public void testProperty06(SAXParser saxparser) throws SAXException { 209 MyDeclHandler myDeclHandler = new MyDeclHandler(); 210 saxparser.setProperty(DECL_HANDLER, myDeclHandler); 211 assertTrue(saxparser.getProperty(DECL_HANDLER) instanceof DeclHandler); 212 } 213 214 /** 215 * Customized LexicalHandler used for test. An empty implementation for 216 * LexicalHandler. 217 */ 218 private class MyLexicalHandler implements LexicalHandler { 219 220 @Override 221 public void comment(char[] ch, int start, int length) { 222 } 223 224 @Override 225 public void endCDATA() { 226 } 227 228 @Override 229 public void endDTD() { 230 } 231 232 @Override 233 public void endEntity(String name) { 234 } 235 236 @Override 237 public void startCDATA() { 238 } 239 240 @Override 241 public void startDTD(String name, String publicId, String systemId) { 242 } 243 244 @Override 245 public void startEntity(String name) { 246 } 247 } 248 249 /** 250 * Customized DeclHandler used for test. An empty implementation for 251 * DeclHandler. 252 */ 253 private class MyDeclHandler implements DeclHandler { 254 255 @Override 256 public void attributeDecl(String eName, String aName, String type, String valueDefault, String value) { 257 } 258 259 @Override 260 public void elementDecl(String name, String model) { 261 } 262 263 @Override 264 public void externalEntityDecl(String name, String publicId, String systemId) { 265 } 266 267 @Override 268 public void internalEntityDecl(String name, String value) { 269 } 270 } 271 }