wxMessageBox off the main thread lost result code.
[wxWidgets.git] / tests / controls / radiobuttontest.cpp
1 ///////////////////////////////////////////////////////////////////////////////
2 // Name: tests/controls/radiobuttontest.cpp
3 // Purpose: wxRadioButton unit test
4 // Author: Steven Lamerton
5 // Created: 2010-07-30
6 // Copyright: (c) 2010 Steven Lamerton
7 ///////////////////////////////////////////////////////////////////////////////
8
9 #include "testprec.h"
10
11 #if wxUSE_RADIOBTN
12
13 #ifdef __BORLANDC__
14 #pragma hdrstop
15 #endif
16
17 #ifndef WX_PRECOMP
18 #include "wx/app.h"
19 #include "wx/radiobut.h"
20 #endif // WX_PRECOMP
21
22 #include "wx/uiaction.h"
23 #include "testableframe.h"
24
25 class RadioButtonTestCase : public CppUnit::TestCase
26 {
27 public:
28 RadioButtonTestCase() { }
29
30 void setUp();
31 void tearDown();
32
33 private:
34 CPPUNIT_TEST_SUITE( RadioButtonTestCase );
35 WXUISIM_TEST( Click );
36 CPPUNIT_TEST( Value );
37 CPPUNIT_TEST( Group );
38 CPPUNIT_TEST_SUITE_END();
39
40 void Click();
41 void Value();
42 void Group();
43
44 wxRadioButton* m_radio;
45
46 DECLARE_NO_COPY_CLASS(RadioButtonTestCase)
47 };
48
49 // register in the unnamed registry so that these tests are run by default
50 CPPUNIT_TEST_SUITE_REGISTRATION( RadioButtonTestCase );
51
52 // also include in its own registry so that these tests can be run alone
53 CPPUNIT_TEST_SUITE_NAMED_REGISTRATION( RadioButtonTestCase,
54 "RadioButtonTestCase" );
55
56 void RadioButtonTestCase::setUp()
57 {
58 m_radio = new wxRadioButton(wxTheApp->GetTopWindow(), wxID_ANY,
59 "wxRadioButton");
60 m_radio->Update();
61 m_radio->Refresh();
62 }
63
64 void RadioButtonTestCase::tearDown()
65 {
66 wxDELETE(m_radio);
67 }
68
69 void RadioButtonTestCase::Click()
70 {
71 // GTK and OS X do not support selecting a single radio button
72 #if wxUSE_UIACTIONSIMULATOR && !defined(__WXGTK__) && !defined(__WXOSX__)
73 EventCounter selected(m_radio, wxEVT_RADIOBUTTON);
74
75 wxUIActionSimulator sim;
76
77 sim.MouseMove(m_radio->GetScreenPosition() + wxPoint(10, 10));
78 sim.MouseClick();
79
80 wxYield();
81
82 CPPUNIT_ASSERT_EQUAL( 1, selected.GetCount() );
83 #endif
84 }
85
86 void RadioButtonTestCase::Value()
87 {
88 #ifndef __WXGTK__
89 EventCounter selected(m_radio, wxEVT_RADIOBUTTON);
90
91 m_radio->SetValue(true);
92
93 CPPUNIT_ASSERT(m_radio->GetValue());
94
95 m_radio->SetValue(false);
96
97 CPPUNIT_ASSERT(!m_radio->GetValue());
98
99 CPPUNIT_ASSERT_EQUAL(0, selected.GetCount());
100 #endif
101 }
102
103 void RadioButtonTestCase::Group()
104 {
105 //Add another button to the first group and create another of two buttons
106 wxRadioButton* g1radio0 = new wxRadioButton(wxTheApp->GetTopWindow(),
107 wxID_ANY, "wxRadioButton",
108 wxDefaultPosition,
109 wxDefaultSize, wxRB_GROUP);
110
111 wxRadioButton* g1radio1 = new wxRadioButton(wxTheApp->GetTopWindow(),
112 wxID_ANY, "wxRadioButton");
113
114 wxRadioButton* g2radio0 = new wxRadioButton(wxTheApp->GetTopWindow(),
115 wxID_ANY, "wxRadioButton",
116 wxDefaultPosition,
117 wxDefaultSize, wxRB_GROUP);
118
119 wxRadioButton* g2radio1 = new wxRadioButton(wxTheApp->GetTopWindow(),
120 wxID_ANY, "wxRadioButton");
121
122 g1radio0->SetValue(true);
123 g2radio0->SetValue(true);
124
125 CPPUNIT_ASSERT(g1radio0->GetValue());
126 CPPUNIT_ASSERT(!g1radio1->GetValue());
127 CPPUNIT_ASSERT(g2radio0->GetValue());
128 CPPUNIT_ASSERT(!g2radio1->GetValue());
129
130 g1radio1->SetValue(true);
131 g2radio1->SetValue(true);
132
133 CPPUNIT_ASSERT(!g1radio0->GetValue());
134 CPPUNIT_ASSERT(g1radio1->GetValue());
135 CPPUNIT_ASSERT(!g2radio0->GetValue());
136 CPPUNIT_ASSERT(g2radio1->GetValue());
137
138 g1radio0->SetValue(true);
139 g2radio0->SetValue(true);
140
141 CPPUNIT_ASSERT(g1radio0->GetValue());
142 CPPUNIT_ASSERT(!g1radio1->GetValue());
143 CPPUNIT_ASSERT(g2radio0->GetValue());
144 CPPUNIT_ASSERT(!g2radio1->GetValue());
145
146 wxDELETE(g1radio0);
147 wxDELETE(g1radio1);
148 wxDELETE(g2radio0);
149 wxDELETE(g2radio1);
150 }
151
152 #endif //wxUSE_RADIOBTN