| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174 |
- ///////////////////////////////////////////////////////////////////////////////
- // Name: tests/controls/buttontest.cpp
- // Purpose: wxButton unit test
- // Author: Steven Lamerton
- // Created: 2010-06-21
- // Copyright: (c) 2010 Steven Lamerton
- ///////////////////////////////////////////////////////////////////////////////
- #include "testprec.h"
- #if wxUSE_BUTTON
- #ifdef __BORLANDC__
- #pragma hdrstop
- #endif
- #ifndef WX_PRECOMP
- #include "wx/app.h"
- #include "wx/button.h"
- #endif // WX_PRECOMP
- #include "testableframe.h"
- #include "wx/uiaction.h"
- #include "wx/artprov.h"
- //For CPPUNIT_ASSERT_EQUAL to work a class must have a stream output function
- //for those classes which do not have them by default we define them in
- //asserthelper.h so they can be reused
- #include "asserthelper.h"
- class ButtonTestCase : public CppUnit::TestCase
- {
- public:
- ButtonTestCase() { }
- void setUp();
- void tearDown();
- private:
- CPPUNIT_TEST_SUITE( ButtonTestCase );
- //We add tests that use wxUIActionSimulator with WXUISIM_TEST so they
- //are not run on platofrms were wxUIActionSimulator isn't supported
- WXUISIM_TEST( Click );
- WXUISIM_TEST( Disabled );
- CPPUNIT_TEST( Auth );
- CPPUNIT_TEST( BitmapMargins );
- CPPUNIT_TEST( Bitmap );
- CPPUNIT_TEST_SUITE_END();
- void Click();
- void Disabled();
- void Auth();
- void BitmapMargins();
- void Bitmap();
- wxButton* m_button;
- DECLARE_NO_COPY_CLASS(ButtonTestCase)
- };
- // register in the unnamed registry so that these tests are run by default
- CPPUNIT_TEST_SUITE_REGISTRATION( ButtonTestCase );
- // also include in its own registry so that these tests can be run alone
- CPPUNIT_TEST_SUITE_NAMED_REGISTRATION( ButtonTestCase, "ButtonTestCase" );
- void ButtonTestCase::setUp()
- {
- //We use wxTheApp->GetTopWindow() as there is only a single testable frame
- //so it will always be returned
- m_button = new wxButton(wxTheApp->GetTopWindow(), wxID_ANY, "wxButton");
- }
- void ButtonTestCase::tearDown()
- {
- wxDELETE(m_button);
- }
- #if wxUSE_UIACTIONSIMULATOR
- void ButtonTestCase::Click()
- {
- //We use the internal class EventCounter which handles connecting and
- //disconnecting the control to the wxTestableFrame
- EventCounter clicked(m_button, wxEVT_BUTTON);
- wxUIActionSimulator sim;
- //We move in slightly to account for window decorations, we need to yield
- //after every wxUIActionSimulator action to keep everything working in GTK
- sim.MouseMove(m_button->GetScreenPosition() + wxPoint(10, 10));
- wxYield();
- sim.MouseClick();
- wxYield();
- CPPUNIT_ASSERT_EQUAL( 1, clicked.GetCount() );
- }
- void ButtonTestCase::Disabled()
- {
- EventCounter clicked(m_button, wxEVT_BUTTON);
- wxUIActionSimulator sim;
- //In this test we disable the button and check events are not sent
- m_button->Disable();
- sim.MouseMove(m_button->GetScreenPosition() + wxPoint(10, 10));
- wxYield();
- sim.MouseClick();
- wxYield();
- CPPUNIT_ASSERT_EQUAL( 0, clicked.GetCount() );
- }
- #endif // wxUSE_UIACTIONSIMULATOR
- void ButtonTestCase::Auth()
- {
- //Some functions only work on specific operating system versions, for
- //this we need a runtime check
- int major = 0;
- if(wxGetOsVersion(&major) != wxOS_WINDOWS_NT || major < 6)
- return;
- //We are running Windows Vista or newer
- CPPUNIT_ASSERT(!m_button->GetAuthNeeded());
- m_button->SetAuthNeeded();
- CPPUNIT_ASSERT(m_button->GetAuthNeeded());
- //We test both states
- m_button->SetAuthNeeded(false);
- CPPUNIT_ASSERT(!m_button->GetAuthNeeded());
- }
- void ButtonTestCase::BitmapMargins()
- {
- //Some functions only work on specific platforms in which case we can use
- //a preprocessor check
- #ifdef __WXMSW__
- //We must set a bitmap before we can set its margins, when writing unit
- //tests it is easiest to use an image from wxArtProvider
- m_button->SetBitmap(wxArtProvider::GetIcon(wxART_INFORMATION, wxART_OTHER,
- wxSize(32, 32)));
- m_button->SetBitmapMargins(15, 15);
- CPPUNIT_ASSERT_EQUAL(wxSize(15, 15), m_button->GetBitmapMargins());
- m_button->SetBitmapMargins(wxSize(20, 20));
- CPPUNIT_ASSERT_EQUAL(wxSize(20, 20), m_button->GetBitmapMargins());
- #endif
- }
- void ButtonTestCase::Bitmap()
- {
- //We start with no bitmaps
- CPPUNIT_ASSERT(!m_button->GetBitmap().IsOk());
- m_button->SetBitmap(wxArtProvider::GetIcon(wxART_INFORMATION,
- wxART_OTHER,
- wxSize(32, 32)));
- CPPUNIT_ASSERT(m_button->GetBitmap().IsOk());
- }
- #endif //wxUSE_BUTTON
|