treelistctrltest.cpp 7.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234
  1. ///////////////////////////////////////////////////////////////////////////////
  2. // Name: tests/controls/treelistctrltest.cpp
  3. // Purpose: wxTreeListCtrl unit test.
  4. // Author: Vadim Zeitlin
  5. // Created: 2011-08-27
  6. // Copyright: (c) 2011 Vadim Zeitlin <vadim@wxwidgets.org>
  7. ///////////////////////////////////////////////////////////////////////////////
  8. // ----------------------------------------------------------------------------
  9. // headers
  10. // ----------------------------------------------------------------------------
  11. #include "testprec.h"
  12. #if wxUSE_TREELISTCTRL
  13. #ifdef __BORLANDC__
  14. #pragma hdrstop
  15. #endif
  16. #include "wx/treelist.h"
  17. #include "wx/app.h"
  18. // ----------------------------------------------------------------------------
  19. // test class
  20. // ----------------------------------------------------------------------------
  21. class TreeListCtrlTestCase : public CppUnit::TestCase
  22. {
  23. public:
  24. TreeListCtrlTestCase() { }
  25. virtual void setUp();
  26. virtual void tearDown();
  27. private:
  28. CPPUNIT_TEST_SUITE( TreeListCtrlTestCase );
  29. CPPUNIT_TEST( Traversal );
  30. CPPUNIT_TEST( ItemText );
  31. CPPUNIT_TEST( ItemCheck );
  32. CPPUNIT_TEST_SUITE_END();
  33. // Create the control with the given style.
  34. void Create(long style);
  35. // Add an item to the tree and increment m_numItems.
  36. wxTreeListItem AddItem(const char *label,
  37. wxTreeListItem parent = wxTreeListItem(),
  38. const char *numFiles = "",
  39. const char *size = "");
  40. // Tests:
  41. void Traversal();
  42. void ItemText();
  43. void ItemCheck();
  44. // The control itself.
  45. wxTreeListCtrl *m_treelist;
  46. // And some of its items.
  47. wxTreeListItem m_code,
  48. m_code_osx,
  49. m_code_osx_cocoa;
  50. // Also the total number of items in it initially
  51. unsigned m_numItems;
  52. wxDECLARE_NO_COPY_CLASS(TreeListCtrlTestCase);
  53. };
  54. // register in the unnamed registry so that these tests are run by default
  55. CPPUNIT_TEST_SUITE_REGISTRATION( TreeListCtrlTestCase );
  56. // also include in its own registry so that these tests can be run alone
  57. CPPUNIT_TEST_SUITE_NAMED_REGISTRATION( TreeListCtrlTestCase, "TreeListCtrlTestCase" );
  58. // ----------------------------------------------------------------------------
  59. // test initialization
  60. // ----------------------------------------------------------------------------
  61. wxTreeListItem
  62. TreeListCtrlTestCase::AddItem(const char *label,
  63. wxTreeListItem parent,
  64. const char *numFiles,
  65. const char *size)
  66. {
  67. if ( !parent.IsOk() )
  68. parent = m_treelist->GetRootItem();
  69. wxTreeListItem item = m_treelist->AppendItem(parent, label);
  70. m_treelist->SetItemText(item, 1, numFiles);
  71. m_treelist->SetItemText(item, 2, size);
  72. m_numItems++;
  73. return item;
  74. }
  75. void TreeListCtrlTestCase::Create(long style)
  76. {
  77. m_treelist = new wxTreeListCtrl(wxTheApp->GetTopWindow(),
  78. wxID_ANY,
  79. wxDefaultPosition,
  80. wxSize(400, 200),
  81. style);
  82. m_treelist->AppendColumn("Component");
  83. m_treelist->AppendColumn("# Files");
  84. m_treelist->AppendColumn("Size");
  85. // Fill the control with the same data as used in the treelist sample:
  86. m_code = AddItem("Code");
  87. AddItem("wxMSW", m_code, "313", "3.94 MiB");
  88. AddItem("wxGTK", m_code, "180", "1.66 MiB");
  89. m_code_osx = AddItem("wxOSX", m_code, "265", "2.36 MiB");
  90. AddItem("Core", m_code_osx, "31", "347 KiB");
  91. AddItem("Carbon", m_code_osx, "91", "1.34 MiB");
  92. m_code_osx_cocoa = AddItem("Cocoa", m_code_osx, "46", "512 KiB");
  93. wxTreeListItem Documentation = AddItem("Documentation");
  94. AddItem("HTML", Documentation, "many");
  95. AddItem("CHM", Documentation, "1");
  96. wxTreeListItem Samples = AddItem("Samples");
  97. AddItem("minimal", Samples, "1", "7 KiB");
  98. AddItem("widgets", Samples, "28", "419 KiB");
  99. m_treelist->Refresh();
  100. m_treelist->Update();
  101. }
  102. void TreeListCtrlTestCase::setUp()
  103. {
  104. m_numItems = 0;
  105. Create(wxTL_MULTIPLE | wxTL_3STATE);
  106. }
  107. void TreeListCtrlTestCase::tearDown()
  108. {
  109. delete m_treelist;
  110. m_treelist = NULL;
  111. }
  112. // ----------------------------------------------------------------------------
  113. // the tests themselves
  114. // ----------------------------------------------------------------------------
  115. // Test various tree traversal methods.
  116. void TreeListCtrlTestCase::Traversal()
  117. {
  118. // GetParent() tests:
  119. wxTreeListItem root = m_treelist->GetRootItem();
  120. CPPUNIT_ASSERT( !m_treelist->GetItemParent(root) );
  121. CPPUNIT_ASSERT_EQUAL( root, m_treelist->GetItemParent(m_code) );
  122. CPPUNIT_ASSERT_EQUAL( m_code, m_treelist->GetItemParent(m_code_osx) );
  123. // GetFirstChild() and GetNextSibling() tests:
  124. CPPUNIT_ASSERT_EQUAL( m_code, m_treelist->GetFirstChild(root) );
  125. CPPUNIT_ASSERT_EQUAL
  126. (
  127. m_code_osx,
  128. m_treelist->GetNextSibling
  129. (
  130. m_treelist->GetNextSibling
  131. (
  132. m_treelist->GetFirstChild(m_code)
  133. )
  134. )
  135. );
  136. // Get{First,Next}Item() test:
  137. unsigned numItems = 0;
  138. for ( wxTreeListItem item = m_treelist->GetFirstItem();
  139. item.IsOk();
  140. item = m_treelist->GetNextItem(item) )
  141. {
  142. numItems++;
  143. }
  144. CPPUNIT_ASSERT_EQUAL( m_numItems, numItems );
  145. }
  146. // Test accessing items text.
  147. void TreeListCtrlTestCase::ItemText()
  148. {
  149. CPPUNIT_ASSERT_EQUAL( "Cocoa", m_treelist->GetItemText(m_code_osx_cocoa) );
  150. CPPUNIT_ASSERT_EQUAL( "46", m_treelist->GetItemText(m_code_osx_cocoa, 1) );
  151. m_treelist->SetItemText(m_code_osx_cocoa, "wxCocoa");
  152. CPPUNIT_ASSERT_EQUAL( "wxCocoa", m_treelist->GetItemText(m_code_osx_cocoa) );
  153. m_treelist->SetItemText(m_code_osx_cocoa, 1, "47");
  154. CPPUNIT_ASSERT_EQUAL( "47", m_treelist->GetItemText(m_code_osx_cocoa, 1) );
  155. }
  156. // Test checking and unchecking items.
  157. void TreeListCtrlTestCase::ItemCheck()
  158. {
  159. CPPUNIT_ASSERT_EQUAL( wxCHK_UNCHECKED,
  160. m_treelist->GetCheckedState(m_code) );
  161. m_treelist->CheckItemRecursively(m_code);
  162. CPPUNIT_ASSERT_EQUAL( wxCHK_CHECKED,
  163. m_treelist->GetCheckedState(m_code) );
  164. CPPUNIT_ASSERT_EQUAL( wxCHK_CHECKED,
  165. m_treelist->GetCheckedState(m_code_osx) );
  166. CPPUNIT_ASSERT_EQUAL( wxCHK_CHECKED,
  167. m_treelist->GetCheckedState(m_code_osx_cocoa) );
  168. m_treelist->UncheckItem(m_code_osx_cocoa);
  169. CPPUNIT_ASSERT_EQUAL( wxCHK_UNCHECKED,
  170. m_treelist->GetCheckedState(m_code_osx_cocoa) );
  171. m_treelist->UpdateItemParentStateRecursively(m_code_osx_cocoa);
  172. CPPUNIT_ASSERT_EQUAL( wxCHK_UNDETERMINED,
  173. m_treelist->GetCheckedState(m_code_osx) );
  174. CPPUNIT_ASSERT_EQUAL( wxCHK_UNDETERMINED,
  175. m_treelist->GetCheckedState(m_code) );
  176. m_treelist->CheckItemRecursively(m_code_osx, wxCHK_UNCHECKED);
  177. m_treelist->UpdateItemParentStateRecursively(m_code_osx_cocoa);
  178. CPPUNIT_ASSERT_EQUAL( wxCHK_UNCHECKED,
  179. m_treelist->GetCheckedState(m_code_osx) );
  180. CPPUNIT_ASSERT_EQUAL( wxCHK_UNDETERMINED,
  181. m_treelist->GetCheckedState(m_code) );
  182. }
  183. #endif // wxUSE_TREELISTCTRL