blob: 2c65038e67e5cafad85d5e96c74af3c63825de18 [file] [log] [blame]
/*
* Covered by The Apache Software License, Version 1.1
* See xml-xalan/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