Improve validation of wxCheckBox styles.
[wxWidgets.git] / tests / controls / checkboxtest.cpp
1 ///////////////////////////////////////////////////////////////////////////////
2 // Name: tests/controls/checkboxtest.cpp
3 // Purpose: wCheckBox unit test
4 // Author: Steven Lamerton
5 // Created: 2010-07-14
6 // RCS-ID: $Id$
7 // Copyright: (c) 2010 Steven Lamerton
8 ///////////////////////////////////////////////////////////////////////////////
9
10 #include "testprec.h"
11
12 #if wxUSE_CHECKBOX
13
14 #ifdef __BORLANDC__
15 #pragma hdrstop
16 #endif
17
18 #ifndef WX_PRECOMP
19 #include "wx/app.h"
20 #include "wx/checkbox.h"
21 #endif // WX_PRECOMP
22
23 #include "testableframe.h"
24
25 class CheckBoxTestCase : public CppUnit::TestCase
26 {
27 public:
28 CheckBoxTestCase() { }
29
30 void setUp();
31 void tearDown();
32
33 private:
34 CPPUNIT_TEST_SUITE( CheckBoxTestCase );
35 CPPUNIT_TEST( Check );
36 CPPUNIT_TEST( ThirdState );
37 CPPUNIT_TEST( ThirdStateUser );
38 CPPUNIT_TEST( InvalidStyles );
39 CPPUNIT_TEST_SUITE_END();
40
41 void Check();
42 void ThirdState();
43 void ThirdStateUser();
44 void InvalidStyles();
45
46 // Initialize m_check with a new checkbox with the specified style
47 //
48 // This function always returns false just to make it more convenient to
49 // use inside WX_ASSERT_FAILS_WITH_ASSERT(), its return value doesn't have
50 // any meaning otherwise.
51 bool CreateCheckBox(long style)
52 {
53 m_check = new wxCheckBox(wxTheApp->GetTopWindow(), wxID_ANY, "Check box",
54 wxDefaultPosition, wxDefaultSize, style);
55 return false;
56 }
57
58
59 wxCheckBox* m_check;
60
61 DECLARE_NO_COPY_CLASS(CheckBoxTestCase)
62 };
63
64 // register in the unnamed registry so that these tests are run by default
65 CPPUNIT_TEST_SUITE_REGISTRATION( CheckBoxTestCase );
66
67 // also include in it's own registry so that these tests can be run alone
68 CPPUNIT_TEST_SUITE_NAMED_REGISTRATION( CheckBoxTestCase, "CheckBoxTestCase" );
69
70 void CheckBoxTestCase::setUp()
71 {
72 m_check = new wxCheckBox(wxTheApp->GetTopWindow(), wxID_ANY, "Check box");
73 }
74
75 void CheckBoxTestCase::tearDown()
76 {
77 delete m_check;
78 }
79
80 void CheckBoxTestCase::Check()
81 {
82 wxTestableFrame* frame = wxStaticCast(wxTheApp->GetTopWindow(),
83 wxTestableFrame);
84
85 EventCounter count(m_check, wxEVT_COMMAND_CHECKBOX_CLICKED);
86
87 //We should be unchecked by default
88 CPPUNIT_ASSERT(!m_check->IsChecked());
89
90 m_check->SetValue(true);
91
92 CPPUNIT_ASSERT(m_check->IsChecked());
93
94 m_check->SetValue(false);
95
96 CPPUNIT_ASSERT(!m_check->IsChecked());
97
98 m_check->Set3StateValue(wxCHK_CHECKED);
99
100 CPPUNIT_ASSERT(m_check->IsChecked());
101
102 m_check->Set3StateValue(wxCHK_UNCHECKED);
103
104 CPPUNIT_ASSERT(!m_check->IsChecked());
105
106 //None of these should send events
107 CPPUNIT_ASSERT_EQUAL(0, frame->GetEventCount());
108 }
109
110 void CheckBoxTestCase::ThirdState()
111 {
112 #if !defined(__WXMGL__) && !defined(__WXPM__) && !defined(__WXGTK12__)
113 wxDELETE(m_check);
114 CreateCheckBox(wxCHK_3STATE);
115
116 CPPUNIT_ASSERT_EQUAL(wxCHK_UNCHECKED, m_check->Get3StateValue());
117 CPPUNIT_ASSERT(m_check->Is3State());
118 CPPUNIT_ASSERT(!m_check->Is3rdStateAllowedForUser());
119
120 m_check->SetValue(true);
121
122 CPPUNIT_ASSERT_EQUAL(wxCHK_CHECKED, m_check->Get3StateValue());
123
124 m_check->Set3StateValue(wxCHK_UNDETERMINED);
125
126 CPPUNIT_ASSERT_EQUAL(wxCHK_UNDETERMINED, m_check->Get3StateValue());
127 #endif
128 }
129
130 void CheckBoxTestCase::ThirdStateUser()
131 {
132 #if !defined(__WXMGL__) && !defined(__WXPM__) && !defined(__WXGTK12__)
133 wxDELETE(m_check);
134 CreateCheckBox(wxCHK_3STATE | wxCHK_ALLOW_3RD_STATE_FOR_USER);
135
136 CPPUNIT_ASSERT_EQUAL(wxCHK_UNCHECKED, m_check->Get3StateValue());
137 CPPUNIT_ASSERT(m_check->Is3State());
138 CPPUNIT_ASSERT(m_check->Is3rdStateAllowedForUser());
139
140 m_check->SetValue(true);
141
142 CPPUNIT_ASSERT_EQUAL(wxCHK_CHECKED, m_check->Get3StateValue());
143
144 m_check->Set3StateValue(wxCHK_UNDETERMINED);
145
146 CPPUNIT_ASSERT_EQUAL(wxCHK_UNDETERMINED, m_check->Get3StateValue());
147 #endif
148 }
149
150 void CheckBoxTestCase::InvalidStyles()
151 {
152 // Check that using incompatible styles doesn't work.
153 wxDELETE( m_check );
154 WX_ASSERT_FAILS_WITH_ASSERT( CreateCheckBox(wxCHK_2STATE | wxCHK_3STATE) );
155 #if !wxDEBUG_LEVEL
156 CPPUNIT_ASSERT( !m_check->Is3State() );
157 CPPUNIT_ASSERT( !m_check->Is3rdStateAllowedForUser() );
158 #endif
159
160 wxDELETE( m_check );
161 WX_ASSERT_FAILS_WITH_ASSERT(
162 CreateCheckBox(wxCHK_2STATE | wxCHK_ALLOW_3RD_STATE_FOR_USER) );
163 #if !wxDEBUG_LEVEL
164 CPPUNIT_ASSERT( !m_check->Is3State() );
165 CPPUNIT_ASSERT( !m_check->Is3rdStateAllowedForUser() );
166 #endif
167
168 // wxCHK_ALLOW_3RD_STATE_FOR_USER without wxCHK_3STATE doesn't work.
169 wxDELETE( m_check );
170 WX_ASSERT_FAILS_WITH_ASSERT( CreateCheckBox(wxCHK_ALLOW_3RD_STATE_FOR_USER) );
171 }
172
173 #endif //wxUSE_CHECKBOX