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
 |