/* * 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.c14n.implementations; import java.util.ArrayList; import java.util.List; import javax.xml.parsers.DocumentBuilderFactory; import junit.framework.Test; import junit.framework.TestCase; import junit.framework.TestSuite; import org.w3c.dom.Attr; import org.w3c.dom.Document; public class NameSpaceSymbTableTest extends TestCase { public static Test suite() { return new TestSuite(NameSpaceSymbTableTest.class); } static Attr node1,node2; static { try { Document doc=DocumentBuilderFactory.newInstance().newDocumentBuilder().newDocument(); node1=doc.createAttributeNS("a","b"); node2=doc.createAttributeNS("b","c"); } catch (Exception e) { e.printStackTrace(); } } public void testNullFirstXmlns() { NameSpaceSymbTable ns=new NameSpaceSymbTable(); assertNull(ns.getMapping("xmlns")); } public void testXmlnsPut() { NameSpaceSymbTable ns=new NameSpaceSymbTable(); ns.push(); ns.addMapping("xmlns","http://a",node1); assertEquals(node1,ns.getMapping("xmlns")); } public void testXmlnsMap() { NameSpaceSymbTable ns=new NameSpaceSymbTable(); ns.push(); ns.addMapping("xmlns","http://a",node1); assertEquals(node1,ns.getMapping("xmlns")); ns.pop(); assertEquals(null,ns.getMapping("xmlns")); } public void testXmlnsMap2() { NameSpaceSymbTable ns=new NameSpaceSymbTable(); ns.push(); ns.push(); ns.addMapping("xmlns","http://a",node1); ns.pop(); ns.pop(); assertEquals(null,ns.getMapping("xmlns")); } public void testXmlnsPrefix() { NameSpaceSymbTable ns=new NameSpaceSymbTable(); ns.push(); ns.addMapping("xmlns","http://a",node1); assertEquals(node1,ns.getMapping("xmlns")); ns.push(); ns.addMapping("xmlns","http://a",node1); assertEquals(null,ns.getMapping("xmlns")); ns.push(); ns.addMapping("xmlns","http://b",node1); assertEquals(node1,ns.getMapping("xmlns")); } public void testXmlnsRemovePrefix() { NameSpaceSymbTable ns=new NameSpaceSymbTable(); ns.push(); ns.push(); ns.addMapping("xmlns","http://a",node1); assertEquals(node1,ns.getMapping("xmlns")); ns.pop(); assertNull(ns.getMapping("xmlns")); } public void testPrefix() { NameSpaceSymbTable ns=new NameSpaceSymbTable(); ns.push(); ns.addMapping("a","http://a",node1); assertEquals(node1,ns.getMapping("a")); ns.push(); assertNull(ns.getMapping("a")); ns.push(); ns.addMapping("a","http://c",node1); assertEquals(node1,ns.getMapping("a")); ns.pop(); ns.push(); assertNull(ns.getMapping("a")); ns.addMapping("a","http://c",node1); assertEquals(node1,ns.getMapping("a")); } public void testSeveralPrefixes() { NameSpaceSymbTable ns=new NameSpaceSymbTable(); ns.push(); ns.addMapping("a","http://a",node1); ns.addMapping("b","http://b",node2); assertEquals(node1,ns.getMapping("a")); assertEquals(node2,ns.getMapping("b")); ns.push(); assertNull(ns.getMapping("a")); } public void testSeveralPrefixes2() { NameSpaceSymbTable ns=new NameSpaceSymbTable(); ns.push(); ns.addMapping("a","http://a",node1); ns.push(); assertEquals(node1,ns.getMapping("a")); ns.pop(); assertEquals(node1,ns.getMapping("a")); } public void testGetUnrenderedNodes() { NameSpaceSymbTable ns=new NameSpaceSymbTable(); ns.push(); List l=new ArrayList(); ns.addMapping("xmlns","http://a",node1); ns.push(); ns.getUnrenderedNodes(l); assertTrue(l.contains(node1)); Attr n=(Attr)ns.addMappingAndRender("xmlns","",node2); assertNotNull("xmlns=\"\" not rendered",n); assertEquals(n, node2); } public void testUnrederedNodes() { NameSpaceSymbTable ns=new NameSpaceSymbTable(); ns.push(); List l=new ArrayList(); ns.getUnrenderedNodes(l); assertTrue(l.isEmpty()); l.clear(); ns.push(); ns.addMapping("xmlns","http://a",node1); ns.addMapping("a","http://a",node2); ns.push(); ns.getUnrenderedNodes(l); assertTrue(l.contains(node1)); assertTrue(l.contains(node2)); ns.push(); l.clear(); ns.getUnrenderedNodes(l); assertFalse(l.contains(node1)); assertFalse(l.contains(node2)); ns.pop(); ns.pop(); l.clear(); ns.getUnrenderedNodes(l); assertTrue(l.contains(node1)); assertTrue(l.contains(node2)); } public void testBug38655() { NameSpaceSymbTable ns=new NameSpaceSymbTable(); ns.push(); ns.addMappingAndRender("generated-command","http://foo.com/command",node1); ns.addMappingAndRender("generated-event","http://foo.com/event",node1); ns.addMappingAndRender("command","http://foo.com/command",node1); ns.addMappingAndRender("ui","http://foo.com/ui",node1); ns.addMappingAndRender("event","http://foo.com/event",node1); ns.addMappingAndRender("instruction","http://foo/instruction",node1); ns.addMappingAndRender("directory","http://foo.com/io/directory",node1); ns.addMappingAndRender("function","http://foo.com/function",node1); ns.addMappingAndRender("xmlns","http://www.w3.org/1999/xhtml",node1); ns.addMappingAndRender("ctrl","http://foo.com/controls",node1); ns.addMappingAndRender("wiki","http://foo.com/samples/wiki",node1); } }