blob: ca37c9ecedc69d9f60fd1e7526009929b42f27f2 [file] [log] [blame]
/*
* 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);
}
}