@ -444,6 +444,92 @@ static void qdict_array_split_test(void)
QDECREF ( test_dict ) ;
}
static void qdict_join_test ( void )
{
QDict * dict1 , * dict2 ;
bool overwrite = false ;
int i ;
dict1 = qdict_new ( ) ;
dict2 = qdict_new ( ) ;
/* Test everything once without overwrite and once with */
do
{
/* Test empty dicts */
qdict_join ( dict1 , dict2 , overwrite ) ;
g_assert ( qdict_size ( dict1 ) = = 0 ) ;
g_assert ( qdict_size ( dict2 ) = = 0 ) ;
/* First iteration: Test movement */
/* Second iteration: Test empty source and non-empty destination */
qdict_put ( dict2 , " foo " , qint_from_int ( 42 ) ) ;
for ( i = 0 ; i < 2 ; i + + ) {
qdict_join ( dict1 , dict2 , overwrite ) ;
g_assert ( qdict_size ( dict1 ) = = 1 ) ;
g_assert ( qdict_size ( dict2 ) = = 0 ) ;
g_assert ( qdict_get_int ( dict1 , " foo " ) = = 42 ) ;
}
/* Test non-empty source and destination without conflict */
qdict_put ( dict2 , " bar " , qint_from_int ( 23 ) ) ;
qdict_join ( dict1 , dict2 , overwrite ) ;
g_assert ( qdict_size ( dict1 ) = = 2 ) ;
g_assert ( qdict_size ( dict2 ) = = 0 ) ;
g_assert ( qdict_get_int ( dict1 , " foo " ) = = 42 ) ;
g_assert ( qdict_get_int ( dict1 , " bar " ) = = 23 ) ;
/* Test conflict */
qdict_put ( dict2 , " foo " , qint_from_int ( 84 ) ) ;
qdict_join ( dict1 , dict2 , overwrite ) ;
g_assert ( qdict_size ( dict1 ) = = 2 ) ;
g_assert ( qdict_size ( dict2 ) = = ! overwrite ) ;
g_assert ( qdict_get_int ( dict1 , " foo " ) = = overwrite ? 84 : 42 ) ;
g_assert ( qdict_get_int ( dict1 , " bar " ) = = 23 ) ;
if ( ! overwrite ) {
g_assert ( qdict_get_int ( dict2 , " foo " ) = = 84 ) ;
}
/* Check the references */
g_assert ( qdict_get ( dict1 , " foo " ) - > refcnt = = 1 ) ;
g_assert ( qdict_get ( dict1 , " bar " ) - > refcnt = = 1 ) ;
if ( ! overwrite ) {
g_assert ( qdict_get ( dict2 , " foo " ) - > refcnt = = 1 ) ;
}
/* Clean up */
qdict_del ( dict1 , " foo " ) ;
qdict_del ( dict1 , " bar " ) ;
if ( ! overwrite ) {
qdict_del ( dict2 , " foo " ) ;
}
}
while ( overwrite ^ = true ) ;
QDECREF ( dict1 ) ;
QDECREF ( dict2 ) ;
}
/*
* Errors test - cases
*/
@ -584,6 +670,7 @@ int main(int argc, char **argv)
g_test_add_func ( " /public/iterapi " , qdict_iterapi_test ) ;
g_test_add_func ( " /public/flatten " , qdict_flatten_test ) ;
g_test_add_func ( " /public/array_split " , qdict_array_split_test ) ;
g_test_add_func ( " /public/join " , qdict_join_test ) ;
g_test_add_func ( " /errors/put_exists " , qdict_put_exists_test ) ;
g_test_add_func ( " /errors/get_not_exists " , qdict_get_not_exists_test ) ;