Work around GTK problems in wxPersistentDVC unit test
We need to wait until wxDataViewCtrl is realized for its columns widths to be actually set, as calling gtk_tree_view_column_set_fixed_width() just queues a resize that will take effect later, as documented in the previous commit.
This commit is contained in:
		| @@ -20,6 +20,10 @@ | ||||
|  | ||||
| #ifndef WX_PRECOMP | ||||
|     #include "wx/dataview.h" | ||||
|  | ||||
|     #ifdef __WXGTK__ | ||||
|         #include "wx/stopwatch.h" | ||||
|     #endif // __WXGTK__ | ||||
| #endif // WX_PRECOMP | ||||
|  | ||||
| #include "wx/persist/dataview.h" | ||||
| @@ -84,6 +88,25 @@ static wxDataViewCtrl* CreatePersistenceTestDVC() | ||||
|     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 | ||||
| // -------------------------------------------------------------------------- | ||||
| @@ -102,6 +125,10 @@ TEST_CASE_METHOD(PersistenceTests, "wxPersistDVC", "[persist][wxDataViewCtrl]") | ||||
|  | ||||
|         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. | ||||
| @@ -130,6 +157,10 @@ TEST_CASE_METHOD(PersistenceTests, "wxPersistDVC", "[persist][wxDataViewCtrl]") | ||||
|         // 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()); | ||||
|   | ||||
		Reference in New Issue
	
	Block a user