You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@xalan.apache.org by pa...@apache.org on 2001/10/11 20:28:18 UTC
cvs commit: xml-xalan/c/Tests/Harness FileUtility.cpp
pauldick 01/10/11 11:28:18
Modified: c/Tests/Harness FileUtility.cpp
Log:
Renamed compareDomResults to checkDOMResults and added
logfile parameter. reportPassFail now takes UniqRunId as a parameter.
Added 3 inline debug functions. Also removed all "Error: " strings
from error messages. This is now added in reportPassFail.
Revision Changes Path
1.18 +130 -78 xml-xalan/c/Tests/Harness/FileUtility.cpp
Index: FileUtility.cpp
===================================================================
RCS file: /home/cvs/xml-xalan/c/Tests/Harness/FileUtility.cpp,v
retrieving revision 1.17
retrieving revision 1.18
diff -u -r1.17 -r1.18
--- FileUtility.cpp 2001/09/26 13:10:53 1.17
+++ FileUtility.cpp 2001/10/11 18:28:18 1.18
@@ -259,10 +259,6 @@
true, // xmlDecl
standalone);
-// fToXML->setShouldWriteXMLHeader(shouldWriteXMLHeader);
-// fToXML->setStripCData(stripCData);
-// fToXML->setEscapeCData(escapeCData);
-
formatter = fToXML;
return formatter;
}
@@ -360,12 +356,14 @@
// Void
//
*/
-bool
-FileUtility::compareDOMResults(const XalanDOMString& theOutputFile,
+void
+FileUtility::checkDOMResults(const XalanDOMString& theOutputFile,
const XalanCompiledStylesheet* compiledSS,
XalanSourceTreeDocument* dom,
- const XSLTInputSource& goldInputSource)
+ const XSLTInputSource& goldInputSource,
+ XMLFileReporter& logfile)
{
+ int ambgFlag = data.nogold;
const XalanDOMString mimeEncoding("");
XalanFileOutputStream myOutput(theOutputFile);
XalanOutputStreamPrintWriter myResultWriter(myOutput);
@@ -384,8 +382,35 @@
domSupport.setParserLiaison(&parserLiaison);
XalanDocument* goldDom = parserLiaison.parseXMLStream(goldInputSource);
+
+
+ if(domCompare(*goldDom, *dom))
+ {
+ cout << "Passed: " << data.testOrFile << endl;
+ logfile.logCheckPass(data.testOrFile);
+ data.pass += 1;
+ }
+ else
+ { // if the compairson fails gather up the failure data and determine if it failed
+ // due to bad output or missing Gold file. Lastly, log the failure.
+ Hashtable attrs;
+ Hashtable actexp;
+ reportError();
+
+ attrs.insert(Hashtable::value_type(XalanDOMString("reason"), XalanDOMString(data.msg)));
+ attrs.insert(Hashtable::value_type(XalanDOMString("atNode"), data.currentNode));
+ actexp.insert(Hashtable::value_type(XalanDOMString("exp"), data.expected));
+ actexp.insert(Hashtable::value_type(XalanDOMString("act"), data.actual));
- return domCompare(*goldDom, *dom);
+ if (ambgFlag < data.nogold)
+ {
+ logfile.logCheckAmbiguous(data.testOrFile);
+ }
+ else
+ {
+ logfile.logCheckFail(data.testOrFile, attrs, actexp);
+ }
+ }
}
/* This routine takes the result file and gold file and parses them.
@@ -425,7 +450,7 @@
// This exception is being reported prior to this Catch, however, however, I clarify that it's a SAX exception.
// It's a good indication that the Gold file is not a valid XML. When this happens the transform result needs
// to be compared with the Gold, with a character by character basis, not via the DOM compair.
- catch (SAXException& e)
+ catch (SAXException)
{
cout << "SAXException: Using fileCompare to check output.\n";
return fileCompare(c_str(TranscodeToLocalCodePage(goldFile)), c_str(TranscodeToLocalCodePage(outputFile)));
@@ -448,10 +473,10 @@
FileUtility::fileCompare(const char* goldFile,
const char* outputFile)
{
- FILE *result, *gold; // declare files
- char rline[132] = {'/n'}; // declare buffers to hold single line from file
- char gline[132] = {'/n'};
- char temp[10]; // buffer to hold line number
+ FILE *result, *gold; // declare files
+ char rline[132] = {'0'}; // declare buffers to hold single line from file
+ char gline[132] = {'0'};
+ char temp[10]; // buffer to hold line number
char lineNum = 1;
// Set fail data incase there are i/o problems with the files to compare.
@@ -466,7 +491,7 @@
// If the result file fails to open report this as a failure.
if (!result)
{
- data.msg = "No Result file (Transform failed)";
+ data.msg = "No Result (Transform failed)";
data.fail += 1;
return false;
}
@@ -488,14 +513,14 @@
if (ferror(gold) || ferror(result))
{
- data.msg = "Read Error on either Gold or Result file";
+ data.msg = "Read Error - Gold/Result file";
data.currentNode = XalanDOMString("Line: ") + XalanDOMString(temp);
return false;
}
// Compare the lines character by charcter ....
- int i = 0;
- while(i < sizeof(gline))
+ unsigned int i = 0;
+ while(i < strlen(gline))
{
if (gline[i] == rline[i])
{
@@ -505,7 +530,7 @@
else
{ // If there is a mismatch collect up the fail data and return false. To ensure that
// the results can be seen in the browser enclose the actual/expected in CDATA Sections.
- data.msg = "Error: Text based comparison failure";
+ data.msg = "Text based comparison failure";
data.expected = XalanDOMString("<![CDATA[") + XalanDOMString(gline) + XalanDOMString("]]>");
data.actual = XalanDOMString("<![CDATA[") + XalanDOMString(rline) + XalanDOMString("]]>");
data.currentNode = XalanDOMString("Line: ") + XalanDOMString(temp);
@@ -541,13 +566,9 @@
const XalanDOMString& docNodeName = doc.getNodeName();
const XalanDOMString& goldNodeName = gold.getNodeName();
- const XalanDOMString& docNodeValue = doc.getNodeValue();
- const XalanDOMString& goldNodeValue = gold.getNodeValue();
-
-
if (goldNodeType != docNodeType)
{
- collectData("Error: NodeType mismatch.",
+ collectData("NodeType mismatch.",
docNodeName,
XalanDOMString(xalanNodeTypes[docNodeType]),
XalanDOMString(xalanNodeTypes[goldNodeType]));
@@ -558,7 +579,6 @@
{
case XalanNode::ELEMENT_NODE: // ATTRIBUTE_NODE's are processed with diffElement().
{
-
if ( ! diffElement(gold, doc) )
{
return false;
@@ -568,14 +588,14 @@
}
case XalanNode::TEXT_NODE:
{
-
-//#if !defined(NDEBUG) && defined(_MSC_VER)
-// cout << "Node is: " << c_str(TranscodeToLocalCodePage(docNodeValue)) << endl;
-//#endif
+ const XalanDOMString& docNodeValue = doc.getNodeValue();
+ const XalanDOMString& goldNodeValue = gold.getNodeValue();
+
+ //debugNodeData(docNodeName, docNodeValue);
if(goldNodeValue != docNodeValue)
{
- collectData("Error: Text node mismatch. ",
+ collectData("Text node mismatch. ",
docNodeName,
goldNodeValue,
docNodeValue);
@@ -597,7 +617,7 @@
}
else
{
- collectData("Error: Element missing SiblingNode. ",
+ collectData("Element missing SiblingNode. ",
docNodeName,
goldNextNode->getNodeName(),
goldNextNode->getNodeName());
@@ -617,30 +637,18 @@
}
case XalanNode::DOCUMENT_NODE:
{
-
-//#if !defined(NDEBUG) && defined(_MSC_VER)
-// cout << "Node is: " << c_str(TranscodeToLocalCodePage(docNodeName)) << endl;
-//#endif
- // We should never reach this code path. The parser should flag the fact that there
- // is no Document_Node.
- if (goldNodeName != docNodeName)
- {
- assert(goldNodeName != docNodeName);
- }
- else
- {
- const XalanNode *goldNextNode;
- const XalanNode *domNextNode;
+ //debugNodeData(docNodeName);
- goldNextNode = gold.getFirstChild();
- domNextNode = doc.getFirstChild();
+ const XalanNode *goldNextNode;
+ const XalanNode *domNextNode;
- if (0 != goldNextNode)
- {
- if( ! domCompare(*goldNextNode,*domNextNode) )
- return false;
- }
+ goldNextNode = gold.getFirstChild();
+ domNextNode = doc.getFirstChild();
+ if (0 != goldNextNode)
+ {
+ if( ! domCompare(*goldNextNode,*domNextNode) )
+ return false;
}
break;
@@ -679,16 +687,13 @@
const XalanDOMString& docNsUri = doc.getNamespaceURI();
const XalanDOMString& goldNsUri = gold.getNamespaceURI();
-//#if !defined(NDEBUG) && defined(_MSC_VER)
-// cout << "Node is: " << c_str(TranscodeToLocalCodePage(docNodeName)) << endl;
-//#endif
+ //debugNodeData(docNodeName);
// This essentially checks 2 things, that the prefix and localname are the
// same. So specific checks of these items are not necessary.
if (goldNodeName != docNodeName)
{
-
- collectData("Error: Element mismatch. ",
+ collectData("Element mismatch. ",
docNodeName,
goldNodeName,
docNodeName);
@@ -697,8 +702,7 @@
if ( goldNsUri != docNsUri)
{
-
- collectData("Error: Element NamespaceURI mismatch. ",
+ collectData("Element NamespaceURI mismatch. ",
docNodeName,
goldNsUri,
docNsUri);
@@ -708,15 +712,27 @@
// Get Attributes for each Element Node.
const XalanNamedNodeMap *goldAttrs = gold.getAttributes();
const XalanNamedNodeMap *docAttrs = doc.getAttributes();
-
+
// Get number of Attributes
int numGoldAttr = goldAttrs->getLength();
int numDomAttr = docAttrs ->getLength();
- // Check that each Element has same number of Attributes. If they don't report error
+ /*
+ // This needs to be uncommented if 'compare.exe' is to work.
+ // If this is the 'root' element strip off the xmlns:xml namespace attribute,
+ // that is lurking around on the gold file, but not the dom. This is necessary
+ // only for the 'compare' test, that uses a pure DOM, that has not been serialized.
+ //if (goldNodeName == XalanDOMString("root"))
+ {
+ numGoldAttr -= 1;
+ XalanNode *gXMLAttr = goldAttrs->item(1);
+ }
+ */
+ // Check that each Element has same number of Attributes. If they don't report error
if ( numGoldAttr == numDomAttr )
{
// Compare Attributes one at a time.
+ //for (int i=1; i < numGoldAttr; i++) // To be used with 'compare'
for (int i=0; i < numGoldAttr; i++)
{
// Attribute order is irrelvant, so comparision is base on Attribute name.
@@ -731,7 +747,7 @@
}
else
{
- collectData("Error: Element missing named Attribute. ",
+ collectData("Element missing named Attribute. ",
docNodeName,
goldAttrName,
XalanDOMString("NOTHING"));
@@ -744,7 +760,7 @@
char buf1[2], buf2[2];
sprintf(buf1, "%d", numGoldAttr);
sprintf(buf2, "%d", numDomAttr);
- collectData("Error: Elements don't have same number of attributes. ",
+ collectData("Wrong number of attributes. ",
docNodeName,
XalanDOMString(buf1),
XalanDOMString(buf2));
@@ -766,7 +782,7 @@
}
else
{
- collectData("Error: Element missing ChildNode. ",
+ collectData("Element missing ChildNode. ",
docNodeName,
XalanDOMString(goldNextNode->getNodeName()),
XalanDOMString("NOTHING"));
@@ -779,7 +795,7 @@
// then gather up the text and print it out.
if ( domNextNode->getNodeType() == XalanNode::TEXT_NODE)
{
- collectData("Error: Transformed Doc has additional Child nodes: ",
+ collectData("Result has additional Child node: ",
docNodeName,
XalanDOMString("NOTHING"),
XalanDOMString(domNextNode->getNodeName()) + XalanDOMString(" \"") +
@@ -788,7 +804,7 @@
// Additional node is NOT text, so just print it's Name.
else
{
- collectData("Error: Transformed Doc has additional Child node: ",
+ collectData("Result has additional Child node: ",
docNodeName,
XalanDOMString("NOTHING"),
XalanDOMString(domNextNode->getNodeName()));
@@ -811,7 +827,7 @@
else
{ // domcomtest10 used to fail here, now it is caught above, with the error
// "Transformed Doc has additional Child nodes:"
- collectData("Error: Element missing SiblingNode. ",
+ collectData("Element missing SiblingNode. ",
docNodeName,
XalanDOMString(goldNextNode->getNodeName()),
XalanDOMString("NOTHING"));
@@ -824,7 +840,7 @@
// then gather up the text and print it out.
if ( domNextNode->getNodeType() == XalanNode::TEXT_NODE)
{
- collectData("Error: Transformed Doc has additional sibling nodes: ",
+ collectData("Result has additional sibling node: ",
docNodeName,
XalanDOMString("NOTHING"),
XalanDOMString(domNextNode->getNodeName()) + XalanDOMString(" \"") +
@@ -833,7 +849,7 @@
// Additional node is NOT text, so just print it's Name.
else
{
- collectData("Error: Transformed Doc has additional sibling node: ",
+ collectData("Result has additional sibling node: ",
docNodeName,
XalanDOMString("NOTHING"),
XalanDOMString(domNextNode->getNodeName()));
@@ -862,30 +878,28 @@
{
const XalanDOMString& docAttrName = dAttr->getNodeName();
-
-//#if !defined(NDEBUG) && defined(_MSC_VER)
-// const XalanDOMString& goldAttrName = gAttr->getNodeName();
-// cout << " Attribute is: " << c_str(TranscodeToLocalCodePage(goldAttrName)) << endl;
-//#endif
+ const XalanDOMString& goldAttrName = gAttr->getNodeName();
- const XalanDOMString& goldAttrNsUri = gAttr->getNamespaceURI();
- const XalanDOMString& docAttrNsUri = dAttr->getNamespaceURI();
+ //debugAttributeData(goldAttrName);
const XalanDOMString& goldAttrValue = gAttr->getNodeValue();
const XalanDOMString& docAttrValue = dAttr->getNodeValue();
if (goldAttrValue != docAttrValue)
{
- collectData("Error: Attribute Value mismatch. ",
+ collectData("Attribute Value mismatch. ",
docAttrName,
goldAttrValue,
docAttrValue);
return false;
}
+ const XalanDOMString& goldAttrNsUri = gAttr->getNamespaceURI();
+ const XalanDOMString& docAttrNsUri = dAttr->getNamespaceURI();
+
if (goldAttrNsUri != docAttrNsUri)
{
- collectData("Error: Attribute NamespaceURI mismatch. ",
+ collectData("Attribute NamespaceURI mismatch. ",
docAttrName,
goldAttrNsUri,
docAttrNsUri);
@@ -907,7 +921,7 @@
{
cout << endl << "* Failed "<< data.testOrFile
- << " " << data.msg << endl
+ << " Error: " << data.msg << endl
<< " " << "Processing Node: " << data.currentNode << endl
<< " Expected: " << data.expected << endl
<< " Actual: " << data.actual << "\n\n";
@@ -947,6 +961,44 @@
sprintf(temp, "%d", data.fail);
runResults.insert(Hashtable::value_type(XalanDOMString("Failed"), XalanDOMString(temp)));
+
+ sprintf(temp, "%d", data.nogold);
+ runResults.insert(Hashtable::value_type(XalanDOMString("No_Gold_Files"), XalanDOMString(temp)));
+
+ logfile.logElementWAttrs(10, "RunResults", runResults, "xxx");
+
+ cout << "\nPassed " << data.pass;
+ cout << "\nFailed " << data.fail;
+ cout << "\nMissing Gold " << data.nogold << endl;
+
+}
+
+void
+FileUtility::reportPassFail(XMLFileReporter& logfile, const XalanDOMString& runid)
+{
+ Hashtable runResults;
+ char temp[5];
+
+ // Create entrys that contain runid, xerces version, and numbers for Pass, Fail and No Gold.
+
+ runResults.insert(Hashtable::value_type(XalanDOMString("UniqRunid"), runid));
+ runResults.insert(Hashtable::value_type(XalanDOMString("Xerces-Version "), getXercesVersion()));
+ runResults.insert(Hashtable::value_type(XalanDOMString("ICU-Enabled "), XalanDOMString("No")));
+
+#if defined(XALAN_USE_ICU)
+ // At some point in time I want to be able to programatically check it the ICU is enabled.
+ // Dave needs to add some code before I can do this. It will not be done via ifdef's.
+ runResults.insert(Hashtable::value_type(XalanDOMString("ICU-Enabled "), XalanDOMString("Yes")));
+#endif
+
+ sprintf(temp, "%d", data.pass);
+ runResults.insert(Hashtable::value_type(XalanDOMString("Passed"), XalanDOMString(temp)));
+
+ sprintf(temp, "%d", data.fail);
+ runResults.insert(Hashtable::value_type(XalanDOMString("Failed"), XalanDOMString(temp)));
+
+ sprintf(temp, "%d", data.nogold);
+ runResults.insert(Hashtable::value_type(XalanDOMString("No_Gold_Files"), XalanDOMString(temp)));
logfile.logElementWAttrs(10, "RunResults", runResults, "xxx");
---------------------------------------------------------------------
To unsubscribe, e-mail: xalan-cvs-unsubscribe@xml.apache.org
For additional commands, e-mail: xalan-cvs-help@xml.apache.org