/*******************************************************************************
* Copyright (c) 2015 Tasktop Technologies and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
* David Green - initial API and implementation
*******************************************************************************/
package org.eclipse.mylyn.wikitext.util;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNull;
import java.io.StringWriter;
import org.eclipse.mylyn.wikitext.util.DefaultXmlStreamWriter;
import org.junit.Test;
public class DefaultXmlStreamWriterTest {
private final StringWriter out = new StringWriter();
private final DefaultXmlStreamWriter writer = new DefaultXmlStreamWriter(out);
@Test
public void elementWithAttributes() {
writer.writeStartDocument();
writer.writeStartElement("test");
writer.writeAttribute("a", "test");
writer.writeAttribute("b", "test");
writer.writeEndElement();
assertXml("<?xml version='1.0' ?><test a=\"test\" b=\"test\"></test>");
}
@Test
public void elementWithAttributesNs() {
writer.setPrefix("pf", "uri:urn:test");
writer.writeStartDocument("utf-8", "1.1");
writer.writeStartElement("test");
writer.writeNamespace("pf", "uri:urn:test");
writer.writeNamespace("px", "uri:urn:test2");
writer.writeAttribute("uri:urn:test", "a", "testv");
writer.writeAttribute("px", "uri:urn:test2", "a", "testv");
writer.writeAttribute("b", "test");
writer.writeEndElement();
assertXml("<?xml version='1.1' encoding='utf-8' ?><test xmlns:pf=\"uri:urn:test\" xmlns:px=\"uri:urn:test2\" pf:a=\"testv\" px:a=\"testv\" b=\"test\"></test>");
}
@Test
public void elementStartDocumentWithVersion() {
writer.writeStartDocument("1.1");
writer.writeEmptyElement("test");
writer.writeEndDocument();
writer.close();
assertXml("<?xml version='1.1' ?><test/>");
}
@Test
public void namespaces() {
assertNull(writer.getPrefix("uri:urn:test"));
writer.setPrefix("pf", "uri:urn:test");
assertEquals("pf", writer.getPrefix("uri:urn:test"));
}
@Test
public void defaultNamespace() {
writer.setDefaultNamespace("uri:urn:test");
writer.writeStartDocument();
writer.writeEmptyElement("uri:urn:test", "test");
writer.writeNamespace("", "uri:urn:test");
assertXml("<?xml version='1.0' ?><test xmlns=\"uri:urn:test\"/>");
}
@Test
public void entityReference() {
writer.writeStartDocument();
writer.writeStartElement("test");
writer.writeCharacters("some text");
writer.writeEntityRef("#xa");
writer.writeEndElement();
writer.writeEndDocument();
writer.close();
assertXml("<?xml version='1.0' ?><test>some text
</test>");
}
@Test
public void emptyElementWithNamespace() {
writer.writeStartDocument();
writer.writeEmptyElement("a", "test", "uri:urn:a");
writer.writeNamespace("a", "uri:urn:a");
assertXml("<?xml version='1.0' ?><a:test xmlns:a=\"uri:urn:a\"/>");
}
@Test
public void writeDefaultNamespace() {
writer.writeStartDocument();
writer.writeStartElement("uri:urn:a", "test");
writer.writeDefaultNamespace("uri:urn:a");
writer.writeCharacters("test it");
writer.writeEndElement();
writer.writeEndDocument();
writer.close();
assertXml("<?xml version='1.0' ?><test xmlns=\"uri:urn:a\">test it</test>");
}
@Test
public void writeElementNsUriAndPrefix() {
writer.writeStartDocument();
writer.writeStartElement("p", "test", "uri:urn:a");
writer.writeNamespace("p", "uri:urn:a");
writer.writeCharacters("test it");
writer.writeEndElement();
assertXml("<?xml version='1.0' ?><p:test xmlns:p=\"uri:urn:a\">test it</p:test>");
}
@Test
public void writeElementNsUri() {
writer.setPrefix("p", "uri:urn:a");
writer.writeStartDocument();
writer.writeStartElement("uri:urn:a", "test");
writer.writeNamespace("p", "uri:urn:a");
writer.writeCharacters("test it");
writer.writeEndElement();
assertXml("<?xml version='1.0' ?><p:test xmlns:p=\"uri:urn:a\">test it</p:test>");
}
@Test
public void writeElementNsUriEmptyPrefix() {
writer.writeStartDocument();
writer.writeStartElement("", "test", "uri:urn:a");
writer.writeCharacters("test it");
writer.writeEndElement();
assertXml("<?xml version='1.0' ?><test>test it</test>");
}
@Test
public void writeEmptyElementNsUri() {
writer.setPrefix("p", "uri:urn:a");
writer.writeStartDocument();
writer.writeEmptyElement("uri:urn:a", "test");
writer.writeNamespace("p", "uri:urn:a");
assertXml("<?xml version='1.0' ?><p:test xmlns:p=\"uri:urn:a\"/>");
}
@Test
public void writeComment() {
writer.writeStartDocument();
writer.writeEmptyElement("test");
writer.writeComment("some comment text");
assertXml("<?xml version='1.0' ?><test/><!-- some comment text -->");
}
@Test
public void writeCData() {
writer.writeStartDocument();
writer.writeStartElement("test");
writer.writeCData("one\ntwo");
writer.writeEndElement();
assertXml("<?xml version='1.0' ?><test><![CDATA[one\ntwo]]></test>");
}
@Test
public void contentEncodingNewlinesAndSpecialCharacters() {
writer.writeStartDocument();
writer.writeStartElement("test");
writer.writeCharacters("one\ntwo <>");
writer.writeEndElement();
assertXml("<?xml version='1.0' ?><test>one\ntwo <></test>");
}
@Test
public void attributeEncoding() {
writer.writeStartDocument();
writer.writeEmptyElement("test");
writer.writeAttribute("a", "one\ntwo <>'\"\r\n");
writer.writeEndDocument();
writer.close();
assertXml("<?xml version='1.0' ?><test a=\"one
two <>'"
\"/>");
}
@Test
public void flushAfterClose() {
writer.writeStartDocument();
writer.writeEndDocument();
writer.close();
writer.flush();
assertXml("<?xml version='1.0' ?>");
}
@Test
public void flush() {
writer.writeStartDocument();
writer.flush();
assertXml("<?xml version='1.0' ?>");
}
@Test
public void closeMultipleTimes() {
writer.writeStartDocument();
writer.close();
writer.close();
assertXml("<?xml version='1.0' ?>");
}
private void assertXml(String expected) {
writer.writeEndDocument();
writer.close();
assertEquals(expected, out.toString());
}
}