blob: 6056af695a98de1eeab1aac074127d5a5702e761 [file] [log] [blame]
/*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
// Common Qetest / Xalan testing imports
import org.apache.qetest.Datalet;
import org.apache.qetest.Logger;
import org.apache.qetest.TestletImpl;
import org.apache.qetest.CheckService;
import org.apache.qetest.xsl.XHTFileCheckService;
import org.apache.xalan.processor.TransformerFactoryImpl;
import org.apache.xalan.transformer.TransformerImpl;
import org.apache.xalan.transformer.XalanProperties;
import javax.xml.transform.*;
import javax.xml.transform.stream.*;
import java.io.File;
import java.io.FileReader;
import java.io.BufferedReader;
import java.io.IOException;
/**
* Custom Testlet for testing NodeInfo extension.
*
* @author shane_curcuru@us.ibm.com
*/
public class BugzillaNodeInfo extends TestletImpl
{
// Initialize our classname for TestletImpl's main() method - must be updated!
static { thisClassName = "BugzillaNodeInfo"; }
/**
* Write Minimal code to reproduce your Bugzilla bug report.
* Many Bugzilla tests won't bother with a datalet; they'll
* just have the data to reproduce the bug encoded by default.
* @param d (optional) Datalet to use as data point for the test.
*/
public void execute(Datalet d)
{
// Use logger.logMsg(...) instead of System.out.println(...)
logger.logMsg(Logger.STATUSMSG, getDescription());
String xslName = "BugzillaNodeInfo.xsl";
String xmlName = "BugzillaNodeInfo.xml";
String outputName = "BugzillaNodeInfo.output";
String goldName = "BugzillaNodeInfo.gold";
try
{
TransformerFactory factory = TransformerFactory.newInstance();
// Must set on both the factory impl..
TransformerFactoryImpl factoryImpl = (TransformerFactoryImpl)factory;
factoryImpl.setAttribute(XalanProperties.SOURCE_LOCATION, Boolean.TRUE);
Transformer transformer = factory.newTransformer(new StreamSource(xslName));
// ..and the transformer impl
TransformerImpl impl = ((TransformerImpl) transformer);
impl.setProperty(XalanProperties.SOURCE_LOCATION, Boolean.TRUE);
transformer.transform(new StreamSource(xmlName),
new StreamResult(outputName));
}
catch (Throwable t)
{
logger.logThrowable(logger.ERRORMSG, t, "Unexpectedly threw");
logger.checkErr("Unexpectedly threw: " + t.toString());
return;
}
// CheckService fileChecker = new XHTFileCheckService();
// fileChecker.check(logger,
// new File(outputName),
// new File(goldName),
// getDescription());
// Since the gold data isn't nailed down yet, do a simple validation
// Just ensure the systemId of the xml file was included somewhere in the file
checkFileContains(outputName, xmlName, "NodeInfo got partial systemID correct");
}
/**
* Checks and reports if a file contains a certain string
* (all within one line).
*
* @param fName local path/name of file to check
* @param checkStr String to look for in the file
* @param comment to log with the check() call
* @return true if pass, false otherwise
*/
protected boolean checkFileContains(String fName, String checkStr,
String comment)
{
boolean passFail = false;
File f = new File(fName);
if (!f.exists())
{
logger.checkFail("checkFileContains(" + fName
+ ") does not exist: " + comment);
return false;
}
try
{
FileReader fr = new FileReader(f);
BufferedReader br = new BufferedReader(fr);
for (;;)
{
String inbuf = br.readLine();
if (inbuf == null)
break;
if (inbuf.indexOf(checkStr) >= 0)
{
passFail = true;
logger.logMsg(logger.TRACEMSG,
"checkFileContains passes with line: " + inbuf);
break;
}
}
}
catch (IOException ioe)
{
logger.checkFail("checkFileContains(" + fName + ") threw: "
+ ioe.toString() + " for: " + comment);
return false;
}
if (passFail)
{
logger.checkPass(comment);
}
else
{
logger.logMsg(logger.ERRORMSG, "checkFileContains failed to find: " + checkStr);
logger.checkFail(comment);
}
return passFail;
}
/**
* @return Xalan custom extension NodeInfo.
*/
public String getDescription()
{
return "Xalan custom extension NodeInfo";
}
} // end of class BugzillaNodeInfo