d383f40e7b
The logical value of wxSlider was changed when its range was changed in wxMSW if the slider had wxSL_INVERSE style because the logical value was actually computed using the range and the actual physical control value and we forgot to update the latter when changing the range. Do update it now in SetRange() to fix this. Also add unit tests checking for this and, more generally, for other operations with inversed sliders. Closes #12765. git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@66368 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
228 lines
5.4 KiB
C++
228 lines
5.4 KiB
C++
///////////////////////////////////////////////////////////////////////////////
|
|
// Name: tests/controls/slidertest.cpp
|
|
// Purpose: wxSlider unit test
|
|
// Author: Steven Lamerton
|
|
// Created: 2010-07-20
|
|
// RCS-ID: $Id$
|
|
// 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 );
|
|
WXUISIM_TEST( PageUpDown );
|
|
WXUISIM_TEST( LineUpDown );
|
|
WXUISIM_TEST( LinePageSize );
|
|
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 it's 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
|
|
wxTestableFrame* frame = wxStaticCast(wxTheApp->GetTopWindow(),
|
|
wxTestableFrame);
|
|
|
|
EventCounter count(m_slider, wxEVT_SCROLL_PAGEUP);
|
|
EventCounter count1(m_slider, wxEVT_SCROLL_PAGEDOWN);
|
|
|
|
wxUIActionSimulator sim;
|
|
|
|
m_slider->SetFocus();
|
|
|
|
sim.Char(WXK_PAGEUP);
|
|
sim.Char(WXK_PAGEDOWN);
|
|
|
|
wxYield();
|
|
|
|
CPPUNIT_ASSERT_EQUAL(1, frame->GetEventCount(wxEVT_SCROLL_PAGEUP));
|
|
CPPUNIT_ASSERT_EQUAL(1, frame->GetEventCount(wxEVT_SCROLL_PAGEDOWN));
|
|
#endif
|
|
}
|
|
|
|
void SliderTestCase::LineUpDown()
|
|
{
|
|
#if wxUSE_UIACTIONSIMULATOR
|
|
wxTestableFrame* frame = wxStaticCast(wxTheApp->GetTopWindow(),
|
|
wxTestableFrame);
|
|
|
|
EventCounter count(m_slider, wxEVT_SCROLL_LINEUP);
|
|
EventCounter count1(m_slider, wxEVT_SCROLL_LINEDOWN);
|
|
|
|
wxUIActionSimulator sim;
|
|
|
|
m_slider->SetFocus();
|
|
|
|
sim.Char(WXK_UP);
|
|
sim.Char(WXK_DOWN);
|
|
|
|
wxYield();
|
|
|
|
CPPUNIT_ASSERT_EQUAL(1, frame->GetEventCount(wxEVT_SCROLL_LINEUP));
|
|
CPPUNIT_ASSERT_EQUAL(1, frame->GetEventCount(wxEVT_SCROLL_LINEDOWN));
|
|
#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__)
|
|
wxTestableFrame* frame = wxStaticCast(wxTheApp->GetTopWindow(),
|
|
wxTestableFrame);
|
|
|
|
EventCounter count(m_slider, wxEVT_SCROLL_THUMBTRACK);
|
|
EventCounter count1(m_slider, wxEVT_SCROLL_THUMBRELEASE);
|
|
EventCounter count2(m_slider, wxEVT_SCROLL_CHANGED);
|
|
|
|
wxUIActionSimulator sim;
|
|
|
|
m_slider->SetValue(0);
|
|
|
|
sim.MouseMove(m_slider->ClientToScreen(wxPoint(10, 10)));
|
|
wxYield();
|
|
|
|
sim.MouseDown();
|
|
wxYield();
|
|
|
|
sim.MouseMove(m_slider->ClientToScreen(wxPoint(50, 10)));
|
|
wxYield();
|
|
|
|
sim.MouseUp();
|
|
wxYield();
|
|
|
|
CPPUNIT_ASSERT(frame->GetEventCount(wxEVT_SCROLL_THUMBTRACK) != 0);
|
|
CPPUNIT_ASSERT_EQUAL(1, frame->GetEventCount(wxEVT_SCROLL_THUMBRELEASE));
|
|
#ifdef __WXMSW__
|
|
CPPUNIT_ASSERT_EQUAL(1, frame->GetEventCount(wxEVT_SCROLL_CHANGED));
|
|
#endif
|
|
#endif
|
|
}
|
|
|
|
#endif
|