headerctrltest.cpp 4.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148
  1. ///////////////////////////////////////////////////////////////////////////////
  2. // Name: tests/controls/headerctrltest.cpp
  3. // Purpose: wxHeaderCtrl unit test
  4. // Author: Vadim Zeitlin
  5. // Created: 2008-11-26
  6. // Copyright: (c) 2008 Vadim Zeitlin <vadim@wxwidgets.org>
  7. ///////////////////////////////////////////////////////////////////////////////
  8. // ----------------------------------------------------------------------------
  9. // headers
  10. // ----------------------------------------------------------------------------
  11. #include "testprec.h"
  12. #ifdef __BORLANDC__
  13. #pragma hdrstop
  14. #endif
  15. #ifndef WX_PRECOMP
  16. #include "wx/app.h"
  17. #endif // WX_PRECOMP
  18. #include "wx/headerctrl.h"
  19. // ----------------------------------------------------------------------------
  20. // test class
  21. // ----------------------------------------------------------------------------
  22. class HeaderCtrlTestCase : public CppUnit::TestCase
  23. {
  24. public:
  25. HeaderCtrlTestCase() { }
  26. virtual void setUp();
  27. virtual void tearDown();
  28. private:
  29. CPPUNIT_TEST_SUITE( HeaderCtrlTestCase );
  30. CPPUNIT_TEST( AddDelete );
  31. CPPUNIT_TEST( BestSize );
  32. CPPUNIT_TEST( Reorder );
  33. CPPUNIT_TEST_SUITE_END();
  34. void AddDelete();
  35. void BestSize();
  36. void Reorder();
  37. wxHeaderCtrlSimple *m_header;
  38. DECLARE_NO_COPY_CLASS(HeaderCtrlTestCase)
  39. };
  40. // register in the unnamed registry so that these tests are run by default
  41. CPPUNIT_TEST_SUITE_REGISTRATION( HeaderCtrlTestCase );
  42. // also include in its own registry so that these tests can be run alone
  43. CPPUNIT_TEST_SUITE_NAMED_REGISTRATION( HeaderCtrlTestCase, "HeaderCtrlTestCase" );
  44. // ----------------------------------------------------------------------------
  45. // test initialization
  46. // ----------------------------------------------------------------------------
  47. void HeaderCtrlTestCase::setUp()
  48. {
  49. m_header = new wxHeaderCtrlSimple(wxTheApp->GetTopWindow());
  50. }
  51. void HeaderCtrlTestCase::tearDown()
  52. {
  53. delete m_header;
  54. m_header = NULL;
  55. }
  56. // ----------------------------------------------------------------------------
  57. // the tests themselves
  58. // ----------------------------------------------------------------------------
  59. void HeaderCtrlTestCase::AddDelete()
  60. {
  61. CPPUNIT_ASSERT_EQUAL( 0, m_header->GetColumnCount() );
  62. m_header->AppendColumn(wxHeaderColumnSimple("Column 1"));
  63. CPPUNIT_ASSERT_EQUAL( 1, m_header->GetColumnCount() );
  64. m_header->AppendColumn(wxHeaderColumnSimple("Column 2"));
  65. CPPUNIT_ASSERT_EQUAL( 2, m_header->GetColumnCount() );
  66. m_header->InsertColumn(wxHeaderColumnSimple("Column 0"), 0);
  67. CPPUNIT_ASSERT_EQUAL( 3, m_header->GetColumnCount() );
  68. m_header->DeleteColumn(2);
  69. CPPUNIT_ASSERT_EQUAL( 2, m_header->GetColumnCount() );
  70. }
  71. void HeaderCtrlTestCase::BestSize()
  72. {
  73. const wxSize sizeEmpty = m_header->GetBestSize();
  74. // this fails under wxGTK where wxControl::GetBestSize() is 0 in horizontal
  75. // direction
  76. //CPPUNIT_ASSERT( sizeEmpty.x > 0 );
  77. CPPUNIT_ASSERT( sizeEmpty.y > 0 );
  78. m_header->AppendColumn(wxHeaderColumnSimple("Foo"));
  79. m_header->AppendColumn(wxHeaderColumnSimple("Bar"));
  80. const wxSize size = m_header->GetBestSize();
  81. CPPUNIT_ASSERT_EQUAL( sizeEmpty.y, size.y );
  82. }
  83. void HeaderCtrlTestCase::Reorder()
  84. {
  85. static const int COL_COUNT = 4;
  86. int n;
  87. for ( n = 0; n < COL_COUNT; n++ )
  88. m_header->AppendColumn(wxHeaderColumnSimple(wxString::Format("%d", n)));
  89. wxArrayInt order = m_header->GetColumnsOrder(); // initial order: [0 1 2 3]
  90. for ( n = 0; n < COL_COUNT; n++ )
  91. CPPUNIT_ASSERT_EQUAL( n, order[n] );
  92. wxHeaderCtrl::MoveColumnInOrderArray(order, 0, 2);
  93. m_header->SetColumnsOrder(order); // change order to [1 2 0 3]
  94. order = m_header->GetColumnsOrder();
  95. CPPUNIT_ASSERT_EQUAL( 1, order[0] );
  96. CPPUNIT_ASSERT_EQUAL( 2, order[1] );
  97. CPPUNIT_ASSERT_EQUAL( 0, order[2] );
  98. CPPUNIT_ASSERT_EQUAL( 3, order[3] );
  99. order[2] = 3;
  100. order[3] = 0;
  101. m_header->SetColumnsOrder(order); // and now [1 2 3 0]
  102. order = m_header->GetColumnsOrder();
  103. CPPUNIT_ASSERT_EQUAL( 1, order[0] );
  104. CPPUNIT_ASSERT_EQUAL( 2, order[1] );
  105. CPPUNIT_ASSERT_EQUAL( 3, order[2] );
  106. CPPUNIT_ASSERT_EQUAL( 0, order[3] );
  107. wxHeaderCtrl::MoveColumnInOrderArray(order, 1, 3);
  108. m_header->SetColumnsOrder(order); // finally [2 3 0 1]
  109. order = m_header->GetColumnsOrder();
  110. CPPUNIT_ASSERT_EQUAL( 2, order[0] );
  111. CPPUNIT_ASSERT_EQUAL( 3, order[1] );
  112. CPPUNIT_ASSERT_EQUAL( 0, order[2] );
  113. CPPUNIT_ASSERT_EQUAL( 1, order[3] );
  114. }