xref: /aosp_15_r20/external/apache-xml/test/tests/bugzilla/Bugzilla6329.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 import java.io.ByteArrayInputStream;
24*1212f9a0SAndroid Build Coastguard Worker import org.apache.xpath.CachedXPathAPI;
25*1212f9a0SAndroid Build Coastguard Worker import org.w3c.dom.*;
26*1212f9a0SAndroid Build Coastguard Worker import javax.xml.parsers.*;
27*1212f9a0SAndroid Build Coastguard Worker 
28*1212f9a0SAndroid Build Coastguard Worker /**
29*1212f9a0SAndroid Build Coastguard Worker  * Testlet for reproducing Bugzilla reported bugs.
30*1212f9a0SAndroid Build Coastguard Worker  *
31*1212f9a0SAndroid Build Coastguard Worker  * @author [email protected]
32*1212f9a0SAndroid Build Coastguard Worker  * @author [email protected]
33*1212f9a0SAndroid Build Coastguard Worker  */
34*1212f9a0SAndroid Build Coastguard Worker public class Bugzilla6329 extends TestletImpl
35*1212f9a0SAndroid Build Coastguard Worker {
36*1212f9a0SAndroid Build Coastguard Worker     // Initialize our classname for TestletImpl's main() method - must be updated!
37*1212f9a0SAndroid Build Coastguard Worker     static { thisClassName = "Bugzilla6329"; }
38*1212f9a0SAndroid Build Coastguard Worker 
39*1212f9a0SAndroid Build Coastguard Worker     /**
40*1212f9a0SAndroid Build Coastguard Worker      * The following program tries to select all nodes in the document using an
41*1212f9a0SAndroid Build Coastguard Worker      * XPath expression but the XPath misses the CDATA section.
42*1212f9a0SAndroid Build Coastguard Worker      * User reported output is:
43*1212f9a0SAndroid Build Coastguard Worker      * <PRE>
44*1212f9a0SAndroid Build Coastguard Worker      * Xerces-J 2.0.0
45*1212f9a0SAndroid Build Coastguard Worker      * Xalan Java 2.2.0
46*1212f9a0SAndroid Build Coastguard Worker      * 0 (DOCUMENT): [#document: null]
47*1212f9a0SAndroid Build Coastguard Worker      * 1 (ELEMENT): [svg: null]
48*1212f9a0SAndroid Build Coastguard Worker      * 2 (ATTRIBUTE): onload="thisInit()"
49*1212f9a0SAndroid Build Coastguard Worker      * 3 (ATTRIBUTE): width="106.786pt"
50*1212f9a0SAndroid Build Coastguard Worker      * 4 (ATTRIBUTE): xml:space="preserve"
51*1212f9a0SAndroid Build Coastguard Worker      * 5 (ATTRIBUTE): org.apache.xml.dtm.ref.dom2dtm.DOM2DTMdefaultNamespaceDeclarationNode@5b699b
52*1212f9a0SAndroid Build Coastguard Worker      * 6 (TEXT_NODE): [#text:
53*1212f9a0SAndroid Build Coastguard Worker      * ]
54*1212f9a0SAndroid Build Coastguard Worker      * 7 (ELEMENT): [style: null]
55*1212f9a0SAndroid Build Coastguard Worker      * 8 (ATTRIBUTE): type="text/css"
56*1212f9a0SAndroid Build Coastguard Worker      * 9 (ATTRIBUTE): xml:space=""
57*1212f9a0SAndroid Build Coastguard Worker      * 10 (TEXT_NODE): [#text:
58*1212f9a0SAndroid Build Coastguard Worker      * ]
59*1212f9a0SAndroid Build Coastguard Worker      * 11 (TEXT_NODE): [#text:
60*1212f9a0SAndroid Build Coastguard Worker      * ]
61*1212f9a0SAndroid Build Coastguard Worker      * </PRE>
62*1212f9a0SAndroid Build Coastguard Worker      * @param d (optional) Datalet to use as data point for the test.
63*1212f9a0SAndroid Build Coastguard Worker      */
execute(Datalet d)64*1212f9a0SAndroid Build Coastguard Worker     public void execute(Datalet d)
65*1212f9a0SAndroid Build Coastguard Worker 	{
66*1212f9a0SAndroid Build Coastguard Worker         // Use logger.logMsg(...) instead of System.out.println(...)
67*1212f9a0SAndroid Build Coastguard Worker         logger.logMsg(Logger.STATUSMSG, "Reproducing Bugzilla#6329");
68*1212f9a0SAndroid Build Coastguard Worker 
69*1212f9a0SAndroid Build Coastguard Worker         String input =
70*1212f9a0SAndroid Build Coastguard Worker         "<svg  width='106.786pt' xml:space='preserve' onload='thisInit()'>\n" +
71*1212f9a0SAndroid Build Coastguard Worker         "<style type='text/css' xml:space=''>\n" +
72*1212f9a0SAndroid Build Coastguard Worker         "<![CDATA[\n" +
73*1212f9a0SAndroid Build Coastguard Worker         "    @font-face{font-family:'RussellSquare-Oblique';src:url(Arial.cef)}\n" +
74*1212f9a0SAndroid Build Coastguard Worker         "]]>\n" +
75*1212f9a0SAndroid Build Coastguard Worker         "</style>\n" +
76*1212f9a0SAndroid Build Coastguard Worker         "</svg>\n";
77*1212f9a0SAndroid Build Coastguard Worker 
78*1212f9a0SAndroid Build Coastguard Worker         // Note: please avoid calling these directly, or at least use
79*1212f9a0SAndroid Build Coastguard Worker         //    reflection to find the classes: they do change with
80*1212f9a0SAndroid Build Coastguard Worker         //    different Xerces and Xalan builds! -sc
81*1212f9a0SAndroid Build Coastguard Worker         //logger.logMsg(logger.STATUSMSG, org.apache.xerces.impl.Version.fVersion);
82*1212f9a0SAndroid Build Coastguard Worker         //logger.logMsg(logger.STATUSMSG, org.apache.xalan.processor.XSLProcessorVersion.S_VERSION);
83*1212f9a0SAndroid Build Coastguard Worker 
84*1212f9a0SAndroid Build Coastguard Worker         try
85*1212f9a0SAndroid Build Coastguard Worker         {
86*1212f9a0SAndroid Build Coastguard Worker             DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
87*1212f9a0SAndroid Build Coastguard Worker             dbf.setNamespaceAware(true);
88*1212f9a0SAndroid Build Coastguard Worker 
89*1212f9a0SAndroid Build Coastguard Worker             DocumentBuilder db = dbf.newDocumentBuilder();
90*1212f9a0SAndroid Build Coastguard Worker             Document doc = db.parse(new ByteArrayInputStream(input.getBytes()));
91*1212f9a0SAndroid Build Coastguard Worker             CachedXPathAPI xp = new CachedXPathAPI();
92*1212f9a0SAndroid Build Coastguard Worker             logger.logMsg(logger.STATUSMSG, "User case: xp.selectNodeList(doc, (//. | //@* | //namespace::*))");
93*1212f9a0SAndroid Build Coastguard Worker             NodeList nl = xp.selectNodeList(doc, "(//. | //@* | //namespace::*)");
94*1212f9a0SAndroid Build Coastguard Worker 
95*1212f9a0SAndroid Build Coastguard Worker             for (int i = 0; i < nl.getLength(); i++)
96*1212f9a0SAndroid Build Coastguard Worker             {
97*1212f9a0SAndroid Build Coastguard Worker                 // logger.logMsg(logger.STATUSMSG, i + " parent: " + nl.item(i).getParentNode());
98*1212f9a0SAndroid Build Coastguard Worker                 // logger.logMsg(logger.STATUSMSG, i + " ("+org.apache.xml.security.utils.XMLUtils.getNodeTypeString(nl.item(i))+"): " + nl.item(i));
99*1212f9a0SAndroid Build Coastguard Worker                 logger.logMsg(logger.STATUSMSG, i + ": " + nl.item(i));
100*1212f9a0SAndroid Build Coastguard Worker             }
101*1212f9a0SAndroid Build Coastguard Worker 
102*1212f9a0SAndroid Build Coastguard Worker             logger.logMsg(logger.STATUSMSG, "dave case: xp.selectNodeList(doc, (//.))");
103*1212f9a0SAndroid Build Coastguard Worker             nl = xp.selectNodeList(doc, "(//.)");
104*1212f9a0SAndroid Build Coastguard Worker 
105*1212f9a0SAndroid Build Coastguard Worker             for (int i = 0; i < nl.getLength(); i++)
106*1212f9a0SAndroid Build Coastguard Worker             {
107*1212f9a0SAndroid Build Coastguard Worker                 // logger.logMsg(logger.STATUSMSG, i + " parent: " + nl.item(i).getParentNode());
108*1212f9a0SAndroid Build Coastguard Worker                 // logger.logMsg(logger.STATUSMSG, i + " ("+org.apache.xml.security.utils.XMLUtils.getNodeTypeString(nl.item(i))+"): " + nl.item(i));
109*1212f9a0SAndroid Build Coastguard Worker                 logger.logMsg(logger.STATUSMSG, i + ": " + nl.item(i));
110*1212f9a0SAndroid Build Coastguard Worker             }
111*1212f9a0SAndroid Build Coastguard Worker 
112*1212f9a0SAndroid Build Coastguard Worker 
113*1212f9a0SAndroid Build Coastguard Worker             logger.checkAmbiguous("Test needs manual validation! (But Joe hints it may be invalid)");
114*1212f9a0SAndroid Build Coastguard Worker         }
115*1212f9a0SAndroid Build Coastguard Worker         catch (Throwable t)
116*1212f9a0SAndroid Build Coastguard Worker         {
117*1212f9a0SAndroid Build Coastguard Worker             logger.logThrowable(logger.ERRORMSG, t, "Unexpected exception");
118*1212f9a0SAndroid Build Coastguard Worker             logger.checkErr("Unexpected exception: " + t.toString());
119*1212f9a0SAndroid Build Coastguard Worker         }
120*1212f9a0SAndroid Build Coastguard Worker     }
121*1212f9a0SAndroid Build Coastguard Worker 
122*1212f9a0SAndroid Build Coastguard Worker     /**
123*1212f9a0SAndroid Build Coastguard Worker      * <a href="http://nagoya.apache.org/bugzilla/show_bug.cgi?id=6329">
124*1212f9a0SAndroid Build Coastguard Worker      * Link to Bugzilla report</a>
125*1212f9a0SAndroid Build Coastguard Worker      * @return XPath does not catch CDATA Nodes.
126*1212f9a0SAndroid Build Coastguard Worker      */
getDescription()127*1212f9a0SAndroid Build Coastguard Worker     public String getDescription()
128*1212f9a0SAndroid Build Coastguard Worker     {
129*1212f9a0SAndroid Build Coastguard Worker         return "XPath does not catch CDATA Nodes";
130*1212f9a0SAndroid Build Coastguard Worker     }
131*1212f9a0SAndroid Build Coastguard Worker 
132*1212f9a0SAndroid Build Coastguard Worker }  // end of class Bugzilla6329
133*1212f9a0SAndroid Build Coastguard Worker 
134