1 16 17 package org.ditchnet.xml.dom; 18 19 import java.util.List ; 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 ; 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 [] 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 RES_FILE_SYSTEM_ID 44 = "testResources/domUtilsTestDoc.xml"; 45 46 final static String DOC_BODY_ID = "doc-body"; 47 final static String MAIN_HEADER_ID = "main-header"; 48 final static String HEADER_CLASS_NAME = "header"; 49 final static String MAIN_LIST_ID = "main-list"; 50 final static String FIRST_LIST_ITEM_ID = "first-list-item"; 51 final static String FIRST_SUB_LIST_ID = "first-sub-list"; 52 final static String CLASS_BREAKER_ID = "class-breaker"; 53 final static String LIST_CLASS_NAME = "list"; 54 final static String LIST_ITEM_CLASS_NAME = "list-item"; 55 final static String ANOTHER_CLASS_NAME = "another-class"; 56 final static String DEPTH_FIRST_ID = "depth-first"; 57 final static String BREADTH_FIRST_ID = "breadth-first"; 58 final static String DEPTH_BREADTH_CLASS_NAME = "depth-breadth"; 59 60 Document doc; 61 62 public DomUtilsTest(String name) { 63 super(name); 64 } 65 66 public void setUp() throws Exception { 67 DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); 68 DocumentBuilder builder = factory.newDocumentBuilder(); 69 doc = builder.parse( 70 new InputSource ( 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 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 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 246 | Popular Tags |