231 lines
		
	
	
		
			5.2 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
			
		
		
	
	
			231 lines
		
	
	
		
			5.2 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
| ///////////////////////////////////////////////////////////////////////////////
 | |
| // 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
 | |
| 
 | |
| 
 | |
| #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() wxOVERRIDE;
 | |
|     void tearDown() wxOVERRIDE;
 | |
| 
 | |
| private:
 | |
|     CPPUNIT_TEST_SUITE( SliderTestCase );
 | |
| #ifndef __WXOSX__
 | |
|         WXUISIM_TEST( PageUpDown );
 | |
|         WXUISIM_TEST( LineUpDown );
 | |
|         WXUISIM_TEST( EvtSlider );
 | |
|         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 EvtSlider();
 | |
|     void LinePageSize();
 | |
|     void Value();
 | |
|     void Range();
 | |
|     void Thumb();
 | |
|     void PseudoTest_Inversed() { ms_inversed = true; }
 | |
| 
 | |
|     static bool ms_inversed;
 | |
| 
 | |
|     wxSlider* m_slider;
 | |
| 
 | |
|     wxDECLARE_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;
 | |
|     wxYield();
 | |
|     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::EvtSlider()
 | |
| {
 | |
| #if wxUSE_UIACTIONSIMULATOR
 | |
|     EventCounter slider(m_slider, wxEVT_SLIDER);
 | |
| 
 | |
|     wxUIActionSimulator sim;
 | |
|     wxYield();
 | |
|     m_slider->SetFocus();
 | |
| 
 | |
|     sim.Char(WXK_UP);
 | |
|     sim.Char(WXK_DOWN);
 | |
| 
 | |
|     wxYield();
 | |
| 
 | |
|     CPPUNIT_ASSERT_EQUAL(2, slider.GetCount());
 | |
| #endif
 | |
| }
 | |
| 
 | |
| void SliderTestCase::LinePageSize()
 | |
| {
 | |
| #if wxUSE_UIACTIONSIMULATOR
 | |
|     wxUIActionSimulator sim;
 | |
|     wxYield();
 | |
|     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
 | |
|     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);
 | |
| 
 | |
|     // use the slider real position for dragging the mouse.
 | |
|     const int ypos = m_slider->GetSize().y / 2;
 | |
|     sim.MouseDragDrop(m_slider->ClientToScreen(wxPoint(10, ypos)),m_slider->ClientToScreen(wxPoint(50, ypos)));
 | |
|     wxYield();
 | |
| 
 | |
|     CPPUNIT_ASSERT(track.GetCount() != 0);
 | |
|     CPPUNIT_ASSERT_EQUAL(1, release.GetCount());
 | |
| #if defined(__WXMSW__) || defined(__WXGTK__)
 | |
|     CPPUNIT_ASSERT_EQUAL(1, changed.GetCount());
 | |
| #endif
 | |
| #endif
 | |
| }
 | |
| 
 | |
| #endif
 |