blob: 6fb819bf9ec1df8a6ee3e35a2e61cc6ac5896fb4 [file] [log] [blame]
/*
* Copyright (c) 2014, 2016, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License version 2 only, as
* published by the Free Software Foundation.
*
* This code is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
* version 2 for more details (a copy is included in the LICENSE file that
* accompanied this code).
*
* You should have received a copy of the GNU General Public License version
* 2 along with this work; if not, write to the Free Software Foundation,
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
*
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
* or visit www.oracle.com if you need additional information or have any
* questions.
*/
package parsers;
import static jaxp.library.JAXPTestUtilities.getSystemProperty;
import java.io.File;
import java.io.IOException;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import org.testng.Assert;
import org.testng.annotations.BeforeMethod;
import org.testng.annotations.Listeners;
import org.testng.annotations.Test;
import org.w3c.dom.Document;
import org.xml.sax.InputSource;
import org.xml.sax.SAXException;
import org.xml.sax.SAXParseException;
import org.xml.sax.helpers.DefaultHandler;
/*
* @test
* @bug 7157608
* @library /javax/xml/jaxp/libs /javax/xml/jaxp/unittest
* @run testng/othervm -DrunSecMngr=true parsers.Bug7157608Test
* @run testng/othervm parsers.Bug7157608Test
* @summary Test feature standard-uri-conformant works.
*/
@Listeners({jaxp.library.FilePolicy.class})
public class Bug7157608Test {
public static boolean isWindows = false;
static {
if (getSystemProperty("os.name").indexOf("Windows") > -1) {
isWindows = true;
}
};
String xml1, xml2;
@BeforeMethod
public void setUp() throws IOException {
File file1 = new File(getClass().getResource("Bug7157608.xml").getFile());
xml1 = file1.getPath().replace("\\", "\\\\");
File file2 = new File(getClass().getResource("Bug7157608_1.xml").getFile());
xml2 = file2.getPath();
}
// case 1
// standard-uri-confomant is false
// dtd-validation is false
@Test
public void test1() {
if (isWindows) {
try {
ParserSettings ps = new ParserSettings();
DocumentBuilder db = getDocumentBuilder(ps);
InputSource is = new InputSource();
is.setSystemId(xml1);
Document doc = db.parse(is);
System.out.println("test1() :OK");
} catch (Exception e) {
Assert.fail("test1() :NG");
}
}
}
// case 2
// standard-uri-confomant is false
// dtd-validation is true
@Test
public void test2() {
if (isWindows) {
try {
ParserSettings ps = new ParserSettings();
ps.validating = true;
DocumentBuilder db = getDocumentBuilder(ps);
InputSource is = new InputSource(xml2);
Document doc = db.parse(is);
System.out.println("test2() :OK");
} catch (Exception e) {
Assert.fail("test2() :NG");
// logger.info(e.getMessage());
}
}
}
// case 3
// standard-uri-confomant is true
@Test
public void test3() {
if (isWindows) {
try {
ParserSettings ps = new ParserSettings();
ps.standardUriConformant = true;
DocumentBuilder db = getDocumentBuilder(ps);
InputSource is = new InputSource();
is.setSystemId(xml1);
Document doc = db.parse(is);
Assert.fail("test3() :NG");
} catch (IOException e) {
String returnedErr = e.getMessage();
String expectedStr = "Opaque part contains invalid character";
if (returnedErr.indexOf(expectedStr) >= 0) {
System.out.println("test3() :OK");
} else {
Assert.fail("test3() :NG");
}
} catch (Exception e) {
System.out.println("test3() :NG");
}
}
}
// case 4
// standard-uri-confomant is true
// dtd-validation is true
@Test
public void test4() {
if (isWindows) {
try {
ParserSettings ps = new ParserSettings();
ps.standardUriConformant = true;
ps.validating = true;
DocumentBuilder db = getDocumentBuilder(ps);
InputSource is = new InputSource(xml2);
Document doc = db.parse(is);
Assert.fail("test4() :NG");
} catch (IOException e) {
String returnedErr = e.getMessage();
String expectedStr = "Opaque part contains invalid character";
if (returnedErr.indexOf(expectedStr) >= 0) {
System.out.println("test3() :OK");
} else {
Assert.fail("test3() :NG");
}
} catch (Exception e) {
Assert.fail("test4() :NG");
}
}
}
public DocumentBuilder getDocumentBuilder(ParserSettings ps) {
DocumentBuilder db = null;
try {
DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
if (ps.standardUriConformant) {
dbf.setFeature("http://apache.org/xml/features/standard-uri-conformant", true);
}
dbf.setValidating(ps.validating);
db = dbf.newDocumentBuilder();
db.setErrorHandler(new MyHandler());
} catch (Exception e) {
Assert.fail("standard-uri-conformant not recognized");
}
return db;
}
class MyHandler extends DefaultHandler {
@Override
public void warning(SAXParseException e) throws SAXException {
printDetail("**Warning**", e);
}
@Override
public void error(SAXParseException e) throws SAXException {
printDetail("**Error**", e);
throw new SAXException("Error encountered");
}
@Override
public void fatalError(SAXParseException e) throws SAXException {
printDetail("**Fatal Error**", e);
throw new SAXException("Fatal Error encountered");
}
public void printDetail(String msg, SAXParseException e) {
System.out.println(msg);
System.out.println(e.getMessage());
System.out.println(" Line: " + e.getLineNumber());
System.out.println(" Column: " + e.getColumnNumber());
System.out.println(" URI: " + e.getSystemId());
}
}
class ParserSettings {
boolean standardUriConformant = false;
boolean validating = false;
}
}