checkboxtest.cpp 4.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172
  1. ///////////////////////////////////////////////////////////////////////////////
  2. // Name: tests/controls/checkboxtest.cpp
  3. // Purpose: wCheckBox unit test
  4. // Author: Steven Lamerton
  5. // Created: 2010-07-14
  6. // Copyright: (c) 2010 Steven Lamerton
  7. ///////////////////////////////////////////////////////////////////////////////
  8. #include "testprec.h"
  9. #if wxUSE_CHECKBOX
  10. #ifdef __BORLANDC__
  11. #pragma hdrstop
  12. #endif
  13. #ifndef WX_PRECOMP
  14. #include "wx/app.h"
  15. #include "wx/checkbox.h"
  16. #endif // WX_PRECOMP
  17. #include "testableframe.h"
  18. class CheckBoxTestCase : public CppUnit::TestCase
  19. {
  20. public:
  21. CheckBoxTestCase() { }
  22. void setUp();
  23. void tearDown();
  24. private:
  25. CPPUNIT_TEST_SUITE( CheckBoxTestCase );
  26. CPPUNIT_TEST( Check );
  27. #ifdef wxHAS_3STATE_CHECKBOX
  28. CPPUNIT_TEST( ThirdState );
  29. CPPUNIT_TEST( ThirdStateUser );
  30. CPPUNIT_TEST( InvalidStyles );
  31. #endif // wxHAS_3STATE_CHECKBOX
  32. CPPUNIT_TEST_SUITE_END();
  33. void Check();
  34. #ifdef wxHAS_3STATE_CHECKBOX
  35. void ThirdState();
  36. void ThirdStateUser();
  37. void InvalidStyles();
  38. #endif // wxHAS_3STATE_CHECKBOX
  39. // Initialize m_check with a new checkbox with the specified style
  40. //
  41. // This function always returns false just to make it more convenient to
  42. // use inside WX_ASSERT_FAILS_WITH_ASSERT(), its return value doesn't have
  43. // any meaning otherwise.
  44. bool CreateCheckBox(long style)
  45. {
  46. m_check = new wxCheckBox(wxTheApp->GetTopWindow(), wxID_ANY, "Check box",
  47. wxDefaultPosition, wxDefaultSize, style);
  48. return false;
  49. }
  50. wxCheckBox* m_check;
  51. DECLARE_NO_COPY_CLASS(CheckBoxTestCase)
  52. };
  53. // register in the unnamed registry so that these tests are run by default
  54. CPPUNIT_TEST_SUITE_REGISTRATION( CheckBoxTestCase );
  55. // also include in its own registry so that these tests can be run alone
  56. CPPUNIT_TEST_SUITE_NAMED_REGISTRATION( CheckBoxTestCase, "CheckBoxTestCase" );
  57. void CheckBoxTestCase::setUp()
  58. {
  59. m_check = new wxCheckBox(wxTheApp->GetTopWindow(), wxID_ANY, "Check box");
  60. }
  61. void CheckBoxTestCase::tearDown()
  62. {
  63. delete m_check;
  64. }
  65. void CheckBoxTestCase::Check()
  66. {
  67. EventCounter clicked(m_check, wxEVT_CHECKBOX);
  68. //We should be unchecked by default
  69. CPPUNIT_ASSERT(!m_check->IsChecked());
  70. m_check->SetValue(true);
  71. CPPUNIT_ASSERT(m_check->IsChecked());
  72. m_check->SetValue(false);
  73. CPPUNIT_ASSERT(!m_check->IsChecked());
  74. m_check->Set3StateValue(wxCHK_CHECKED);
  75. CPPUNIT_ASSERT(m_check->IsChecked());
  76. m_check->Set3StateValue(wxCHK_UNCHECKED);
  77. CPPUNIT_ASSERT(!m_check->IsChecked());
  78. //None of these should send events
  79. CPPUNIT_ASSERT_EQUAL(0, clicked.GetCount());
  80. }
  81. #ifdef wxHAS_3STATE_CHECKBOX
  82. void CheckBoxTestCase::ThirdState()
  83. {
  84. wxDELETE(m_check);
  85. CreateCheckBox(wxCHK_3STATE);
  86. CPPUNIT_ASSERT_EQUAL(wxCHK_UNCHECKED, m_check->Get3StateValue());
  87. CPPUNIT_ASSERT(m_check->Is3State());
  88. CPPUNIT_ASSERT(!m_check->Is3rdStateAllowedForUser());
  89. m_check->SetValue(true);
  90. CPPUNIT_ASSERT_EQUAL(wxCHK_CHECKED, m_check->Get3StateValue());
  91. m_check->Set3StateValue(wxCHK_UNDETERMINED);
  92. CPPUNIT_ASSERT_EQUAL(wxCHK_UNDETERMINED, m_check->Get3StateValue());
  93. }
  94. void CheckBoxTestCase::ThirdStateUser()
  95. {
  96. wxDELETE(m_check);
  97. CreateCheckBox(wxCHK_3STATE | wxCHK_ALLOW_3RD_STATE_FOR_USER);
  98. CPPUNIT_ASSERT_EQUAL(wxCHK_UNCHECKED, m_check->Get3StateValue());
  99. CPPUNIT_ASSERT(m_check->Is3State());
  100. CPPUNIT_ASSERT(m_check->Is3rdStateAllowedForUser());
  101. m_check->SetValue(true);
  102. CPPUNIT_ASSERT_EQUAL(wxCHK_CHECKED, m_check->Get3StateValue());
  103. m_check->Set3StateValue(wxCHK_UNDETERMINED);
  104. CPPUNIT_ASSERT_EQUAL(wxCHK_UNDETERMINED, m_check->Get3StateValue());
  105. }
  106. void CheckBoxTestCase::InvalidStyles()
  107. {
  108. // Check that using incompatible styles doesn't work.
  109. wxDELETE( m_check );
  110. WX_ASSERT_FAILS_WITH_ASSERT( CreateCheckBox(wxCHK_2STATE | wxCHK_3STATE) );
  111. #if !wxDEBUG_LEVEL
  112. CPPUNIT_ASSERT( !m_check->Is3State() );
  113. CPPUNIT_ASSERT( !m_check->Is3rdStateAllowedForUser() );
  114. #endif
  115. wxDELETE( m_check );
  116. WX_ASSERT_FAILS_WITH_ASSERT(
  117. CreateCheckBox(wxCHK_2STATE | wxCHK_ALLOW_3RD_STATE_FOR_USER) );
  118. #if !wxDEBUG_LEVEL
  119. CPPUNIT_ASSERT( !m_check->Is3State() );
  120. CPPUNIT_ASSERT( !m_check->Is3rdStateAllowedForUser() );
  121. #endif
  122. // wxCHK_ALLOW_3RD_STATE_FOR_USER without wxCHK_3STATE doesn't work.
  123. wxDELETE( m_check );
  124. WX_ASSERT_FAILS_WITH_ASSERT( CreateCheckBox(wxCHK_ALLOW_3RD_STATE_FOR_USER) );
  125. }
  126. #endif // wxHAS_3STATE_CHECKBOX
  127. #endif // wxUSE_CHECKBOX