📄 testrunnermodel.cpp
字号:
// //////////////////////////////////////////////////////////////////////////// Implementation file TestRunnerModel.cpp for class TestRunnerModel// (c)Copyright 2000, Baptiste Lepilleur.// Created: 2001/04/26// //////////////////////////////////////////////////////////////////////////#include "StdAfx.h"#include "TestRunnerModel.h"#include <cppunit/tools/Algorithm.h>#include <algorithm>#include <stdexcept>#include <cppunit/testsuite.h>#ifdef _DEBUG#define new DEBUG_NEW#undef THIS_FILEstatic char THIS_FILE[] = __FILE__;#endifconst CString TestRunnerModel::settingKey( _T("CppUnit") );const CString TestRunnerModel::settingMainDialogKey( _T( "MainDialog" ) );const CString TestRunnerModel::settingBrowseDialogKey( _T( "BrowseDialog" ) );TestRunnerModel::TestRunnerModel( CPPUNIT_NS::Test *rootTest ) : m_rootTest( rootTest ){}TestRunnerModel::~TestRunnerModel(){}const TestRunnerModel::History &TestRunnerModel::history() const{ return m_history;}void TestRunnerModel::selectHistoryTest( CPPUNIT_NS::Test *test ){ CPPUNIT_NS::removeFromSequence( m_history, test ); if ( test != NULL ) m_history.push_front( test );}CPPUNIT_NS::Test *TestRunnerModel::selectedTest() const{ if ( m_history.size() > 0 ) return m_history[0]; return NULL;}void TestRunnerModel::loadSettings(Settings & s){ CWinApp *app = AfxGetApp(); ASSERT( app != NULL ); int autorun = app->GetProfileInt( _T("CppUnit"), _T("AutorunAtStartup"), 1 ); s.autorunOnLaunch = (autorun == 1); s.col_1 = app->GetProfileInt( _T("CppUnit"), _T("Col_1"), 40 ); s.col_2 = app->GetProfileInt( _T("CppUnit"), _T("Col_2"), 40 ); s.col_3 = app->GetProfileInt( _T("CppUnit"), _T("Col_3"), 40 ); s.col_4 = app->GetProfileInt( _T("CppUnit"), _T("Col_4"), 40 ); loadHistory();}void TestRunnerModel::loadHistory(){ m_history.clear(); int idx = 1; do { CString testName = loadHistoryEntry( idx++ ); if ( testName.IsEmpty() ) break; try { m_history.push_back( m_rootTest->findTest( toAnsiString(testName ) ) ); } catch ( std::invalid_argument &) { } } while ( true );}CStringTestRunnerModel::loadHistoryEntry( int idx ){ CWinApp *app = AfxGetApp(); ASSERT( app != NULL ); return app->GetProfileString( _T("CppUnit"), getHistoryEntryName( idx ) );}void TestRunnerModel::saveSettings( const Settings & s ){ CWinApp *app = AfxGetApp(); ASSERT( app != NULL ); int autorun = s.autorunOnLaunch ? 1 : 0; app->WriteProfileInt( _T("CppUnit"), _T("AutorunAtStartup"), autorun ); app->WriteProfileInt( _T("CppUnit"), _T("Col_1"), s.col_1 ); app->WriteProfileInt( _T("CppUnit"), _T("Col_2"), s.col_2 ); app->WriteProfileInt( _T("CppUnit"), _T("Col_3"), s.col_3 ); app->WriteProfileInt( _T("CppUnit"), _T("Col_4"), s.col_4 ); int idx = 1; for ( History::const_iterator it = m_history.begin(); it != m_history.end(); ++it , ++idx ) { CPPUNIT_NS::Test *test = *it; saveHistoryEntry( idx, test->getName().c_str() ); }}void TestRunnerModel::saveHistoryEntry( int idx, CString testName ){ CWinApp *app = AfxGetApp(); ASSERT( app != NULL ); app->WriteProfileString( _T("CppUnit"), getHistoryEntryName( idx ), testName );}CStringTestRunnerModel::getHistoryEntryName( int idx ) const{ CString entry; entry.Format( _T("HistoryTest%d"), idx ); return entry;}CPPUNIT_NS::Test *TestRunnerModel::rootTest(){ return m_rootTest;}void TestRunnerModel::setRootTest( CPPUNIT_NS::Test *test ){ m_rootTest = test;}CPPUNIT_NS::Test * TestRunnerModel::findTestByName( CString name ) const{ return findTestByNameFor( name, m_rootTest );}CPPUNIT_NS::Test * TestRunnerModel::findTestByNameFor( const CString &name, CPPUNIT_NS::Test *test ) const{ if ( name == test->getName().c_str() ) return test; CPPUNIT_NS::TestSuite *suite = dynamic_cast<CPPUNIT_NS::TestSuite *>(test); if ( suite == NULL ) return NULL; const std::vector<CPPUNIT_NS::Test *> &tests = suite->getTests(); for ( std::vector<CPPUNIT_NS::Test *>::const_iterator it = tests.begin(); it != tests.end(); ++it ) { CPPUNIT_NS::Test *testFound = findTestByNameFor( name, *it ); if ( testFound != NULL ) return testFound; } return NULL;}// Utility method, should be moved somewhere else...std::string TestRunnerModel::toAnsiString( const CString &text ){#ifdef _UNICODE int bufferLength = ::WideCharToMultiByte( CP_THREAD_ACP, 0, text, text.GetLength(), NULL, 0, NULL, NULL ) +1; char *ansiString = new char[bufferLength]; ::WideCharToMultiByte( CP_THREAD_ACP, 0, text, text.GetLength(), ansiString, bufferLength, NULL, NULL ); std::string str( ansiString, bufferLength-1 ); delete[] ansiString; return str;#else return std::string( (LPCTSTR)text );#endif}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -