/////////////////////////////////////////////////////////////////////////////// // Name: tests/controls/slidertest.cpp // Purpose: wxSlider unit test // Author: Steven Lamerton // Created: 2010-07-20 // Copyright: (c) 2010 Steven Lamerton /////////////////////////////////////////////////////////////////////////////// #include "testprec.h" #if wxUSE_SLIDER #ifdef __BORLANDC__ #pragma hdrstop #endif #ifndef WX_PRECOMP #include "wx/app.h" #include "wx/slider.h" #endif // WX_PRECOMP #include "wx/uiaction.h" #include "testableframe.h" class SliderTestCase : public CppUnit::TestCase { public: SliderTestCase() { } void setUp(); void tearDown(); private: CPPUNIT_TEST_SUITE( SliderTestCase ); #ifndef __WXOSX__ WXUISIM_TEST( PageUpDown ); WXUISIM_TEST( LineUpDown ); WXUISIM_TEST( LinePageSize ); #endif CPPUNIT_TEST( Value ); CPPUNIT_TEST( Range ); WXUISIM_TEST( Thumb ); CPPUNIT_TEST( PseudoTest_Inversed ); CPPUNIT_TEST( Value ); CPPUNIT_TEST( Range ); CPPUNIT_TEST_SUITE_END(); void PageUpDown(); void LineUpDown(); void LinePageSize(); void Value(); void Range(); void Thumb(); void PseudoTest_Inversed() { ms_inversed = true; } static bool ms_inversed; wxSlider* m_slider; DECLARE_NO_COPY_CLASS(SliderTestCase) }; bool SliderTestCase::ms_inversed = false; // register in the unnamed registry so that these tests are run by default CPPUNIT_TEST_SUITE_REGISTRATION( SliderTestCase ); // also include in its own registry so that these tests can be run alone CPPUNIT_TEST_SUITE_NAMED_REGISTRATION( SliderTestCase, "SliderTestCase" ); void SliderTestCase::setUp() { long style = wxSL_HORIZONTAL; if ( ms_inversed ) style |= wxSL_INVERSE; m_slider = new wxSlider(wxTheApp->GetTopWindow(), wxID_ANY, 50, 0, 100, wxDefaultPosition, wxDefaultSize, style); } void SliderTestCase::tearDown() { wxDELETE(m_slider); } void SliderTestCase::PageUpDown() { #if wxUSE_UIACTIONSIMULATOR EventCounter pageup(m_slider, wxEVT_SCROLL_PAGEUP); EventCounter pagedown(m_slider, wxEVT_SCROLL_PAGEDOWN); wxUIActionSimulator sim; m_slider->SetFocus(); sim.Char(WXK_PAGEUP); sim.Char(WXK_PAGEDOWN); wxYield(); CPPUNIT_ASSERT_EQUAL(1, pageup.GetCount()); CPPUNIT_ASSERT_EQUAL(1, pagedown.GetCount()); #endif } void SliderTestCase::LineUpDown() { #if wxUSE_UIACTIONSIMULATOR EventCounter lineup(m_slider, wxEVT_SCROLL_LINEUP); EventCounter linedown(m_slider, wxEVT_SCROLL_LINEDOWN); wxUIActionSimulator sim; m_slider->SetFocus(); sim.Char(WXK_UP); sim.Char(WXK_DOWN); wxYield(); CPPUNIT_ASSERT_EQUAL(1, lineup.GetCount()); CPPUNIT_ASSERT_EQUAL(1, linedown.GetCount()); #endif } void SliderTestCase::LinePageSize() { #if wxUSE_UIACTIONSIMULATOR wxUIActionSimulator sim; m_slider->SetFocus(); m_slider->SetPageSize(20); sim.Char(WXK_PAGEUP); wxYield(); CPPUNIT_ASSERT_EQUAL(20, m_slider->GetPageSize()); CPPUNIT_ASSERT_EQUAL(30, m_slider->GetValue()); m_slider->SetLineSize(2); sim.Char(WXK_UP); wxYield(); CPPUNIT_ASSERT_EQUAL(2, m_slider->GetLineSize()); CPPUNIT_ASSERT_EQUAL(28, m_slider->GetValue()); #endif } void SliderTestCase::Value() { m_slider->SetValue(30); CPPUNIT_ASSERT_EQUAL(30, m_slider->GetValue()); //When setting a value larger that max or smaller than min //max and min are set m_slider->SetValue(-1); CPPUNIT_ASSERT_EQUAL(0, m_slider->GetValue()); m_slider->SetValue(110); CPPUNIT_ASSERT_EQUAL(100, m_slider->GetValue()); } void SliderTestCase::Range() { CPPUNIT_ASSERT_EQUAL(0, m_slider->GetMin()); CPPUNIT_ASSERT_EQUAL(100, m_slider->GetMax()); // Changing range shouldn't change the value. m_slider->SetValue(17); m_slider->SetRange(0, 200); CPPUNIT_ASSERT_EQUAL(17, m_slider->GetValue()); //Test negative ranges m_slider->SetRange(-50, 0); CPPUNIT_ASSERT_EQUAL(-50, m_slider->GetMin()); CPPUNIT_ASSERT_EQUAL(0, m_slider->GetMax()); } void SliderTestCase::Thumb() { #if wxUSE_UIACTIONSIMULATOR && !defined(__WXGTK__) EventCounter track(m_slider, wxEVT_SCROLL_THUMBTRACK); EventCounter release(m_slider, wxEVT_SCROLL_THUMBRELEASE); EventCounter changed(m_slider, wxEVT_SCROLL_CHANGED); wxUIActionSimulator sim; m_slider->SetValue(0); sim.MouseDragDrop(m_slider->ClientToScreen(wxPoint(10, 10)),m_slider->ClientToScreen(wxPoint(50, 10))); wxYield(); CPPUNIT_ASSERT(track.GetCount() != 0); CPPUNIT_ASSERT_EQUAL(1, release.GetCount()); #ifdef __WXMSW__ CPPUNIT_ASSERT_EQUAL(1, changed.GetCount()); #endif #endif } #endif