/* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You 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 org.apache.activemq.artemis.util; import org.apache.activemq.artemis.tests.util.SilentTestCase; import org.apache.activemq.artemis.utils.XMLUtil; import org.junit.Assert; import org.junit.Test; import org.w3c.dom.Element; import org.w3c.dom.Node; import org.w3c.dom.NodeList; public class XMLUtilTest extends SilentTestCase { // Constructors -------------------------------------------------- // Public -------------------------------------------------------- @Test public void testGetTextContext_1() throws Exception { String document = "<blah>foo</blah>"; Element e = XMLUtil.stringToElement(document); Assert.assertEquals("foo", XMLUtil.getTextContent(e)); } @Test public void testGetTextContext_2() throws Exception { String document = "<blah someattribute=\"somevalue\">foo</blah>"; Element e = XMLUtil.stringToElement(document); Assert.assertEquals("foo", XMLUtil.getTextContent(e)); } @Test public void testGetTextContext_3() throws Exception { String document = "<blah someattribute=\"somevalue\"><a/></blah>"; Element e = XMLUtil.stringToElement(document); String s = XMLUtil.getTextContent(e); Element subelement = XMLUtil.stringToElement(s); Assert.assertEquals("a", subelement.getNodeName()); } @Test public void testGetTextContext_4() throws Exception { String document = "<blah someattribute=\"somevalue\"><a></a></blah>"; Element e = XMLUtil.stringToElement(document); String s = XMLUtil.getTextContent(e); Element subelement = XMLUtil.stringToElement(s); Assert.assertEquals("a", subelement.getNodeName()); } @Test public void testGetTextContext_5() throws Exception { String document = "<blah someattribute=\"somevalue\"><a><b/></a></blah>"; Element e = XMLUtil.stringToElement(document); String s = XMLUtil.getTextContent(e); Element subelement = XMLUtil.stringToElement(s); Assert.assertEquals("a", subelement.getNodeName()); NodeList nl = subelement.getChildNodes(); // try to find <b> boolean found = false; for (int i = 0; i < nl.getLength(); i++) { Node n = nl.item(i); if ("b".equals(n.getNodeName())) { found = true; } } Assert.assertTrue(found); } @Test public void testEquivalent_1() throws Exception { String s = "<a/>"; String s2 = "<a/>"; XMLUtil.assertEquivalent(XMLUtil.stringToElement(s), XMLUtil.stringToElement(s2)); } @Test public void testEquivalent_2() throws Exception { String s = "<a></a>"; String s2 = "<a/>"; XMLUtil.assertEquivalent(XMLUtil.stringToElement(s), XMLUtil.stringToElement(s2)); } @Test public void testEquivalent_3() throws Exception { String s = "<a attr1=\"val1\" attr2=\"val2\"/>"; String s2 = "<a attr2=\"val2\"/>"; try { XMLUtil.assertEquivalent(XMLUtil.stringToElement(s), XMLUtil.stringToElement(s2)); Assert.fail("this should throw exception"); } catch (IllegalArgumentException e) { // expected } } @Test public void testEquivalent_4() throws Exception { String s = "<a attr1=\"val1\" attr2=\"val2\"/>"; String s2 = "<a attr2=\"val2\" attr1=\"val1\"/>"; XMLUtil.assertEquivalent(XMLUtil.stringToElement(s), XMLUtil.stringToElement(s2)); } @Test public void testEquivalent_5() throws Exception { String s = "<a><b/></a>"; String s2 = "<a><b/></a>"; XMLUtil.assertEquivalent(XMLUtil.stringToElement(s), XMLUtil.stringToElement(s2)); } @Test public void testEquivalent_6() throws Exception { String s = "<enclosing><a attr1=\"val1\" attr2=\"val2\"/></enclosing>"; String s2 = "<enclosing><a attr2=\"val2\" attr1=\"val1\"/></enclosing>"; XMLUtil.assertEquivalent(XMLUtil.stringToElement(s), XMLUtil.stringToElement(s2)); } @Test public void testEquivalent_7() throws Exception { String s = "<a><b/><c/></a>"; String s2 = "<a><c/><b/></a>"; try { XMLUtil.assertEquivalent(XMLUtil.stringToElement(s), XMLUtil.stringToElement(s2)); Assert.fail("this should throw exception"); } catch (IllegalArgumentException e) { // OK e.printStackTrace(); } } @Test public void testEquivalent_8() throws Exception { String s = "<a><!-- some comment --><b/><!--some other comment --><c/><!-- blah --></a>"; String s2 = "<a><b/><!--blah blah--><c/></a>"; XMLUtil.assertEquivalent(XMLUtil.stringToElement(s), XMLUtil.stringToElement(s2)); } @Test public void testElementToString_1() throws Exception { String s = "<a b=\"something\">somethingelse</a>"; Element e = XMLUtil.stringToElement(s); String tostring = XMLUtil.elementToString(e); Element convertedAgain = XMLUtil.stringToElement(tostring); XMLUtil.assertEquivalent(e, convertedAgain); } @Test public void testElementToString_2() throws Exception { String s = "<a b=\"something\"></a>"; Element e = XMLUtil.stringToElement(s); String tostring = XMLUtil.elementToString(e); Element convertedAgain = XMLUtil.stringToElement(tostring); XMLUtil.assertEquivalent(e, convertedAgain); } @Test public void testElementToString_3() throws Exception { String s = "<a b=\"something\"/>"; Element e = XMLUtil.stringToElement(s); String tostring = XMLUtil.elementToString(e); Element convertedAgain = XMLUtil.stringToElement(tostring); XMLUtil.assertEquivalent(e, convertedAgain); } @Test public void testElementToString_4() throws Exception { String s = "<a><![CDATA[somedata]]></a>"; Element e = XMLUtil.stringToElement(s); String tostring = XMLUtil.elementToString(e); Element convertedAgain = XMLUtil.stringToElement(tostring); XMLUtil.assertEquivalent(e, convertedAgain); } @Test public void testReplaceSystemProperties() { String before = "<configuration>\n" + " <test name=\"${sysprop1}\">content1</test>\n" + " <test name=\"test2\">content2</test>\n" + " <test name=\"test3\">content3</test>\n" + " <test name=\"test4\">${sysprop2}</test>\n" + " <test name=\"test5\">content5</test>\n" + " <test name=\"test6\">content6</test>\n" + "</configuration>"; String after = "<configuration>\n" + " <test name=\"test1\">content1</test>\n" + " <test name=\"test2\">content2</test>\n" + " <test name=\"test3\">content3</test>\n" + " <test name=\"test4\">content4</test>\n" + " <test name=\"test5\">content5</test>\n" + " <test name=\"test6\">content6</test>\n" + "</configuration>"; System.setProperty("sysprop1", "test1"); System.setProperty("sysprop2", "content4"); String replaced = XMLUtil.replaceSystemProps(before); Assert.assertEquals(after, replaced); } @Test public void testStripCDATA() throws Exception { String xml = "<![CDATA[somedata]]>"; String stripped = XMLUtil.stripCDATA(xml); Assert.assertEquals("somedata", stripped); } }