1 /* 2 * Licensed to the Apache Software Foundation (ASF) under one 3 * or more contributor license agreements. See the NOTICE file 4 * distributed with this work for additional information 5 * regarding copyright ownership. The ASF licenses this file 6 * to you under the Apache License, Version 2.0 (the "License"); 7 * you may not use this file except in compliance with the License. 8 * You may obtain a copy of the License at 9 * 10 * http://www.apache.org/licenses/LICENSE-2.0 11 * 12 * Unless required by applicable law or agreed to in writing, software 13 * distributed under the License is distributed on an "AS IS" BASIS, 14 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 15 * See the License for the specific language governing permissions and 16 * limitations under the License. 17 */ 18 /* 19 * $Id$ 20 */ 21 package org.apache.qetest.xalanj2; 22 23 import android.platform.test.annotations.FlakyTest; 24 import java.io.StringReader; 25 import java.util.Properties; 26 27 import javax.xml.parsers.DocumentBuilder; 28 import javax.xml.parsers.DocumentBuilderFactory; 29 30 import org.apache.qetest.FileBasedTest; 31 import org.apache.xml.utils.PrefixResolver; 32 import org.apache.xml.utils.PrefixResolverDefault; 33 import org.junit.Test; 34 import org.w3c.dom.Document; 35 import org.w3c.dom.Element; 36 import org.w3c.dom.Node; 37 import org.xml.sax.InputSource; 38 39 //------------------------------------------------------------------------- 40 41 /** 42 * Functionality/system/integration tests for PrefixResolver. 43 * 44 * Very simple coverage test. 45 * 46 * @author shane_curcuru@us.ibm.com 47 * @version $Id$ 48 */ 49 public class PrefixResolverAPITest extends FileBasedTest 50 { 51 /** Just initialize test name, comment, numTestCases. */ PrefixResolverAPITest()52 public PrefixResolverAPITest() 53 { 54 numTestCases = 1; // REPLACE_num 55 testName = "PrefixResolverAPITest"; 56 testComment = "Functionality/system/integration tests for PrefixResolver"; 57 } 58 59 60 /** 61 * Initialize this test - Set names of xml/xsl test files. 62 * 63 * @param p Properties to initialize from (if needed) 64 * @return false if we should abort the test; true otherwise 65 */ doTestFileInit(Properties p)66 public boolean doTestFileInit(Properties p) 67 { 68 /* no-op */ 69 return true; 70 } 71 72 /** XML prefixes and namespaces in our DOM to test. */ 73 protected static String[][] XMLDOC_PREFIXES = 74 { 75 { "", "urn://doc.level.attr/xmlns" } , /* default ns */ 76 { "pre", "urn://doc.level.attr/preNS" }, 77 { "other", "urn://doc.level.attr/otherNS" }, 78 { "subNS", "urn://doc.subElement/subNS" }/* ns only on subElement */ 79 }; 80 81 /** XML string for our DOM to test. */ 82 protected static String XMLDOC = 83 "<?xml version=\"1.0\" encoding=\"UTF-8\"?>" + "\n" + 84 "<pre:document " + "\n" + 85 "docLevelAttr=\"urn://doc.level.attr/notNS\"" + "\n" + 86 "xmlns=\"" + XMLDOC_PREFIXES[0][1] + "\"" + "\n" + 87 "xmlns:" + XMLDOC_PREFIXES[1][0] + "=\"" + XMLDOC_PREFIXES[1][1] + "\" " + "\n" + 88 "xmlns:" + XMLDOC_PREFIXES[2][0] + "=\"" + XMLDOC_PREFIXES[2][1] + "\" " + "\n" + 89 ">" + "\n" + 90 "<pre:element elementAttr=\"elementAttrVal\" elementAttrNS=\"pre:elementAttrValNS\" xml:lang=\"en\">" + "\n" + 91 " <pre:subElement subElementAttr=\"subElementAttrVal\" xmlns:" + XMLDOC_PREFIXES[3][0] + "=\"" + XMLDOC_PREFIXES[3][1] + "\" subElementAttrNS=\"other:subElementAttrValNS\">" + "\n" + 92 " <pre:subSubElement />" + "\n" + 93 " </pre:subElement>" + "\n" + 94 "</pre:element>" + "\n" + 95 "</pre:document>" ; 96 97 /** 98 * Read in hard-coded dom and try resolving some namespaces. 99 * 100 * @return false if we should abort the test; true otherwise 101 */ testCase1()102 public boolean testCase1() 103 { 104 reporter.testCaseInit("Read in hard-coded dom and try resolving some namespaces"); 105 106 try 107 { 108 // Startup a factory and docbuilder, create some nodes/DOMs 109 DocumentBuilderFactory dfactory = DocumentBuilderFactory.newInstance(); 110 dfactory.setNamespaceAware(true); 111 DocumentBuilder docBuilder = dfactory.newDocumentBuilder(); 112 113 reporter.logArbitrary(reporter.TRACEMSG, "hardcoded XML text is:" + XMLDOC); 114 reporter.logTraceMsg("parsing hardcoded XML"); 115 Document doc = docBuilder.parse(new InputSource(new StringReader(XMLDOC))); 116 Element docElem = doc.getDocumentElement(); 117 118 // Test from the root element 119 PrefixResolver docResolver = new PrefixResolverDefault(docElem); 120 reporter.logStatusMsg("new PrefixResolver(" + docElem.getNodeName() + ") is: " + docResolver); 121 // -1 because only subelem has last prefix available 122 for (int i = 0; i < (XMLDOC_PREFIXES.length - 1); i++) 123 { 124 String ns = docResolver.getNamespaceForPrefix(XMLDOC_PREFIXES[i][0]); 125 reporter.check(ns, XMLDOC_PREFIXES[i][1], "getNamespaceForPrefix(" + XMLDOC_PREFIXES[i][0] + ") = " + ns); 126 } 127 128 // Try again, from further down the tree (* is match any ns) 129 Node elemElem = doc.getElementsByTagNameNS("*", "element").item(0); 130 PrefixResolver elemResolver = new PrefixResolverDefault(elemElem); 131 reporter.logStatusMsg("new PrefixResolver(" + elemElem.getNodeName() + ") is: " + elemResolver); 132 // -1 because only subelem has last prefix available 133 for (int i = 0; i < (XMLDOC_PREFIXES.length - 1); i++) 134 { 135 String ns = elemResolver.getNamespaceForPrefix(XMLDOC_PREFIXES[i][0]); 136 reporter.check(ns, XMLDOC_PREFIXES[i][1], "getNamespaceForPrefix(" + XMLDOC_PREFIXES[i][0] + ") = " + ns); 137 } 138 139 // Try again, from further down the tree with additional ns (* is match any ns) 140 Node subElem = doc.getElementsByTagNameNS("*", "subElement").item(0); 141 PrefixResolver subResolver = new PrefixResolverDefault(subElem); 142 reporter.logStatusMsg("new PrefixResolver(" + subElem.getNodeName() + ") is: " + subResolver); 143 for (int i = 0; i < XMLDOC_PREFIXES.length; i++) 144 { 145 String ns = subResolver.getNamespaceForPrefix(XMLDOC_PREFIXES[i][0]); 146 reporter.check(ns, XMLDOC_PREFIXES[i][1], "getNamespaceForPrefix(" + XMLDOC_PREFIXES[i][0] + ") = " + ns); 147 } 148 149 // Try again, from further down the tree with additional ns (* is match any ns) 150 Node subSubElem = doc.getElementsByTagNameNS("*", "subSubElement").item(0); 151 PrefixResolver subSubResolver = new PrefixResolverDefault(subSubElem); 152 reporter.logStatusMsg("new PrefixResolver(" + subSubElem.getNodeName() + ") is: " + subSubResolver); 153 for (int i = 0; i < XMLDOC_PREFIXES.length; i++) 154 { 155 String ns = subSubResolver.getNamespaceForPrefix(XMLDOC_PREFIXES[i][0]); 156 reporter.check(ns, XMLDOC_PREFIXES[i][1], "getNamespaceForPrefix(" + XMLDOC_PREFIXES[i][0] + ") = " + ns); 157 } 158 } 159 catch (Throwable t) 160 { 161 reporter.logThrowable(reporter.ERRORMSG, t, "testCase1 threw"); 162 reporter.checkFail("testCase1 threw: " + t.toString()); 163 } 164 165 reporter.testCaseClose(); 166 return true; 167 } 168 169 170 /** 171 * Convenience method to print out usage information - update if needed. 172 * @return String denoting usage of this test class 173 */ usage()174 public String usage() 175 { 176 return ("Common [optional] options supported by PrefixResolverAPITest:\n" 177 + super.usage()); // Grab our parent classes usage as well 178 } 179 180 181 /** 182 * Main method to run test from the command line - can be left alone. 183 * @param args command line argument array 184 */ main(String[] args)185 public static void main(String[] args) 186 { 187 PrefixResolverAPITest app = new PrefixResolverAPITest(); 188 app.doMain(args); 189 } 190 191 // Android-added: Run main method as a JUnit test case. 192 @FlakyTest(bugId = 292520220) 193 @Test main()194 public void main() { 195 main(new String[0]); 196 } 197 } 198