wxWidgets/tests/persistence/dataview.cpp
Vadim Zeitlin f66fb07ce7 Resize wxDataViewCtrl to fix persistence test with wxGTK
Setting the column sizes fails with wxGTK implementation of
wxDataViewCtrl if the control is not wide enough, apparently, so make
sure it's sufficiently big when creating it to fix the unit test
failures on wxGTK build bot slaves.
2017-12-17 16:13:06 +01:00

142 lines
4.8 KiB
C++

///////////////////////////////////////////////////////////////////////////////
// Name: tests/persistence/dataview.cpp
// Purpose: wxDataViewCtrl persistence support unit tests
// Author: wxWidgets Team
// Created: 2017-08-23
// Copyright: (c) 2017 wxWidgets Team
///////////////////////////////////////////////////////////////////////////////
// ----------------------------------------------------------------------------
// headers
// ----------------------------------------------------------------------------
#include "testprec.h"
#ifdef __BORLANDC__
#pragma hdrstop
#endif
#include "testpersistence.h"
#ifndef WX_PRECOMP
#include "wx/dataview.h"
#endif // WX_PRECOMP
#include "wx/persist/dataview.h"
// ----------------------------------------------------------------------------
// constants
// ----------------------------------------------------------------------------
#define DVC_PREFIX PO_PREFIX "/DataView/dvc"
#define DVC_COL "Column #"
#define DVC_COL_PREFIX DVC_PREFIX "/Columns/" DVC_COL
#define DVC_SORT_PREFIX DVC_PREFIX "/Sorting"
// ----------------------------------------------------------------------------
// local helpers
// ----------------------------------------------------------------------------
// Create the control used for testing.
static wxDataViewCtrl* CreatePersistenceTestDVC()
{
// We can't just destroy the control itself directly, we need to destroy
// its parent as only this will ensure that it gets wxWindowDestroyEvent
// from which its state will be saved.
wxWindow* const parent = new wxWindow(wxTheApp->GetTopWindow(), wxID_ANY);
wxDataViewListCtrl* const list = new wxDataViewListCtrl(parent, wxID_ANY);
list->SetName("dvc");
// Ensure the control is big enough to allow making its columns as wide as
// we need them to be.
parent->SetSize(parent->GetParent()->GetClientSize());
list->SetSize(parent->GetClientSize());
// Add some columns to the DVC.
list->AppendTextColumn(DVC_COL "1",
wxDATAVIEW_CELL_INERT, -1, wxALIGN_LEFT,
wxDATAVIEW_COL_RESIZABLE |
wxDATAVIEW_COL_REORDERABLE |
wxDATAVIEW_COL_SORTABLE);
list->AppendTextColumn(DVC_COL "2",
wxDATAVIEW_CELL_INERT, -1, wxALIGN_LEFT,
wxDATAVIEW_COL_RESIZABLE |
wxDATAVIEW_COL_REORDERABLE |
wxDATAVIEW_COL_SORTABLE);
// Populate with DVC data.
wxVector<wxVariant> data;
data.push_back("AAAA");
data.push_back("BBBB");
list->AppendItem(data);
data.clear();
data.push_back("CCCC");
data.push_back("DDDD");
list->AppendItem(data);
data.clear();
data.push_back("EEEE");
data.push_back("FFFF");
list->AppendItem(data);
return list;
}
// --------------------------------------------------------------------------
// tests themselves
// --------------------------------------------------------------------------
// Note: The wxDataViewCtrl test currently uses the derivative class
// wxDataViewListCtrl for convenience.
TEST_CASE_METHOD(PersistenceTests, "wxPersistDVC", "[persist][wxDataViewCtrl]")
{
{
wxDataViewCtrl* const list = CreatePersistenceTestDVC();
// Adjust the initial settings.
list->GetColumn(0)->SetWidth(150);
list->GetColumn(1)->SetWidth(250);
list->GetColumn(1)->SetSortOrder(false);
CHECK(wxPersistenceManager::Get().Register(list));
// Deleting the control itself doesn't allow it to save its state as
// the wxEVT_DESTROY handler is called too late, so delete its parent
// (as would usually be the case) instead.
delete list->GetParent();
// Test that the relevant keys have been stored correctly.
int val = -1;
wxString text;
CHECK(GetConfig().Read(DVC_COL_PREFIX "1/Width", &val));
CHECK(150 == val);
CHECK(GetConfig().Read(DVC_COL_PREFIX "2/Width", &val));
CHECK(250 == val);
CHECK(GetConfig().Read(DVC_SORT_PREFIX "/Column", &text));
CHECK(text == "Column #2");
CHECK(GetConfig().Read(DVC_SORT_PREFIX "/Asc", &val));
CHECK(0 == val);
}
{
wxDataViewCtrl* const list = CreatePersistenceTestDVC();
// Test that the object was registered and restored.
CHECK(wxPersistenceManager::Get().RegisterAndRestore(list));
// Test that the correct values were restored.
CHECK(150 == list->GetColumn(0)->GetWidth());
CHECK(250 == list->GetColumn(1)->GetWidth());
CHECK(list->GetColumn(1)->IsSortKey());
CHECK(!list->GetColumn(1)->IsSortOrderAscending());
delete list->GetParent();
}
}