KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > org > ditchnet > xml > dom > DomUtilsTest


1 /*
2  * The contents of this file are subject to the GNU Lesser General Public
3  * License Version 2.1 (the "License"); you may not use this file
4  * except in compliance with the License. You may obtain a copy of
5  * the License at http://www.gnu.org/copyleft/lesser.html
6  *
7  * Software distributed under the License is distributed on an "AS
8  * IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
9  * implied. See the License for the specific language governing
10  * rights and limitations under the License.
11  *
12  * Developer:
13  * Todd Ditchendorf, todd@ditchnet.org
14  *
15  */

16
17 package org.ditchnet.xml.dom;
18
19 import java.util.List JavaDoc;
20 import junit.framework.Test;
21 import junit.framework.TestCase;
22 import junit.framework.TestSuite;
23 import javax.xml.parsers.*;
24 import org.w3c.dom.*;
25 import org.xml.sax.InputSource JavaDoc;
26 import org.ditchnet.test.DitchBaseTestCase;
27 import org.ditchnet.xml.Xhtml;
28
29
30 public class DomUtilsTest extends DitchBaseTestCase {
31
32     public static void main(String JavaDoc[] args) {
33         junit.textui.TestRunner.run( suite() );
34     }
35     
36     public static Test suite() {
37         TestSuite suite = new TestSuite(
38             "Tests for DOM utility algorithms contained in DomUtils class");
39         suite.addTestSuite( DomUtilsTest.class );
40         return suite;
41     }
42     
43     final static String JavaDoc RES_FILE_SYSTEM_ID
44         = "testResources/domUtilsTestDoc.xml";
45
46     final static String JavaDoc DOC_BODY_ID = "doc-body";
47     final static String JavaDoc MAIN_HEADER_ID = "main-header";
48     final static String JavaDoc HEADER_CLASS_NAME = "header";
49     final static String JavaDoc MAIN_LIST_ID = "main-list";
50     final static String JavaDoc FIRST_LIST_ITEM_ID = "first-list-item";
51     final static String JavaDoc FIRST_SUB_LIST_ID = "first-sub-list";
52     final static String JavaDoc CLASS_BREAKER_ID = "class-breaker";
53     final static String JavaDoc LIST_CLASS_NAME = "list";
54     final static String JavaDoc LIST_ITEM_CLASS_NAME = "list-item";
55     final static String JavaDoc ANOTHER_CLASS_NAME = "another-class";
56     final static String JavaDoc DEPTH_FIRST_ID = "depth-first";
57     final static String JavaDoc BREADTH_FIRST_ID = "breadth-first";
58     final static String JavaDoc DEPTH_BREADTH_CLASS_NAME = "depth-breadth";
59     
60     Document doc;
61     
62     public DomUtilsTest(String JavaDoc name) {
63         super(name);
64     }
65     
66     public void setUp() throws Exception JavaDoc {
67         DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
68         DocumentBuilder builder = factory.newDocumentBuilder();
69         doc = builder.parse(
70             new InputSource JavaDoc( RES_FILE_SYSTEM_ID ));
71     }
72     
73     public void testResDocumentExists() {
74         Element docEl = doc.getDocumentElement();
75         assertEquals(Xhtml.Tag.HTML.toString(),
76                      docEl.getTagName());
77     }
78     
79     public void testHasId() {
80         Element mainHeader = doc.getElementById( MAIN_HEADER_ID );
81         assertTrue(DomUtils.hasId(mainHeader,MAIN_HEADER_ID));
82         assertFalse(DomUtils.hasId(mainHeader," " + MAIN_HEADER_ID));
83     }
84     
85     public void testHasClassName() {
86         Element firstSubList = doc.getElementById( FIRST_SUB_LIST_ID );
87         assertEquals(Xhtml.Tag.UL.toString(),
88                      firstSubList.getNodeName());
89         assertTrue("The first sub list should have 'list' as a class name",
90                    DomUtils.hasClassName(firstSubList,LIST_CLASS_NAME));
91         assertTrue("The first sub list should have 'another-class as a class name",
92                    DomUtils.hasClassName(firstSubList,ANOTHER_CLASS_NAME));
93         assertTrue(DomUtils.hasClassName(firstSubList,ANOTHER_CLASS_NAME+" "));
94         assertTrue(DomUtils.hasClassName(firstSubList," "+ANOTHER_CLASS_NAME+" "));
95         assertTrue(DomUtils.hasClassName(firstSubList," "+ANOTHER_CLASS_NAME));
96         
97         Element li = doc.getElementById( MAIN_LIST_ID );
98         assertTrue(DomUtils.hasClassName(li, LIST_CLASS_NAME ));
99         assertTrue(DomUtils.hasClassName(li, ANOTHER_CLASS_NAME ));
100         assertFalse(DomUtils.hasClassName(li,ANOTHER_CLASS_NAME+ANOTHER_CLASS_NAME));
101         
102         li = doc.getElementById(CLASS_BREAKER_ID);
103         assertFalse(DomUtils.hasClassName(li,LIST_ITEM_CLASS_NAME));
104     }
105     
106     public void testIsElementNode() {
107         Element html = doc.getDocumentElement();
108         assertTrue(DomUtils.isElementNode(html));
109         assertFalse(DomUtils.isElementNode(html.getFirstChild()));
110         Node title = doc.getElementsByTagName(Xhtml.Tag.TITLE.toString()).item(0);
111         assertTrue(DomUtils.isElementNode(title));
112         assertFalse(DomUtils.isElementNode(title.getFirstChild()));
113     }
114     
115     public void testGetFirstAncestorByClassName() {
116         Element firstListItem = doc.getElementById( FIRST_LIST_ITEM_ID );
117         assertEquals(Xhtml.Tag.LI.toString(),
118                      firstListItem.getTagName());
119         Element mainList = DomUtils.getFirstAncestorByClassName(
120                                                         firstListItem,
121                                                         LIST_CLASS_NAME );
122         assertEquals(Xhtml.Tag.UL.toString(),
123                      mainList.getTagName());
124         assertTrue(DomUtils.hasId( mainList, MAIN_LIST_ID ));
125     }
126     
127     public void testGetFirstAncestorOrSelfByClassName() {
128         Element ul = doc.getElementById( FIRST_SUB_LIST_ID );
129         Element target = DomUtils.getFirstAncestorOrSelfByClassName(
130                                                     ul,
131                                                     LIST_CLASS_NAME);
132         assertSame(ul,target);
133         assertTrue(DomUtils.hasId(ul,FIRST_SUB_LIST_ID));
134         
135         Element li = doc.getElementById( FIRST_LIST_ITEM_ID );
136         target = DomUtils.getFirstAncestorOrSelfByClassName(
137                                                     li,
138                                                     LIST_CLASS_NAME);
139         assertNotSame(li,target);
140         assertTrue(DomUtils.hasId(ul,FIRST_SUB_LIST_ID));
141     }
142     
143     public void testGetFirstChildByClassName() {
144         Element body = doc.getElementById( DOC_BODY_ID );
145         Element h1 = DomUtils.getFirstChildByClassName(body,HEADER_CLASS_NAME);
146         assertTrue(DomUtils.hasId(h1,MAIN_HEADER_ID));
147         assertTrue(DomUtils.hasClassName(h1,HEADER_CLASS_NAME));
148         Element mainList = doc.getElementById( MAIN_LIST_ID );
149         Element li =
150             DomUtils.getFirstChildByClassName(mainList,LIST_ITEM_CLASS_NAME);
151         assertTrue(DomUtils.hasId(li,FIRST_LIST_ITEM_ID));
152     }
153     
154     public void testGetFirstDescendantByClassNameBreadthFirst() {
155         Element html = doc.getDocumentElement();
156         Element h1 = DomUtils.getFirstDescendantByClassNameBreadthFirst(
157                                                             html,
158                                                             HEADER_CLASS_NAME);
159         assertTrue(DomUtils.hasId(h1,MAIN_HEADER_ID));
160         assertTrue(DomUtils.hasClassName(h1,HEADER_CLASS_NAME));
161         assertFalse(DomUtils.hasClassName(h1,"header-"));
162         
163         Element body = doc.getElementById( DOC_BODY_ID );
164         h1 = DomUtils.getFirstDescendantByClassNameBreadthFirst(
165                                                             body,
166                                                             HEADER_CLASS_NAME);
167         assertTrue(DomUtils.hasId(h1,MAIN_HEADER_ID));
168         assertTrue(DomUtils.hasClassName(h1,HEADER_CLASS_NAME));
169         assertFalse(DomUtils.hasClassName(h1,"-header"));
170         assertFalse(DomUtils.hasClassName(h1,"headerheader"));
171         
172         Element li = DomUtils.getFirstDescendantByClassNameBreadthFirst(
173                                                     body,
174                                                     DEPTH_BREADTH_CLASS_NAME );
175         assertTrue(DomUtils.hasId(li,BREADTH_FIRST_ID));
176     }
177
178     public void testGetFirstDescendantByClassNameDepthFirst() {
179         Element html = doc.getDocumentElement();
180         Element h1 = DomUtils.getFirstDescendantByClassNameDepthFirst(
181                                                     html,
182                                                     HEADER_CLASS_NAME);
183         assertTrue(DomUtils.hasId(h1,MAIN_HEADER_ID));
184         assertTrue(DomUtils.hasClassName(h1,HEADER_CLASS_NAME));
185         assertFalse(DomUtils.hasClassName(h1,"header-"));
186         
187         Element body = doc.getElementById( DOC_BODY_ID );
188         h1 = DomUtils.getFirstDescendantByClassNameDepthFirst(
189                                                     body,
190                                                     HEADER_CLASS_NAME);
191         assertTrue(DomUtils.hasId(h1,MAIN_HEADER_ID));
192         assertTrue(DomUtils.hasClassName(h1,HEADER_CLASS_NAME));
193         assertFalse(DomUtils.hasClassName(h1,"-header"));
194         assertFalse(DomUtils.hasClassName(h1,"headerheader"));
195         
196         Element li = DomUtils.getFirstDescendantByClassNameDepthFirst(
197                                                     body,
198                                                     DEPTH_BREADTH_CLASS_NAME );
199         assertTrue(DomUtils.hasId(li,DEPTH_FIRST_ID));
200     }
201     
202     public void testGetChildrenByClassName() {
203         Element ul = doc.getElementById( MAIN_LIST_ID );
204         List JavaDoc lis = DomUtils.getChildrenByClassName(ul,LIST_ITEM_CLASS_NAME);
205         assertEquals(3,lis.size());
206     }
207     
208     public void testGetDescendantsByClassName() {
209         Element ul = doc.getElementById( FIRST_SUB_LIST_ID );
210         List JavaDoc lis = DomUtils.getDescendantsByClassName(ul,LIST_ITEM_CLASS_NAME);
211         assertEquals(1,lis.size());
212         ul = doc.getElementById( MAIN_LIST_ID );
213         lis = DomUtils.getDescendantsByClassName(ul,LIST_ITEM_CLASS_NAME);
214         assertEquals(5,lis.size());
215     }
216 }
217
218
219 /***************************
220
221 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
222 "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
223 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
224 <head>
225 <meta http-equiv="content-type" content="text/html; charset=utf-8" />
226 <title>DomUtils Test Document</title>
227 </head>
228 <body id="doc-body" class="test-body another-class">
229 <h1 id="main-header" class="header">DomUtils Test Document</h1>
230 <ul id="main-list" class="list another-class">
231 <li id="first-list-item" class="list-item">List Item!
232 <ul id="first-sub-list" class="list another-class">
233 <li id="depth-first" class="list-item sub-list-item depth-breadth">Nested List Item!</li>
234 </ul>
235 </li>
236 <li id="breadth-first" class="list-item depth-breadth"></li>
237 <li id="class-breaker" class="no-list-item">
238 <li class="list-item"></li>
239 </li>
240 <li class="list-item"></li>
241 </ul>
242 </body>
243 </html>
244
245 ****************************/

246
Popular Tags