wxWidgets/tests/controls/spinctrltest.cpp
Vadim Zeitlin 6e36db5eca Correct the initial value setting in wxMSW wxSpinCtrl.
Always use value argument for the text control contents and also override the
initial numeric value with it if it's numeric.

This seems to be the only consistent thing to do, so document this behaviour
and add a unit test checking for it.

Closes #13589.

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@71387 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
2012-05-09 14:24:20 +00:00

180 lines
4.1 KiB
C++

///////////////////////////////////////////////////////////////////////////////
// Name: tests/controls/spinctrltest.cpp
// Purpose: wxSpinCtrl unit test
// Author: Steven Lamerton
// Created: 2010-07-21
// RCS-ID: $Id$
// Copyright: (c) 2010 Steven Lamerton
///////////////////////////////////////////////////////////////////////////////
#include "testprec.h"
#if wxUSE_SPINCTRL
#ifdef __BORLANDC__
#pragma hdrstop
#endif
#ifndef WX_PRECOMP
#include "wx/app.h"
#endif // WX_PRECOMP
#include "testableframe.h"
#include "wx/uiaction.h"
#include "wx/spinctrl.h"
class SpinCtrlTestCase : public CppUnit::TestCase
{
public:
SpinCtrlTestCase() { }
void setUp();
void tearDown();
private:
CPPUNIT_TEST_SUITE( SpinCtrlTestCase );
CPPUNIT_TEST( Initial );
WXUISIM_TEST( Arrows );
WXUISIM_TEST( Wrap );
CPPUNIT_TEST( Range );
CPPUNIT_TEST( Value );
CPPUNIT_TEST_SUITE_END();
void Initial();
void Arrows();
void Wrap();
void Range();
void Value();
wxSpinCtrl* m_spin;
DECLARE_NO_COPY_CLASS(SpinCtrlTestCase)
};
// register in the unnamed registry so that these tests are run by default
CPPUNIT_TEST_SUITE_REGISTRATION( SpinCtrlTestCase );
// also include in its own registry so that these tests can be run alone
CPPUNIT_TEST_SUITE_NAMED_REGISTRATION( SpinCtrlTestCase, "SpinCtrlTestCase" );
void SpinCtrlTestCase::setUp()
{
m_spin = new wxSpinCtrl(wxTheApp->GetTopWindow());
}
void SpinCtrlTestCase::tearDown()
{
wxDELETE(m_spin);
}
void SpinCtrlTestCase::Initial()
{
// Initial value is defined by "initial" argument which is 0 by default.
CPPUNIT_ASSERT_EQUAL( 0, m_spin->GetValue() );
wxWindow* const parent = m_spin->GetParent();
// Recreate the control with another "initial" to check this.
delete m_spin;
m_spin = new wxSpinCtrl(parent, wxID_ANY, "",
wxDefaultPosition, wxDefaultSize, 0,
0, 100, 17);
CPPUNIT_ASSERT_EQUAL( 17, m_spin->GetValue() );
// But if the text string is specified, it takes precedence.
delete m_spin;
m_spin = new wxSpinCtrl(parent, wxID_ANY, "99",
wxDefaultPosition, wxDefaultSize, 0,
0, 100, 17);
CPPUNIT_ASSERT_EQUAL( 99, m_spin->GetValue() );
}
void SpinCtrlTestCase::Arrows()
{
#if wxUSE_UIACTIONSIMULATOR
EventCounter updated(m_spin, wxEVT_COMMAND_SPINCTRL_UPDATED);
wxUIActionSimulator sim;
m_spin->SetFocus();
sim.Char(WXK_UP);
wxYield();
CPPUNIT_ASSERT_EQUAL(1, updated.GetCount());
CPPUNIT_ASSERT_EQUAL(1, m_spin->GetValue());
updated.Clear();
sim.Char(WXK_DOWN);
wxYield();
CPPUNIT_ASSERT_EQUAL(1, updated.GetCount());
CPPUNIT_ASSERT_EQUAL(0, m_spin->GetValue());
#endif
}
void SpinCtrlTestCase::Wrap()
{
#if wxUSE_UIACTIONSIMULATOR
wxDELETE(m_spin);
m_spin = new wxSpinCtrl(wxTheApp->GetTopWindow(), wxID_ANY, "",
wxDefaultPosition, wxDefaultSize,
wxSP_ARROW_KEYS | wxSP_WRAP);
wxUIActionSimulator sim;
m_spin->SetFocus();
sim.Char(WXK_DOWN);
wxYield();
CPPUNIT_ASSERT_EQUAL(100, m_spin->GetValue());
sim.Char(WXK_UP);
wxYield();
CPPUNIT_ASSERT_EQUAL(0, m_spin->GetValue());
#endif
}
void SpinCtrlTestCase::Range()
{
CPPUNIT_ASSERT_EQUAL(0, m_spin->GetMin());
CPPUNIT_ASSERT_EQUAL(100, m_spin->GetMax());
//Test neagtive ranges
m_spin->SetRange(-10, 10);
CPPUNIT_ASSERT_EQUAL(-10, m_spin->GetMin());
CPPUNIT_ASSERT_EQUAL(10, m_spin->GetMax());
//Test backwards ranges
m_spin->SetRange(75, 50);
CPPUNIT_ASSERT_EQUAL(75, m_spin->GetMin());
CPPUNIT_ASSERT_EQUAL(50, m_spin->GetMax());
}
void SpinCtrlTestCase::Value()
{
CPPUNIT_ASSERT_EQUAL(0, m_spin->GetValue());
m_spin->SetValue(50);
CPPUNIT_ASSERT_EQUAL(50, m_spin->GetValue());
m_spin->SetValue(-10);
CPPUNIT_ASSERT_EQUAL(0, m_spin->GetValue());
m_spin->SetValue(110);
CPPUNIT_ASSERT_EQUAL(100, m_spin->GetValue());
}
#endif