1 /* 2 * Replica is published under the terms 3 * of the Apache Software License. 4 */ 5 package replica.command.xml; 6 7 import java.io.StringReader; 8 import java.util.Arrays; 9 import java.util.Hashtable; 10 11 import javax.xml.parsers.DocumentBuilderFactory; 12 13 import org.w3c.dom.Document; 14 import org.w3c.dom.Element; 15 import org.w3c.dom.NodeList; 16 import org.xml.sax.InputSource; 17 18 import replica.command.MockCommand; 19 20 import junit.framework.TestCase; 21 22 /*** 23 * 24 * @author Pedro Costa 25 * @author Helder Silva 26 * @since 18/Jan/2004 27 */ 28 public class XmlHashtableMappingsTest extends TestCase { 29 30 /*** 31 * Constructor for XmlHashtableMappingsTest. 32 * @param name 33 */ 34 public XmlHashtableMappingsTest(String name) { 35 super(name); 36 } 37 38 /*** 39 * Test initializing a Mappings class from a xml input source. 40 * 41 */ 42 public void testInitialize() { 43 String strDoc = 44 "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n"+ 45 "<commands>\n"+ 46 " <mapping>\n"+ 47 " <command>select</command>\n"+ 48 " <class>replica.command.MockCommand</class>\n"+ 49 " </mapping>\n"+ 50 " <mapping>\n"+ 51 " <command>update</command>\n"+ 52 " <class>replica.command.MockCommand</class>\n"+ 53 " </mapping>\n"+ 54 "</commands>"; 55 56 InputSource input = new InputSource( new StringReader( strDoc ) ); 57 58 try{ 59 Document doc = DocumentBuilderFactory.newInstance().newDocumentBuilder().parse(input); 60 61 XmlHashtableMappings mapps = new XmlHashtableMappings(); 62 63 mapps.initialize( doc ); 64 65 assertEquals( MockCommand.class, mapps.getMappedClass("select") ); 66 assertEquals( MockCommand.class, mapps.getMappedClass("update") ); 67 68 MockCommand c1 = (MockCommand)mapps.getNewCommand("select"); 69 MockCommand c2 = (MockCommand)mapps.getNewCommand("update"); 70 71 assertNotNull( c1 ); 72 assertNotNull( c2 ); 73 } 74 catch(Exception t){ 75 t.printStackTrace(); 76 throw new RuntimeException(t); 77 } 78 } 79 80 /*** 81 * Test parsing one mapping element. 82 * 83 */ 84 public void testProcessMapping() { 85 86 String strDoc = 87 "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n"+ 88 "<commands>\n"+ 89 " <mapping>\n"+ 90 " <command>select</command>\n"+ 91 " <command>update</command>\n"+ 92 " <class>replica.command.MockCommand</class>\n"+ 93 " <param>\n"+ 94 " <name>prop1</name>\n"+ 95 " <value>value1</value>\n"+ 96 " </param>\n"+ 97 " <param>\n"+ 98 " <name>prop2</name>\n"+ 99 " <value>10</value>\n"+ 100 " </param>\n"+ 101 " </mapping>\n"+ 102 "</commands>"; 103 104 InputSource input = new InputSource( new StringReader( strDoc ) ); 105 106 try{ 107 Document doc = DocumentBuilderFactory.newInstance().newDocumentBuilder().parse(input); 108 109 XmlHashtableMappings mapps = new XmlHashtableMappings(); 110 111 mapps.processMapping( (Element)doc.getDocumentElement().getElementsByTagName("mapping").item(0) ); 112 113 assertEquals( MockCommand.class, mapps.getMappedClass("select") ); 114 assertEquals( MockCommand.class, mapps.getMappedClass("update") ); 115 116 MockCommand c = (MockCommand)mapps.getNewCommand("select"); 117 118 assertNotNull( c ); 119 120 assertEquals( "value1", c.getProp1()); 121 assertEquals( 10, c.getProp2() ); 122 } 123 catch(Exception t){ 124 t.printStackTrace(); 125 throw new RuntimeException(t); 126 } 127 } 128 129 /*** 130 * Test for parsing a node list of commands. 131 * 132 */ 133 public void testGetCommands() { 134 135 try{ 136 Document doc = DocumentBuilderFactory.newInstance().newDocumentBuilder().newDocument(); 137 138 Element root = doc.createElement("root"); 139 doc.appendChild(root); 140 141 String[] commands = {"select","insert","delete","update"}; 142 143 for (int i = 0; i < commands.length; i++) { 144 145 Element c = doc.createElement(XmlConstants.COMMAND); 146 c.appendChild(doc.createTextNode(commands[i])); 147 root.appendChild( c ); 148 } 149 150 XmlHashtableMappings mapps = new XmlHashtableMappings(); 151 152 NodeList list = root.getElementsByTagName(XmlConstants.COMMAND); 153 154 assertEquals( commands.length, list.getLength() ); 155 156 String[] res = mapps.getCommands( list ); 157 158 assertEquals( commands.length, res.length); 159 160 Arrays.sort(commands); 161 Arrays.sort(res); 162 163 for (int i = 0; i < res.length; i++) { 164 assertEquals(commands[i], res[i]); 165 } 166 } 167 catch(Exception t){ 168 t.printStackTrace(); 169 throw new RuntimeException(t); 170 } 171 } 172 173 /*** 174 * Test for parsing a list of nodes with parameters. 175 * 176 */ 177 public void testGetParameters() { 178 179 try{ 180 int numOfParams = 4; 181 182 String[] paramNames = new String[numOfParams]; 183 String[] paramValues = new String[numOfParams]; 184 185 for (int i = 0; i < paramValues.length; i++) { 186 paramNames[i] = "prop" + i; 187 paramValues[i] = "value" + i; 188 } 189 190 Document doc = DocumentBuilderFactory.newInstance().newDocumentBuilder().newDocument(); 191 192 Element root = doc.createElement("root"); 193 doc.appendChild(root); 194 195 for (int i = 0; i < paramNames.length; i++) { 196 197 Element param = doc.createElement(XmlConstants.PARAM); 198 199 Element name = doc.createElement(XmlConstants.NAME); 200 name.appendChild(doc.createTextNode(paramNames[i])); 201 param.appendChild(name); 202 203 Element value = doc.createElement(XmlConstants.VALUE); 204 value.appendChild(doc.createTextNode(paramValues[i])); 205 param.appendChild(value); 206 207 root.appendChild( param ); 208 } 209 210 XmlHashtableMappings mapps = new XmlHashtableMappings(); 211 212 Hashtable res = mapps.getParameters(root.getElementsByTagName(XmlConstants.PARAM)); 213 214 assertEquals( paramNames.length, res.size() ); 215 216 for (int i = 0; i < paramNames.length; i++) { 217 assertEquals( paramValues[i], res.get(paramNames[i]) ); 218 } 219 220 } 221 catch(Exception t){ 222 t.printStackTrace(); 223 throw new RuntimeException(t); 224 } 225 } 226 227 /*** 228 * Test for getting the value of child text node from a element node. 229 * 230 */ 231 public void testGetElementText() { 232 233 try{ 234 Document doc = DocumentBuilderFactory.newInstance().newDocumentBuilder().newDocument(); 235 236 Element root = doc.createElement("root"); 237 doc.appendChild(root); 238 239 root.appendChild(doc.createTextNode("textValue")); 240 241 XmlHashtableMappings mapps = new XmlHashtableMappings(); 242 243 String res = mapps.getElementText( root ); 244 245 assertEquals( "textValue", res ); 246 } 247 catch(Exception t){ 248 t.printStackTrace(); 249 throw new RuntimeException(t); 250 } 251 } 252 }

This page was automatically generated by Maven