LocationAttributesTest.java
/*
* 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.struts2.util.location;
import junit.framework.TestCase;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.xml.sax.Locator;
import org.xml.sax.helpers.AttributesImpl;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
public class LocationAttributesTest extends TestCase {
public LocationAttributesTest(String name) {
super(name);
}
public void testAddLocationAttributes() throws Exception {
AttributesImpl attrs = new AttributesImpl();
LocationAttributes.addLocationAttributes(new Locator() {
public int getColumnNumber() { return 40; }
public int getLineNumber() { return 1; }
public String getSystemId() { return "path/to/file.xml"; }
public String getPublicId() { return "path/to/file.xml"; }
}, attrs);
assertTrue("path/to/file.xml".equals(attrs.getValue("loc:src")));
assertTrue("1".equals(attrs.getValue("loc:line")));
assertTrue("40".equals(attrs.getValue("loc:column")));
}
public void testRecursiveRemove() throws Exception {
Document doc = getDoc("xml-with-location.xml");
Element root = doc.getDocumentElement();
LocationAttributes.remove(root, true);
assertNull(root.getAttributeNode("loc:line"));
assertNull(root.getAttributeNode("loc:column"));
assertNull(root.getAttributeNode("loc:src"));
Element kid = (Element)doc.getElementsByTagName("bar").item(0);
assertNull(kid.getAttributeNode("loc:line"));
assertNull(kid.getAttributeNode("loc:column"));
assertNull(kid.getAttributeNode("loc:src"));
}
public void testNonRecursiveRemove() throws Exception {
Document doc = getDoc("xml-with-location.xml");
Element root = doc.getDocumentElement();
LocationAttributes.remove(root, false);
assertNull(root.getAttributeNode("loc:line"));
assertNull(root.getAttributeNode("loc:column"));
assertNull(root.getAttributeNode("loc:src"));
Element kid = (Element)doc.getElementsByTagName("bar").item(0);
assertNotNull(kid.getAttributeNode("loc:line"));
assertNotNull(kid.getAttributeNode("loc:column"));
assertNotNull(kid.getAttributeNode("loc:src"));
}
private Document getDoc(String path) throws Exception {
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
factory.setNamespaceAware(true);
DocumentBuilder builder = factory.newDocumentBuilder();
return builder.parse(LocationAttributesTest.class.getResourceAsStream(path));
}
}