TestRunnerDlg.cpp
上传用户:dzyhzl
上传日期:2019-04-29
资源大小:56270k
文件大小:8k
源码类别:

模拟服务器

开发平台:

C/C++

  1. // TestRunnerDlg.cpp : implementation file
  2. //
  3. #include "stdafx.h"
  4. #include "mmsystem.h"
  5. #include "TestRunnerDlg.h"
  6. #include "ActiveTest.h"
  7. #include "GUITestResult.h"
  8. #include "ProgressBar.h"
  9. #ifdef _DEBUG
  10. #define new DEBUG_NEW
  11. #undef THIS_FILE
  12. static char THIS_FILE[] = __FILE__;
  13. #endif
  14. /////////////////////////////////////////////////////////////////////////////
  15. // TestRunnerDlg dialog
  16. TestRunnerDlg::TestRunnerDlg(CWnd* pParent /*=NULL*/)
  17.     : CDialog(TestRunnerDlg::IDD, pParent)
  18. {
  19.     //{{AFX_DATA_INIT(TestRunnerDlg)
  20.         // NOTE: the ClassWizard will add member initialization here
  21.     //}}AFX_DATA_INIT
  22.     m_testsProgress     = 0;
  23.     m_tests             = 0;
  24.     m_selectedTest      = 0;
  25. }
  26. void TestRunnerDlg::DoDataExchange(CDataExchange* pDX)
  27. {
  28.     CDialog::DoDataExchange(pDX);
  29.     //{{AFX_DATA_MAP(TestRunnerDlg)
  30.         // NOTE: the ClassWizard will add DDX and DDV calls here
  31.     //}}AFX_DATA_MAP
  32. }
  33. BEGIN_MESSAGE_MAP(TestRunnerDlg, CDialog)
  34.     //{{AFX_MSG_MAP(TestRunnerDlg)
  35.     ON_BN_CLICKED(ID_RUN, OnRun)
  36.     ON_BN_CLICKED(ID_STOP, OnStop)
  37.     ON_CBN_SELCHANGE(IDC_COMBO_TEST, OnSelchangeComboTest)
  38.     ON_WM_PAINT()
  39.     //}}AFX_MSG_MAP
  40. END_MESSAGE_MAP()
  41. /////////////////////////////////////////////////////////////////////////////
  42. // TestRunnerDlg message handlers
  43. BOOL TestRunnerDlg::OnInitDialog() 
  44. {
  45.     CDialog::OnInitDialog();
  46.     
  47.     CListCtrl   *listCtrl = (CListCtrl *)GetDlgItem (IDC_LIST);
  48.     CComboBox   *comboBox = (CComboBox *)GetDlgItem (IDC_COMBO_TEST);
  49.     ASSERT (listCtrl);
  50.     ASSERT (comboBox);
  51.     listCtrl->InsertColumn (0,"Type", LVCFMT_LEFT, 2 * listCtrl->GetStringWidth ("Type"), 1);
  52.     listCtrl->InsertColumn (1,"Name", LVCFMT_LEFT, 20 * listCtrl->GetStringWidth ("#"), 2);
  53.     listCtrl->InsertColumn (2,"Failed Condition", LVCFMT_LEFT, 1.75 * listCtrl->GetStringWidth ("Failed Condition"), 3);
  54.     listCtrl->InsertColumn (3,"Line Number", LVCFMT_LEFT, 1.5 * listCtrl->GetStringWidth ("Line Number"), 4);
  55.     listCtrl->InsertColumn (4,"File Name", LVCFMT_LEFT, 4.0 * listCtrl->GetStringWidth ("File Name"), 5);
  56.     int numberOfCases = 0;
  57.     for (std::vector<Test *>::iterator it = m_tests->begin (); it != m_tests->end (); ++it)
  58.     {
  59.         comboBox->AddString ((*it)->toString ().c_str ());
  60.         m_selectedTest = *it;
  61.         numberOfCases++;
  62.     }
  63.     if (numberOfCases > 0)
  64.         comboBox->SetCurSel (numberOfCases -1);
  65.     else
  66.         beRunDisabled ();
  67.     m_testsProgress = new ProgressBar (this, CRect (50, 85, 50 + 425, 85 + 25));
  68.     reset ();
  69.     
  70.     return TRUE;  // return TRUE unless you set the focus to a control
  71.                   // EXCEPTION: OCX Property Pages should return FALSE
  72. }
  73. TestRunnerDlg::~TestRunnerDlg ()
  74.     freeState ();
  75.     delete m_testsProgress;
  76. }
  77. void TestRunnerDlg::OnRun() 
  78. {
  79. if (m_selectedTest == 0)
  80. return;
  81.     freeState       (); 
  82.     reset           ();
  83.     beRunning       ();
  84.     int numberOfTests = m_selectedTest->countTestCases ();
  85.     m_testsProgress->start (numberOfTests);
  86.     m_result            = new GUITestResult ((TestRunnerDlg *)this);
  87.     m_activeTest        = new ActiveTest (m_selectedTest);
  88.     m_testStartTime     = timeGetTime ();
  89.     m_activeTest->run (m_result);
  90.     m_testEndTime       = timeGetTime ();
  91. }
  92. void TestRunnerDlg::addListEntry (std::string type, TestResult *result, Test *test, CppUnitException *e)
  93. {
  94.     char        stage [80];
  95.     LV_ITEM     lvi;
  96.     CListCtrl   *listCtrl       = (CListCtrl *)GetDlgItem (IDC_LIST);
  97.     int         currentEntry    = result->testErrors () + result->testFailures () -1;
  98.     sprintf (stage, "%s", type.c_str ());
  99.     lvi.mask        = LVIF_TEXT;
  100.     lvi.iItem       = currentEntry;
  101.     lvi.iSubItem    = 0;
  102.     lvi.pszText     = stage;
  103.     lvi.iImage      = 0;
  104.     lvi.stateMask   = 0;
  105.     lvi.state       = 0;
  106.     listCtrl->InsertItem (&lvi);
  107.     // Set class string
  108.     listCtrl->SetItemText (currentEntry, 1, test->toString ().c_str ());
  109.     // Set the asserted text
  110.     listCtrl->SetItemText(currentEntry, 2, e->what ());
  111.     // Set the line number
  112.     if (e->lineNumber () == CPPUNIT_UNKNOWNLINENUMBER)
  113.         sprintf (stage, "<unknown>");
  114.     else
  115.         sprintf (stage, "%ld", e->lineNumber ());
  116.     listCtrl->SetItemText(currentEntry, 3, stage);
  117.     // Set the file name
  118.     listCtrl->SetItemText(currentEntry, 4, e->fileName ().c_str ());
  119.     listCtrl->RedrawItems (currentEntry, currentEntry);
  120.     listCtrl->UpdateWindow ();
  121. }
  122. void TestRunnerDlg::addError (TestResult *result, Test *test, CppUnitException *e)
  123. {
  124.     addListEntry ("Error", result, test, e);
  125.     m_errors++;
  126.     updateCountsDisplay ();
  127. }
  128. void TestRunnerDlg::addFailure (TestResult *result, Test *test, CppUnitException *e)
  129. {
  130.     addListEntry ("Failure", result, test, e);
  131.     m_failures++;
  132.     updateCountsDisplay ();
  133. }
  134. void TestRunnerDlg::endTest (TestResult *result, Test *test)
  135. {
  136. if (m_selectedTest == 0)
  137. return;
  138.     m_testsRun++;
  139.     updateCountsDisplay ();
  140.     m_testsProgress->step (m_failures == 0 && m_errors == 0);
  141.     m_testEndTime   = timeGetTime ();
  142.     updateCountsDisplay ();
  143.     if (m_testsRun >= m_selectedTest->countTestCases ())
  144.         beIdle ();
  145. }
  146. void TestRunnerDlg::beRunning ()
  147. {
  148.     CButton *runButton = (CButton *)GetDlgItem (ID_RUN);
  149.     CButton *closeButton = (CButton *)GetDlgItem (IDOK);
  150.     runButton->EnableWindow (FALSE);
  151.     closeButton->EnableWindow (FALSE);
  152. }
  153. void TestRunnerDlg::beIdle ()
  154. {
  155.     CButton *runButton = (CButton *)GetDlgItem (ID_RUN);
  156.     CButton *closeButton = (CButton *)GetDlgItem (IDOK);
  157.     runButton->EnableWindow (TRUE);
  158.     closeButton->EnableWindow (TRUE);
  159. }
  160. void TestRunnerDlg::beRunDisabled ()
  161. {
  162.     CButton *runButton = (CButton *)GetDlgItem (ID_RUN);
  163.     CButton *closeButton = (CButton *)GetDlgItem (IDOK);
  164.     CButton *stopButton = (CButton *)GetDlgItem (ID_STOP);
  165.     runButton->EnableWindow (FALSE);
  166.     stopButton->EnableWindow (FALSE);
  167.     closeButton->EnableWindow (TRUE);
  168. }
  169. void TestRunnerDlg::freeState ()
  170. {
  171.     delete m_activeTest;
  172.     delete m_result;
  173. }
  174. void TestRunnerDlg::reset ()
  175. {
  176.     m_testsRun      = 0;
  177.     m_errors        = 0;
  178.     m_failures      = 0;
  179.     m_testEndTime   = m_testStartTime;
  180.     updateCountsDisplay ();
  181.     m_activeTest    = 0;
  182.     m_result        = 0;
  183.     CListCtrl *listCtrl = (CListCtrl *)GetDlgItem (IDC_LIST);
  184.     listCtrl->DeleteAllItems ();
  185.     m_testsProgress->reset ();
  186. }
  187. void TestRunnerDlg::updateCountsDisplay ()
  188. {
  189.     CStatic *statTestsRun   = (CStatic *)GetDlgItem (IDC_STATIC_RUNS);
  190.     CStatic *statErrors     = (CStatic *)GetDlgItem (IDC_STATIC_ERRORS);
  191.     CStatic *statFailures   = (CStatic *)GetDlgItem (IDC_STATIC_FAILURES);
  192.     CEdit *editTime         = (CEdit *)GetDlgItem (IDC_EDIT_TIME);
  193.     CString argumentString;
  194.     argumentString.Format ("%d", m_testsRun);
  195.     statTestsRun    ->SetWindowText (argumentString);
  196.     argumentString.Format ("%d", m_errors);
  197.     statErrors      ->SetWindowText (argumentString);
  198.     argumentString.Format ("%d", m_failures);
  199.     statFailures    ->SetWindowText (argumentString);
  200.     argumentString.Format ("Execution time: %3.3lf seconds", (m_testEndTime - m_testStartTime) / 1000.0);
  201.     editTime        ->SetWindowText (argumentString);
  202. }
  203. void TestRunnerDlg::OnStop() 
  204. {
  205.     if (m_result)
  206.         m_result->stop ();
  207.     beIdle ();
  208.     
  209. }
  210. void TestRunnerDlg::OnOK() 
  211. {
  212.     if (m_result)
  213.         m_result->stop ();
  214.     CDialog::OnOK ();
  215. }
  216. void TestRunnerDlg::OnSelchangeComboTest() 
  217. {
  218.     CComboBox   *testsSelection = (CComboBox *)GetDlgItem (IDC_COMBO_TEST);
  219.     int currentSelection = testsSelection->GetCurSel ();
  220.     if (currentSelection >= 0 && currentSelection < m_tests->size ())
  221.     {
  222.         m_selectedTest = *(m_tests->begin () + currentSelection);
  223.         beIdle ();
  224.     }
  225.     else
  226.     {
  227.         m_selectedTest = 0;
  228.         beRunDisabled ();
  229.     }
  230.     freeState ();
  231.     reset ();
  232. }
  233. void TestRunnerDlg::OnPaint() 
  234. {
  235.     CPaintDC dc (this); 
  236.     
  237.     m_testsProgress->paint (dc);    
  238. }