2010-08-22 18:16:05 -04:00
|
|
|
///////////////////////////////////////////////////////////////////////////////
|
|
|
|
// 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
|
|
|
|
|
|
|
|
#ifdef __BORLANDC__
|
|
|
|
#pragma hdrstop
|
|
|
|
#endif
|
|
|
|
|
|
|
|
#ifndef WX_PRECOMP
|
|
|
|
#include "wx/app.h"
|
|
|
|
#include "wx/panel.h"
|
|
|
|
#endif // WX_PRECOMP
|
|
|
|
|
|
|
|
#include "wx/notebook.h"
|
|
|
|
#include "bookctrlbasetest.h"
|
|
|
|
|
|
|
|
class NotebookTestCase : public BookCtrlBaseTestCase, public CppUnit::TestCase
|
|
|
|
{
|
|
|
|
public:
|
2018-05-30 18:51:27 -04:00
|
|
|
NotebookTestCase() { m_notebook = NULL; m_numPageChanges = 0; }
|
2010-08-22 18:16:05 -04:00
|
|
|
|
2018-07-29 05:09:17 -04:00
|
|
|
virtual void setUp() wxOVERRIDE;
|
|
|
|
virtual void tearDown() wxOVERRIDE;
|
2010-08-22 18:16:05 -04:00
|
|
|
|
|
|
|
private:
|
2018-07-29 05:09:17 -04:00
|
|
|
virtual wxBookCtrlBase *GetBase() const wxOVERRIDE { return m_notebook; }
|
2010-08-22 18:16:05 -04:00
|
|
|
|
2018-07-29 05:09:17 -04:00
|
|
|
virtual wxEventType GetChangedEvent() const wxOVERRIDE
|
2013-04-25 06:11:03 -04:00
|
|
|
{ return wxEVT_NOTEBOOK_PAGE_CHANGED; }
|
2010-08-22 18:16:05 -04:00
|
|
|
|
2018-07-29 05:09:17 -04:00
|
|
|
virtual wxEventType GetChangingEvent() const wxOVERRIDE
|
2013-04-25 06:11:03 -04:00
|
|
|
{ return wxEVT_NOTEBOOK_PAGE_CHANGING; }
|
2010-08-22 18:16:05 -04:00
|
|
|
|
|
|
|
|
|
|
|
CPPUNIT_TEST_SUITE( NotebookTestCase );
|
|
|
|
wxBOOK_CTRL_BASE_TESTS();
|
|
|
|
CPPUNIT_TEST( Image );
|
|
|
|
CPPUNIT_TEST( RowCount );
|
2018-05-30 18:51:27 -04:00
|
|
|
CPPUNIT_TEST( NoEventsOnDestruction );
|
2010-08-22 18:16:05 -04:00
|
|
|
CPPUNIT_TEST_SUITE_END();
|
|
|
|
|
|
|
|
void RowCount();
|
2018-05-30 18:51:27 -04:00
|
|
|
void NoEventsOnDestruction();
|
|
|
|
|
|
|
|
void OnPageChanged(wxNotebookEvent&) { m_numPageChanges++; }
|
2010-08-22 18:16:05 -04:00
|
|
|
|
|
|
|
wxNotebook *m_notebook;
|
|
|
|
|
2018-05-30 18:51:27 -04:00
|
|
|
int m_numPageChanges;
|
|
|
|
|
2015-04-23 07:49:01 -04:00
|
|
|
wxDECLARE_NO_COPY_CLASS(NotebookTestCase);
|
2010-08-22 18:16:05 -04:00
|
|
|
};
|
|
|
|
|
|
|
|
// register in the unnamed registry so that these tests are run by default
|
|
|
|
CPPUNIT_TEST_SUITE_REGISTRATION( NotebookTestCase );
|
|
|
|
|
2011-04-30 06:57:04 -04:00
|
|
|
// also include in its own registry so that these tests can be run alone
|
2010-08-22 18:16:05 -04:00
|
|
|
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
|
|
|
|
}
|
|
|
|
|
2018-05-30 18:51:27 -04:00
|
|
|
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.
|
2018-09-18 15:08:28 -04:00
|
|
|
m_notebook->DeletePage(static_cast<size_t>(0));
|
2018-05-30 18:51:27 -04:00
|
|
|
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 );
|
|
|
|
}
|
|
|
|
|
2010-08-22 18:16:05 -04:00
|
|
|
#endif //wxUSE_NOTEBOOK
|