blob: 0e4f0aa22f5635f75d81446bec3324947a066763 [file] [log] [blame]
/*
* Copyright (c) 2014, 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 stream.XMLStreamWriterTest;
import java.io.StringWriter;
import javax.xml.stream.XMLOutputFactory;
import javax.xml.stream.XMLStreamReader;
import javax.xml.stream.XMLStreamWriter;
import org.testng.Assert;
import org.testng.annotations.Listeners;
import org.testng.annotations.Test;
import util.BaseStAXUT;
/*
* @test
* @bug 6675332
* @library /javax/xml/jaxp/libs /javax/xml/jaxp/unittest
* @run testng/othervm -DrunSecMngr=true stream.XMLStreamWriterTest.Bug6675332Test
* @run testng/othervm stream.XMLStreamWriterTest.Bug6675332Test
* @summary Test XMLStreamWriter writeAttribute when IS_REPAIRING_NAMESPACES is true.
*/
@Listeners({jaxp.library.BasePolicy.class})
public class Bug6675332Test extends BaseStAXUT {
private static final XMLOutputFactory XML_OUTPUT_FACTORY = XMLOutputFactory.newInstance();
@Test
public void test() {
final String URL_P1 = "http://p1.org";
final String URL_DEF = "urn:default";
final String ATTR_VALUE = "'value\"";
final String ATTR_VALUE2 = "<tag>";
final String TEXT = " some text\n";
XML_OUTPUT_FACTORY.setProperty(XMLOutputFactory.IS_REPAIRING_NAMESPACES, Boolean.TRUE);
final String EXPECTED_OUTPUT = "<?xml version=\"1.0\" encoding=\"UTF-8\"?><root></root>";
XMLStreamWriter w = null;
StringWriter strw = new StringWriter();
try {
w = XML_OUTPUT_FACTORY.createXMLStreamWriter(strw);
w.writeStartDocument();
/*
* Calling this method should be optional; but if we call it,
* exceptation is that it does properly bind the prefix and URL as
* the 'preferred' combination. In this case we'll just try to make
* URL bound as the default namespace
*/
w.setDefaultNamespace(URL_DEF);
w.writeStartElement(URL_DEF, "test"); // root
/*
* And let's further make element and attribute(s) belong to that
* same namespace
*/
w.writeStartElement("", "leaf", URL_DEF); // 1st leaf
w.writeAttribute("", URL_DEF, "attr", ATTR_VALUE);
w.writeAttribute(URL_DEF, "attr2", ATTR_VALUE);
w.writeEndElement();
// w.writeEmptyElement("", "leaf"); // 2nd leaf; in empty/no
// namespace!
w.writeStartElement(URL_DEF, "leaf"); // 3rd leaf
// w.writeAttribute("", "attr2", ATTR_VALUE2); // in empty/no
// namespace
w.writeEndElement();
w.writeEndElement(); // root elem
w.writeEndDocument();
w.close();
System.out.println("\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\\n");
System.out.println(strw.toString());
// And then let's parse and verify it all:
// System.err.println("testAttributes: doc = '"+strw+"'");
XMLStreamReader sr = constructNsStreamReader(strw.toString());
assertTokenType(START_DOCUMENT, sr.getEventType(), sr);
// root element
assertTokenType(START_ELEMENT, sr.next(), sr);
Assert.assertEquals("test", sr.getLocalName());
Assert.assertEquals(URL_DEF, sr.getNamespaceURI());
// first leaf:
assertTokenType(START_ELEMENT, sr.next(), sr);
Assert.assertEquals("leaf", sr.getLocalName());
Assert.assertEquals(URL_DEF, sr.getNamespaceURI());
System.out.println(sr.getAttributeLocalName(0));
System.out.println(sr.getAttributeLocalName(1));
Assert.assertEquals(2, sr.getAttributeCount());
Assert.assertEquals("attr", sr.getAttributeLocalName(0));
String uri = sr.getAttributeNamespace(0);
if (!URL_DEF.equals(uri)) {
Assert.fail("Expected attribute 'attr' to have NS '" + URL_DEF + "', was " + valueDesc(uri) + "; input = '" + strw + "'");
}
Assert.assertEquals(ATTR_VALUE, sr.getAttributeValue(0));
assertTokenType(END_ELEMENT, sr.next(), sr);
Assert.assertEquals("leaf", sr.getLocalName());
Assert.assertEquals(URL_DEF, sr.getNamespaceURI());
// 2nd/empty leaf
/**
* assertTokenType(START_ELEMENT, sr.next(), sr);
* assertEquals("leaf", sr.getLocalName()); assertNoNsURI(sr);
* assertTokenType(END_ELEMENT, sr.next(), sr); assertEquals("leaf",
* sr.getLocalName()); assertNoNsURI(sr);
*/
// third leaf
assertTokenType(START_ELEMENT, sr.next(), sr);
Assert.assertEquals("leaf", sr.getLocalName());
Assert.assertEquals(URL_DEF, sr.getNamespaceURI());
/*
* attr in 3rd leaf, in empty/no namespace assertEquals(1,
* sr.getAttributeCount()); assertEquals("attr2",
* sr.getAttributeLocalName(0));
* assertNoAttrNamespace(sr.getAttributeNamespace(0));
* assertEquals(ATTR_VALUE2, sr.getAttributeValue(0));
*/
assertTokenType(END_ELEMENT, sr.next(), sr);
Assert.assertEquals("leaf", sr.getLocalName());
Assert.assertEquals(URL_DEF, sr.getNamespaceURI());
// closing root element
assertTokenType(END_ELEMENT, sr.next(), sr);
Assert.assertEquals("test", sr.getLocalName());
Assert.assertEquals(URL_DEF, sr.getNamespaceURI());
assertTokenType(END_DOCUMENT, sr.next(), sr);
} catch (Exception e) {
e.printStackTrace();
Assert.fail(e.toString());
}
}
}