167 lines
4.9 KiB
C++
167 lines
4.9 KiB
C++
///////////////////////////////////////////////////////////////////////////////
|
|
// Name: tests/controls/notebooktest.cpp
|
|
// Purpose: wxNotebook unit test
|
|
// Author: Steven Lamerton
|
|
// Created: 2010-07-02
|
|
// Copyright: (c) 2010 Steven Lamerton
|
|
///////////////////////////////////////////////////////////////////////////////
|
|
|
|
#include "testprec.h"
|
|
|
|
#if wxUSE_NOTEBOOK
|
|
|
|
|
|
#ifndef WX_PRECOMP
|
|
#include "wx/app.h"
|
|
#include "wx/panel.h"
|
|
#endif // WX_PRECOMP
|
|
|
|
#include "wx/notebook.h"
|
|
#include "wx/scopedptr.h"
|
|
|
|
#include "bookctrlbasetest.h"
|
|
#include "testableframe.h"
|
|
|
|
class NotebookTestCase : public BookCtrlBaseTestCase, public CppUnit::TestCase
|
|
{
|
|
public:
|
|
NotebookTestCase() { m_notebook = NULL; m_numPageChanges = 0; }
|
|
|
|
virtual void setUp() wxOVERRIDE;
|
|
virtual void tearDown() wxOVERRIDE;
|
|
|
|
private:
|
|
virtual wxBookCtrlBase *GetBase() const wxOVERRIDE { return m_notebook; }
|
|
|
|
virtual wxEventType GetChangedEvent() const wxOVERRIDE
|
|
{ return wxEVT_NOTEBOOK_PAGE_CHANGED; }
|
|
|
|
virtual wxEventType GetChangingEvent() const wxOVERRIDE
|
|
{ return wxEVT_NOTEBOOK_PAGE_CHANGING; }
|
|
|
|
|
|
CPPUNIT_TEST_SUITE( NotebookTestCase );
|
|
wxBOOK_CTRL_BASE_TESTS();
|
|
CPPUNIT_TEST( Image );
|
|
CPPUNIT_TEST( RowCount );
|
|
CPPUNIT_TEST( NoEventsOnDestruction );
|
|
CPPUNIT_TEST_SUITE_END();
|
|
|
|
void RowCount();
|
|
void NoEventsOnDestruction();
|
|
|
|
void OnPageChanged(wxNotebookEvent&) { m_numPageChanges++; }
|
|
|
|
wxNotebook *m_notebook;
|
|
|
|
int m_numPageChanges;
|
|
|
|
wxDECLARE_NO_COPY_CLASS(NotebookTestCase);
|
|
};
|
|
|
|
// register in the unnamed registry so that these tests are run by default
|
|
CPPUNIT_TEST_SUITE_REGISTRATION( NotebookTestCase );
|
|
|
|
// also include in its own registry so that these tests can be run alone
|
|
CPPUNIT_TEST_SUITE_NAMED_REGISTRATION( NotebookTestCase, "NotebookTestCase" );
|
|
|
|
void NotebookTestCase::setUp()
|
|
{
|
|
m_notebook = new wxNotebook(wxTheApp->GetTopWindow(), wxID_ANY,
|
|
wxDefaultPosition, wxSize(400, 200));
|
|
AddPanels();
|
|
}
|
|
|
|
void NotebookTestCase::tearDown()
|
|
{
|
|
wxDELETE(m_notebook);
|
|
}
|
|
|
|
void NotebookTestCase::RowCount()
|
|
{
|
|
CPPUNIT_ASSERT_EQUAL(1, m_notebook->GetRowCount());
|
|
|
|
#ifdef __WXMSW__
|
|
wxDELETE(m_notebook);
|
|
m_notebook = new wxNotebook(wxTheApp->GetTopWindow(), wxID_ANY,
|
|
wxDefaultPosition, wxSize(400, 200),
|
|
wxNB_MULTILINE);
|
|
|
|
for( unsigned int i = 0; i < 10; i++ )
|
|
{
|
|
m_notebook->AddPage(new wxPanel(m_notebook), "Panel", false, 0);
|
|
}
|
|
|
|
CPPUNIT_ASSERT( m_notebook->GetRowCount() != 1 );
|
|
#endif
|
|
}
|
|
|
|
void NotebookTestCase::NoEventsOnDestruction()
|
|
{
|
|
// We can't use EventCounter helper here as it doesn't deal with the window
|
|
// it's connected to being destroyed during its life-time, so do it
|
|
// manually.
|
|
m_notebook->Bind(wxEVT_NOTEBOOK_PAGE_CHANGED,
|
|
&NotebookTestCase::OnPageChanged, this);
|
|
|
|
// Normally deleting a page before the selected one results in page
|
|
// selection changing and the corresponding event.
|
|
m_notebook->DeletePage(static_cast<size_t>(0));
|
|
CHECK( m_numPageChanges == 1 );
|
|
|
|
// But deleting the entire control shouldn't generate any events, yet it
|
|
// used to do under GTK+ 3 when a page different from the first one was
|
|
// selected.
|
|
m_notebook->ChangeSelection(1);
|
|
m_notebook->Destroy();
|
|
m_notebook = NULL;
|
|
CHECK( m_numPageChanges == 1 );
|
|
}
|
|
|
|
TEST_CASE("wxNotebook::AddPageEvents", "[wxNotebook][AddPage][event]")
|
|
{
|
|
wxNotebook* const
|
|
notebook = new wxNotebook(wxTheApp->GetTopWindow(), wxID_ANY,
|
|
wxDefaultPosition, wxSize(400, 200));
|
|
wxScopedPtr<wxNotebook> cleanup(notebook);
|
|
|
|
CHECK( notebook->GetSelection() == wxNOT_FOUND );
|
|
|
|
EventCounter countPageChanging(notebook, wxEVT_NOTEBOOK_PAGE_CHANGING);
|
|
EventCounter countPageChanged(notebook, wxEVT_NOTEBOOK_PAGE_CHANGED);
|
|
|
|
// Add the first page, it is special.
|
|
notebook->AddPage(new wxPanel(notebook), "Initial page");
|
|
|
|
// The selection should have been changed.
|
|
CHECK( notebook->GetSelection() == 0 );
|
|
|
|
// But no events should have been generated.
|
|
CHECK( countPageChanging.GetCount() == 0 );
|
|
CHECK( countPageChanged.GetCount() == 0 );
|
|
|
|
|
|
// Add another page without selecting it.
|
|
notebook->AddPage(new wxPanel(notebook), "Unselected page");
|
|
|
|
// Selection shouldn't have changed.
|
|
CHECK( notebook->GetSelection() == 0 );
|
|
|
|
// And no events should have been generated, of course.
|
|
CHECK( countPageChanging.GetCount() == 0 );
|
|
CHECK( countPageChanged.GetCount() == 0 );
|
|
|
|
|
|
// Finally add another page and do select it.
|
|
notebook->AddPage(new wxPanel(notebook), "Selected page", true);
|
|
|
|
// It should have become selected.
|
|
CHECK( notebook->GetSelection() == 2 );
|
|
|
|
// And events for the selection change should have been generated.
|
|
CHECK( countPageChanging.GetCount() == 1 );
|
|
CHECK( countPageChanged.GetCount() == 1 );
|
|
}
|
|
|
|
#endif //wxUSE_NOTEBOOK
|