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