View Javadoc

1   package org.apache.velocity.tools.generic;
2   
3   /*
4    * Licensed to the Apache Software Foundation (ASF) under one
5    * or more contributor license agreements.  See the NOTICE file
6    * distributed with this work for additional information
7    * regarding copyright ownership.  The ASF licenses this file
8    * to you under the Apache License, Version 2.0 (the
9    * "License"); you may not use this file except in compliance
10   * with the License.  You may obtain a copy of the License at
11   *
12   *   http://www.apache.org/licenses/LICENSE-2.0
13   *
14   * Unless required by applicable law or agreed to in writing,
15   * software distributed under the License is distributed on an
16   * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
17   * KIND, either express or implied.  See the License for the
18   * specific language governing permissions and limitations
19   * under the License.
20   */
21  
22  import org.junit.*;
23  import static org.junit.Assert.*;
24  import java.net.URL;
25  import java.util.HashMap;
26  import java.util.Iterator;
27  import java.util.List;
28  import java.util.Map;
29  import org.apache.velocity.tools.generic.ValueParser;
30  import org.dom4j.Node;
31  
32  /**
33   * <p>Tests for XmlTool</p>
34   *
35   * @author Nathan Bubna
36   * @since VelocityTools 2.0
37   * @version $Id$
38   */
39  public class XmlToolTests {
40  
41      private static final String XML_FILE = "@test.file.dir@/file.xml";
42  
43      private static final String XML_STRING =
44  "<foo>\n  <bar name=\"a\"/>\n  <baz>woogie</baz>\n  <baz>wiggie</baz>\n</foo>";
45  
46      public @Test void ctorXmlTool() throws Exception
47      {
48          try
49          {
50              new XmlTool();
51          }
52          catch (Exception e)
53          {
54              fail("Constructor 'XmlTool()' failed due to: " + e);
55          }
56      }
57  
58      private XmlTool stringBased() throws Exception
59      {
60          XmlTool xml = new XmlTool();
61          xml.parse(XML_STRING);
62          return xml;
63      }
64  
65      private XmlTool fileBased() throws Exception
66      {
67          XmlTool xml = new XmlTool();
68          xml.read(XML_FILE);
69          return xml;
70      }
71  
72      public @Test void testStringFileEquals() throws Exception
73      {
74          String string = stringBased().toString();
75          String file = fileBased().toString();
76          //System.out.println("string:\n"+string+"\nfile:\n"+file);
77          assertEquals(string, file);
78      }
79  
80      public @Test void methodAttr_Object() throws Exception
81      {
82          XmlTool xml = stringBased();
83          assertNull(xml.attr("href"));
84          xml = xml.find("bar");
85          assertNotNull(xml.attr("name"));
86          assertEquals("a", xml.attr("name"));
87      }
88  
89      public @Test void methodAttributes() throws Exception
90      {
91          XmlTool xml = stringBased();
92          Map<String,String> result = xml.attributes();
93          assertTrue(result.isEmpty());
94          xml = xml.find("bar");
95          result = xml.attributes();
96          assertNotNull(result);
97          assertEquals(1, result.size());
98          assertEquals("a", result.get("name"));
99      }
100 
101     public @Test void methodChildren() throws Exception
102     {
103         XmlTool xml = stringBased();
104         assertEquals(1, xml.size());
105         XmlTool result = xml.children();
106         assertEquals(3, result.size());
107     }
108 
109     public @Test void methodGetParent() throws Exception
110     {
111         XmlTool xml = stringBased().find("bar");
112         assertNotNull(xml);
113         XmlTool foo = xml.getParent();
114         assertNotNull(foo);
115         assertEquals(1, foo.size());
116         assertNull(foo.getParent());
117     }
118 
119     public @Test void methodParents() throws Exception
120     {
121         XmlTool foo = stringBased();
122         XmlTool xml = foo.find("bar");
123         assertEquals(foo.toString(), xml.parents().toString());
124         xml = foo.children();
125         assertEquals(3, xml.size());
126         foo = xml.parents();
127         assertEquals(1, foo.size());
128     }
129 
130     public @Test void methodConfigure_ValueParser() throws Exception
131     {
132         XmlTool xml = new XmlTool();
133         Map<String,String> params = new HashMap<String,String>();
134         assertEquals("file", XmlTool.FILE_KEY);
135         params.put(XmlTool.FILE_KEY, XML_FILE);
136         xml.configure(params);
137         assertEquals(1, xml.size());
138         assertEquals("foo", xml.getName());
139     }
140 
141     public @Test void methodFind_Object() throws Exception
142     {
143         XmlTool xml = stringBased();
144         XmlTool result = xml.find((Object)null);
145         assertNull(result);
146         assertEquals(xml.find("bar").toString(), xml.find("//bar").toString());
147         //TODO: test more xpath expressions?
148         //TODO: test expressions with no results
149     }
150 
151     public @Test void methodGetFirst() throws Exception
152     {
153         XmlTool xml = stringBased();
154         assertSame(xml, xml.getFirst());
155         xml = xml.children();
156         assertEquals(3, xml.size());
157         xml = xml.getFirst();
158         assertEquals(1, xml.size());
159         assertEquals("a", xml.getName());
160     }
161 
162     public @Test void methodGetLast() throws Exception
163     {
164         XmlTool xml = stringBased();
165         assertSame(xml, xml.getLast());
166         xml = xml.children();
167         assertEquals(3, xml.size());
168         xml = xml.getLast();
169         assertEquals(1, xml.size());
170         assertEquals("baz", xml.getName());
171         assertEquals("wiggie", xml.getText());
172     }
173 
174     public @Test void methodGetName() throws Exception
175     {
176         XmlTool xml = stringBased();
177         assertEquals(1, xml.size());
178         assertEquals("foo", xml.getName());
179         xml = xml.find("bar");
180         assertEquals("a", xml.getName());
181     }
182 
183     public @Test void methodGetNodeName() throws Exception
184     {
185         XmlTool xml = stringBased();
186         assertEquals("foo", xml.getNodeName());
187         xml = xml.find("baz");
188         assertEquals("baz", xml.getNodeName());
189     }
190 
191     public @Test void methodGetText() throws Exception
192     {
193         XmlTool xml = stringBased();
194         //TODO: prepare the instance for testing
195         String result = xml.getText();
196         assertEquals((String)null, result);
197     }
198 
199     public @Test void methodGet_Number() throws Exception
200     {
201         XmlTool xml = stringBased();
202         assertEquals(xml.toString(), xml.get(0).toString());
203         xml = xml.children();
204         assertEquals("bar", xml.get(0).getNodeName());
205         assertEquals("baz", xml.get(1).getName());
206         assertEquals("baz", xml.get(2).getName());
207         assertNull(xml.get(3));
208         assertNull(xml.get(-1));
209     }
210 
211     public @Test void methodGet_Object() throws Exception
212     {
213         XmlTool xml = stringBased();
214         assertNull(xml.get(null));
215         assertNull(xml.get(""));
216         assertNull(xml.get("null"));
217         Object result = xml.get("bar");
218         assertNotNull(result);
219         assertTrue(result instanceof XmlTool);
220         xml = (XmlTool)result;
221         result = null;
222         assertNull(result);
223         result = xml.get("0");
224         assertNotNull(result);
225         assertEquals(result.toString(), xml.toString());
226         result = null;
227         assertNull(result);
228         result = xml.get("name");
229         assertNotNull(result);
230         assertEquals("a", result);
231     }
232 
233     public @Test void methodIsEmpty() throws Exception
234     {
235         XmlTool xml = new XmlTool();
236         assertTrue(xml.isEmpty());
237         xml.parse(XML_STRING);
238         assertFalse(xml.isEmpty());
239     }
240 
241     public @Test void methodIterator() throws Exception
242     {
243         XmlTool xml = new XmlTool();
244         assertNull(xml.iterator());
245         xml.parse(XML_STRING);
246         Iterator<XmlTool> i = xml.iterator();
247         assertNotNull(i);
248         XmlTool foo = i.next();
249         assertNotNull(foo);
250         assertEquals(foo.toString(), xml.toString());
251         xml = xml.children();
252         i = xml.iterator();
253         assertEquals("a", i.next().attr("name"));
254         assertEquals("baz", i.next().getName());
255         assertEquals("wiggie", i.next().getText());
256         assertFalse(i.hasNext());
257     }
258 
259     public @Test void methodNode() throws Exception
260     {
261         XmlTool xml = new XmlTool();
262         assertNull(xml.node());
263         xml.parse(XML_STRING);
264         Node n = xml.node();
265         assertNotNull(n);
266     }
267 
268     public @Test void methodParse_Object() throws Exception
269     {
270         XmlTool xml = new XmlTool();
271         assertNull(xml.parse((Object)null));
272         assertNull(xml.parse((Object)"><S asdf8 ~$"));
273         assertNotNull(xml.parse((Object)XML_STRING));
274         //TODO: test other strings?
275     }
276 
277     public @Test void methodSize() throws Exception
278     {
279         XmlTool xml = new XmlTool();
280         assertEquals(0, xml.size());
281         xml.parse(XML_STRING);
282         assertEquals(1, xml.size());
283         xml = xml.children();
284         assertEquals(3, xml.size());
285         xml = xml.getLast();
286         assertEquals(1, xml.size());
287     }
288 
289     public @Test void methodToString() throws Exception
290     {
291         XmlTool xml = new XmlTool();
292         assertTrue(xml.toString().startsWith(XmlTool.class.getName()));
293         xml.read(XML_FILE);
294         assertTrue(xml.toString().startsWith("<foo>"));
295         assertTrue(xml.toString().endsWith("</foo>"));
296         XmlTool bar = xml.find("bar");
297         assertEquals("<bar name=\"a\"/>", bar.toString());
298         XmlTool baz = (XmlTool)xml.get("baz");
299         assertEquals("<baz>woogie</baz><baz>wiggie</baz>", baz.toString());
300     }
301 
302 
303 }
304