rearrangelisttest.cpp 4.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160
  1. ///////////////////////////////////////////////////////////////////////////////
  2. // Name: tests/controls/rearrangelisttest.cpp
  3. // Purpose: wxRearrangeList unit test
  4. // Author: Steven Lamerton
  5. // Created: 2010-07-05
  6. // Copyright: (c) 2010 Steven Lamerton
  7. ///////////////////////////////////////////////////////////////////////////////
  8. #include "testprec.h"
  9. #ifdef __BORLANDC__
  10. #pragma hdrstop
  11. #endif
  12. #ifndef WX_PRECOMP
  13. #include "wx/app.h"
  14. #endif // WX_PRECOMP
  15. #include "wx/rearrangectrl.h"
  16. #include "itemcontainertest.h"
  17. #include "testableframe.h"
  18. class RearrangeListTestCase : public ItemContainerTestCase, public CppUnit::TestCase
  19. {
  20. public:
  21. RearrangeListTestCase() { }
  22. virtual void setUp();
  23. virtual void tearDown();
  24. private:
  25. virtual wxItemContainer *GetContainer() const { return m_rearrange; }
  26. virtual wxWindow *GetContainerWindow() const { return m_rearrange; }
  27. CPPUNIT_TEST_SUITE( RearrangeListTestCase );
  28. wxITEM_CONTAINER_TESTS();
  29. CPPUNIT_TEST( Move );
  30. CPPUNIT_TEST( MoveClientData );
  31. CPPUNIT_TEST_SUITE_END();
  32. void Move();
  33. void MoveClientData();
  34. wxRearrangeList* m_rearrange;
  35. DECLARE_NO_COPY_CLASS(RearrangeListTestCase)
  36. };
  37. // register in the unnamed registry so that these tests are run by default
  38. CPPUNIT_TEST_SUITE_REGISTRATION( RearrangeListTestCase );
  39. // also include in its own registry so that these tests can be run alone
  40. CPPUNIT_TEST_SUITE_NAMED_REGISTRATION( RearrangeListTestCase, "RearrangeListTestCase" );
  41. void RearrangeListTestCase::setUp()
  42. {
  43. //We do not add items here as the wxITEM_CONTAINER_TESTS add their own
  44. wxArrayInt order;
  45. wxArrayString items;
  46. m_rearrange = new wxRearrangeList(wxTheApp->GetTopWindow(), wxID_ANY,
  47. wxDefaultPosition, wxDefaultSize, order,
  48. items);
  49. }
  50. void RearrangeListTestCase::tearDown()
  51. {
  52. wxDELETE(m_rearrange);
  53. }
  54. void RearrangeListTestCase::Move()
  55. {
  56. wxArrayInt order;
  57. order.push_back(1);
  58. order.push_back(~2);
  59. order.push_back(0);
  60. wxArrayString items;
  61. items.push_back("first");
  62. items.push_back("second");
  63. items.push_back("third");
  64. wxDELETE(m_rearrange);
  65. m_rearrange = new wxRearrangeList(wxTheApp->GetTopWindow(), wxID_ANY,
  66. wxDefaultPosition, wxDefaultSize, order,
  67. items);
  68. //Confusingly setselection sets the physical item rather than the
  69. //item specified in the constructor
  70. m_rearrange->SetSelection(0);
  71. CPPUNIT_ASSERT(!m_rearrange->CanMoveCurrentUp());
  72. CPPUNIT_ASSERT(m_rearrange->CanMoveCurrentDown());
  73. m_rearrange->SetSelection(1);
  74. CPPUNIT_ASSERT(m_rearrange->CanMoveCurrentUp());
  75. CPPUNIT_ASSERT(m_rearrange->CanMoveCurrentDown());
  76. m_rearrange->SetSelection(2);
  77. CPPUNIT_ASSERT(m_rearrange->CanMoveCurrentUp());
  78. CPPUNIT_ASSERT(!m_rearrange->CanMoveCurrentDown());
  79. m_rearrange->MoveCurrentUp();
  80. m_rearrange->SetSelection(0);
  81. m_rearrange->MoveCurrentDown();
  82. wxArrayInt neworder = m_rearrange->GetCurrentOrder();
  83. CPPUNIT_ASSERT_EQUAL(neworder[0], 0);
  84. CPPUNIT_ASSERT_EQUAL(neworder[1], 1);
  85. CPPUNIT_ASSERT_EQUAL(neworder[2], ~2);
  86. CPPUNIT_ASSERT_EQUAL("first", m_rearrange->GetString(0));
  87. CPPUNIT_ASSERT_EQUAL("second", m_rearrange->GetString(1));
  88. CPPUNIT_ASSERT_EQUAL("third", m_rearrange->GetString(2));
  89. }
  90. void RearrangeListTestCase::MoveClientData()
  91. {
  92. wxArrayInt order;
  93. order.push_back(0);
  94. order.push_back(1);
  95. order.push_back(2);
  96. wxArrayString items;
  97. items.push_back("first");
  98. items.push_back("second");
  99. items.push_back("third");
  100. wxClientData* item0data = new wxStringClientData("item0data");
  101. wxClientData* item1data = new wxStringClientData("item1data");
  102. wxClientData* item2data = new wxStringClientData("item2data");
  103. wxDELETE(m_rearrange);
  104. m_rearrange = new wxRearrangeList(wxTheApp->GetTopWindow(), wxID_ANY,
  105. wxDefaultPosition, wxDefaultSize, order,
  106. items);
  107. m_rearrange->SetClientObject(0, item0data);
  108. m_rearrange->SetClientObject(1, item1data);
  109. m_rearrange->SetClientObject(2, item2data);
  110. m_rearrange->SetSelection(0);
  111. m_rearrange->MoveCurrentDown();
  112. m_rearrange->SetSelection(2);
  113. m_rearrange->MoveCurrentUp();
  114. CPPUNIT_ASSERT_EQUAL(item1data, m_rearrange->GetClientObject(0));
  115. CPPUNIT_ASSERT_EQUAL(item2data, m_rearrange->GetClientObject(1));
  116. CPPUNIT_ASSERT_EQUAL(item0data, m_rearrange->GetClientObject(2));
  117. CPPUNIT_ASSERT_EQUAL("second", m_rearrange->GetString(0));
  118. CPPUNIT_ASSERT_EQUAL("third", m_rearrange->GetString(1));
  119. CPPUNIT_ASSERT_EQUAL("first", m_rearrange->GetString(2));
  120. }