da48b9e45d
* fixing compilation of tests that cannot build bracket code with the corresponding wxUSE… macros * adding directive for iOS * adding a switch for skipping the run - not the build of tests right now I don’t know yet, how to run the test binary in the iOS simulator, but building it is still a good test in itself * adding skipping of tests * increasing minimum deployment to get proper c++17 support * using --disable-sys-libs, restoring other targets even when the zlib in -isysroot is used, due to deployment on lower iOS versions inflateValidate may not be available and crash. The guards are evaluated using macros from the zlib from the SDK, not from the lowest version supported.
177 lines
5.5 KiB
C++
177 lines
5.5 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"
|
|
|
|
#if wxUSE_DATAVIEWCTRL
|
|
|
|
#ifdef __BORLANDC__
|
|
#pragma hdrstop
|
|
#endif
|
|
|
|
#include "testpersistence.h"
|
|
|
|
#ifndef WX_PRECOMP
|
|
#include "wx/dataview.h"
|
|
|
|
#ifdef __WXGTK__
|
|
#include "wx/stopwatch.h"
|
|
#endif // __WXGTK__
|
|
#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;
|
|
}
|
|
|
|
void GTKWaitRealized(wxDataViewCtrl* list)
|
|
{
|
|
#ifdef __WXGTK__
|
|
wxStopWatch sw;
|
|
while ( list->GetColumn(0)->GetWidth() == 0 )
|
|
{
|
|
if ( sw.Time() > 500 )
|
|
{
|
|
WARN("Timed out waiting for wxDataViewCtrl to be realized");
|
|
break;
|
|
}
|
|
|
|
wxYield();
|
|
}
|
|
#else // !__WXGTK__
|
|
wxUnusedVar(list);
|
|
#endif // __WXGTK__/!__WXGTK__
|
|
}
|
|
|
|
// --------------------------------------------------------------------------
|
|
// 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));
|
|
|
|
// We need to wait until the window is fully realized and the column
|
|
// widths are actually set.
|
|
GTKWaitRealized(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));
|
|
|
|
// Similar to above, we need to wait until it's realized after
|
|
// restoring the widths.
|
|
GTKWaitRealized(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();
|
|
}
|
|
}
|
|
|
|
#endif
|