/* * Copyright 1999-2004 The Apache Software Foundation. * * 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 org.apache.xml.security.test.c14n.helper; import javax.xml.parsers.DocumentBuilder; import javax.xml.parsers.DocumentBuilderFactory; import javax.xml.parsers.ParserConfigurationException; import junit.framework.Test; import junit.framework.TestCase; import junit.framework.TestSuite; import org.apache.xml.security.c14n.helper.AttrCompare; import org.apache.xml.security.utils.Constants; import org.w3c.dom.Attr; import org.w3c.dom.Document; import org.w3c.dom.Element; import org.w3c.dom.NamedNodeMap; /** * Unit test for {@link org.apache.xml.security.c14n.AttrCompare#compare} * * @author Christian Geuer-Pollmann */ public class AttrCompareTest extends TestCase { /** * Method suite * * @return */ public static Test suite() { return new TestSuite(AttrCompareTest.class); } /** * Constructor AttrCompareTest * * @param Name_ */ public AttrCompareTest(String Name_) { super(Name_); } /** * Method main * * @param args */ public static void main(String[] args) { String[] testCaseName = { "-noloading", AttrCompareTest.class.getName() }; junit.textui.TestRunner.main(testCaseName); } /** * Method createAttr * * @param doc * @param QName * @param Value * @param NamespaceURI * @return */ private static Attr createAttr(Document doc, String QName, String Value, String NamespaceURI) { Attr attr = null; if ((NamespaceURI != null) && (NamespaceURI.length() > 0)) { attr = doc.createAttributeNS(NamespaceURI, QName); } else { attr = doc.createAttributeNS(null, QName); } attr.appendChild(doc.createTextNode(Value)); return attr; } /** * Method createDoc * * @param documentElement * @return * @throws ParserConfigurationException */ private static Document createDoc(String documentElement) throws ParserConfigurationException { DocumentBuilderFactory dfactory = DocumentBuilderFactory.newInstance(); DocumentBuilder documentBuilder = dfactory.newDocumentBuilder(); dfactory.setNamespaceAware(true); Document doc = documentBuilder.newDocument(); Element root = doc.createElementNS(null, documentElement); doc.appendChild(root); return doc; } /** * Method testA1 * * @throws ParserConfigurationException */ public static void testA1() throws ParserConfigurationException { Document doc = createDoc("documentElement"); Element root = doc.getDocumentElement(); Attr attr0 = createAttr(doc, "xmlns", "http://default/", Constants.NamespaceSpecNS); Attr attr1 = createAttr(doc, "xmlns:b", "http://val1/", Constants.NamespaceSpecNS); root.setAttributeNode(attr0); root.setAttributeNode(attr1); NamedNodeMap nnm = root.getAttributes(); assertEquals("nnm.getLength()", nnm.getLength(), 2); Attr attr00 = (Attr) nnm.item(0); Attr attr10 = (Attr) nnm.item(1); assertNotNull("Attribute attr00", attr00); assertNotNull("Attribute attr10", attr10); AttrCompare attrCompare = new AttrCompare(); assertTrue(attr0 + " < " + attr1, attrCompare.compare(attr0, attr1) < 0); assertTrue(attr1 + " < " + attr0, attrCompare.compare(attr1, attr0) > 0); } public static void testA2() throws ParserConfigurationException { Document doc = createDoc("documentElement"); Attr attr0 = doc.createAttributeNS(null, "foo"); Attr attr1 = doc.createAttributeNS("http://goo", "goo:foo"); // System.out.println("Attr1: " + attr1 + " (" + attr1.getLocalName() +")"); AttrCompare attrCompare = new AttrCompare(); assertTrue(attr0 + " < " + attr1, attrCompare.compare(attr0, attr1) < 0); assertTrue(attr1 + " < " + attr0, attrCompare.compare(attr1, attr0) > 0); } /** * Method testA2 * * @throws ParserConfigurationException */ public static void _testA2() throws ParserConfigurationException { Document doc = createDoc("documentElement"); Element root = doc.getDocumentElement(); Attr attr0 = createAttr(doc, "aAttr", "val0", null); Attr attr1 = createAttr(doc, "bAttr", "val1", null); root.setAttributeNode(attr0); root.setAttributeNode(attr1); NamedNodeMap nnm = root.getAttributes(); assertEquals("nnm.getLength()", nnm.getLength(), 2); Attr attr00 = (Attr) nnm.item(0); Attr attr10 = (Attr) nnm.item(1); assertNotNull("Attribute attr00", attr00); assertNotNull("Attribute attr10", attr10); AttrCompare attrCompare = new AttrCompare(); assertTrue(attr0 + " < " + attr1, attrCompare.compare(attr0, attr1) < 0); assertTrue(attr1 + " < " + attr0, attrCompare.compare(attr1, attr0) > 0); } /** * This test uses the attrs[] array to compare every attribute against * the others (and vice versa). * * The attribute values are taken from example 3.3 Start and End Tags * http://www.w3.org/TR/2001/REC-xml-c14n-20010315#Example-SETags * * @throws ParserConfigurationException */ public static void testComplete() throws ParserConfigurationException { /* */ Document doc = createDoc("documentElement"); Element root = doc.getDocumentElement(); // This List has to be ordered to verify correctness of the comparison //J- Attr attrs[] = { createAttr(doc, "xmlns", "http://example.org", Constants.NamespaceSpecNS), createAttr(doc, "xmlns:a", "http://www.w3.org", Constants.NamespaceSpecNS), createAttr(doc, "xmlns:b", "http://www.ietf.org", Constants.NamespaceSpecNS), createAttr(doc, "attr", "I'm", null), createAttr(doc, "attr2", "all", null), createAttr(doc, "b:attr", "sorted", "http://www.ietf.org"), createAttr(doc, "a:attr", "out", "http://www.w3.org") }; //J+ for (int i = 0; i < attrs.length; i++) { root.setAttributeNode(attrs[i]); } NamedNodeMap nnm = root.getAttributes(); assertEquals("nnm.getLength()", nnm.getLength(), attrs.length); for (int i = 0; i < attrs.length; i++) { Attr attr = attrs[i]; assertNotNull("Attribute attr", attr); } AttrCompare attrCompare = new AttrCompare(); for (int i = 0; i < attrs.length; i++) { for (int j = i + 1; j < attrs.length; j++) { Attr attr0 = attrs[i]; Attr attr1 = attrs[j]; assertTrue(attr0 + " < " + attr1, attrCompare.compare(attr0, attr1) < 0); assertTrue(attr1 + " < " + attr0, attrCompare.compare(attr1, attr0) > 0); } } } static { org.apache.xml.security.Init.init(); } } //public class AttrCompareTest extends TestCase