1
// TreeHierarchyDlg.cpp : implementation file
6
#include "TreeHierarchyDlg.h"
7
#include "TestRunnerModel.h"
8
#include "ResourceLoaders.h"
15
static char THIS_FILE[] = __FILE__;
18
/////////////////////////////////////////////////////////////////////////////
19
// TreeHierarchyDlg dialog
22
TreeHierarchyDlg::TreeHierarchyDlg(CWnd* pParent )
23
: cdxCDynamicDialog(_T("CPP_UNIT_TEST_RUNNER_IDD_DIALOG_TEST_HIERARCHY"), pParent)
24
, m_selectedTest( NULL )
26
ModifyFlags( flSWPCopyBits, 0 ); // anti-flickering option for resizing
28
//{{AFX_DATA_INIT(TreeHierarchyDlg)
29
// NOTE: the ClassWizard will add member initialization here
35
TreeHierarchyDlg::DoDataExchange(CDataExchange* pDX)
37
cdxCDynamicDialog::DoDataExchange(pDX);
38
//{{AFX_DATA_MAP(TreeHierarchyDlg)
39
DDX_Control(pDX, IDC_TREE_TEST, m_treeTests);
44
BEGIN_MESSAGE_MAP(TreeHierarchyDlg, cdxCDynamicDialog)
45
//{{AFX_MSG_MAP(TreeHierarchyDlg)
52
TreeHierarchyDlg::setRootTest( CPPUNIT_NS::Test *test )
59
TreeHierarchyDlg::OnInitDialog()
61
cdxCDynamicDialog::OnInitDialog();
65
RestoreWindowPosition( TestRunnerModel::settingKey,
66
TestRunnerModel::settingBrowseDialogKey );
73
TreeHierarchyDlg::initializeLayout()
75
// see DynamicWindow/doc for documentation
76
AddSzControl( IDC_TREE_TEST, mdResize, mdResize );
77
AddSzControl( IDOK, mdRepos, mdNone );
78
AddSzControl( IDCANCEL, mdRepos, mdNone );
83
TreeHierarchyDlg::fillTree()
85
VERIFY( m_imageList.Create( _T("CPP_UNIT_TEST_RUNNER_IDB_TEST_TYPE"),
86
16, 1, RGB( 255,0,255 ) ) );
88
m_treeTests.SetImageList( &m_imageList, TVSIL_NORMAL );
90
HTREEITEM hSuite = addTest( m_rootTest, TVI_ROOT );
91
m_treeTests.Expand( hSuite, TVE_EXPAND );
96
TreeHierarchyDlg::addTest( CPPUNIT_NS::Test *test,
99
int testType = isSuite( test ) ? imgSuite : imgUnitTest;
100
HTREEITEM hItem = m_treeTests.InsertItem( CString(test->getName().c_str()),
106
VERIFY( m_treeTests.SetItemData( hItem, (DWORD)test ) );
107
if ( isSuite( test ) )
108
addTestSuiteChildrenTo( test, hItem );
115
TreeHierarchyDlg::addTestSuiteChildrenTo( CPPUNIT_NS::Test *suite,
116
HTREEITEM hItemSuite )
120
for ( ; childIndex < suite->getChildTestCount(); ++childIndex )
121
tests.push_back( suite->getChildTestAt( childIndex ) );
124
for ( childIndex = 0; childIndex < suite->getChildTestCount(); ++childIndex )
125
addTest( suite->getChildTestAt( childIndex ), hItemSuite );
130
TreeHierarchyDlg::isSuite( CPPUNIT_NS::Test *test )
132
return ( test->getChildTestCount() > 0 || // suite with test
133
test->countTestCases() == 0 ); // empty suite
139
bool operator()( CPPUNIT_NS::Test *test1, CPPUNIT_NS::Test *test2 ) const
141
bool isTest1Suite = TreeHierarchyDlg::isSuite( test1 );
142
bool isTest2Suite = TreeHierarchyDlg::isSuite( test2 );
143
if ( isTest1Suite && !isTest2Suite )
145
if ( isTest1Suite && isTest2Suite )
146
return test1->getName() < test2->getName();
152
TreeHierarchyDlg::sortByName( Tests &tests ) const
154
std::stable_sort( tests.begin(), tests.end(), PredSortTest() );
159
TreeHierarchyDlg::OnOK()
161
CPPUNIT_NS::Test *test = findSelectedTest();
164
AfxMessageBox( loadCString(IDS_ERROR_SELECT_TEST), MB_OK );
168
m_selectedTest = test;
170
cdxCDynamicDialog::OnOK();
175
TreeHierarchyDlg::OnCancel()
178
cdxCDynamicDialog::OnCancel();
183
TreeHierarchyDlg::findSelectedTest()
185
HTREEITEM hItem = m_treeTests.GetSelectedItem();
189
VERIFY( data = m_treeTests.GetItemData( hItem ) );
190
return reinterpret_cast<CPPUNIT_NS::Test *>( data );
197
TreeHierarchyDlg::getSelectedTest() const
199
return m_selectedTest;
204
TreeHierarchyDlg::storeDialogBounds()
206
StoreWindowPosition( TestRunnerModel::settingKey,
207
TestRunnerModel::settingBrowseDialogKey );