1 18 package org.apache.batik.test.xml; 19 20 import java.io.StringWriter ; 21 import java.io.PrintWriter ; 22 23 24 import javax.xml.parsers.DocumentBuilderFactory ; 25 import javax.xml.parsers.DocumentBuilder ; 26 27 import org.apache.batik.test.DefaultTestSuite; 28 import org.apache.batik.test.TestSuite; 29 import org.apache.batik.test.Test; 30 import org.apache.batik.test.TestException; 31 32 import org.w3c.dom.Element ; 33 import org.w3c.dom.Document ; 34 import org.w3c.dom.Node ; 35 import org.w3c.dom.NodeList ; 36 37 44 public class XMLTestSuiteLoader implements XTSConstants { 45 46 53 public static final String TEST_SUITE_LOADING_EXCEPTION 54 = "xml.XMLTestSuiteLoader.error.test.suite.loading.exception"; 55 56 64 public static final String CANNOT_CREATE_TEST 65 = "xml.XMLTestSuiteLoader.error.cannot.create.test"; 66 67 70 public static TestSuite loadTestSuite(String testSuiteURI, 71 TestSuite parent) 72 throws TestException{ 73 Document testSuiteDocument = loadTestSuiteDocument(testSuiteURI); 75 return buildTestSuite(testSuiteDocument.getDocumentElement(), parent); 76 } 77 78 81 protected static Document loadTestSuiteDocument(String testSuiteURI) 82 throws TestException{ 83 84 Document doc = null; 85 86 try{ 87 DocumentBuilder docBuilder 88 = DocumentBuilderFactory.newInstance().newDocumentBuilder(); 89 90 doc = docBuilder.parse(testSuiteURI); 91 }catch(Exception e){ 92 StringWriter sw = new StringWriter (); 93 PrintWriter pw = new PrintWriter (sw); 94 e.printStackTrace(pw); 95 throw new TestException(TEST_SUITE_LOADING_EXCEPTION, 96 new Object [] { testSuiteURI, 97 e.getClass().getName(), 98 e.getMessage(), 99 sw.toString() }, 100 e); 101 102 } 103 104 return doc; 105 } 106 107 113 protected static TestSuite buildTestSuite(Element element, 114 TestSuite parent) 115 throws TestException { 116 DefaultTestSuite testSuite 117 = new DefaultTestSuite(); 118 119 120 123 String suiteId 124 = element.getAttribute(XTS_ID_ATTRIBUTE); 125 126 testSuite.setId(suiteId); 127 128 NodeList children = element.getChildNodes(); 129 if(children != null && children.getLength() > 0){ 130 int n = children.getLength(); 131 for(int i=0; i<n; i++){ 132 Node child = children.item(i); 133 if(child.getNodeType() == Node.ELEMENT_NODE){ 134 Element childElement = (Element )child; 135 String tagName = childElement.getTagName().intern(); 136 if(tagName == XTS_TEST_TAG){ 138 Test t = buildTest(childElement); 139 testSuite.addTest(t); 140 } 141 else if(tagName == XTS_TEST_GROUP_TAG){ 142 Test t = buildTestSuite(childElement, testSuite); 143 testSuite.addTest(t); 144 } 145 } 146 } 147 } 148 149 return testSuite; 150 } 151 152 protected static Test buildTest(Element element) throws TestException { 153 try{ 154 Test t = (Test)XMLReflect.buildObject(element); 155 156 String id 157 = element.getAttribute(XTS_ID_ATTRIBUTE); 158 t.setId(id); 159 return t; 160 }catch (Exception e) { 161 StringWriter sw = new StringWriter (); 162 PrintWriter pw = new PrintWriter (sw); 163 e.printStackTrace(pw); 164 throw new TestException(CANNOT_CREATE_TEST, 165 new Object [] { element.getAttribute(XR_CLASS_ATTRIBUTE), 166 e.getClass().getName(), 167 e.getMessage(), 168 sw.toString() }, 169 e); 170 } 171 } 172 173 174 } 175 | Popular Tags |