| // |
| // $Id$ |
| // |
| ////////////////////////////////////////////////////////////////////// |
| // |
| // 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. |
| // |
| ////////////////////////////////////////////////////////////////////// |
| |
| // BuildLog.htm file constants |
| |
| var cmdLineTag = "Command Lines"; |
| var outputTag = "Output Window"; |
| var summaryTag = "Results"; |
| |
| var errorsTag = "error(s)"; |
| var warningsTag = "warning(s)"; |
| |
| var compilingTag = "Compiling..."; |
| var linkingTag = "Linking..."; |
| |
| var hdrLibrary = "Library Summary"; |
| var hdrTestDriver = "Test Driver Summary"; |
| var hdrExamples = "Example Summary"; |
| var hdrTests = "Test Summary"; |
| |
| //////////////////////////////////////////////////////////////////// |
| |
| // read BuildLog.htm |
| function readBuildLog(exeDir, itemInfo, useUnicode) |
| { |
| if (! fso.FolderExists(exeDir)) |
| return; |
| |
| var blogDir = exeDir + "\\" + itemInfo.name; |
| |
| if (! fso.FolderExists(blogDir)) |
| return; |
| |
| var blogFilePath = blogDir + "\\" + buildlogFile; |
| if (! fso.FileExists(blogFilePath)) |
| return; |
| |
| var uniMode = (true == useUnicode) ? -1 : 0; |
| var blogFile; |
| |
| try |
| { |
| blogFile = fso.OpenTextFile(blogFilePath, 1, false, uniMode); |
| } |
| catch (e) |
| { |
| WScript.Echo("Cannot open file: " + blogFilePath); |
| return; |
| } |
| |
| var blogData = blogFile.AtEndOfStream ? "" : blogFile.ReadAll(); |
| |
| var posTmp = getCommandLinesInfo(itemInfo, blogData, 0); |
| posTmp = getCompilationInfo(itemInfo, blogData, posTmp); |
| posTmp = getBuildSummaryInfo(itemInfo, blogData, posTmp); |
| } |
| |
| // BuildLog.htm parsing methods |
| function getCommandLinesInfo(itemInfo, blogData, posStart) |
| { |
| //lookup for the command lines block |
| var posCmdLines = blogData.indexOf(cmdLineTag, posStart); |
| if (-1 == posCmdLines) |
| return posStart; |
| |
| // extract table in the command lines block |
| itemInfo.buildCmdLog = extractTableData(blogData, posCmdLines); |
| return posStart + itemInfo.buildCmdLog.length; |
| } |
| |
| |
| function getCompilationInfo(itemInfo, blogData, posStart) |
| { |
| //lookup for the output block |
| var posCmplInfo = blogData.indexOf(outputTag, posStart); |
| if (-1 == posCmplInfo) |
| return posStart; |
| |
| // extract table in the output block |
| itemInfo.buildOutLog = extractTableData(blogData, posCmplInfo); |
| return posStart + itemInfo.buildOutLog.length; |
| } |
| |
| |
| function getBuildSummaryInfo(itemInfo, blogData, posStart) |
| { |
| //lookup for the results block |
| var posResInfo = blogData.indexOf(summaryTag, posStart); |
| if (-1 == posResInfo) |
| return posStart; |
| |
| // extract table in the results block |
| var summaryData = extractTableData(blogData, posResInfo); |
| |
| // skip first line in the summary as not needed at all |
| var posPrjName = summaryData.indexOf(buildlogFile); |
| var posPrjTmp = posPrjName; |
| posPrjName = summaryData.indexOf(String.fromCharCode(10), posPrjTmp); |
| if (-1 == posPrjName) |
| { |
| posPrjName = summaryData.indexOf("\r\n", posPrjTmp); |
| if (-1 == posPrjName) |
| return posStart + summaryData.length; |
| } |
| |
| var prjSummary = summaryData.substr(posPrjName); |
| |
| // we not needed in tags, so remove them |
| var tagIdx = prjSummary.indexOf("<"); |
| itemInfo.buildOutLog += "\r\n" + prjSummary.substr(0, tagIdx); |
| |
| // parse project summary and get number of errors and warnings |
| var rgSum = prjSummary.split(" "); |
| |
| itemInfo.errorsCnt = rgSum[2]; |
| itemInfo.warningsCnt = rgSum[4]; |
| |
| // check what kind of errors we have |
| if (itemInfo.errorsCnt != "0") |
| { |
| var posLinking = itemInfo.buildOutLog.indexOf(linkingTag); |
| if (posLinking != -1) |
| itemInfo.linkerErrors = true; |
| } |
| |
| return posStart + summaryData.length; |
| } |
| |
| function extractTextBlockData(blogData, posTextBlock) |
| { |
| var nextTableBlock = blogData.indexOf("<table", posTextBlock); |
| |
| var textData = ""; |
| if (nextTableBlock > 0) |
| { |
| textData = |
| blogData.substr(posTextBlock, nextTableBlock - posTextBlock); |
| } |
| else |
| { |
| textData = blogData.substr(posTextBlock); |
| } |
| |
| var posPreTag = textData.indexOf("<pre", 0); |
| if (-1 == posPreTag) |
| textData = "<pre>" + textData + "</pre>"; |
| |
| return textData; |
| } |
| |
| function extractTableData(blogData, posStart) |
| { |
| var posMainTable = blogData.indexOf("<table", posStart); |
| if (-1 == posMainTable) |
| return ""; |
| |
| // check that we have data in table form |
| var posFirstCloseTable = blogData.indexOf("</table>", posStart); |
| if (-1 != posFirstCloseTable && posMainTable - posFirstCloseTable > 20) |
| return extractTextBlockData(blogData, posFirstCloseTable + 8); |
| |
| // lookup for the main table close tag |
| var posCloseTag = posMainTable; |
| var posOpenTag = posMainTable; |
| while (true) |
| { |
| posCloseTag = blogData.indexOf("</table>", posCloseTag + 5); |
| if (-1 == posCloseTag) // no close tag? |
| break; |
| |
| posOpenTag = blogData.indexOf("<table", posOpenTag + 5); |
| if (-1 == posOpenTag) |
| break; |
| |
| if (posCloseTag < posOpenTag) |
| break; |
| } |
| |
| var tableData = ""; |
| var tableDataLen = posCloseTag + 8 - posMainTable; |
| if (tableDataLen > 0) |
| tableData = blogData.substr(posMainTable, tableDataLen); |
| else |
| tableData = blogData.substr(posMainTable); |
| |
| // visual studio doesn't provide last table row close tags |
| // add them here |
| var indexClose = tableData.lastIndexOf("</table>"); |
| tableData = tableData.substr(0, indexClose) + "</td></tr></table>"; |
| |
| return tableData; |
| } |
| |
| //////////////////////////////////////////////////////////////////// |
| // get differences method |
| |
| function getDifferencesInfo(itemInfo) |
| { |
| var diffs = getWinDiffDifferences(itemInfo.runOutput, |
| itemInfo.runReqOutput, "ILFRGX"); |
| |
| // replace first line |
| var endLine = String.fromCharCode(13) + String.fromCharCode(10); |
| var pos = diffs.indexOf(endLine); |
| if (-1 == pos) |
| { |
| itemInfo.runDiff = diffs; |
| return; |
| } |
| |
| itemInfo.runDiff = "Differences between real output and required: "; |
| itemInfo.runDiff += diffs.substr(pos); |
| |
| //WScript.Echo(itemInfo.runDiff); |
| } |
| |
| /////////////////////////////////////////////////////////////////////// |
| // save methods |
| |
| function saveBuildSummary(itemInfo, fileSummary) |
| { |
| var failed = (itemInfo.exitCode != 0 || itemInfo.errorsCnt != "0") |
| ? true : false; |
| |
| if (failed == true) |
| fileSummary.WriteLine("<tr bgcolor=\"#FF9999\">"); |
| else |
| fileSummary.WriteLine("<tr bgcolor=\"#FFFF99\">"); |
| |
| var someCol = "<td style=\"padding:2px;border-right:#000000 solid 1px;\ |
| border-bottom:#000000 solid 1px;\" align=\"left\">"; |
| var lastCol = |
| "<td style=\"padding:2px;border-bottom:#000000 solid 1px;\" \ |
| align=\"right\">"; |
| |
| fileSummary.Write(someCol); |
| fileSummary.Write("<a href=\"#" + itemInfo.name + "\">"); |
| fileSummary.WriteLine(itemInfo.name + "</a></td>"); |
| |
| if (itemInfo.errorsCnt != "0") |
| { |
| fileSummary.WriteLine(someCol + "Build Failed" + "</td>"); |
| } |
| else |
| { |
| if (failed == true) |
| { |
| fileSummary.WriteLine(someCol + "Exited with code " + |
| itemInfo.exitCode + "</td>"); |
| } |
| else |
| { |
| fileSummary.WriteLine(someCol + "Succeeded" + "</td>"); |
| } |
| } |
| |
| if (failed == false) |
| { |
| if (itemInfo.runDiff != "") |
| fileSummary.WriteLine(someCol + "Difference" + "</td>"); |
| else |
| fileSummary.WriteLine(someCol + "Equal" + "</td>"); |
| } |
| else |
| { |
| fileSummary.WriteLine(someCol + " " + "</td>"); |
| } |
| |
| fileSummary.WriteLine(lastCol + itemInfo.warningsCnt + "</td>"); |
| |
| fileSummary.WriteLine("</tr>"); |
| } |
| |
| function saveBuildInfo(itemInfo, infoDir, infoExt) |
| { |
| var outfileName = infoDir + "\\" + itemInfo.name + "." + infoExt; |
| var outFile = fso.CreateTextFile(outfileName); |
| |
| saveBuildInfoTable(outFile, itemInfo, hdrExamples, false); |
| |
| outFile.Close(); |
| } |
| |
| function saveBuildInfoTable(outFile, itemInfo, linkSummary, bLib) |
| { |
| outFile.WriteLine("<table border=\"0\" width=\"100%\" \ |
| style=\"border:#000000 solid 1px;\" cellspacing=\"0\">"); |
| |
| outFile.Write("<tr><td bgcolor=\"#CCCCCC\" \ |
| style=\"border-bottom:#000000 solid 1px;\"><strong>"); |
| outFile.Write("<a name=\"" + itemInfo.name + "\">" + |
| itemInfo.name + "</a>"); |
| outFile.WriteLine("</strong> <a href=\"#" + |
| makeLinkFromString(linkSummary) + "\"><i>(" + |
| linkSummary.toLowerCase() + |
| ")</i></a> <a href=\"#top\"><i>(top)</i></a></td></tr>"); |
| |
| saveBuildInfoBlock(outFile, "Build Command Lines", |
| itemInfo.buildCmdLog, false); |
| saveBuildInfoBlock(outFile, "Build Output", |
| itemInfo.buildOutLog, false); |
| |
| if (false == bLib) |
| { |
| if (itemInfo.runOutput == "" && itemInfo.exitCode != 0) |
| itemInfo.runOutput = "Exited with code " + itemInfo.exitCode; |
| |
| saveBuildInfoBlock(outFile, "Executable Output", |
| encodeHTML(itemInfo.runOutput), true); |
| } |
| |
| if (itemInfo.runDiff != "") |
| { |
| saveBuildInfoBlock(outFile, "Differences", |
| encodeHTML(itemInfo.runDiff), true); |
| } |
| |
| outFile.WriteLine("</table>"); |
| } |
| |
| |
| function saveBuildInfoBlock(outFile, blockName, blockData, needPre) |
| { |
| // header |
| outFile.Write("<tr><td style=\"padding:4px;\"><strong>"); |
| outFile.Write(blockName); |
| outFile.WriteLine("</strong></td></tr>"); |
| |
| // data |
| outFile.WriteLine("<tr><td widht=\"100%\" \ |
| style=\"padding-left:4px;padding-right:4px;padding-bottom:4px;\">"); |
| |
| outFile.WriteLine("<table width=\"100%\" border=\"0\" \ |
| bgcolor=\"#EEEEEE\" \ |
| style=\"left-margin:5px;right-margin:\ |
| 5px;border:#000000 solid 1px;\"> "); |
| |
| outFile.WriteLine("<tr> <td>"); |
| |
| if (needPre == true) |
| outFile.WriteLine("<pre>"); |
| |
| outFile.WriteLine(blockData); |
| |
| if (needPre == true) |
| outFile.WriteLine("</pre>"); |
| |
| outFile.WriteLine("</td></tr>"); |
| outFile.WriteLine("</table>"); |
| outFile.WriteLine("</td></tr>"); |
| } |
| |
| ////////////////////////////////////////////////////////////////////////// |
| // |
| ///////////////////////////////////////////////////////////////////////// |
| |
| function makeLinkFromString(linkString) |
| { |
| var srcS = " "; |
| var destS = "-"; |
| var reRep = new RegExp(srcS, "mg"); |
| var res = linkString.replace(reRep, destS); |
| res = res.toLowerCase(); |
| return res; |
| } |
| |
| function getSummaryLogPath(buildDir, buildSummaryPrefix, buildType) |
| { |
| var outDir = buildDir; |
| return outDir + "\\" + buildSummaryPrefix + buildType + ".html"; |
| } |
| |
| function makeSummaryLog(buildDir, buildSummaryPrefix, buildType) |
| { |
| var outDir = buildDir; |
| if (! fso.FolderExists(outDir)) |
| fso.CreateFolder(outDir); |
| |
| var oFolder = fso.GetFolder(outDir); |
| var sumFileName = buildSummaryPrefix + buildType + ".html"; |
| var fSum = oFolder.CreateTextFile(sumFileName); |
| |
| fSum.WriteLine("<?xml version=\"1.0\" encoding=\"UTF-8\"?>"); |
| fSum.WriteLine("<body bgcolor=\"#FFFFFF\"> \ |
| <font face=\"arial\" color=\"#000000\">"); |
| |
| fSum.WriteLine("<center><H2>" + buildType + "</H2></center>"); |
| |
| fSum.WriteLine("<table border=\"0\" width=\"100%\">"); |
| |
| fSum.WriteLine("<tr><td style=\"padding-top:5px;padding-bottom:5px; \ |
| border-top:#000000 solid 1px;border-bottom:#000000 solid 1px;\" \ |
| align=\"center\">"); |
| |
| fSum.WriteLine("<a href=\"#" + makeLinkFromString(hdrLibrary) + |
| "\">" + hdrLibrary + "</a> : "); |
| fSum.WriteLine("<a href=\"#" + makeLinkFromString(hdrTestDriver) + |
| "\">" + hdrTestDriver + "</a> : "); |
| fSum.WriteLine("<a href=\"#" + makeLinkFromString(hdrExamples) + |
| "\">" + hdrExamples + "</a> : "); |
| fSum.WriteLine("<a href=\"#" + makeLinkFromString(hdrTests) + |
| "\">" + hdrTests + "</a>"); |
| |
| fSum.WriteLine("</td></tr>"); |
| |
| fSum.WriteLine("</table>"); |
| fSum.WriteLine("<br/>"); |
| |
| return fSum; |
| } |
| |
| |
| function saveSummaryHeaderLib(fSum, libInfo, hdrLibrary) |
| { |
| fSum.WriteLine("<strong><a name=\"" + makeLinkFromString(hdrLibrary) + |
| "\">" + hdrLibrary + "</a></strong>"); |
| |
| fSum.WriteLine("<table border=\"0\" width=\"100%\" \ |
| style=\"border:#000000 solid 1px;\" cellspacing=\"0\">"); |
| |
| // save header row |
| fSum.WriteLine("<tr bgcolor=\"#CCCCCC\">"); |
| fSum.WriteLine( |
| "<td style=\"padding:2px;border-right:#000000 solid 1px;\ |
| border-bottom:#000000 solid 1px;\"><strong>Library</strong></td>"); |
| fSum.WriteLine( |
| "<td style=\"padding:2px;border-right:#000000 solid 1px;\ |
| border-bottom:#000000 solid 1px;\"><strong>State</strong></td>"); |
| fSum.WriteLine( |
| "<td style=\"padding:2px;border-bottom:#000000 solid 1px;\">\ |
| <strong>Warnings</strong></td>"); |
| fSum.WriteLine("</tr>"); |
| |
| // save library header |
| if (libInfo.errorsCnt == "0") |
| fSum.WriteLine("<tr bgcolor=\"#FFFFFF\" \ |
| style=\"border-bottom:#000000 solid 1px;\">"); |
| else |
| fSum.WriteLine("<tr bgcolor=\"#FF9999\" \ |
| style=\"border-bottom:#000000 solid 1px;\">"); |
| |
| fSum.WriteLine( |
| "<td style=\"padding:2px;border-right:#000000 solid 1px;\">" |
| + "<a href=\"#" + libInfo.name + "\">" + libInfo.name + "</a></td>"); |
| |
| fSum.Write("<td style=\"padding:2px;border-right:#000000 solid 1px;\">"); |
| if (libInfo.errorsCnt == "0") |
| fSum.Write("OK"); |
| else |
| fSum.Write("Failed"); |
| fSum.WriteLine("</td>"); |
| |
| fSum.WriteLine("<td style=\"padding:2px;\">" + |
| libInfo.warningsCnt + "</td>"); |
| |
| fSum.WriteLine("</tr>"); |
| |
| fSum.WriteLine("</table>"); |
| fSum.WriteLine("<br/>"); |
| } |
| |
| function saveSummaryHeaderTestDriver(fSum, rwtestInfo, hdrDriver) |
| { |
| fSum.WriteLine("<strong><a name=\"" + makeLinkFromString(hdrDriver) + |
| "\">" + hdrDriver + "</a></strong>"); |
| |
| fSum.WriteLine("<table border=\"0\" width=\"100%\" \ |
| style=\"border:#000000 solid 1px;\" cellspacing=\"0\">"); |
| |
| // save header row |
| fSum.WriteLine("<tr bgcolor=\"#CCCCCC\">"); |
| fSum.WriteLine("<td style=\"padding:2px;border-right:#000000 solid 1px;\ |
| border-bottom:#000000 solid 1px;\">\ |
| <strong>Test Driver</strong></td>"); |
| fSum.WriteLine( |
| "<td style=\"padding:2px;border-right:#000000 solid 1px;\ |
| border-bottom:#000000 solid 1px;\"><strong>State</strong></td>"); |
| fSum.WriteLine( |
| "<td style=\"padding:2px;border-bottom:#000000 solid 1px;\">\ |
| <strong>Warnings</strong></td>"); |
| fSum.WriteLine("</tr>"); |
| |
| // save test driver header |
| if (rwtestInfo.errorsCnt == "0") |
| fSum.WriteLine("<tr bgcolor=\"#FFFFFF\" \ |
| style=\"border-bottom:#000000 solid 1px;\">"); |
| else |
| fSum.WriteLine("<tr bgcolor=\"#FF9999\" \ |
| style=\"border-bottom:#000000 solid 1px;\">"); |
| |
| fSum.WriteLine( |
| "<td style=\"padding:2px;border-right:#000000 solid 1px;\">" + |
| "<a href=\"#" + rwtestInfo.name + "\">" + |
| rwtestInfo.name + "</a></td>"); |
| |
| fSum.Write( |
| "<td style=\"padding:2px;border-right:#000000 solid 1px;\">"); |
| if (rwtestInfo.errorsCnt == "0") |
| fSum.Write("OK"); |
| else |
| fSum.Write("Failed"); |
| fSum.WriteLine("</td>"); |
| |
| fSum.WriteLine("<td style=\"padding:2px;\">" + |
| rwtestInfo.warningsCnt + "</td>"); |
| |
| fSum.WriteLine("</tr>"); |
| |
| fSum.WriteLine("</table>"); |
| fSum.WriteLine("<br/>"); |
| } |
| |
| |
| function saveSummaryHeaderMulti(fSum, exsDir, buildType, hdrExamples) |
| { |
| fSum.WriteLine("<strong><a name=\"" + makeLinkFromString(hdrExamples) + |
| "\">" + hdrExamples + "</a></strong>"); |
| |
| fSum.WriteLine("<table border=\"0\" width=\"100%\" \ |
| style=\"border:#000000 solid 1px;\" cellspacing=\"0\">"); |
| |
| // save header row |
| fSum.WriteLine("<tr bgcolor=\"#CCCCCC\">"); |
| fSum.WriteLine("<td style=\"padding:2px;border-right:#000000 solid 1px;\ |
| border-bottom:#000000 solid 1px;\"><strong>Example</strong></td>"); |
| fSum.WriteLine("<td style=\"padding:2px;border-right:#000000 solid 1px;\ |
| border-bottom:#000000 solid 1px;\"><strong>State</strong></td>"); |
| fSum.WriteLine("<td style=\"padding:2px;border-right:#000000 solid 1px;\ |
| border-bottom:#000000 solid 1px;\">\ |
| <strong>Comparision</strong></td>"); |
| fSum.WriteLine("<td style=\"padding:2px;\ |
| border-bottom:#000000 solid 1px;\"><strong>Warnings</strong></td>"); |
| fSum.WriteLine("</tr>"); |
| |
| // load information from local summary file |
| // and save it to general summary |
| var lsumFileName = exsDir + "\\" + summaryFileName; |
| if (fso.FileExists(lsumFileName)) |
| { |
| var fileLSum = fso.OpenTextFile(lsumFileName); |
| if (!fileLSum.AtEndOfStream) |
| { |
| var lsumData = fileLSum.ReadAll(); |
| fSum.Write(lsumData); |
| } |
| fileLSum.Close(); |
| } |
| |
| fSum.WriteLine("</table>"); |
| fSum.WriteLine("<br/>"); |
| } |
| |
| function saveBuildSummarySingle(fSum, libInfo, hdrLibrary) |
| { |
| saveBuildInfoTable(fSum, libInfo, hdrLibrary, true); |
| fSum.WriteLine("<br/>"); |
| } |
| |
| |
| function saveBuildSummaryMulti(fSum, htmDir) |
| { |
| if (!fso.FolderExists(htmDir)) |
| return; |
| var htmFolder = fso.GetFolder(htmDir); |
| |
| var enumHtmSubFolders = new Enumerator(htmFolder.SubFolders); |
| for (; !enumHtmSubFolders.atEnd(); enumHtmSubFolders.moveNext()) |
| { |
| var htmFName = enumHtmSubFolders.item().Name; |
| saveBuildSummariesFromFolder(fSum, |
| enumHtmSubFolders.item().Path, htmFolderName); |
| saveBuildSummaryMulti(fSum, htmDir + "\\" + htmFName); |
| } |
| } |
| |
| function saveBuildSummariesFromFolder(fSum, testFolder, htmFName) |
| { |
| var htmFldName = testFolder + "\\" + htmFName; |
| if (!fso.FolderExists(htmFldName)) |
| return; |
| |
| var htmFld = fso.GetFolder(htmFldName); |
| |
| var rx = new RegExp("^.+\\.(?:htm)$", "i"); |
| var enumHtmFiles = new Enumerator(htmFld.Files); |
| for (; !enumHtmFiles.atEnd(); enumHtmFiles.moveNext()) |
| { |
| var htmFileName = enumHtmFiles.item().Name; |
| if (! rx.test(htmFileName)) |
| continue; |
| |
| var htmFile = fso.OpenTextFile(htmFldName + "\\" + htmFileName); |
| var htmData = htmFile.ReadAll(); |
| |
| fSum.Write(htmData); |
| |
| fSum.WriteLine("<br/>"); |
| } |
| } |
| |
| |
| function closeSummaryLog(fSum) |
| { |
| fSum.WriteLine("</body>"); |
| fSum.Close(); |
| } |
| |
| //////////////////////////////////////////////////////////////////////////// |
| function checkForFailures(testDir, bType, logHtm, sumHtm, htmTempDir, |
| seeHtm, useUnicode) |
| { |
| if (!fso.FolderExists(testDir)) |
| return; |
| var testFolder = fso.GetFolder(testDir); |
| |
| var seeHtmHere = seeHtm; |
| if (false == seeHtmHere && testFolder.Name == bType) |
| seeHtmHere = true; |
| |
| var enumHtmSubFolders = new Enumerator(testFolder.SubFolders); |
| for (; !enumHtmSubFolders.atEnd(); enumHtmSubFolders.moveNext()) |
| { |
| var htmFName = enumHtmSubFolders.item().Name; |
| checkForFailures(testDir + "\\" + htmFName, bType, |
| logHtm, sumHtm, htmTempDir, seeHtmHere, useUnicode); |
| } |
| |
| if (false == seeHtmHere) |
| return; |
| |
| var rx = new RegExp("^.+\\.(?:htm)$", "i"); |
| var enumHtmFiles = new Enumerator(testFolder.Files); |
| for (; !enumHtmFiles.atEnd(); enumHtmFiles.moveNext()) |
| { |
| var htmFileName = enumHtmFiles.item().Name; |
| if (! rx.test(htmFileName)) |
| continue; |
| |
| if (htmFileName != logHtm) |
| continue; |
| |
| var testInfo = new ItemBuildInfo(testFolder.Name); |
| |
| var uniMode = (true == useUnicode) ? -1 : 0; |
| var blogFile = |
| fso.OpenTextFile(testFolder.Path + "\\" + htmFileName, |
| 1, false, uniMode); |
| var blogData = blogFile.AtEndOfStream ? "" : blogFile.ReadAll(); |
| |
| var posTmp = getCommandLinesInfo(testInfo, blogData, 0); |
| posTmp = getCompilationInfo(testInfo, blogData, posTmp); |
| posTmp = getBuildSummaryInfo(testInfo, blogData, posTmp); |
| |
| if (testInfo.errorsCnt != "0") |
| saveBuildFailure(testFolder.Path, testInfo, sumHtm, htmTempDir); |
| } |
| } |
| |
| function saveBuildFailure(testDir, testInfo, sumHtm, htmTempDir) |
| { |
| var htmTempPath = getParentFolder(testDir) + "\\" + htmTempDir; |
| if (! fso.FolderExists(htmTempPath)) |
| fso.CreateFolder(htmTempPath); |
| |
| saveBuildInfo(testInfo, htmTempPath, "htm"); |
| |
| var sumTempFile; |
| if (fso.FileExists(sumHtm)) |
| { |
| sumTempFile = fso.OpenTextFile(sumHtm, 8); |
| } |
| else |
| { |
| WScript.Echo("Path " + sumHtm + " not found"); |
| return; |
| } |
| |
| saveBuildSummary(testInfo, sumTempFile); |
| sumTempFile.Close(); |
| } |