gecko-dev/cmd/winfe/testcase.cpp

287 строки
6.8 KiB
C++

/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*-
*
* The contents of this file are subject to the Netscape Public License
* Version 1.0 (the "NPL"); you may not use this file except in
* compliance with the NPL. You may obtain a copy of the NPL at
* http://www.mozilla.org/NPL/
*
* Software distributed under the NPL is distributed on an "AS IS" basis,
* WITHOUT WARRANTY OF ANY KIND, either express or implied. See the NPL
* for the specific language governing rights and limitations under the
* NPL.
*
* The Initial Developer of this code under the NPL is Netscape
* Communications Corporation. Portions created by Netscape are
* Copyright (C) 1998 Netscape Communications Corporation. All Rights
* Reserved.
*/
#include "stdafx.h"
#include "testcase.h"
#include "resource.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
// global variable to access Testcase
extern CTestCase QA_TestCase;
// Assigns sTestID, sLogFile and sStartTime
CTestCase::CTestCase(CTestCaseManager *tc)
{
CFile fFile;
m_sTestID = tc->GetTestCaseName();
m_TCManager = tc;
CString sDataPath = tc->m_sDataPath;
m_sBaseFile = (CString)(sDataPath + m_sTestID + ".bas");
m_sResultFile = (CString)(sDataPath + m_sTestID + ".ran");
m_sBeakerFile = "c:\\harness.log"; // DOS and Windows only path format
// if BaseLine File doesn't exist then log run to a .bas file instead of a .log file
if (!m_TCManager->FileExists(m_sBaseFile))
{
m_sLogFile = m_sBaseFile;
m_bCreateBaseLine = TRUE;
}
else
{
m_sLogFile = (CString)(sDataPath + m_sTestID + ".log");
// remove previous log file
if (m_TCManager->FileExists(m_sLogFile))
{
CFile fFile;
fFile.Remove(m_sLogFile);
}
m_bCreateBaseLine = FALSE;
}
// remove .ran file
if (m_TCManager->FileExists(m_sResultFile))
fFile.Remove(m_sResultFile);
// create .ran file
fFile.Open(m_sResultFile,CFile::modeCreate | CFile::shareDenyNone);
fFile.Close();
fFile.Open(m_sLogFile,CFile::modeCreate | CFile::shareDenyNone);
fFile.Close();
// create c:\harness.log file
fFile.Open(m_sBeakerFile,CFile::modeCreate | CFile::shareDenyNone);
fFile.Close();
// Log Clock
char tmpbuf[128];
_strdate( tmpbuf );
m_sStartTimeString = (CString)((CString)"Start Date/Time: " + tmpbuf + " ");
m_sStartDate = (CString)(tmpbuf);
_strtime( tmpbuf );
m_sStartTimeString += (CString)(tmpbuf);
m_sStartTime = (CString)(tmpbuf);
m_sExpectedResults = " ";
m_sActualResults = "Some Error";
// Log a header at the Top of the (.all) file
CString sHeader = "\n++Testcase : " + m_sTestID;
m_TCManager->PrintToFile(sHeader);
PhaseTwoIsFalse(); // added by par
m_bFileCompareResult = FALSE; // added by par
}
CTestCase::~CTestCase()
{
// release memory
m_sTestID.Empty();
m_sBaseFile.Empty();
m_sLogFile.Empty();
m_sResultFile.Empty();
m_sStartDate.Empty();
m_sStartTime.Empty();
m_sStartTimeString.Empty();
m_sEndTime.Empty();
m_sEndTimeString.Empty();
m_sManualResult.Empty();
}
// Compares two log files.
// returns result.
void CTestCase::LogResult()
{
CStdioFile fResultFile;
CString sResult;
// check if creating baseline or there was an actual compare
if (!m_bCreateBaseLine)
sResult = "File Compare Result: " + (m_bFileCompareResult ? "PASS" : "*** FAILED - Check "+ m_sLogFile);
else
sResult = "Created BaseLine File - " + m_sBaseFile;
if (m_bPhaseTwoResult) // TRUE
sResult = sResult + "\n" + "Phase Two Result: PASS";
else
sResult = sResult + "\n" + "Phase Two Result: FAIL";
if (!m_bCreateBaseLine)
{
if (m_bFileCompareResult && m_bPhaseTwoResult) {
sResult = sResult + "\n" + "Overall Test Result: PASS";
m_bOverallResult = TRUE;
} else {
sResult = sResult + "\n" + "Overall Test Result: FAIL";
m_bOverallResult = FALSE;
}
}
else
sResult = sResult + "\n" + "Overall Test Result: N/A";
// Print Result to files (.ran)
PrintToFile(m_sResultFile,sResult);
// (.all)
m_TCManager->PrintToFile(sResult);
// Print Times to files (.ran)
CString sTimes = m_sStartTimeString + "\n" + m_sEndTimeString;
PrintToFile(m_sResultFile,sTimes);
// (.all)
m_TCManager->PrintToFile(sTimes);
}
// Compares 2 files one line at a time.
BOOL CTestCase::FileCompare()
{
BOOL bResult=FALSE;
CStdioFile fBase, fCompare;
CString sLine_Base, sLine_Comp;
if (m_TCManager->FileExists(m_sLogFile))
{
if (fBase.Open((LPCTSTR)m_sBaseFile,CFile::modeRead) && \
fCompare.Open((LPCTSTR)m_sLogFile, CFile::modeRead))
{
// verify line at a time
while (fBase.ReadString(sLine_Base) && fCompare.ReadString(sLine_Comp) && bResult)
bResult = (sLine_Base.Compare(sLine_Comp) == 0 ? 1 : 0);
fBase.Close();
fCompare.Close();
bResult = TRUE;
}
}
return bResult;
}
void CTestCase::QA_Trace(CString msg)
{
// write to Log File (.bas if doesn't exist, otherwise .log)
PrintToFile(m_sLogFile,msg);
}
void CTestCase::QA_LogError(CString msg)
{
// write to Overall File (.all)
m_TCManager->PrintToFile(msg);
// write to Testcase Result File (.ran)
PrintToFile(m_sResultFile, msg);
}
void CTestCase::WrapUp()
{
//Log End Time
char tmpbuf[128];
_strdate( tmpbuf );
m_sEndTimeString = (CString)((CString)"End Date/Time: " + tmpbuf + " ");
m_sEndDate = (CString)(tmpbuf);
_strtime( tmpbuf );
m_sEndTimeString += (CString)(tmpbuf);
m_sEndTime = (CString)(tmpbuf);
if (!m_bCreateBaseLine)
m_bFileCompareResult = FileCompare();
LogResult();
LogBeakerResult(); // new
}
void CTestCase::PrintToFile(CString& sFile, CString& str)
{
CStdioFile fFile;
if (fFile.Open(sFile, CFile::modeWrite | CFile::shareDenyNone))
{
fFile.Seek(0, CFile::end);
// write to Testcase Log File
fFile.WriteString(str + "\n");
fFile.Flush();
fFile.Close();
}
}
void CTestCase::LogBeakerResult()
{
// Offical Beaker format is
// (machine), -pass-, Test_case_Name/Beaker, Test_Case_Name, Date, Time Start, Time End, Expected Results, Actual Results
CStdioFile fResultFile;
CString sResult;
sResult = "(local), "; // standard
// check if creating baseline or there was an actual compare
if (!m_bOverallResult)
sResult = sResult + "*FAIL*, ";
else
sResult = sResult + "-pass-, ";
CString TestCaseName = m_TCManager->GetTestCaseName();
sResult = sResult + (LPCTSTR) TestCaseName + "\\Beaker, ";
sResult = sResult + (LPCTSTR) TestCaseName + ", ";
// log the date
char tmpbuf[128];
_strdate( tmpbuf );
CString TodayDate = (CString)(tmpbuf);
sResult = sResult + m_sStartDate + ", " + m_sStartTime + ", " + m_sEndTime + ", ";
if (!m_bOverallResult) {
sResult = sResult + m_sExpectedResults + ", ";
sResult = sResult + m_sActualResults;
} else {
// do nothing as no need to post actual results
sResult = sResult + ", ";
}
// Print Result to Beaker file (harness.log)
PrintToFile(m_sBeakerFile,sResult);
}