зеркало из https://github.com/mozilla/gecko-dev.git
306 строки
5.8 KiB
C++
306 строки
5.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.
|
|
*/
|
|
// TestCaseManager.cpp : implementation file
|
|
//
|
|
#include "stdafx.h"
|
|
#include "resource.h"
|
|
//#include "TestCaseManager.h"
|
|
#include "testcase.h"
|
|
#include "qa.h"
|
|
|
|
#include <stdlib.h>
|
|
|
|
#ifdef _DEBUG
|
|
#define new DEBUG_NEW
|
|
#undef THIS_FILE
|
|
static char THIS_FILE[] = __FILE__;
|
|
#endif
|
|
|
|
// To be used by Par's code
|
|
CTestCase QA_TestCase;
|
|
|
|
IMPLEMENT_SERIAL(CTCData, CObject, 0)
|
|
IMPLEMENT_SERIAL(CTestCaseManager, CObject, 0)
|
|
|
|
|
|
|
|
|
|
CTCData::CTCData()
|
|
{
|
|
m_strName = "";
|
|
m_strDesc = "";
|
|
m_nID = 0;
|
|
}
|
|
|
|
void CTCData::Serialize(CArchive& ar)
|
|
{
|
|
|
|
if (ar.IsStoring())
|
|
{
|
|
ar << m_strName;
|
|
ar << m_strDesc;
|
|
ar << (WORD)m_nID;
|
|
}
|
|
else
|
|
{
|
|
ar >> m_strName;
|
|
ar >> m_strDesc;
|
|
ar >> (WORD&)m_nID;
|
|
}
|
|
}
|
|
|
|
|
|
|
|
CTestCaseManager::CTestCaseManager()
|
|
{
|
|
|
|
m_iNumTestCases = 0;
|
|
m_iNumTestCasesToRun = 0;
|
|
m_sDataFile = CString("");
|
|
m_sDataPath = CString("");
|
|
m_sLogFile = CString("");
|
|
}
|
|
|
|
CTestCaseManager::~CTestCaseManager()
|
|
{
|
|
DeleteData();
|
|
}
|
|
|
|
void CTestCaseManager::Serialize(CArchive& ar)
|
|
{
|
|
CTCData* pTestCase;
|
|
int nI;
|
|
|
|
CObject::Serialize(ar);
|
|
|
|
if ( ar.IsStoring() )
|
|
{
|
|
ar << (WORD)m_TCData.GetSize();
|
|
for (nI = 0;nI < m_TCData.GetSize();nI++)
|
|
{
|
|
pTestCase = (CTCData*)m_TCData[nI];
|
|
ar << pTestCase;
|
|
}
|
|
}
|
|
else
|
|
{
|
|
WORD wSize;
|
|
ar >> wSize;
|
|
m_TCData.SetSize(wSize);
|
|
for (nI = 0;nI < m_TCData.GetSize();nI++)
|
|
{
|
|
ar >> pTestCase;
|
|
m_TCData.SetAt(nI,pTestCase);
|
|
}
|
|
}
|
|
|
|
}
|
|
|
|
void CTestCaseManager::AddTestCase(CTCData* pTestCase)
|
|
{
|
|
CTCData *pTCData;
|
|
int nI;
|
|
// put it in its place (acsending sorted order)
|
|
|
|
for (nI = 0;nI < m_TCData.GetSize();nI++)
|
|
{
|
|
pTCData = (CTCData*)m_TCData[nI];
|
|
if (pTCData->m_strName.Compare(pTestCase->m_strName) > 0)
|
|
break;
|
|
}
|
|
m_TCData.InsertAt(nI,pTestCase);
|
|
|
|
}
|
|
|
|
void CTestCaseManager::InitRun()
|
|
{
|
|
|
|
CFile fFile;
|
|
|
|
|
|
m_iNumPassed = 0;
|
|
m_iNumFailed = 0;
|
|
m_sLogFile = (CString)(m_sDataPath + "results.all");
|
|
|
|
// Delete the .all file
|
|
if (FileExists(m_sLogFile))
|
|
fFile.Remove(m_sLogFile);
|
|
|
|
fFile.Open(m_sLogFile,CFile::modeCreate | CFile::shareDenyNone);
|
|
fFile.Close();
|
|
|
|
|
|
|
|
}
|
|
|
|
// appends [str] to the Log File
|
|
void CTestCaseManager::PrintToFile(CString& str)
|
|
{
|
|
CStdioFile fFile;
|
|
|
|
if (fFile.Open(m_sLogFile,CFile::modeWrite | CFile::shareDenyNone))
|
|
{ // write to Testcase Log File
|
|
fFile.Seek(0, CFile::end);
|
|
fFile.WriteString(str + "\n");
|
|
fFile.Flush();
|
|
fFile.Close();
|
|
}
|
|
}
|
|
void CTestCaseManager::RemoveTestCases(LPINT m_TestCasesToRemove, int nNum)
|
|
{
|
|
|
|
CTCData* pTCData;
|
|
|
|
|
|
for (int nI = nNum-1 ; nI >= 0 ; nI--)
|
|
{
|
|
pTCData = (CTCData*)m_TCData[m_TestCasesToRemove[nI]];
|
|
delete pTCData;
|
|
m_TCData.RemoveAt(m_TestCasesToRemove[nI]);
|
|
}
|
|
}
|
|
|
|
void CTestCaseManager::DeleteData()
|
|
{
|
|
CTCData* pTCData;
|
|
int nI;
|
|
|
|
for (nI = 0;nI < m_TCData.GetSize();nI++)
|
|
{
|
|
pTCData = (CTCData*)m_TCData[nI];
|
|
delete pTCData;
|
|
}
|
|
m_TCData.RemoveAll();
|
|
}
|
|
|
|
void CTestCaseManager::SaveData()
|
|
{
|
|
CFile file;
|
|
|
|
|
|
if ( m_sDataFile == "" )
|
|
{
|
|
CFileDialog dlg(FALSE, NULL, NULL, NULL, "Testcase Data Files (*.dat)|*.dat|All Files (*.*)|*.*||");
|
|
if ( dlg.DoModal() == IDOK )
|
|
{
|
|
m_sDataFile = dlg.GetPathName();
|
|
|
|
if ( !FileExists(m_sDataFile) )
|
|
return;
|
|
}
|
|
}
|
|
if ( file.Open(m_sDataFile,CFile::modeCreate | CFile::modeWrite | CFile::shareDenyNone) )
|
|
{
|
|
CArchive saveArchive(&file, CArchive::store | CArchive::bNoFlushOnDelete);
|
|
Serialize(saveArchive);
|
|
saveArchive.Close();
|
|
file.Close();
|
|
}
|
|
}
|
|
|
|
void CTestCaseManager::LoadData()
|
|
{
|
|
CFileDialog dlg(TRUE, NULL, NULL, NULL, "Testcase Data Files (*.dat)|*.dat|All Files (*.*)|*.*||");
|
|
CString sFile;
|
|
|
|
CFile file;
|
|
|
|
if ( dlg.DoModal() == IDOK )
|
|
{
|
|
|
|
m_sDataFile = dlg.GetPathName();
|
|
|
|
|
|
if ( !FileExists(m_sDataFile) )
|
|
return;
|
|
|
|
// Save the path
|
|
int iSlantPos = m_sDataFile.ReverseFind('\\');
|
|
m_sDataPath = m_sDataFile.Left(iSlantPos+1); // get the slant too!
|
|
|
|
if ( file.Open(m_sDataFile,CFile::modeRead | CFile::shareDenyNone) )
|
|
{
|
|
DeleteData(); // delete data first
|
|
|
|
CArchive loadArchive(&file,CArchive::load | CArchive::bNoFlushOnDelete);
|
|
Serialize(loadArchive);
|
|
loadArchive.Close();
|
|
file.Close();
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
void CTestCaseManager::ExecuteTestCases(LPINT m_TestCasesToRun)
|
|
{
|
|
int index;
|
|
CTCData* pTCData;
|
|
|
|
CTestCaseManager *tc;
|
|
tc = this;
|
|
|
|
InitRun();
|
|
while (*m_TestCasesToRun != -1)
|
|
{
|
|
|
|
index = *m_TestCasesToRun;
|
|
pTCData = (CTCData*)m_TCData[index];
|
|
m_strName = pTCData->m_strName;
|
|
|
|
// Examine the following very closely - not a cast but a constructor
|
|
QA_TestCase = (CTestCase)(this); // formerly tc
|
|
switch (pTCData->m_nID)
|
|
{
|
|
case TEST1 : WhiteBox_DeleteMessage1(this); // formerly tc
|
|
break;
|
|
case TEST2 : TrialTestCase2(tc);
|
|
break;
|
|
}
|
|
while (QATestCaseDone == FALSE) {
|
|
FEU_StayingAlive();
|
|
}
|
|
Wrapup();
|
|
m_TestCasesToRun++;
|
|
|
|
}
|
|
DeleteData();
|
|
|
|
}
|
|
|
|
void CTestCaseManager::Wrapup()
|
|
{
|
|
CFile fFile;
|
|
|
|
// create the runflag file to talk to QAP
|
|
fFile.Open(m_sDataPath + "runflag.txt",CFile::modeCreate | CFile::shareDenyNone);
|
|
fFile.Close();
|
|
|
|
QA_TestCase.WrapUp();
|
|
}
|
|
|
|
BOOL CTestCaseManager::FileExists(CString& strPath)
|
|
{
|
|
CFileStatus status;
|
|
BOOL bFileExists = TRUE;
|
|
|
|
if ( !CFile::GetStatus(strPath,status) ) // static member
|
|
bFileExists = FALSE;
|
|
|
|
return bFileExists;
|
|
}
|