xref: /aosp_15_r20/external/apache-xml/test/tests/bugzilla/BugzillaNodeInfo.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 import org.apache.qetest.CheckService;
23*1212f9a0SAndroid Build Coastguard Worker import org.apache.qetest.xsl.XHTFileCheckService;
24*1212f9a0SAndroid Build Coastguard Worker 
25*1212f9a0SAndroid Build Coastguard Worker import org.apache.xalan.processor.TransformerFactoryImpl;
26*1212f9a0SAndroid Build Coastguard Worker import org.apache.xalan.transformer.TransformerImpl;
27*1212f9a0SAndroid Build Coastguard Worker import org.apache.xalan.transformer.XalanProperties;
28*1212f9a0SAndroid Build Coastguard Worker import javax.xml.transform.*;
29*1212f9a0SAndroid Build Coastguard Worker import javax.xml.transform.stream.*;
30*1212f9a0SAndroid Build Coastguard Worker 
31*1212f9a0SAndroid Build Coastguard Worker import java.io.File;
32*1212f9a0SAndroid Build Coastguard Worker import java.io.FileReader;
33*1212f9a0SAndroid Build Coastguard Worker import java.io.BufferedReader;
34*1212f9a0SAndroid Build Coastguard Worker import java.io.IOException;
35*1212f9a0SAndroid Build Coastguard Worker 
36*1212f9a0SAndroid Build Coastguard Worker /**
37*1212f9a0SAndroid Build Coastguard Worker  * Custom Testlet for testing NodeInfo extension.
38*1212f9a0SAndroid Build Coastguard Worker  *
39*1212f9a0SAndroid Build Coastguard Worker  * @author [email protected]
40*1212f9a0SAndroid Build Coastguard Worker  */
41*1212f9a0SAndroid Build Coastguard Worker public class BugzillaNodeInfo extends TestletImpl
42*1212f9a0SAndroid Build Coastguard Worker {
43*1212f9a0SAndroid Build Coastguard Worker     // Initialize our classname for TestletImpl's main() method - must be updated!
44*1212f9a0SAndroid Build Coastguard Worker     static { thisClassName = "BugzillaNodeInfo"; }
45*1212f9a0SAndroid Build Coastguard Worker 
46*1212f9a0SAndroid Build Coastguard Worker     /**
47*1212f9a0SAndroid Build Coastguard Worker      * Write Minimal code to reproduce your Bugzilla bug report.
48*1212f9a0SAndroid Build Coastguard Worker      * Many Bugzilla tests won't bother with a datalet; they'll
49*1212f9a0SAndroid Build Coastguard Worker      * just have the data to reproduce the bug encoded by default.
50*1212f9a0SAndroid Build Coastguard Worker      * @param d (optional) Datalet to use as data point for the test.
51*1212f9a0SAndroid Build Coastguard Worker      */
execute(Datalet d)52*1212f9a0SAndroid Build Coastguard Worker     public void execute(Datalet d)
53*1212f9a0SAndroid Build Coastguard Worker 	{
54*1212f9a0SAndroid Build Coastguard Worker         // Use logger.logMsg(...) instead of System.out.println(...)
55*1212f9a0SAndroid Build Coastguard Worker         logger.logMsg(Logger.STATUSMSG, getDescription());
56*1212f9a0SAndroid Build Coastguard Worker 
57*1212f9a0SAndroid Build Coastguard Worker         String xslName = "BugzillaNodeInfo.xsl";
58*1212f9a0SAndroid Build Coastguard Worker         String xmlName = "BugzillaNodeInfo.xml";
59*1212f9a0SAndroid Build Coastguard Worker         String outputName = "BugzillaNodeInfo.output";
60*1212f9a0SAndroid Build Coastguard Worker         String goldName = "BugzillaNodeInfo.gold";
61*1212f9a0SAndroid Build Coastguard Worker         try
62*1212f9a0SAndroid Build Coastguard Worker         {
63*1212f9a0SAndroid Build Coastguard Worker             TransformerFactory factory = TransformerFactory.newInstance();
64*1212f9a0SAndroid Build Coastguard Worker             // Must set on both the factory impl..
65*1212f9a0SAndroid Build Coastguard Worker             TransformerFactoryImpl factoryImpl = (TransformerFactoryImpl)factory;
66*1212f9a0SAndroid Build Coastguard Worker             factoryImpl.setAttribute(XalanProperties.SOURCE_LOCATION, Boolean.TRUE);
67*1212f9a0SAndroid Build Coastguard Worker 
68*1212f9a0SAndroid Build Coastguard Worker             Transformer transformer = factory.newTransformer(new StreamSource(xslName));
69*1212f9a0SAndroid Build Coastguard Worker             // ..and the transformer impl
70*1212f9a0SAndroid Build Coastguard Worker             TransformerImpl impl = ((TransformerImpl) transformer);
71*1212f9a0SAndroid Build Coastguard Worker             impl.setProperty(XalanProperties.SOURCE_LOCATION, Boolean.TRUE);
72*1212f9a0SAndroid Build Coastguard Worker             transformer.transform(new StreamSource(xmlName),
73*1212f9a0SAndroid Build Coastguard Worker                                   new StreamResult(outputName));
74*1212f9a0SAndroid Build Coastguard Worker         }
75*1212f9a0SAndroid Build Coastguard Worker         catch (Throwable t)
76*1212f9a0SAndroid Build Coastguard Worker         {
77*1212f9a0SAndroid Build Coastguard Worker             logger.logThrowable(logger.ERRORMSG, t, "Unexpectedly threw");
78*1212f9a0SAndroid Build Coastguard Worker             logger.checkErr("Unexpectedly threw: " + t.toString());
79*1212f9a0SAndroid Build Coastguard Worker             return;
80*1212f9a0SAndroid Build Coastguard Worker         }
81*1212f9a0SAndroid Build Coastguard Worker 
82*1212f9a0SAndroid Build Coastguard Worker         // CheckService fileChecker = new XHTFileCheckService();
83*1212f9a0SAndroid Build Coastguard Worker         // fileChecker.check(logger,
84*1212f9a0SAndroid Build Coastguard Worker         //                   new File(outputName),
85*1212f9a0SAndroid Build Coastguard Worker         //                   new File(goldName),
86*1212f9a0SAndroid Build Coastguard Worker         //                  getDescription());
87*1212f9a0SAndroid Build Coastguard Worker         // Since the gold data isn't nailed down yet, do a simple validation
88*1212f9a0SAndroid Build Coastguard Worker         // Just ensure the systemId of the xml file was included somewhere in the file
89*1212f9a0SAndroid Build Coastguard Worker         checkFileContains(outputName, xmlName, "NodeInfo got partial systemID correct");
90*1212f9a0SAndroid Build Coastguard Worker 	}
91*1212f9a0SAndroid Build Coastguard Worker 
92*1212f9a0SAndroid Build Coastguard Worker 
93*1212f9a0SAndroid Build Coastguard Worker     /**
94*1212f9a0SAndroid Build Coastguard Worker      * Checks and reports if a file contains a certain string
95*1212f9a0SAndroid Build Coastguard Worker      * (all within one line).
96*1212f9a0SAndroid Build Coastguard Worker      *
97*1212f9a0SAndroid Build Coastguard Worker      * @param fName local path/name of file to check
98*1212f9a0SAndroid Build Coastguard Worker      * @param checkStr String to look for in the file
99*1212f9a0SAndroid Build Coastguard Worker      * @param comment to log with the check() call
100*1212f9a0SAndroid Build Coastguard Worker      * @return true if pass, false otherwise
101*1212f9a0SAndroid Build Coastguard Worker      */
checkFileContains(String fName, String checkStr, String comment)102*1212f9a0SAndroid Build Coastguard Worker     protected boolean checkFileContains(String fName, String checkStr,
103*1212f9a0SAndroid Build Coastguard Worker                                         String comment)
104*1212f9a0SAndroid Build Coastguard Worker     {
105*1212f9a0SAndroid Build Coastguard Worker         boolean passFail = false;
106*1212f9a0SAndroid Build Coastguard Worker         File f = new File(fName);
107*1212f9a0SAndroid Build Coastguard Worker 
108*1212f9a0SAndroid Build Coastguard Worker         if (!f.exists())
109*1212f9a0SAndroid Build Coastguard Worker         {
110*1212f9a0SAndroid Build Coastguard Worker             logger.checkFail("checkFileContains(" + fName
111*1212f9a0SAndroid Build Coastguard Worker                                + ") does not exist: " + comment);
112*1212f9a0SAndroid Build Coastguard Worker             return false;
113*1212f9a0SAndroid Build Coastguard Worker         }
114*1212f9a0SAndroid Build Coastguard Worker 
115*1212f9a0SAndroid Build Coastguard Worker         try
116*1212f9a0SAndroid Build Coastguard Worker         {
117*1212f9a0SAndroid Build Coastguard Worker             FileReader fr = new FileReader(f);
118*1212f9a0SAndroid Build Coastguard Worker             BufferedReader br = new BufferedReader(fr);
119*1212f9a0SAndroid Build Coastguard Worker 
120*1212f9a0SAndroid Build Coastguard Worker             for (;;)
121*1212f9a0SAndroid Build Coastguard Worker             {
122*1212f9a0SAndroid Build Coastguard Worker                 String inbuf = br.readLine();
123*1212f9a0SAndroid Build Coastguard Worker                 if (inbuf == null)
124*1212f9a0SAndroid Build Coastguard Worker                     break;
125*1212f9a0SAndroid Build Coastguard Worker 
126*1212f9a0SAndroid Build Coastguard Worker                 if (inbuf.indexOf(checkStr) >= 0)
127*1212f9a0SAndroid Build Coastguard Worker                 {
128*1212f9a0SAndroid Build Coastguard Worker                     passFail = true;
129*1212f9a0SAndroid Build Coastguard Worker                     logger.logMsg(logger.TRACEMSG,
130*1212f9a0SAndroid Build Coastguard Worker                         "checkFileContains passes with line: " + inbuf);
131*1212f9a0SAndroid Build Coastguard Worker                     break;
132*1212f9a0SAndroid Build Coastguard Worker                 }
133*1212f9a0SAndroid Build Coastguard Worker             }
134*1212f9a0SAndroid Build Coastguard Worker         }
135*1212f9a0SAndroid Build Coastguard Worker         catch (IOException ioe)
136*1212f9a0SAndroid Build Coastguard Worker         {
137*1212f9a0SAndroid Build Coastguard Worker             logger.checkFail("checkFileContains(" + fName + ") threw: "
138*1212f9a0SAndroid Build Coastguard Worker                                + ioe.toString() + " for: " + comment);
139*1212f9a0SAndroid Build Coastguard Worker 
140*1212f9a0SAndroid Build Coastguard Worker             return false;
141*1212f9a0SAndroid Build Coastguard Worker         }
142*1212f9a0SAndroid Build Coastguard Worker 
143*1212f9a0SAndroid Build Coastguard Worker         if (passFail)
144*1212f9a0SAndroid Build Coastguard Worker         {
145*1212f9a0SAndroid Build Coastguard Worker             logger.checkPass(comment);
146*1212f9a0SAndroid Build Coastguard Worker         }
147*1212f9a0SAndroid Build Coastguard Worker         else
148*1212f9a0SAndroid Build Coastguard Worker         {
149*1212f9a0SAndroid Build Coastguard Worker             logger.logMsg(logger.ERRORMSG, "checkFileContains failed to find: " + checkStr);
150*1212f9a0SAndroid Build Coastguard Worker             logger.checkFail(comment);
151*1212f9a0SAndroid Build Coastguard Worker         }
152*1212f9a0SAndroid Build Coastguard Worker         return passFail;
153*1212f9a0SAndroid Build Coastguard Worker     }
154*1212f9a0SAndroid Build Coastguard Worker 
155*1212f9a0SAndroid Build Coastguard Worker 
156*1212f9a0SAndroid Build Coastguard Worker     /**
157*1212f9a0SAndroid Build Coastguard Worker      * @return Xalan custom extension NodeInfo.
158*1212f9a0SAndroid Build Coastguard Worker      */
getDescription()159*1212f9a0SAndroid Build Coastguard Worker     public String getDescription()
160*1212f9a0SAndroid Build Coastguard Worker     {
161*1212f9a0SAndroid Build Coastguard Worker         return "Xalan custom extension NodeInfo";
162*1212f9a0SAndroid Build Coastguard Worker     }
163*1212f9a0SAndroid Build Coastguard Worker 
164*1212f9a0SAndroid Build Coastguard Worker }  // end of class BugzillaNodeInfo
165*1212f9a0SAndroid Build Coastguard Worker 
166