mirror of
https://gitlab.freedesktop.org/pipewire/pipewire.git
synced 2026-06-07 03:01:36 -04:00
pipewire: properties: introduce pw_properties_move
Add pw_properties_move(dst, dst_key, src, src_key, fallback_value) which can move a key-value pair from one property list into another, optionally using the fallback value as value if `src_key` cannot be found in `src`. Add tests as well. This commit also adds `pw_properties_rename()`, which can be used to change the key in a dictionary, but that is not made part of the public API yet.
This commit is contained in:
parent
5459c759ee
commit
be18d052ad
3 changed files with 189 additions and 0 deletions
|
|
@ -605,6 +605,84 @@ PWTEST(properties_update)
|
|||
return PWTEST_PASS;
|
||||
}
|
||||
|
||||
PWTEST(properties_move)
|
||||
{
|
||||
struct pw_properties *a = pw_properties_new(NULL, NULL),
|
||||
*b = pw_properties_new(NULL, NULL);
|
||||
|
||||
pwtest_ptr_notnull(a);
|
||||
pwtest_ptr_notnull(b);
|
||||
|
||||
pwtest_int_eq(pw_properties_set(a, "some key", "foo"), 1);
|
||||
pwtest_int_eq(pw_properties_set(a, "some other key", "bar"), 1);
|
||||
|
||||
/*
|
||||
* a = {"some key" : "foo", "some other key" : "bar"}
|
||||
* b = {}
|
||||
*/
|
||||
|
||||
pwtest_int_eq(pw_properties_move(b, "different key", a, "some key", NULL), 1);
|
||||
pwtest_str_eq(pw_properties_get(b, "different key"), "foo");
|
||||
pwtest_str_eq(pw_properties_get(a, "some key"), NULL);
|
||||
|
||||
/*
|
||||
* a = {"some other key" : "bar"}
|
||||
* b = {"different key" : "foo"}
|
||||
*/
|
||||
|
||||
pwtest_ptr_null(pw_properties_get(a, "server_address"));
|
||||
pwtest_int_eq(pw_properties_move(b, "server.address", a, "server_address", NULL), -ENOENT);
|
||||
pwtest_str_eq(pw_properties_get(b, "server.address"), NULL);
|
||||
|
||||
/*
|
||||
* a = {"some other key" : "bar"}
|
||||
* b = {"different key" : "foo"}
|
||||
*/
|
||||
|
||||
pwtest_int_eq(pw_properties_move(b, "server.port", a, "server_port", "4444"), 1);
|
||||
pwtest_str_eq(pw_properties_get(b, "server.port"), "4444");
|
||||
pwtest_str_eq(pw_properties_get(a, "server_port"), NULL);
|
||||
|
||||
/*
|
||||
* a = {"some other key" : "bar"}
|
||||
* b = {"different key" : "foo", "server.port" : "4444"}
|
||||
*/
|
||||
|
||||
pwtest_int_eq(pw_properties_move(b, "server.port", b, "server.port", NULL), 0);
|
||||
pwtest_str_eq(pw_properties_get(b, "server.port"), "4444");
|
||||
|
||||
/*
|
||||
* a = {"some other key" : "bar"}
|
||||
* b = {"different key" : "foo", "server.port" : "4444"}
|
||||
*/
|
||||
|
||||
pwtest_int_eq(pw_properties_move(b, "server_port", b, "server.port", NULL), 1);
|
||||
pwtest_str_eq(pw_properties_get(b, "server_port"), "4444");
|
||||
pwtest_str_eq(pw_properties_get(b, "server.port"), NULL);
|
||||
|
||||
/*
|
||||
* a = {"some other key" : "bar"}
|
||||
* b = {"different key" : "foo", "server_port" : "4444"}
|
||||
*/
|
||||
|
||||
pwtest_int_eq(pw_properties_move(b, "server_port", a, "server_port", "9999"), 1);
|
||||
pwtest_str_eq(pw_properties_get(b, "server_port"), "9999");
|
||||
|
||||
/*
|
||||
* a = {"some other key" : "bar"}
|
||||
* b = {"different key" : "foo", "server_port" : "9999"}
|
||||
*/
|
||||
|
||||
pwtest_int_eq(pw_properties_move(b, "server_port", b, "server.port", "8888"), 1);
|
||||
pwtest_str_eq(pw_properties_get(b, "server_port"), "8888");
|
||||
pwtest_str_eq(pw_properties_get(b, "server.port"), NULL);
|
||||
|
||||
pw_properties_free(a);
|
||||
pw_properties_free(b);
|
||||
|
||||
return PWTEST_PASS;
|
||||
}
|
||||
|
||||
PWTEST_SUITE(properties)
|
||||
{
|
||||
pwtest_add(properties_abi, PWTEST_NOARG);
|
||||
|
|
@ -624,6 +702,7 @@ PWTEST_SUITE(properties)
|
|||
pwtest_add(properties_new_dict, PWTEST_NOARG);
|
||||
pwtest_add(properties_new_json, PWTEST_NOARG);
|
||||
pwtest_add(properties_update, PWTEST_NOARG);
|
||||
pwtest_add(properties_move, PWTEST_NOARG);
|
||||
|
||||
return PWTEST_PASS;
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue