/*
* Jitsi, the OpenSource Java VoIP and Instant Messaging client.
*
* Copyright @ 2015 Atlassian Pty Ltd
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package net.java.sip.communicator.slick.slickless.util.xml;
import java.io.*;
import javax.xml.parsers.*;
import javax.xml.transform.stream.*;
import junit.framework.*;
import org.jitsi.util.xml.*;
import org.w3c.dom.*;
/**
* JUnit tests for the TestXMLUtils package.
*
* @author Emil Ivov
*/
public class TestXMLUtils extends TestCase
{
//property1 values
private static final String property1 = "p1";
private static final String property1Value = "p1.value";
private static final String property1Value2 = "p1.value.2";
private static final String property1Path = "parent.";
//property2 values
private static final String systemProperty = "SYSTEM_PROPERTY";
private static final String systemPropertyValue = "I AM the SyS guy";
private static final String systemPropertyValue2 = "sys guy's new face";
private static final String systemPropertyPath = "parent.";
//added_property values
private static final String addedProperty = "ADDED_PROPERTY";
private static final String addedPropertyValue = "added";
private static final String addedPropertyValue2 = "and then re-aded";
private static final String addedPropertyPath = "parent.";
//INNER_PROPERTY values
private static final String innerProperty = "INNER_PROPERTY";
private static final String innerPropertyValue = "I am an insider";
private static final String innerPropertyValue2 = "I am a modified inner";
private static final String innerPropertyPath = "parent.innerprops.";
//CDATA_NODE
private static final String cdataNode = "CDATA_NODE";
private static final String cdataNodeContent = "Thisis theCDATA nodeCOntent";
private static final String cdataNodeContent2 = "The return of the CDATA";
//TEXT_NODE
private static final String textNode = "TEXT_NODE";
private static final String textNodeContent = "Thisis the TeXt nodeCOntent";
private static final String textNodeContent2 = "The text strikes back";
/** the contents of our properties file.*/
private static String xmlString =
"<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n" +
"<sip-communicator>\n" +
" <parent>" +"\n"+
" <"+property1+" value=\""+property1Value+"\"/>" +"\n"+
" <"+systemProperty
+" value=\""+systemPropertyValue+"\" system=\"true\"/>" +"\n"+
" <innerprops>" +"\n"+
" <"+innerProperty+" value=\""+innerPropertyValue+"\"/>" +"\n"+
" </innerprops>" +"\n"+
" </parent>" +"\n"+
" <"+cdataNode+"><![CDATA["+cdataNodeContent+"]]></"+cdataNode+">" +"\n"+
" <"+textNode+">"+textNodeContent+"</"+textNode+">" +"\n"+
"</sip-communicator>\n";
DocumentBuilderFactory factory = null;
DocumentBuilder builder = null;
Document document = null;
Node rootNode = null;
public TestXMLUtils(String testName)
{
super(testName);
}
/**
* Create a XML Document that will be used as a fixture in later testing.
* @throws Exception if sth goes nuts
*/
@Override
protected void setUp() throws Exception
{
factory =
DocumentBuilderFactory.newInstance();
DocumentBuilder builder = factory.newDocumentBuilder();
InputStream in = new java.io.ByteArrayInputStream(xmlString.getBytes());
document = builder.parse(in);
rootNode = document.getFirstChild();
super.setUp();
}
/**
* Standard JUnit tear down
* @throws Exception ... don't know when
*/
@Override
protected void tearDown() throws Exception
{
super.tearDown();
}
/**
* Tests the find child method over a few nodes of the sample xml string.
*/
public void testFindChild()
{
Element parent = (Element)rootNode;
String tagName = "parent";
Element actualReturn = XMLUtils.findChild(parent, tagName);
//make sure it found the only "parent" child
assertEquals("parent", actualReturn.getTagName());
//let's now look for the inneroprs child
parent = actualReturn;
tagName = "innerprops";
actualReturn = XMLUtils.findChild(parent, tagName);
//make sure it found the innerprops child
assertEquals("innerprops", actualReturn.getTagName());
}
/**
* Tests the getAttribute method over property1
*/
public void testGetAttribute()
{
Element parent = (Element)rootNode;
String tagName = "parent";
Element actualReturn = XMLUtils.findChild(parent, tagName);
//make sure it found the only "parent" child
assertEquals("parent", actualReturn.getTagName());
//let's now look for the inneroprs child
parent = actualReturn;
actualReturn = XMLUtils.findChild(parent, property1);
//make sure it found the innerprops child
assertEquals(property1, actualReturn.getTagName());
//make sure it found the innerprops child
assertEquals(property1Value,
XMLUtils.getAttribute(actualReturn, "value"));
}
/**
* Tests getCData over the cdataNode of the sample XML.
*/
public void testGetSetCData()
{
Element parent = (Element)rootNode;
Element returnedCdataNode = XMLUtils.findChild(parent, cdataNode);
String actualReturn = XMLUtils.getCData(returnedCdataNode);
//compare the returned data with the actual.
assertEquals(cdataNodeContent, actualReturn);
//set, with a new value
XMLUtils.setCData(returnedCdataNode, cdataNodeContent2);
//now get it again and re-assert
returnedCdataNode = XMLUtils.findChild(parent, cdataNode);
actualReturn = XMLUtils.getCData(returnedCdataNode);
//compare the returned data with the actual.
assertEquals(cdataNodeContent2, actualReturn);
}
/**
* Tests getText over the textNode of the sample XML.
*/
public void testGetSetText()
{
Element parent = (Element)rootNode;
Element returnedTextNode = XMLUtils.findChild(parent, textNode);
String actualReturn = XMLUtils.getText(returnedTextNode);
//compare the returned data with the actual.
assertEquals(textNodeContent, actualReturn);
//set, with a new value
XMLUtils.setCData(returnedTextNode, textNodeContent2);
//now get it again and re-assert
returnedTextNode = XMLUtils.findChild(parent, textNode);
actualReturn = XMLUtils.getCData(returnedTextNode);
//compare the returned data with the actual.
assertEquals(textNodeContent2, actualReturn);
}
public void testWriteXML() throws Exception
{
StringWriter writer = new StringWriter();
StreamResult streamResult = new StreamResult(writer);
String doctypeSystem = null;
String doctypePublic = null;
XMLUtils.writeXML(document, streamResult, doctypeSystem, doctypePublic);
String writtenString = writer.toString();
//now run some of the previous tests to make sure they passe with the
//newly written string
xmlString = new StringBuffer(writtenString).toString();
setUp();
testFindChild();
xmlString = new StringBuffer(writtenString).toString();
setUp();
testGetAttribute();
xmlString = new StringBuffer(writtenString).toString();
setUp();
testGetSetCData();
xmlString = new StringBuffer(writtenString).toString();
setUp();
testGetSetText();
}
}