xref: /aosp_15_r20/external/apache-xml/test/tests/bugzilla/Bugzilla4336.java (revision 1212f9a0ffdc28482b8821715d2222bf16dc14e2)
1*1212f9a0SAndroid Build Coastguard Worker /*
2*1212f9a0SAndroid Build Coastguard Worker  * Licensed to the Apache Software Foundation (ASF) under one
3*1212f9a0SAndroid Build Coastguard Worker  * or more contributor license agreements. See the NOTICE file
4*1212f9a0SAndroid Build Coastguard Worker  * distributed with this work for additional information
5*1212f9a0SAndroid Build Coastguard Worker  * regarding copyright ownership. The ASF licenses this file
6*1212f9a0SAndroid Build Coastguard Worker  * to you under the Apache License, Version 2.0 (the  "License");
7*1212f9a0SAndroid Build Coastguard Worker  * you may not use this file except in compliance with the License.
8*1212f9a0SAndroid Build Coastguard Worker  * You may obtain a copy of the License at
9*1212f9a0SAndroid Build Coastguard Worker  *
10*1212f9a0SAndroid Build Coastguard Worker  *     http://www.apache.org/licenses/LICENSE-2.0
11*1212f9a0SAndroid Build Coastguard Worker  *
12*1212f9a0SAndroid Build Coastguard Worker  * Unless required by applicable law or agreed to in writing, software
13*1212f9a0SAndroid Build Coastguard Worker  * distributed under the License is distributed on an "AS IS" BASIS,
14*1212f9a0SAndroid Build Coastguard Worker  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15*1212f9a0SAndroid Build Coastguard Worker  * See the License for the specific language governing permissions and
16*1212f9a0SAndroid Build Coastguard Worker  * limitations under the License.
17*1212f9a0SAndroid Build Coastguard Worker  */
18*1212f9a0SAndroid Build Coastguard Worker // Common Qetest / Xalan testing imports
19*1212f9a0SAndroid Build Coastguard Worker import org.apache.qetest.Datalet;
20*1212f9a0SAndroid Build Coastguard Worker import org.apache.qetest.Logger;
21*1212f9a0SAndroid Build Coastguard Worker import org.apache.qetest.TestletImpl;
22*1212f9a0SAndroid Build Coastguard Worker 
23*1212f9a0SAndroid Build Coastguard Worker // REPLACE_imports needed for reproducing the bug
24*1212f9a0SAndroid Build Coastguard Worker import java.io.*;
25*1212f9a0SAndroid Build Coastguard Worker import org.w3c.dom.*;
26*1212f9a0SAndroid Build Coastguard Worker import javax.xml.parsers.*;
27*1212f9a0SAndroid Build Coastguard Worker import javax.xml.parsers.ParserConfigurationException;
28*1212f9a0SAndroid Build Coastguard Worker import javax.xml.transform.TransformerException;
29*1212f9a0SAndroid Build Coastguard Worker import org.xml.sax.SAXException;
30*1212f9a0SAndroid Build Coastguard Worker import org.apache.xpath.XPathAPI;
31*1212f9a0SAndroid Build Coastguard Worker 
32*1212f9a0SAndroid Build Coastguard Worker /**
33*1212f9a0SAndroid Build Coastguard Worker  * Testlet for reproducing Bugzilla reported bugs.
34*1212f9a0SAndroid Build Coastguard Worker  *
35*1212f9a0SAndroid Build Coastguard Worker  * @author [email protected]
36*1212f9a0SAndroid Build Coastguard Worker  */
37*1212f9a0SAndroid Build Coastguard Worker public class Bugzilla4336 extends TestletImpl
38*1212f9a0SAndroid Build Coastguard Worker {
39*1212f9a0SAndroid Build Coastguard Worker     // Initialize our classname for TestletImpl's main() method - must be updated!
40*1212f9a0SAndroid Build Coastguard Worker     static { thisClassName = "Bugzilla4336"; }
41*1212f9a0SAndroid Build Coastguard Worker 
42*1212f9a0SAndroid Build Coastguard Worker     static final String _nodeSetInput1 = "<?xml version=\"1.0\"?>\n"
43*1212f9a0SAndroid Build Coastguard Worker                                         + "<!DOCTYPE doc [\n"
44*1212f9a0SAndroid Build Coastguard Worker                                         + "<!ELEMENT doc (n+)>\n"
45*1212f9a0SAndroid Build Coastguard Worker                                         + "<!ELEMENT n (#PCDATA)>\n" + "]>\n"
46*1212f9a0SAndroid Build Coastguard Worker                                         + "<!-- full document with decl -->"
47*1212f9a0SAndroid Build Coastguard Worker                                         + "<doc><n>1</n></doc>";
48*1212f9a0SAndroid Build Coastguard Worker 
49*1212f9a0SAndroid Build Coastguard Worker     static final String _xpath = "(.//. | .//@* | .//namespace::*)";
50*1212f9a0SAndroid Build Coastguard Worker     /**
51*1212f9a0SAndroid Build Coastguard Worker      * Write Minimal code to reproduce your Bugzilla bug report.
52*1212f9a0SAndroid Build Coastguard Worker      * @param d (optional) Datalet to use as data point for the test.
53*1212f9a0SAndroid Build Coastguard Worker      */
execute(Datalet d)54*1212f9a0SAndroid Build Coastguard Worker     public void execute(Datalet d)
55*1212f9a0SAndroid Build Coastguard Worker 	{
56*1212f9a0SAndroid Build Coastguard Worker         // Use logger.logMsg(...) instead of System.out.println(...)
57*1212f9a0SAndroid Build Coastguard Worker         logger.logMsg(Logger.STATUSMSG, "Reproducing Bugzilla#4336: Xalan 2.2.D11 adds a strange Attribute");
58*1212f9a0SAndroid Build Coastguard Worker 
59*1212f9a0SAndroid Build Coastguard Worker         // Comment out ref to Xerces 1.x class for upcoming Xerces 2.x checkin
60*1212f9a0SAndroid Build Coastguard Worker         // When running via 'build bugzilla.classes bugzilla', the Xerces
61*1212f9a0SAndroid Build Coastguard Worker         //  version will already be reported by the test harness
62*1212f9a0SAndroid Build Coastguard Worker         // logger.logMsg(Logger.STATUSMSG, "Apache Xerces "
63*1212f9a0SAndroid Build Coastguard Worker         //              + org.apache.xerces.framework.Version.fVersion);
64*1212f9a0SAndroid Build Coastguard Worker         logger.logMsg(Logger.STATUSMSG, "Apache Xalan  "
65*1212f9a0SAndroid Build Coastguard Worker                       + org.apache.xalan.Version.getVersion());
66*1212f9a0SAndroid Build Coastguard Worker         try
67*1212f9a0SAndroid Build Coastguard Worker         {
68*1212f9a0SAndroid Build Coastguard Worker             DocumentBuilderFactory dfactory = DocumentBuilderFactory.newInstance();
69*1212f9a0SAndroid Build Coastguard Worker 
70*1212f9a0SAndroid Build Coastguard Worker             dfactory.setValidating(false);
71*1212f9a0SAndroid Build Coastguard Worker             dfactory.setNamespaceAware(true);
72*1212f9a0SAndroid Build Coastguard Worker 
73*1212f9a0SAndroid Build Coastguard Worker             DocumentBuilder db = dfactory.newDocumentBuilder();
74*1212f9a0SAndroid Build Coastguard Worker             Document document =
75*1212f9a0SAndroid Build Coastguard Worker             db.parse(new ByteArrayInputStream(_nodeSetInput1.getBytes()));
76*1212f9a0SAndroid Build Coastguard Worker             NodeList nl = XPathAPI.selectNodeList(document, _xpath);
77*1212f9a0SAndroid Build Coastguard Worker 
78*1212f9a0SAndroid Build Coastguard Worker             for (int i = 0; i < nl.getLength(); i++)
79*1212f9a0SAndroid Build Coastguard Worker             {
80*1212f9a0SAndroid Build Coastguard Worker                 logger.logMsg(Logger.STATUSMSG, i + " "
81*1212f9a0SAndroid Build Coastguard Worker                               + getNodeTypeString(nl.item(i)) + " " + nl.item(i));
82*1212f9a0SAndroid Build Coastguard Worker 
83*1212f9a0SAndroid Build Coastguard Worker                 if (nl.item(i).getNodeType() == Node.ATTRIBUTE_NODE)
84*1212f9a0SAndroid Build Coastguard Worker                 {
85*1212f9a0SAndroid Build Coastguard Worker                     Attr a = (Attr) nl.item(i);
86*1212f9a0SAndroid Build Coastguard Worker 
87*1212f9a0SAndroid Build Coastguard Worker                     logger.logMsg(Logger.STATUSMSG, i + " " + a.getNodeName() + " "
88*1212f9a0SAndroid Build Coastguard Worker                                        + a.getNodeValue());
89*1212f9a0SAndroid Build Coastguard Worker                     logger.logMsg(Logger.STATUSMSG, i + " specified " + a.getSpecified());
90*1212f9a0SAndroid Build Coastguard Worker                     logger.logMsg(Logger.STATUSMSG, i + " owner document: " + a.getOwnerDocument());
91*1212f9a0SAndroid Build Coastguard Worker                 }
92*1212f9a0SAndroid Build Coastguard Worker             }
93*1212f9a0SAndroid Build Coastguard Worker         }
94*1212f9a0SAndroid Build Coastguard Worker         catch (Throwable t)
95*1212f9a0SAndroid Build Coastguard Worker         {
96*1212f9a0SAndroid Build Coastguard Worker             logger.logThrowable(Logger.ERRORMSG, t, "Iterating document");
97*1212f9a0SAndroid Build Coastguard Worker             logger.checkFail("Iterating document threw: " + t.toString());
98*1212f9a0SAndroid Build Coastguard Worker         }
99*1212f9a0SAndroid Build Coastguard Worker    	}
100*1212f9a0SAndroid Build Coastguard Worker 
101*1212f9a0SAndroid Build Coastguard Worker     static String[] nodeTypeString = new String[]{ "", "ELEMENT", "ATTRIBUTE",
102*1212f9a0SAndroid Build Coastguard Worker                                       "TEXT_NODE", "CDATA_SECTION",
103*1212f9a0SAndroid Build Coastguard Worker                                       "ENTITY_REFERENCE", "ENTITY",
104*1212f9a0SAndroid Build Coastguard Worker                                       "PROCESSING_INSTRUCTION",
105*1212f9a0SAndroid Build Coastguard Worker                                       "COMMENT", "DOCUMENT",
106*1212f9a0SAndroid Build Coastguard Worker                                       "DOCUMENT_TYPE",
107*1212f9a0SAndroid Build Coastguard Worker                                       "DOCUMENT_FRAGMENT",
108*1212f9a0SAndroid Build Coastguard Worker                                       "NOTATION" };
109*1212f9a0SAndroid Build Coastguard Worker 
getNodeTypeString(short nodeType)110*1212f9a0SAndroid Build Coastguard Worker     public static String getNodeTypeString(short nodeType)
111*1212f9a0SAndroid Build Coastguard Worker     {
112*1212f9a0SAndroid Build Coastguard Worker         if ((nodeType > 0) && (nodeType < 13))
113*1212f9a0SAndroid Build Coastguard Worker         {
114*1212f9a0SAndroid Build Coastguard Worker             return nodeTypeString[nodeType];
115*1212f9a0SAndroid Build Coastguard Worker         } else
116*1212f9a0SAndroid Build Coastguard Worker         {
117*1212f9a0SAndroid Build Coastguard Worker             return "";
118*1212f9a0SAndroid Build Coastguard Worker         }
119*1212f9a0SAndroid Build Coastguard Worker     }
120*1212f9a0SAndroid Build Coastguard Worker 
getNodeTypeString(Node n)121*1212f9a0SAndroid Build Coastguard Worker     public static String getNodeTypeString(Node n)
122*1212f9a0SAndroid Build Coastguard Worker     {
123*1212f9a0SAndroid Build Coastguard Worker         return getNodeTypeString(n.getNodeType());
124*1212f9a0SAndroid Build Coastguard Worker     }
125*1212f9a0SAndroid Build Coastguard Worker 
126*1212f9a0SAndroid Build Coastguard Worker     /**
127*1212f9a0SAndroid Build Coastguard Worker      * <a href="http://nagoya.apache.org/bugzilla/show_bug.cgi?id=4336">
128*1212f9a0SAndroid Build Coastguard Worker      * Link to Bugzilla report</a>
129*1212f9a0SAndroid Build Coastguard Worker      * @return Xalan 2.2.D11 adds a strange Attribute.
130*1212f9a0SAndroid Build Coastguard Worker      */
getDescription()131*1212f9a0SAndroid Build Coastguard Worker     public String getDescription()
132*1212f9a0SAndroid Build Coastguard Worker     {
133*1212f9a0SAndroid Build Coastguard Worker         return "Xalan 2.2.D11 adds a strange Attribute";
134*1212f9a0SAndroid Build Coastguard Worker     }
135*1212f9a0SAndroid Build Coastguard Worker 
136*1212f9a0SAndroid Build Coastguard Worker }  // end of class Bugzilla4336
137*1212f9a0SAndroid Build Coastguard Worker 
138