wxWidgets/tests/controls/slidertest.cpp

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