2008-09-12 20:57:41 +00:00
/////////////////////////////////////////////////////////////////////////////
// Name: samples/propgrid/tests.cpp
// Purpose: wxPropertyGrid tests
// Author: Jaakko Salli
// Modified by:
// Created: 2007-05-16
// Copyright: (c) Jaakko Salli
2010-07-13 13:29:13 +00:00
// Licence: wxWindows licence
2008-09-12 20:57:41 +00:00
/////////////////////////////////////////////////////////////////////////////
# include "wx/wxprec.h"
# ifdef __BORLANDC__
# pragma hdrstop
# endif
# ifndef WX_PRECOMP
# include "wx/wx.h"
# endif
# include <wx/propgrid/propgrid.h>
# include <wx/propgrid/advprops.h>
# include <wx/propgrid/manager.h>
# include "propgrid.h"
# include "sampleprops.h"
// -----------------------------------------------------------------------
// wxTestCustomFlagsProperty
// -----------------------------------------------------------------------
//
// Test customizing wxColourProperty via subclassing
//
// * Includes custom colour entry.
// * Includes extra custom entry.
//
2008-10-07 17:28:05 +00:00
class MyColourProperty : public wxColourProperty
2008-09-12 20:57:41 +00:00
{
public :
2008-10-07 17:28:05 +00:00
MyColourProperty ( const wxString & label = wxPG_LABEL ,
2008-09-12 20:57:41 +00:00
const wxString & name = wxPG_LABEL ,
const wxColour & value = * wxWHITE )
: wxColourProperty ( label , name , value )
{
wxPGChoices colours ;
colours . Add ( wxT ( " White " ) ) ;
colours . Add ( wxT ( " Black " ) ) ;
colours . Add ( wxT ( " Red " ) ) ;
colours . Add ( wxT ( " Green " ) ) ;
colours . Add ( wxT ( " Blue " ) ) ;
colours . Add ( wxT ( " Custom " ) ) ;
colours . Add ( wxT ( " None " ) ) ;
m_choices = colours ;
SetIndex ( 0 ) ;
wxVariant variant ;
variant < < value ;
SetValue ( variant ) ;
}
2008-10-07 17:28:05 +00:00
virtual ~ MyColourProperty ( )
2008-09-12 20:57:41 +00:00
{
}
2014-03-30 00:02:23 +00:00
virtual wxColour GetColour ( int index ) const wxOVERRIDE
2008-09-12 20:57:41 +00:00
{
switch ( index )
{
case 0 : return * wxWHITE ;
case 1 : return * wxBLACK ;
case 2 : return * wxRED ;
case 3 : return * wxGREEN ;
case 4 : return * wxBLUE ;
case 5 :
// Return current colour for the custom entry
wxColour col ;
if ( GetIndex ( ) = = GetCustomColourIndex ( ) )
{
if ( m_value . IsNull ( ) )
return col ;
col < < m_value ;
return col ;
}
return * wxWHITE ;
} ;
return wxColour ( ) ;
}
2011-06-30 12:20:29 +00:00
virtual wxString ColourToString ( const wxColour & col ,
int index ,
2014-03-30 00:02:23 +00:00
int argFlags = 0 ) const wxOVERRIDE
2008-09-12 20:57:41 +00:00
{
if ( index = = ( int ) ( m_choices . GetCount ( ) - 1 ) )
2015-06-04 20:53:30 +00:00
return wxEmptyString ;
2008-09-12 20:57:41 +00:00
2011-06-30 12:20:29 +00:00
return wxColourProperty : : ColourToString ( col , index , argFlags ) ;
2008-09-12 20:57:41 +00:00
}
2014-03-30 00:02:23 +00:00
virtual int GetCustomColourIndex ( ) const wxOVERRIDE
2008-09-12 20:57:41 +00:00
{
return m_choices . GetCount ( ) - 2 ;
}
} ;
void FormMain : : AddTestProperties ( wxPropertyGridPage * pg )
{
2008-10-07 17:28:05 +00:00
pg - > Append ( new MyColourProperty ( wxT ( " CustomColourProperty " ) , wxPG_LABEL , * wxGREEN ) ) ;
2010-08-08 12:22:08 +00:00
pg - > GetProperty ( wxT ( " CustomColourProperty " ) ) - > SetAutoUnspecified ( true ) ;
2008-10-07 17:28:05 +00:00
pg - > SetPropertyEditor ( wxT ( " CustomColourProperty " ) , wxPGEditor_ComboBox ) ;
2008-09-12 20:57:41 +00:00
2008-10-07 17:28:05 +00:00
pg - > SetPropertyHelpString ( wxT ( " CustomColourProperty " ) ,
wxT ( " This is a MyColourProperty from the sample app. " )
2008-09-12 20:57:41 +00:00
wxT ( " It is built by subclassing wxColourProperty. " ) ) ;
}
// -----------------------------------------------------------------------
void FormMain : : OnDumpList ( wxCommandEvent & WXUNUSED ( event ) )
{
wxVariant values = m_pPropGridManager - > GetPropertyValues ( wxT ( " list " ) , wxNullProperty , wxPG_INC_ATTRIBUTES ) ;
wxString text = wxT ( " This only tests that wxVariant related routines do not crash. " ) ;
wxString t ;
2015-05-30 18:19:00 +00:00
wxDialog * dlg = new wxDialog ( this , wxID_ANY , wxT ( " wxVariant Test " ) ,
2008-09-12 20:57:41 +00:00
wxDefaultPosition , wxDefaultSize , wxDEFAULT_DIALOG_STYLE | wxRESIZE_BORDER ) ;
unsigned int i ;
for ( i = 0 ; i < ( unsigned int ) values . GetCount ( ) ; i + + )
{
wxVariant & v = values [ i ] ;
wxString strValue = v . GetString ( ) ;
# if wxCHECK_VERSION(2,8,0)
if ( v . GetName ( ) . EndsWith ( wxT ( " @attr " ) ) )
# else
if ( v . GetName ( ) . Right ( 5 ) = = wxT ( " @attr " ) )
# endif
{
text + = wxString : : Format ( wxT ( " Attributes: \n " ) ) ;
unsigned int n ;
for ( n = 0 ; n < ( unsigned int ) v . GetCount ( ) ; n + + )
{
wxVariant & a = v [ n ] ;
t . Printf ( wxT ( " atribute %i: name= \" %s \" (type= \" %s \" value= \" %s \" ) \n " ) , ( int ) n ,
a . GetName ( ) . c_str ( ) , a . GetType ( ) . c_str ( ) , a . GetString ( ) . c_str ( ) ) ;
text + = t ;
}
}
else
{
t . Printf ( wxT ( " %i: name= \" %s \" type= \" %s \" value= \" %s \" \n " ) , ( int ) i ,
v . GetName ( ) . c_str ( ) , v . GetType ( ) . c_str ( ) , strValue . c_str ( ) ) ;
text + = t ;
}
}
// multi-line text editor dialog
const int spacing = 8 ;
wxBoxSizer * topsizer = new wxBoxSizer ( wxVERTICAL ) ;
wxBoxSizer * rowsizer = new wxBoxSizer ( wxHORIZONTAL ) ;
2009-10-13 14:34:47 +00:00
wxTextCtrl * ed = new wxTextCtrl ( dlg , 11 , text ,
wxDefaultPosition , wxDefaultSize ,
wxTE_MULTILINE ) ;
2015-05-30 16:33:25 +00:00
rowsizer - > Add ( ed , wxSizerFlags ( 1 ) . Expand ( ) . Border ( wxALL , spacing ) ) ;
topsizer - > Add ( rowsizer , wxSizerFlags ( 1 ) . Expand ( ) ) ;
2008-09-12 20:57:41 +00:00
rowsizer = new wxBoxSizer ( wxHORIZONTAL ) ;
rowsizer - > Add ( new wxButton ( dlg , wxID_OK , wxT ( " Ok " ) ) ,
2015-05-30 16:33:25 +00:00
wxSizerFlags ( 0 ) . CentreHorizontal ( ) . CentreVertical ( ) . Border ( wxBOTTOM | wxLEFT | wxRIGHT , spacing ) ) ;
2015-04-25 10:52:36 +00:00
topsizer - > Add ( rowsizer , wxSizerFlags ( ) . Right ( ) ) ;
2008-09-12 20:57:41 +00:00
dlg - > SetSizer ( topsizer ) ;
topsizer - > SetSizeHints ( dlg ) ;
dlg - > SetSize ( 400 , 300 ) ;
dlg - > Centre ( ) ;
dlg - > ShowModal ( ) ;
}
// -----------------------------------------------------------------------
class TestRunner
{
public :
TestRunner ( const wxString & name , wxPropertyGridManager * man , wxTextCtrl * ed , wxArrayString * errorMessages )
{
m_name = name ;
m_man = man ;
m_ed = ed ;
m_errorMessages = errorMessages ;
# ifdef __WXDEBUG__
m_preWarnings = wxPGGlobalVars - > m_warnings ;
# endif
if ( name ! = wxT ( " none " ) )
Msg ( name + wxT ( " \n " ) ) ;
}
~ TestRunner ( )
{
# ifdef __WXDEBUG__
int warningsOccurred = wxPGGlobalVars - > m_warnings - m_preWarnings ;
if ( warningsOccurred )
{
wxString s = wxString : : Format ( wxT ( " %i warnings occurred during test '%s' " ) , warningsOccurred , m_name . c_str ( ) ) ;
m_errorMessages - > push_back ( s ) ;
Msg ( s ) ;
}
# endif
}
void Msg ( const wxString & text )
{
if ( m_ed )
{
m_ed - > AppendText ( text ) ;
m_ed - > AppendText ( wxT ( " \n " ) ) ;
}
wxLogDebug ( text ) ;
}
protected :
wxPropertyGridManager * m_man ;
wxTextCtrl * m_ed ;
wxArrayString * m_errorMessages ;
wxString m_name ;
# ifdef __WXDEBUG__
int m_preWarnings ;
# endif
} ;
# define RT_START_TEST(TESTNAME) \
TestRunner tr ( wxT ( # TESTNAME ) , pgman , ed , & errorMessages ) ;
# define RT_MSG(S) \
tr . Msg ( S ) ;
# define RT_FAILURE() \
{ \
wxString s1 = wxString : : Format ( wxT ( " Test failure in tests.cpp, line %i. " ) , __LINE__ - 1 ) ; \
errorMessages . push_back ( s1 ) ; \
wxLogDebug ( s1 ) ; \
failures + + ; \
}
2009-08-17 18:36:00 +00:00
# define RT_ASSERT(COND) \
if ( ! ( COND ) ) \
RT_FAILURE ( )
2008-09-12 20:57:41 +00:00
# define RT_FAILURE_MSG(MSG) \
{ \
wxString s1 = wxString : : Format ( wxT ( " Test failure in tests.cpp, line %i. " ) , __LINE__ - 1 ) ; \
errorMessages . push_back ( s1 ) ; \
wxLogDebug ( s1 ) ; \
wxString s2 = wxString : : Format ( wxT ( " Message: %s " ) , MSG ) ; \
errorMessages . push_back ( s2 ) ; \
wxLogDebug ( s2 ) ; \
failures + + ; \
}
# define RT_VALIDATE_VIRTUAL_HEIGHT(PROPS, EXTRATEXT) \
{ \
unsigned int h1_ = PROPS - > GetVirtualHeight ( ) ; \
unsigned int h2_ = PROPS - > GetActualVirtualHeight ( ) ; \
if ( h1_ ! = h2_ ) \
{ \
wxString s_ = wxString : : Format ( wxT ( " VirtualHeight = %i, should be %i (%s) " ) , h1_ , h2_ , EXTRATEXT . c_str ( ) ) ; \
RT_FAILURE_MSG ( s_ . c_str ( ) ) ; \
_failed_ = true ; \
} \
else \
{ \
_failed_ = false ; \
} \
}
int gpiro_cmpfunc ( const void * a , const void * b )
{
const wxPGProperty * p1 = ( const wxPGProperty * ) a ;
const wxPGProperty * p2 = ( const wxPGProperty * ) b ;
return ( int ) ( ( ( size_t ) p1 - > GetClientData ( ) ) - ( ( size_t ) p2 - > GetClientData ( ) ) ) ;
}
wxArrayPGProperty GetPropertiesInRandomOrder ( wxPropertyGridInterface * props , int iterationFlags = wxPG_ITERATE_ALL )
{
wxArrayPGProperty arr ;
wxPropertyGridIterator it ;
for ( it = props - > GetIterator ( iterationFlags ) ;
! it . AtEnd ( ) ;
it + + )
{
wxPGProperty * p = * it ;
size_t randomNumber = rand ( ) ;
p - > SetClientData ( reinterpret_cast < void * > ( randomNumber ) ) ;
arr . push_back ( p ) ;
}
wxPGProperty * * firstEntry = & arr [ 0 ] ;
qsort ( firstEntry , arr . size ( ) , sizeof ( wxPGProperty * ) , gpiro_cmpfunc ) ;
return arr ;
}
2009-01-07 18:53:09 +00:00
// Callback for testing property sorting
int MyPropertySortFunction ( wxPropertyGrid * WXUNUSED ( propGrid ) ,
wxPGProperty * p1 ,
wxPGProperty * p2 )
{
// Reverse alphabetical order
return p2 - > GetLabel ( ) . CmpNoCase ( p1 - > GetBaseName ( ) ) ;
}
2008-09-12 20:57:41 +00:00
bool FormMain : : RunTests ( bool fullTest , bool interactive )
{
wxString t ;
wxPropertyGridManager * pgman = m_pPropGridManager ;
wxPropertyGrid * pg ;
size_t i ;
pgman - > ClearSelection ( ) ;
int failures = 0 ;
bool _failed_ = false ;
wxArrayString errorMessages ;
wxDialog * dlg = NULL ;
2015-05-30 18:19:00 +00:00
dlg = new wxDialog ( this , wxID_ANY , wxT ( " wxPropertyGrid Regression Tests " ) ,
2008-09-12 20:57:41 +00:00
wxDefaultPosition , wxDefaultSize , wxDEFAULT_DIALOG_STYLE | wxRESIZE_BORDER ) ;
// multi-line text editor dialog
const int spacing = 8 ;
wxBoxSizer * topsizer = new wxBoxSizer ( wxVERTICAL ) ;
wxBoxSizer * rowsizer = new wxBoxSizer ( wxHORIZONTAL ) ;
2009-10-13 14:34:47 +00:00
wxTextCtrl * ed = new wxTextCtrl ( dlg , 11 , wxEmptyString ,
wxDefaultPosition , wxDefaultSize ,
wxTE_MULTILINE ) ;
2015-05-30 16:33:25 +00:00
rowsizer - > Add ( ed , wxSizerFlags ( 1 ) . Expand ( ) . Border ( wxALL , spacing ) ) ;
topsizer - > Add ( rowsizer , wxSizerFlags ( 1 ) . Expand ( ) ) ;
2008-09-12 20:57:41 +00:00
rowsizer = new wxBoxSizer ( wxHORIZONTAL ) ;
rowsizer - > Add ( new wxButton ( dlg , wxID_OK , wxT ( " Ok " ) ) ,
2015-05-30 16:33:25 +00:00
wxSizerFlags ( 0 ) . CentreHorizontal ( ) . CentreVertical ( ) . Border ( wxBOTTOM | wxLEFT | wxRIGHT , spacing ) ) ;
2015-04-25 10:52:36 +00:00
topsizer - > Add ( rowsizer , wxSizerFlags ( ) . Right ( ) ) ;
2008-09-12 20:57:41 +00:00
dlg - > SetSizer ( topsizer ) ;
topsizer - > SetSizeHints ( dlg ) ;
dlg - > SetSize ( 400 , 300 ) ;
dlg - > Move ( wxSystemSettings : : GetMetric ( wxSYS_SCREEN_X ) - dlg - > GetSize ( ) . x ,
wxSystemSettings : : GetMetric ( wxSYS_SCREEN_Y ) - dlg - > GetSize ( ) . y ) ;
dlg - > Show ( ) ;
{
//
// Basic iterator tests
RT_START_TEST ( GetIterator )
wxPGVIterator it ;
int count ;
count = 0 ;
for ( it = pgman - > GetVIterator ( wxPG_ITERATE_PROPERTIES ) ;
! it . AtEnd ( ) ;
it . Next ( ) )
{
wxPGProperty * p = it . GetProperty ( ) ;
if ( p - > IsCategory ( ) )
RT_FAILURE_MSG ( wxString : : Format ( wxT ( " '%s' is a category (non-private child property expected) " ) , p - > GetLabel ( ) . c_str ( ) ) . c_str ( ) )
else if ( p - > GetParent ( ) - > HasFlag ( wxPG_PROP_AGGREGATE ) )
RT_FAILURE_MSG ( wxString : : Format ( wxT ( " '%s' is a private child (non-private child property expected) " ) , p - > GetLabel ( ) . c_str ( ) ) . c_str ( ) )
count + + ;
}
RT_MSG ( wxString : : Format ( wxT ( " GetVIterator(wxPG_ITERATE_PROPERTIES) -> %i entries " ) , count ) ) ;
count = 0 ;
for ( it = pgman - > GetVIterator ( wxPG_ITERATE_CATEGORIES ) ;
! it . AtEnd ( ) ;
it . Next ( ) )
{
wxPGProperty * p = it . GetProperty ( ) ;
if ( ! p - > IsCategory ( ) )
RT_FAILURE_MSG ( wxString : : Format ( wxT ( " '%s' is not a category (only category was expected) " ) , p - > GetLabel ( ) . c_str ( ) ) . c_str ( ) )
count + + ;
}
RT_MSG ( wxString : : Format ( wxT ( " GetVIterator(wxPG_ITERATE_CATEGORIES) -> %i entries " ) , count ) ) ;
count = 0 ;
for ( it = pgman - > GetVIterator ( wxPG_ITERATE_PROPERTIES | wxPG_ITERATE_CATEGORIES ) ;
! it . AtEnd ( ) ;
it . Next ( ) )
{
wxPGProperty * p = it . GetProperty ( ) ;
if ( p - > GetParent ( ) - > HasFlag ( wxPG_PROP_AGGREGATE ) )
RT_FAILURE_MSG ( wxString : : Format ( wxT ( " '%s' is a private child (non-private child property or category expected) " ) , p - > GetLabel ( ) . c_str ( ) ) . c_str ( ) )
count + + ;
}
RT_MSG ( wxString : : Format ( wxT ( " GetVIterator(wxPG_ITERATE_PROPERTIES|wxPG_ITERATE_CATEGORIES) -> %i entries " ) , count ) ) ;
count = 0 ;
for ( it = pgman - > GetVIterator ( wxPG_ITERATE_VISIBLE ) ;
! it . AtEnd ( ) ;
it . Next ( ) )
{
wxPGProperty * p = it . GetProperty ( ) ;
if ( ( p - > GetParent ( ) ! = p - > GetParentState ( ) - > DoGetRoot ( ) & & ! p - > GetParent ( ) - > IsExpanded ( ) ) )
RT_FAILURE_MSG ( wxString : : Format ( wxT ( " '%s' had collapsed parent (only visible properties expected) " ) , p - > GetLabel ( ) . c_str ( ) ) . c_str ( ) )
else if ( p - > HasFlag ( wxPG_PROP_HIDDEN ) )
RT_FAILURE_MSG ( wxString : : Format ( wxT ( " '%s' was hidden (only visible properties expected) " ) , p - > GetLabel ( ) . c_str ( ) ) . c_str ( ) )
count + + ;
}
RT_MSG ( wxString : : Format ( wxT ( " GetVIterator(wxPG_ITERATE_VISIBLE) -> %i entries " ) , count ) ) ;
}
if ( fullTest )
{
// Test that setting focus to properties does not crash things
RT_START_TEST ( SelectProperty )
wxPropertyGridIterator it ;
size_t ind ;
for ( ind = 0 ; ind < pgman - > GetPageCount ( ) ; ind + + )
{
wxPropertyGridPage * page = pgman - > GetPage ( ind ) ;
pgman - > SelectPage ( page ) ;
for ( it = page - > GetIterator ( wxPG_ITERATE_VISIBLE ) ;
! it . AtEnd ( ) ;
it + + )
{
wxPGProperty * p = * it ;
RT_MSG ( p - > GetLabel ( ) ) ;
pgman - > GetGrid ( ) - > SelectProperty ( p , true ) ;
: : wxMilliSleep ( 150 ) ;
Update ( ) ;
}
}
}
{
//
// Delete everything in reverse order
RT_START_TEST ( DeleteProperty )
wxPGVIterator it ;
wxArrayPGProperty array ;
for ( it = pgman - > GetVIterator ( wxPG_ITERATE_ALL & ~ ( wxPG_IT_CHILDREN ( wxPG_PROP_AGGREGATE ) ) ) ;
! it . AtEnd ( ) ;
it . Next ( ) )
array . push_back ( it . GetProperty ( ) ) ;
wxArrayPGProperty : : reverse_iterator it2 ;
for ( it2 = array . rbegin ( ) ; it2 ! = array . rend ( ) ; it2 + + )
{
wxPGProperty * p = ( wxPGProperty * ) * it2 ;
RT_MSG ( wxString : : Format ( wxT ( " Deleting '%s' ('%s') " ) , p - > GetLabel ( ) . c_str ( ) , p - > GetName ( ) . c_str ( ) ) ) ;
pgman - > DeleteProperty ( p ) ;
}
// Recreate grid
CreateGrid ( - 1 , - 1 ) ;
pgman = m_pPropGridManager ;
}
{
//
2008-10-06 15:10:00 +00:00
// Test property default values
RT_START_TEST ( Default_Values )
2008-09-12 20:57:41 +00:00
wxPGVIterator it ;
for ( it = pgman - > GetVIterator ( wxPG_ITERATE_PROPERTIES ) ;
! it . AtEnd ( ) ;
it . Next ( ) )
{
2008-10-06 15:10:00 +00:00
wxPGProperty * p = it . GetProperty ( ) ;
pgman - > SetPropertyValue ( p , p - > GetDefaultValue ( ) ) ;
2008-09-12 20:57:41 +00:00
}
// Recreate grid
CreateGrid ( - 1 , - 1 ) ;
pgman = m_pPropGridManager ;
}
2010-04-16 14:36:32 +00:00
{
//
// Test wxAny<->wxVariant conversion
RT_START_TEST ( WXVARIANT_TO_WXANY_CONVERSION )
wxPGProperty * prop ;
wxAny any ;
# if wxUSE_DATETIME
2015-05-10 18:06:46 +00:00
prop = pgman - > GetProperty ( wxT ( " DateProperty " ) ) ;
2010-04-16 14:36:32 +00:00
wxDateTime testTime = wxDateTime : : Now ( ) ;
any = testTime ;
prop - > SetValue ( any ) ;
2014-05-15 22:32:17 +00:00
if ( prop - > GetValue ( ) . GetAny ( ) . As < wxDateTime > ( ) ! = testTime )
2010-04-16 14:36:32 +00:00
RT_FAILURE ( ) ;
# endif
2015-05-10 18:06:46 +00:00
prop = pgman - > GetProperty ( wxT ( " IntProperty " ) ) ;
2010-04-16 14:36:32 +00:00
int testInt = 25537983 ;
any = testInt ;
prop - > SetValue ( any ) ;
2014-05-15 22:32:17 +00:00
if ( prop - > GetValue ( ) . GetAny ( ) . As < int > ( ) ! = testInt )
2010-04-16 14:36:32 +00:00
RT_FAILURE ( ) ;
# ifdef wxLongLong_t
2014-05-15 22:32:17 +00:00
if ( prop - > GetValue ( ) . GetAny ( ) . As < wxLongLong_t > ( ) ! = testInt )
2010-04-16 14:36:32 +00:00
RT_FAILURE ( ) ;
# endif
2015-05-10 18:06:46 +00:00
prop = pgman - > GetProperty ( wxT ( " StringProperty " ) ) ;
wxString testString = wxT ( " asd934jfyn3 " ) ;
2010-04-16 14:36:32 +00:00
any = testString ;
prop - > SetValue ( any ) ;
2014-05-15 22:32:17 +00:00
if ( prop - > GetValue ( ) . GetAny ( ) . As < wxString > ( ) ! = testString )
2010-04-16 14:36:32 +00:00
RT_FAILURE ( ) ;
// Test with a type generated with IMPLEMENT_VARIANT_OBJECT()
2015-05-10 18:06:46 +00:00
prop = pgman - > GetProperty ( wxT ( " ColourProperty " ) ) ;
2010-04-16 14:36:32 +00:00
wxColour testCol = * wxCYAN ;
any = testCol ;
prop - > SetValue ( any ) ;
2014-05-15 22:32:17 +00:00
if ( prop - > GetValue ( ) . GetAny ( ) . As < wxColour > ( ) ! = testCol )
2010-04-16 14:36:32 +00:00
RT_FAILURE ( ) ;
// Test with a type with custom wxVariantData defined by
// wxPG headers.
2015-05-10 18:06:46 +00:00
prop = pgman - > GetProperty ( wxT ( " Position " ) ) ;
2010-04-16 14:36:32 +00:00
wxPoint testPoint ( 199 , 199 ) ;
any = testPoint ;
prop - > SetValue ( any ) ;
2014-05-15 22:32:17 +00:00
if ( prop - > GetValue ( ) . GetAny ( ) . As < wxPoint > ( ) ! = testPoint )
2010-04-16 14:36:32 +00:00
RT_FAILURE ( ) ;
}
2008-09-12 20:57:41 +00:00
{
RT_START_TEST ( GetPropertyValues )
for ( i = 0 ; i < 3 ; i + + )
{
wxString text ;
wxPropertyGridPage * page = pgman - > GetPage ( i ) ;
wxVariant values = page - > GetPropertyValues ( ) ;
unsigned int i ;
for ( i = 0 ; i < ( unsigned int ) values . GetCount ( ) ; i + + )
{
wxVariant & v = values [ i ] ;
t . Printf ( wxT ( " %i: name= \" %s \" type= \" %s \" \n " ) , ( int ) i ,
v . GetName ( ) . c_str ( ) , v . GetType ( ) . c_str ( ) ) ;
text + = t ;
}
ed - > AppendText ( text ) ;
}
}
{
RT_START_TEST ( SetPropertyValue_and_GetPropertyValue )
2008-09-14 16:48:20 +00:00
// In this section, mixed up usage of wxT("propname") and "propname"
// in wxPropertyGridInterface functions is intentional.
// Purpose is to test wxPGPropArgCls ctors.
2008-09-12 20:57:41 +00:00
//pg = (wxPropertyGrid*) NULL;
wxArrayString test_arrstr_1 ;
test_arrstr_1 . Add ( wxT ( " Apple " ) ) ;
test_arrstr_1 . Add ( wxT ( " Orange " ) ) ;
test_arrstr_1 . Add ( wxT ( " Lemon " ) ) ;
wxArrayString test_arrstr_2 ;
test_arrstr_2 . Add ( wxT ( " Potato " ) ) ;
test_arrstr_2 . Add ( wxT ( " Cabbage " ) ) ;
test_arrstr_2 . Add ( wxT ( " Cucumber " ) ) ;
wxArrayInt test_arrint_1 ;
test_arrint_1 . Add ( 1 ) ;
test_arrint_1 . Add ( 2 ) ;
test_arrint_1 . Add ( 3 ) ;
wxArrayInt test_arrint_2 ;
test_arrint_2 . Add ( 0 ) ;
test_arrint_2 . Add ( 1 ) ;
test_arrint_2 . Add ( 4 ) ;
# if wxUSE_DATETIME
wxDateTime dt1 = wxDateTime : : Now ( ) ;
dt1 . SetYear ( dt1 . GetYear ( ) - 1 ) ;
wxDateTime dt2 = wxDateTime : : Now ( ) ;
dt2 . SetYear ( dt2 . GetYear ( ) - 10 ) ;
# endif
2011-01-02 10:14:29 +00:00
wxColour colWithAlpha ( 1 , 128 , 254 , 100 ) ;
wxString colWithAlphaStr ( colWithAlpha . GetAsString ( wxC2S_CSS_SYNTAX ) ) ;
2008-09-12 20:57:41 +00:00
# define FLAG_TEST_SET1 (wxCAPTION|wxCLOSE_BOX|wxSYSTEM_MENU|wxRESIZE_BORDER)
# define FLAG_TEST_SET2 (wxSTAY_ON_TOP|wxCAPTION|wxICONIZE|wxSYSTEM_MENU)
pgman - > SetPropertyValue ( wxT ( " StringProperty " ) , wxT ( " Text1 " ) ) ;
pgman - > SetPropertyValue ( wxT ( " IntProperty " ) , 1024 ) ;
pgman - > SetPropertyValue ( wxT ( " FloatProperty " ) , 1024.0000000001 ) ;
2015-02-08 12:48:43 +00:00
pgman - > SetPropertyValue ( wxT ( " BoolProperty " ) , false ) ;
2008-09-12 20:57:41 +00:00
pgman - > SetPropertyValue ( wxT ( " EnumProperty " ) , 120 ) ;
pgman - > SetPropertyValue ( wxT ( " ArrayStringProperty " ) , test_arrstr_1 ) ;
wxColour emptyCol ;
pgman - > SetPropertyValue ( wxT ( " ColourProperty " ) , emptyCol ) ;
pgman - > SetPropertyValue ( wxT ( " ColourProperty " ) , ( wxObject * ) wxBLACK ) ;
2008-09-27 15:09:33 +00:00
pgman - > SetPropertyValue ( wxT ( " Size " ) , WXVARIANT ( wxSize ( 150 , 150 ) ) ) ;
pgman - > SetPropertyValue ( wxT ( " Position " ) , WXVARIANT ( wxPoint ( 150 , 150 ) ) ) ;
2008-09-12 20:57:41 +00:00
pgman - > SetPropertyValue ( wxT ( " MultiChoiceProperty " ) , test_arrint_1 ) ;
# if wxUSE_DATETIME
pgman - > SetPropertyValue ( wxT ( " DateProperty " ) , dt1 ) ;
# endif
pgman - > SelectPage ( 2 ) ;
pg = pgman - > GetGrid ( ) ;
if ( pg - > GetPropertyValueAsString ( wxT ( " StringProperty " ) ) ! = wxT ( " Text1 " ) )
RT_FAILURE ( ) ;
if ( pg - > GetPropertyValueAsInt ( wxT ( " IntProperty " ) ) ! = 1024 )
RT_FAILURE ( ) ;
if ( pg - > GetPropertyValueAsDouble ( wxT ( " FloatProperty " ) ) ! = 1024.0000000001 )
RT_FAILURE ( ) ;
2015-02-08 12:48:43 +00:00
if ( pg - > GetPropertyValueAsBool ( wxT ( " BoolProperty " ) ) ! = false )
2008-09-12 20:57:41 +00:00
RT_FAILURE ( ) ;
if ( pg - > GetPropertyValueAsLong ( wxT ( " EnumProperty " ) ) ! = 120 )
RT_FAILURE ( ) ;
if ( pg - > GetPropertyValueAsArrayString ( wxT ( " ArrayStringProperty " ) ) ! = test_arrstr_1 )
RT_FAILURE ( ) ;
wxColour col ;
col < < pgman - > GetPropertyValue ( wxT ( " ColourProperty " ) ) ;
if ( col ! = * wxBLACK )
RT_FAILURE ( ) ;
2009-06-07 12:38:39 +00:00
wxVariant varSize ( pg - > GetPropertyValue ( wxT ( " Size " ) ) ) ;
if ( wxSizeRefFromVariant ( varSize ) ! = wxSize ( 150 , 150 ) )
2008-09-12 20:57:41 +00:00
RT_FAILURE ( ) ;
2009-06-07 12:38:39 +00:00
wxVariant varPos ( pg - > GetPropertyValue ( wxT ( " Position " ) ) ) ;
if ( wxPointRefFromVariant ( varPos ) ! = wxPoint ( 150 , 150 ) )
2008-09-12 20:57:41 +00:00
RT_FAILURE ( ) ;
if ( ! ( pg - > GetPropertyValueAsArrayInt ( wxT ( " MultiChoiceProperty " ) ) = = test_arrint_1 ) )
RT_FAILURE ( ) ;
# if wxUSE_DATETIME
if ( ! ( pg - > GetPropertyValueAsDateTime ( wxT ( " DateProperty " ) ) = = dt1 ) )
RT_FAILURE ( ) ;
# endif
2015-04-03 19:13:44 +00:00
# if wxUSE_LONGLONG && defined(wxLongLong_t)
2008-09-12 20:57:41 +00:00
pgman - > SetPropertyValue ( wxT ( " IntProperty " ) , wxLL ( 10000000000 ) ) ;
if ( pg - > GetPropertyValueAsLongLong ( wxT ( " IntProperty " ) ) ! = wxLL ( 10000000000 ) )
RT_FAILURE ( ) ;
2015-04-03 19:13:44 +00:00
# else
pgman - > SetPropertyValue ( wxT ( " IntProperty " ) , 1000000000 ) ;
if ( pg - > GetPropertyValueAsLong ( wxT ( " IntProperty " ) ) ! = 1000000000 )
RT_FAILURE ( ) ;
# endif
2008-09-12 20:57:41 +00:00
pg - > SetPropertyValue ( wxT ( " StringProperty " ) , wxT ( " Text2 " ) ) ;
pg - > SetPropertyValue ( wxT ( " IntProperty " ) , 512 ) ;
pg - > SetPropertyValue ( wxT ( " FloatProperty " ) , 512.0 ) ;
2015-02-08 12:48:43 +00:00
pg - > SetPropertyValue ( wxT ( " BoolProperty " ) , true ) ;
2008-09-12 20:57:41 +00:00
pg - > SetPropertyValue ( wxT ( " EnumProperty " ) , 80 ) ;
pg - > SetPropertyValue ( wxT ( " ArrayStringProperty " ) , test_arrstr_2 ) ;
pg - > SetPropertyValue ( wxT ( " ColourProperty " ) , ( wxObject * ) wxWHITE ) ;
2008-09-27 15:09:33 +00:00
pg - > SetPropertyValue ( wxT ( " Size " ) , WXVARIANT ( wxSize ( 300 , 300 ) ) ) ;
pg - > SetPropertyValue ( wxT ( " Position " ) , WXVARIANT ( wxPoint ( 300 , 300 ) ) ) ;
2008-09-12 20:57:41 +00:00
pg - > SetPropertyValue ( wxT ( " MultiChoiceProperty " ) , test_arrint_2 ) ;
# if wxUSE_DATETIME
pg - > SetPropertyValue ( wxT ( " DateProperty " ) , dt2 ) ;
# endif
//pg = (wxPropertyGrid*) NULL;
pgman - > SelectPage ( 0 ) ;
if ( pgman - > GetPropertyValueAsString ( wxT ( " StringProperty " ) ) ! = wxT ( " Text2 " ) )
RT_FAILURE ( ) ;
if ( pgman - > GetPropertyValueAsInt ( wxT ( " IntProperty " ) ) ! = 512 )
RT_FAILURE ( ) ;
if ( pgman - > GetPropertyValueAsDouble ( wxT ( " FloatProperty " ) ) ! = 512.0 )
RT_FAILURE ( ) ;
2015-02-08 12:48:43 +00:00
if ( pgman - > GetPropertyValueAsBool ( wxT ( " BoolProperty " ) ) ! = true )
2008-09-12 20:57:41 +00:00
RT_FAILURE ( ) ;
if ( pgman - > GetPropertyValueAsLong ( wxT ( " EnumProperty " ) ) ! = 80 )
RT_FAILURE ( ) ;
if ( pgman - > GetPropertyValueAsArrayString ( wxT ( " ArrayStringProperty " ) ) ! = test_arrstr_2 )
RT_FAILURE ( ) ;
col < < pgman - > GetPropertyValue ( wxT ( " ColourProperty " ) ) ;
if ( col ! = * wxWHITE )
RT_FAILURE ( ) ;
2009-06-07 12:38:39 +00:00
varSize = pgman - > GetPropertyValue ( wxT ( " Size " ) ) ;
if ( wxSizeRefFromVariant ( varSize ) ! = wxSize ( 300 , 300 ) )
2008-09-12 20:57:41 +00:00
RT_FAILURE ( ) ;
2009-06-07 12:38:39 +00:00
varPos = pgman - > GetPropertyValue ( wxT ( " Position " ) ) ;
if ( wxPointRefFromVariant ( varPos ) ! = wxPoint ( 300 , 300 ) )
2008-09-12 20:57:41 +00:00
RT_FAILURE ( ) ;
if ( ! ( pgman - > GetPropertyValueAsArrayInt ( wxT ( " MultiChoiceProperty " ) ) = = test_arrint_2 ) )
RT_FAILURE ( ) ;
# if wxUSE_DATETIME
if ( ! ( pgman - > GetPropertyValueAsDateTime ( wxT ( " DateProperty " ) ) = = dt2 ) )
RT_FAILURE ( ) ;
# endif
2015-04-03 19:13:44 +00:00
# if wxUSE_LONGLONG && defined(wxLongLong_t)
2008-09-12 20:57:41 +00:00
pgman - > SetPropertyValue ( wxT ( " IntProperty " ) , wxLL ( - 80000000000 ) ) ;
if ( pgman - > GetPropertyValueAsLongLong ( wxT ( " IntProperty " ) ) ! = wxLL ( - 80000000000 ) )
RT_FAILURE ( ) ;
2015-04-03 19:13:44 +00:00
# else
pgman - > SetPropertyValue ( wxT ( " IntProperty " ) , - 1000000000 ) ;
if ( pgman - > GetPropertyValueAsLong ( wxT ( " IntProperty " ) ) ! = - 1000000000 )
RT_FAILURE ( ) ;
# endif
2008-09-14 16:20:48 +00:00
// Make sure children of composite parent get updated as well
2009-01-07 19:00:16 +00:00
// Original string value: "Lamborghini Diablo SV; 5707; [300; 3.9; 8.6] 300000; Not Convertible"
2008-09-14 16:20:48 +00:00
2008-09-14 16:48:20 +00:00
//
2008-09-14 16:20:48 +00:00
// This updates children as well
2015-05-10 18:06:46 +00:00
wxString nvs = wxT ( " Lamborghini Diablo XYZ; 5707; [100; 3.9; 8.6] 3000002; Convertible " ) ;
2008-09-14 16:48:20 +00:00
pgman - > SetPropertyValue ( " Car " , nvs ) ;
2008-09-14 16:20:48 +00:00
2015-05-10 18:06:46 +00:00
if ( pgman - > GetPropertyValueAsString ( wxT ( " Car.Model " ) ) ! = wxT ( " Lamborghini Diablo XYZ " ) )
2008-09-14 16:20:48 +00:00
{
2015-05-10 18:06:46 +00:00
wxLogDebug ( wxT ( " Did not match: Car.Model=%s " ) , pgman - > GetPropertyValueAsString ( wxT ( " Car.Model " ) ) . c_str ( ) ) ;
2008-09-14 16:20:48 +00:00
RT_FAILURE ( ) ;
}
2015-05-10 18:06:46 +00:00
if ( pgman - > GetPropertyValueAsInt ( wxT ( " Car.Speeds.Max. Speed (mph) " ) ) ! = 100 )
2008-09-14 16:20:48 +00:00
{
2015-05-10 18:06:46 +00:00
wxLogDebug ( wxT ( " Did not match: Car.Speeds.Max. Speed (mph)=%s " ) , pgman - > GetPropertyValueAsString ( wxT ( " Car.Speeds.Max. Speed (mph) " ) ) . c_str ( ) ) ;
2008-09-14 16:20:48 +00:00
RT_FAILURE ( ) ;
}
2015-05-10 18:06:46 +00:00
if ( pgman - > GetPropertyValueAsInt ( wxT ( " Car.Price ($) " ) ) ! = 3000002 )
2008-09-14 16:20:48 +00:00
{
2015-05-10 18:06:46 +00:00
wxLogDebug ( wxT ( " Did not match: Car.Price ($)=%s " ) , pgman - > GetPropertyValueAsString ( wxT ( " Car.Price ($) " ) ) . c_str ( ) ) ;
2008-09-14 16:20:48 +00:00
RT_FAILURE ( ) ;
}
2009-01-07 19:00:16 +00:00
2015-05-10 18:06:46 +00:00
if ( ! pgman - > GetPropertyValueAsBool ( wxT ( " Car.Convertible " ) ) )
2009-01-07 19:00:16 +00:00
{
2015-05-10 18:06:46 +00:00
wxLogDebug ( wxT ( " Did not match: Car.Convertible=%s " ) , pgman - > GetPropertyValueAsString ( wxT ( " Car.Convertible " ) ) . c_str ( ) ) ;
2009-01-07 19:00:16 +00:00
RT_FAILURE ( ) ;
}
2010-11-20 11:58:54 +00:00
// SetPropertyValueString for special cases such as wxColour
2015-05-10 18:06:46 +00:00
pgman - > SetPropertyValueString ( wxT ( " ColourProperty " ) , wxT ( " (123,4,255) " ) ) ;
col < < pgman - > GetPropertyValue ( wxT ( " ColourProperty " ) ) ;
2010-11-20 11:58:54 +00:00
if ( col ! = wxColour ( 123 , 4 , 255 ) )
RT_FAILURE ( ) ;
2015-05-10 18:06:46 +00:00
pgman - > SetPropertyValueString ( wxT ( " ColourProperty " ) , wxT ( " #FE860B " ) ) ;
col < < pgman - > GetPropertyValue ( wxT ( " ColourProperty " ) ) ;
2010-11-20 11:58:54 +00:00
if ( col ! = wxColour ( 254 , 134 , 11 ) )
RT_FAILURE ( ) ;
2011-01-02 10:14:29 +00:00
2015-05-10 18:06:46 +00:00
pgman - > SetPropertyValueString ( wxT ( " ColourPropertyWithAlpha " ) ,
wxT ( " (10, 20, 30, 128) " ) ) ;
col < < pgman - > GetPropertyValue ( wxT ( " ColourPropertyWithAlpha " ) ) ;
2011-01-02 10:14:29 +00:00
if ( col ! = wxColour ( 10 , 20 , 30 , 128 ) )
RT_FAILURE ( ) ;
2015-05-10 18:06:46 +00:00
if ( pgman - > GetPropertyValueAsString ( wxT ( " ColourPropertyWithAlpha " ) )
! = wxT ( " (10,20,30,128) " ) )
2011-01-02 10:14:29 +00:00
RT_FAILURE ( ) ;
2008-09-12 20:57:41 +00:00
}
{
RT_START_TEST ( SetPropertyValueUnspecified )
// Null variant setter tests
pgman - > SetPropertyValueUnspecified ( wxT ( " StringProperty " ) ) ;
pgman - > SetPropertyValueUnspecified ( wxT ( " IntProperty " ) ) ;
pgman - > SetPropertyValueUnspecified ( wxT ( " FloatProperty " ) ) ;
pgman - > SetPropertyValueUnspecified ( wxT ( " BoolProperty " ) ) ;
pgman - > SetPropertyValueUnspecified ( wxT ( " EnumProperty " ) ) ;
pgman - > SetPropertyValueUnspecified ( wxT ( " ArrayStringProperty " ) ) ;
pgman - > SetPropertyValueUnspecified ( wxT ( " ColourProperty " ) ) ;
pgman - > SetPropertyValueUnspecified ( wxT ( " Size " ) ) ;
pgman - > SetPropertyValueUnspecified ( wxT ( " Position " ) ) ;
pgman - > SetPropertyValueUnspecified ( wxT ( " MultiChoiceProperty " ) ) ;
# if wxUSE_DATETIME
pgman - > SetPropertyValueUnspecified ( wxT ( " DateProperty " ) ) ;
# endif
}
2009-08-17 18:36:00 +00:00
{
//
// Test multiple selection
RT_START_TEST ( MULTIPLE_SELECTION )
if ( ! ( pgman - > GetExtraStyle ( ) & wxPG_EX_MULTIPLE_SELECTION ) )
CreateGrid ( - 1 , wxPG_EX_MULTIPLE_SELECTION ) ;
pgman = m_pPropGridManager ;
wxPropertyGrid * pg = pgman - > GetGrid ( ) ;
wxPGProperty * prop1 = pg - > GetProperty ( wxT ( " Label " ) ) ;
wxPGProperty * prop2 = pg - > GetProperty ( wxT ( " Cell Text Colour " ) ) ;
wxPGProperty * prop3 = pg - > GetProperty ( wxT ( " Height " ) ) ;
wxPGProperty * catProp = pg - > GetProperty ( wxT ( " Appearance " ) ) ;
RT_ASSERT ( prop1 & & prop2 & & prop3 ) ;
pg - > ClearSelection ( ) ;
pg - > AddToSelection ( prop1 ) ;
pg - > AddToSelection ( prop2 ) ;
pg - > AddToSelection ( prop3 ) ;
// Adding category to selection should fail silently
pg - > AddToSelection ( catProp ) ;
wxArrayPGProperty selectedProperties = pg - > GetSelectedProperties ( ) ;
RT_ASSERT ( selectedProperties . size ( ) = = 3 )
RT_ASSERT ( pg - > IsPropertySelected ( prop1 ) )
RT_ASSERT ( pg - > IsPropertySelected ( prop2 ) )
RT_ASSERT ( pg - > IsPropertySelected ( prop3 ) )
RT_ASSERT ( ! pg - > IsPropertySelected ( catProp ) )
pg - > RemoveFromSelection ( prop1 ) ;
wxArrayPGProperty selectedProperties2 = pg - > GetSelectedProperties ( ) ;
RT_ASSERT ( selectedProperties2 . size ( ) = = 2 )
RT_ASSERT ( ! pg - > IsPropertySelected ( prop1 ) )
RT_ASSERT ( pg - > IsPropertySelected ( prop2 ) )
RT_ASSERT ( pg - > IsPropertySelected ( prop3 ) )
pg - > ClearSelection ( ) ;
wxArrayPGProperty selectedProperties3 = pg - > GetSelectedProperties ( ) ;
RT_ASSERT ( selectedProperties3 . size ( ) = = 0 )
RT_ASSERT ( ! pg - > IsPropertySelected ( prop1 ) )
RT_ASSERT ( ! pg - > IsPropertySelected ( prop2 ) )
RT_ASSERT ( ! pg - > IsPropertySelected ( prop3 ) )
pg - > SelectProperty ( prop2 ) ;
RT_ASSERT ( ! pg - > IsPropertySelected ( prop1 ) )
RT_ASSERT ( pg - > IsPropertySelected ( prop2 ) )
RT_ASSERT ( ! pg - > IsPropertySelected ( prop3 ) )
}
2009-09-01 13:54:41 +00:00
{
//
// Test label editing
RT_START_TEST ( LABEL_EDITING )
wxPropertyGrid * pg = pgman - > GetGrid ( ) ;
// Just mostly test that these won't crash
pg - > MakeColumnEditable ( 0 , true ) ;
pg - > MakeColumnEditable ( 2 , true ) ;
pg - > MakeColumnEditable ( 0 , false ) ;
pg - > MakeColumnEditable ( 2 , false ) ;
pg - > SelectProperty ( wxT ( " Height " ) ) ;
pg - > BeginLabelEdit ( 0 ) ;
pg - > BeginLabelEdit ( 0 ) ;
pg - > EndLabelEdit ( 0 ) ;
pg - > EndLabelEdit ( 0 ) ;
// Recreate grid
CreateGrid ( - 1 , - 1 ) ;
pgman = m_pPropGridManager ;
}
2008-09-25 16:13:32 +00:00
{
RT_START_TEST ( Attributes )
wxPGProperty * prop = pgman - > GetProperty ( wxT ( " StringProperty " ) ) ;
prop - > SetAttribute ( wxT ( " Dummy Attribute " ) , ( long ) 15 ) ;
if ( prop - > GetAttribute ( wxT ( " Dummy Attribute " ) ) . GetLong ( ) ! = 15 )
RT_FAILURE ( ) ;
prop - > SetAttribute ( wxT ( " Dummy Attribute " ) , wxVariant ( ) ) ;
if ( ! prop - > GetAttribute ( wxT ( " Dummy Attribute " ) ) . IsNull ( ) )
RT_FAILURE ( ) ;
}
2014-05-17 17:22:30 +00:00
# if WXWIN_COMPATIBILITY_3_0
2010-12-27 11:25:53 +00:00
{
RT_START_TEST ( DoubleToString )
// Locale-specific decimal separator
2015-05-10 18:06:46 +00:00
wxString sep = wxString : : Format ( wxT ( " %g " ) , 1.1 ) [ 1 ] ;
2010-12-27 11:25:53 +00:00
wxString s ;
if ( wxPropertyGrid : : DoubleToString ( s , 123.123 , 2 , true ) ! =
2015-05-10 18:06:46 +00:00
wxString : : Format ( wxT ( " 123%s12 " ) , sep . c_str ( ) ) )
2010-12-27 11:25:53 +00:00
RT_FAILURE ( ) ;
if ( wxPropertyGrid : : DoubleToString ( s , - 123.123 , 4 , false ) ! =
2015-05-10 18:06:46 +00:00
wxString : : Format ( wxT ( " -123%s1230 " ) , sep . c_str ( ) ) )
2010-12-27 11:25:53 +00:00
RT_FAILURE ( ) ;
if ( wxPropertyGrid : : DoubleToString ( s , - 0.02 , 1 , false ) ! =
2015-05-10 18:06:46 +00:00
wxString : : Format ( wxT ( " 0%s0 " ) , sep ) )
2010-12-27 11:25:53 +00:00
RT_FAILURE ( ) ;
2015-05-10 18:06:46 +00:00
if ( wxPropertyGrid : : DoubleToString ( s , - 0.000123 , 3 , true ) ! = wxT ( " 0 " ) )
2010-12-27 11:25:53 +00:00
RT_FAILURE ( ) ;
}
2014-05-17 17:22:30 +00:00
# endif
2010-12-27 11:25:53 +00:00
2008-09-12 20:57:41 +00:00
{
wxPropertyGridPage * page1 ;
wxPropertyGridPage * page2 ;
wxPropertyGridPage * page3 ;
wxVariant pg1_values ;
wxVariant pg2_values ;
wxVariant pg3_values ;
{
RT_START_TEST ( GetPropertyValues )
page1 = pgman - > GetPage ( 0 ) ;
pg1_values = page1 - > GetPropertyValues ( wxT ( " Page1 " ) , NULL , wxPG_KEEP_STRUCTURE ) ;
page2 = pgman - > GetPage ( 1 ) ;
pg2_values = page2 - > GetPropertyValues ( wxT ( " Page2 " ) , NULL , wxPG_KEEP_STRUCTURE ) ;
page3 = pgman - > GetPage ( 2 ) ;
pg3_values = page3 - > GetPropertyValues ( wxT ( " Page3 " ) , NULL , wxPG_KEEP_STRUCTURE ) ;
}
{
RT_START_TEST ( SetPropertyValues )
page1 - > SetPropertyValues ( pg3_values ) ;
page2 - > SetPropertyValues ( pg1_values ) ;
page3 - > SetPropertyValues ( pg2_values ) ;
}
}
if ( ! ( pgman - > GetWindowStyleFlag ( ) & wxPG_HIDE_CATEGORIES ) )
{
RT_START_TEST ( Collapse_and_GetFirstCategory_and_GetNextCategory )
for ( i = 0 ; i < 3 ; i + + )
{
wxPropertyGridPage * page = pgman - > GetPage ( i ) ;
wxPropertyGridIterator it ;
for ( it = page - > GetIterator ( wxPG_ITERATE_CATEGORIES ) ;
! it . AtEnd ( ) ;
it + + )
{
wxPGProperty * p = * it ;
if ( ! page - > IsPropertyCategory ( p ) )
RT_FAILURE ( ) ;
page - > Collapse ( p ) ;
t . Printf ( wxT ( " Collapsing: %s \n " ) , page - > GetPropertyLabel ( p ) . c_str ( ) ) ;
ed - > AppendText ( t ) ;
}
}
}
{
RT_START_TEST ( Save_And_RestoreEditableState )
for ( i = 0 ; i < 3 ; i + + )
{
pgman - > SelectPage ( i ) ;
wxString stringState = pgman - > SaveEditableState ( ) ;
bool res = pgman - > RestoreEditableState ( stringState ) ;
if ( ! res )
RT_FAILURE ( ) ;
}
}
//if ( !(pgman->GetWindowStyleFlag()&wxPG_HIDE_CATEGORIES) )
{
RT_START_TEST ( Expand_and_GetFirstCategory_and_GetNextCategory )
for ( i = 0 ; i < 3 ; i + + )
{
wxPropertyGridPage * page = pgman - > GetPage ( i ) ;
wxPropertyGridIterator it ;
for ( it = page - > GetIterator ( wxPG_ITERATE_CATEGORIES ) ;
! it . AtEnd ( ) ;
it + + )
{
wxPGProperty * p = * it ;
if ( ! page - > IsPropertyCategory ( p ) )
RT_FAILURE ( ) ;
page - > Expand ( p ) ;
t . Printf ( wxT ( " Expand: %s \n " ) , page - > GetPropertyLabel ( p ) . c_str ( ) ) ;
ed - > AppendText ( t ) ;
}
}
}
2008-09-19 16:57:33 +00:00
{
RT_START_TEST ( Choice_Manipulation )
wxPGProperty * enumProp = pgman - > GetProperty ( wxT ( " EnumProperty " ) ) ;
pgman - > SelectPage ( 2 ) ;
pgman - > SelectProperty ( enumProp ) ;
wxASSERT ( pgman - > GetGrid ( ) - > GetSelection ( ) = = enumProp ) ;
const wxPGChoices & choices = enumProp - > GetChoices ( ) ;
int ind = enumProp - > InsertChoice ( wxT ( " New Choice " ) , choices . GetCount ( ) / 2 ) ;
enumProp - > DeleteChoice ( ind ) ;
// Recreate the original grid
CreateGrid ( - 1 , - 1 ) ;
pgman = m_pPropGridManager ;
}
2008-09-12 20:57:41 +00:00
//if ( !(pgman->GetWindowStyleFlag()&wxPG_HIDE_CATEGORIES) )
{
RT_START_TEST ( RandomCollapse )
// Select the most error prone page as visible.
pgman - > SelectPage ( 1 ) ;
for ( i = 0 ; i < 3 ; i + + )
{
wxArrayPtrVoid arr ;
wxPropertyGridPage * page = pgman - > GetPage ( i ) ;
wxPropertyGridIterator it ;
for ( it = page - > GetIterator ( wxPG_ITERATE_CATEGORIES ) ;
! it . AtEnd ( ) ;
it + + )
{
arr . Add ( ( void * ) * it ) ;
}
if ( arr . GetCount ( ) )
{
size_t n ;
pgman - > Collapse ( ( wxPGProperty * ) arr . Item ( 0 ) ) ;
for ( n = arr . GetCount ( ) - 1 ; n > 0 ; n - - )
{
pgman - > Collapse ( ( wxPGProperty * ) arr . Item ( n ) ) ;
}
}
}
}
{
RT_START_TEST ( EnsureVisible )
pgman - > EnsureVisible ( wxT ( " Cell Colour " ) ) ;
}
2008-12-11 17:11:35 +00:00
{
RT_START_TEST ( RemoveProperty )
wxPGProperty * p ;
wxPGProperty * origParent =
2015-05-10 18:06:46 +00:00
pgman - > GetProperty ( wxT ( " Window Styles " ) ) - > GetParent ( ) ;
2008-12-11 17:11:35 +00:00
2010-10-10 09:34:29 +00:00
// For testing purposes, let's set some custom cell colours
2015-05-10 18:06:46 +00:00
p = pgman - > GetProperty ( wxT ( " Window Styles " ) ) ;
2010-10-10 09:34:29 +00:00
p - > SetCell ( 2 , wxPGCell ( " style " ) ) ;
2015-05-10 18:06:46 +00:00
p = pgman - > RemoveProperty ( wxT ( " Window Styles " ) ) ;
2008-12-11 17:11:35 +00:00
pgman - > Refresh ( ) ;
pgman - > Update ( ) ;
pgman - > AppendIn ( origParent , p ) ;
2015-05-10 18:06:46 +00:00
wxASSERT ( p - > GetCell ( 2 ) . GetText ( ) = = wxT ( " style " ) ) ;
2008-12-11 17:11:35 +00:00
pgman - > Refresh ( ) ;
pgman - > Update ( ) ;
}
2009-01-07 18:53:09 +00:00
{
RT_START_TEST ( SortFunction )
wxPGProperty * p ;
// Make sure indexes are as supposed
p = pgman - > GetProperty ( wxT ( " User Name " ) ) ;
if ( p - > GetIndexInParent ( ) ! = 3 )
RT_FAILURE ( ) ;
p = pgman - > GetProperty ( wxT ( " User Id " ) ) ;
if ( p - > GetIndexInParent ( ) ! = 2 )
RT_FAILURE ( ) ;
p = pgman - > GetProperty ( wxT ( " User Home " ) ) ;
if ( p - > GetIndexInParent ( ) ! = 1 )
RT_FAILURE ( ) ;
p = pgman - > GetProperty ( wxT ( " Operating System " ) ) ;
if ( p - > GetIndexInParent ( ) ! = 0 )
RT_FAILURE ( ) ;
pgman - > GetGrid ( ) - > SetSortFunction ( MyPropertySortFunction ) ;
pgman - > GetGrid ( ) - > SortChildren ( wxT ( " Environment " ) ) ;
// Make sure indexes have been reversed
p = pgman - > GetProperty ( wxT ( " User Name " ) ) ;
if ( p - > GetIndexInParent ( ) ! = 0 )
RT_FAILURE ( ) ;
p = pgman - > GetProperty ( wxT ( " User Id " ) ) ;
if ( p - > GetIndexInParent ( ) ! = 1 )
RT_FAILURE ( ) ;
p = pgman - > GetProperty ( wxT ( " User Home " ) ) ;
if ( p - > GetIndexInParent ( ) ! = 2 )
RT_FAILURE ( ) ;
p = pgman - > GetProperty ( wxT ( " Operating System " ) ) ;
if ( p - > GetIndexInParent ( ) ! = 3 )
RT_FAILURE ( ) ;
}
2008-09-12 20:57:41 +00:00
{
RT_START_TEST ( SetPropertyBackgroundColour )
wxCommandEvent evt ;
2015-02-08 12:48:43 +00:00
evt . SetInt ( 1 ) ; // IsChecked() will return true.
2008-09-12 20:57:41 +00:00
evt . SetId ( ID_COLOURSCHEME4 ) ;
OnCatColours ( evt ) ;
OnColourScheme ( evt ) ;
}
{
2009-02-17 18:01:06 +00:00
RT_START_TEST ( Clear )
// Manager clear
2015-05-10 18:06:46 +00:00
pgman - > SelectProperty ( wxT ( " Label " ) ) ;
2008-09-12 20:57:41 +00:00
pgman - > Clear ( ) ;
if ( pgman - > GetPageCount ( ) )
RT_FAILURE ( ) ;
2009-02-17 18:01:06 +00:00
if ( pgman - > GetGrid ( ) - > GetRoot ( ) - > GetChildCount ( ) )
RT_FAILURE ( ) ;
// Recreate the original grid
CreateGrid ( - 1 , - 1 ) ;
pgman = m_pPropGridManager ;
// Grid clear
2015-05-10 18:06:46 +00:00
pgman - > SelectProperty ( wxT ( " Label " ) ) ;
2009-02-17 18:01:06 +00:00
pgman - > GetGrid ( ) - > Clear ( ) ;
if ( pgman - > GetGrid ( ) - > GetRoot ( ) - > GetChildCount ( ) )
RT_FAILURE ( ) ;
2008-09-12 20:57:41 +00:00
// Recreate the original grid
CreateGrid ( - 1 , - 1 ) ;
pgman = m_pPropGridManager ;
}
2014-11-15 17:48:54 +00:00
{
2008-09-12 20:57:41 +00:00
RT_START_TEST ( SetSplitterPosition )
InitPanel ( ) ;
const int trySplitterPos = 50 ;
2010-09-30 11:44:45 +00:00
2008-09-12 20:57:41 +00:00
int style = wxPG_AUTO_SORT ; // wxPG_SPLITTER_AUTO_CENTER;
pgman = m_pPropGridManager =
new wxPropertyGridManager ( m_panel , wxID_ANY ,
wxDefaultPosition ,
wxDefaultSize ,
style ) ;
PopulateGrid ( ) ;
pgman - > SetSplitterPosition ( trySplitterPos ) ;
if ( pgman - > GetGrid ( ) - > GetSplitterPosition ( ) ! = trySplitterPos )
RT_FAILURE_MSG ( wxString : : Format ( wxT ( " Splitter position was %i (should have been %i) " ) , ( int ) pgman - > GetGrid ( ) - > GetSplitterPosition ( ) , trySplitterPos ) . c_str ( ) ) ;
2015-05-30 16:33:25 +00:00
m_topSizer - > Add ( m_pPropGridManager , wxSizerFlags ( 1 ) . Expand ( ) ) ;
2008-09-12 20:57:41 +00:00
FinalizePanel ( ) ;
wxSize sz = GetSize ( ) ;
wxSize origSz = sz ;
sz . x + = 5 ;
sz . y + = 5 ;
if ( pgman - > GetGrid ( ) - > GetSplitterPosition ( ) ! = trySplitterPos )
RT_FAILURE_MSG ( wxString : : Format ( wxT ( " Splitter position was %i (should have been %i) " ) , ( int ) pgman - > GetGrid ( ) - > GetSplitterPosition ( ) , trySplitterPos ) . c_str ( ) ) ;
SetSize ( origSz ) ;
// Recreate the original grid
CreateGrid ( - 1 , - 1 ) ;
pgman = m_pPropGridManager ;
2014-11-15 17:48:54 +00:00
}
2008-09-12 20:57:41 +00:00
{
RT_START_TEST ( HideProperty )
wxPropertyGridPage * page = pgman - > GetPage ( 0 ) ;
srand ( 0x1234 ) ;
wxArrayPGProperty arr1 ;
2009-08-17 18:36:00 +00:00
2008-09-12 20:57:41 +00:00
arr1 = GetPropertiesInRandomOrder ( page ) ;
if ( ! _failed_ )
{
for ( i = 0 ; i < arr1 . size ( ) ; i + + )
{
wxPGProperty * p = arr1 [ i ] ;
page - > HideProperty ( p , true ) ;
2014-04-28 11:33:07 +00:00
wxString s = wxString : : Format ( wxT ( " HideProperty(%i, %s) " ) , ( int ) i , p - > GetLabel ( ) . c_str ( ) ) ;
2008-09-12 20:57:41 +00:00
RT_VALIDATE_VIRTUAL_HEIGHT ( page , s )
if ( _failed_ )
break ;
}
}
if ( ! _failed_ )
{
wxArrayPGProperty arr2 = GetPropertiesInRandomOrder ( page ) ;
for ( i = 0 ; i < arr2 . size ( ) ; i + + )
{
wxPGProperty * p = arr2 [ i ] ;
page - > HideProperty ( p , false ) ;
2014-04-28 11:33:07 +00:00
wxString s = wxString : : Format ( wxT ( " ShowProperty(%i, %s) " ) , ( int ) i , p - > GetLabel ( ) . c_str ( ) ) ;
2008-09-12 20:57:41 +00:00
RT_VALIDATE_VIRTUAL_HEIGHT ( page , s )
if ( _failed_ )
break ;
}
}
//
// Let's do some more, for better consistency
arr1 = GetPropertiesInRandomOrder ( page ) ;
if ( ! _failed_ )
{
for ( i = 0 ; i < arr1 . size ( ) ; i + + )
{
wxPGProperty * p = arr1 [ i ] ;
page - > HideProperty ( p , true ) ;
2014-04-28 11:33:07 +00:00
wxString s = wxString : : Format ( wxT ( " HideProperty(%i, %s) " ) , ( int ) i , p - > GetLabel ( ) . c_str ( ) ) ;
2008-09-12 20:57:41 +00:00
RT_VALIDATE_VIRTUAL_HEIGHT ( page , s )
if ( _failed_ )
break ;
}
}
if ( ! _failed_ )
{
wxArrayPGProperty arr2 = GetPropertiesInRandomOrder ( page ) ;
for ( i = 0 ; i < arr2 . size ( ) ; i + + )
{
wxPGProperty * p = arr2 [ i ] ;
page - > HideProperty ( p , false ) ;
2014-04-28 11:33:07 +00:00
wxString s = wxString : : Format ( wxT ( " ShowProperty(%i, %s) " ) , ( int ) i , p - > GetLabel ( ) . c_str ( ) ) ;
2008-09-12 20:57:41 +00:00
RT_VALIDATE_VIRTUAL_HEIGHT ( page , s )
if ( _failed_ )
break ;
}
}
//
// Ok, this time only hide half of them
arr1 = GetPropertiesInRandomOrder ( page ) ;
arr1 . resize ( arr1 . size ( ) / 2 ) ;
if ( ! _failed_ )
{
for ( i = 0 ; i < arr1 . size ( ) ; i + + )
{
wxPGProperty * p = arr1 [ i ] ;
page - > HideProperty ( p , true ) ;
2014-04-28 11:33:07 +00:00
wxString s = wxString : : Format ( wxT ( " HideProperty(%i, %s) " ) , ( int ) i , p - > GetLabel ( ) . c_str ( ) ) ;
2008-09-12 20:57:41 +00:00
RT_VALIDATE_VIRTUAL_HEIGHT ( page , s )
if ( _failed_ )
break ;
}
}
if ( ! _failed_ )
{
wxArrayPGProperty arr2 = GetPropertiesInRandomOrder ( page ) ;
for ( i = 0 ; i < arr2 . size ( ) ; i + + )
{
wxPGProperty * p = arr2 [ i ] ;
page - > HideProperty ( p , false ) ;
2014-04-28 11:33:07 +00:00
wxString s = wxString : : Format ( wxT ( " ShowProperty(%i, %s) " ) , ( int ) i , p - > GetLabel ( ) . c_str ( ) ) ;
2008-09-12 20:57:41 +00:00
RT_VALIDATE_VIRTUAL_HEIGHT ( page , s )
if ( _failed_ )
break ;
}
}
// Recreate the original grid
CreateGrid ( - 1 , - 1 ) ;
pgman = m_pPropGridManager ;
}
if ( fullTest )
{
RT_START_TEST ( MultipleColumns )
// Test with multiple columns
2015-02-18 17:17:23 +00:00
CreateGrid ( - 1 , - 1 ) ;
FinalizeFramePosition ( ) ;
pgman = m_pPropGridManager ;
2008-09-12 20:57:41 +00:00
for ( i = 3 ; i < 12 ; i + = 2 )
{
2014-04-28 11:33:07 +00:00
RT_MSG ( wxString : : Format ( wxT ( " %i columns " ) , ( int ) i ) ) ;
2008-09-12 20:57:41 +00:00
pgman - > SetColumnCount ( i ) ;
Refresh ( ) ;
Update ( ) ;
wxMilliSleep ( 500 ) ;
}
}
if ( fullTest )
{
RT_START_TEST ( WindowStyles )
// Recreate grid with all possible (single) flags
wxASSERT ( wxPG_AUTO_SORT = = 0x000000010 ) ;
for ( i = 4 ; i < 16 ; i + + )
{
int flag = 1 < < i ;
RT_MSG ( wxString : : Format ( wxT ( " Style: 0x%X " ) , flag ) ) ;
CreateGrid ( flag , - 1 ) ;
pgman = m_pPropGridManager ;
Update ( ) ;
wxMilliSleep ( 500 ) ;
}
wxASSERT ( wxPG_EX_INIT_NOCAT = = 0x00001000 ) ;
2009-08-29 08:09:45 +00:00
for ( i = 12 ; i < 27 ; i + + )
2008-09-12 20:57:41 +00:00
{
int flag = 1 < < i ;
RT_MSG ( wxString : : Format ( wxT ( " ExStyle: 0x%X " ) , flag ) ) ;
CreateGrid ( - 1 , flag ) ;
pgman = m_pPropGridManager ;
Update ( ) ;
wxMilliSleep ( 500 ) ;
}
// Recreate the original grid
CreateGrid ( - 1 , - 1 ) ;
pgman = m_pPropGridManager ;
}
2015-02-18 17:19:11 +00:00
// Restore original grid size
FinalizeFramePosition ( ) ;
2008-09-12 20:57:41 +00:00
RT_START_TEST ( none )
bool retVal ;
if ( failures | | errorMessages . size ( ) )
{
retVal = false ;
wxString s ;
# ifdef __WXDEBUG__
if ( failures )
# endif
s = wxString : : Format ( wxT ( " %i tests failed!!! " ) , failures ) ;
# ifdef __WXDEBUG__
else
2011-04-03 20:31:32 +00:00
s = wxString : : Format ( wxT ( " All tests were successful, but there were %i warnings! " ) , wxPGGlobalVars - > m_warnings ) ;
2008-09-12 20:57:41 +00:00
# endif
RT_MSG ( s )
for ( i = 0 ; i < errorMessages . size ( ) ; i + + )
RT_MSG ( errorMessages [ i ] )
wxMessageBox ( s , wxT ( " Some Tests Failed " ) ) ;
}
else
{
2015-06-04 22:54:02 +00:00
RT_MSG ( wxT ( " All tests successful " ) )
2008-09-12 20:57:41 +00:00
retVal = true ;
if ( ! interactive )
dlg - > Close ( ) ;
}
pgman - > SelectPage ( 0 ) ;
// Test may screw up the toolbar, so we need to refresh it.
wxToolBar * toolBar = pgman - > GetToolBar ( ) ;
if ( toolBar )
toolBar - > Refresh ( ) ;
return retVal ;
}
// -----------------------------------------------------------------------