wxWidgets/tests/controls/checkboxtest.cpp

166 lines
4.4 KiB
C++

///////////////////////////////////////////////////////////////////////////////
// Name: tests/controls/checkboxtest.cpp
// Purpose: wCheckBox unit test
// Author: Steven Lamerton
// Created: 2010-07-14
// Copyright: (c) 2010 Steven Lamerton
///////////////////////////////////////////////////////////////////////////////
#include "testprec.h"
#if wxUSE_CHECKBOX
#ifndef WX_PRECOMP
#include "wx/app.h"
#include "wx/checkbox.h"
#endif // WX_PRECOMP
#include "testableframe.h"
class CheckBoxTestCase : public CppUnit::TestCase
{
public:
CheckBoxTestCase() { }
void setUp() wxOVERRIDE;
void tearDown() wxOVERRIDE;
private:
CPPUNIT_TEST_SUITE( CheckBoxTestCase );
CPPUNIT_TEST( Check );
#ifdef wxHAS_3STATE_CHECKBOX
CPPUNIT_TEST( ThirdState );
CPPUNIT_TEST( ThirdStateUser );
CPPUNIT_TEST( InvalidStyles );
#endif // wxHAS_3STATE_CHECKBOX
CPPUNIT_TEST_SUITE_END();
void Check();
#ifdef wxHAS_3STATE_CHECKBOX
void ThirdState();
void ThirdStateUser();
void InvalidStyles();
#endif // wxHAS_3STATE_CHECKBOX
// Initialize m_check with a new checkbox with the specified style
//
// This function always returns false just to make it more convenient to
// use inside WX_ASSERT_FAILS_WITH_ASSERT(), its return value doesn't have
// any meaning otherwise.
bool CreateCheckBox(long style)
{
wxDELETE( m_check );
m_check = new wxCheckBox(wxTheApp->GetTopWindow(), wxID_ANY, "Check box",
wxDefaultPosition, wxDefaultSize, style);
return false;
}
wxCheckBox* m_check;
wxDECLARE_NO_COPY_CLASS(CheckBoxTestCase);
};
// register in the unnamed registry so that these tests are run by default
CPPUNIT_TEST_SUITE_REGISTRATION( CheckBoxTestCase );
// also include in its own registry so that these tests can be run alone
CPPUNIT_TEST_SUITE_NAMED_REGISTRATION( CheckBoxTestCase, "CheckBoxTestCase" );
void CheckBoxTestCase::setUp()
{
m_check = new wxCheckBox(wxTheApp->GetTopWindow(), wxID_ANY, "Check box");
}
void CheckBoxTestCase::tearDown()
{
delete m_check;
}
void CheckBoxTestCase::Check()
{
EventCounter clicked(m_check, wxEVT_CHECKBOX);
//We should be unchecked by default
CPPUNIT_ASSERT(!m_check->IsChecked());
m_check->SetValue(true);
CPPUNIT_ASSERT(m_check->IsChecked());
m_check->SetValue(false);
CPPUNIT_ASSERT(!m_check->IsChecked());
m_check->Set3StateValue(wxCHK_CHECKED);
CPPUNIT_ASSERT(m_check->IsChecked());
m_check->Set3StateValue(wxCHK_UNCHECKED);
CPPUNIT_ASSERT(!m_check->IsChecked());
//None of these should send events
CPPUNIT_ASSERT_EQUAL(0, clicked.GetCount());
}
#ifdef wxHAS_3STATE_CHECKBOX
void CheckBoxTestCase::ThirdState()
{
CreateCheckBox(wxCHK_3STATE);
CPPUNIT_ASSERT_EQUAL(wxCHK_UNCHECKED, m_check->Get3StateValue());
CPPUNIT_ASSERT(m_check->Is3State());
CPPUNIT_ASSERT(!m_check->Is3rdStateAllowedForUser());
m_check->SetValue(true);
CPPUNIT_ASSERT_EQUAL(wxCHK_CHECKED, m_check->Get3StateValue());
m_check->Set3StateValue(wxCHK_UNDETERMINED);
CPPUNIT_ASSERT_EQUAL(wxCHK_UNDETERMINED, m_check->Get3StateValue());
}
void CheckBoxTestCase::ThirdStateUser()
{
CreateCheckBox(wxCHK_3STATE | wxCHK_ALLOW_3RD_STATE_FOR_USER);
CPPUNIT_ASSERT_EQUAL(wxCHK_UNCHECKED, m_check->Get3StateValue());
CPPUNIT_ASSERT(m_check->Is3State());
CPPUNIT_ASSERT(m_check->Is3rdStateAllowedForUser());
m_check->SetValue(true);
CPPUNIT_ASSERT_EQUAL(wxCHK_CHECKED, m_check->Get3StateValue());
m_check->Set3StateValue(wxCHK_UNDETERMINED);
CPPUNIT_ASSERT_EQUAL(wxCHK_UNDETERMINED, m_check->Get3StateValue());
}
void CheckBoxTestCase::InvalidStyles()
{
// Check that using incompatible styles doesn't work.
WX_ASSERT_FAILS_WITH_ASSERT( CreateCheckBox(wxCHK_2STATE | wxCHK_3STATE) );
#if !wxDEBUG_LEVEL
CPPUNIT_ASSERT( !m_check->Is3State() );
CPPUNIT_ASSERT( !m_check->Is3rdStateAllowedForUser() );
#endif
WX_ASSERT_FAILS_WITH_ASSERT(
CreateCheckBox(wxCHK_2STATE | wxCHK_ALLOW_3RD_STATE_FOR_USER) );
#if !wxDEBUG_LEVEL
CPPUNIT_ASSERT( !m_check->Is3State() );
CPPUNIT_ASSERT( !m_check->Is3rdStateAllowedForUser() );
#endif
// wxCHK_ALLOW_3RD_STATE_FOR_USER without wxCHK_3STATE doesn't work.
WX_ASSERT_FAILS_WITH_ASSERT( CreateCheckBox(wxCHK_ALLOW_3RD_STATE_FOR_USER) );
}
#endif // wxHAS_3STATE_CHECKBOX
#endif // wxUSE_CHECKBOX