wireplumber/tests/wp/state.c

218 lines
6.9 KiB
C
Raw Permalink Normal View History

/* WirePlumber
*
* Copyright © 2020 Collabora Ltd.
* @author Julian Bouzas <julian.bouzas@collabora.com>
*
* SPDX-License-Identifier: MIT
*/
#include "../common/test-log.h"
static void
test_state_basic (void)
{
g_autoptr (GError) error = NULL;
g_autoptr (WpState) state = wp_state_new ("basic");
g_assert_nonnull (state);
g_assert_cmpstr (wp_state_get_name (state), ==, "basic");
g_assert_true (g_str_has_suffix (wp_state_get_location (state), "basic"));
/* Save */
{
g_autoptr (WpProperties) props = wp_properties_new_empty ();
wp_properties_set (props, "key1", "value1");
wp_properties_set (props, "key2", "value2");
wp_properties_set (props, "key3", "value3");
g_assert_true (wp_state_save (state, props, &error));
g_assert_no_error (error);
}
/* Load */
{
g_autoptr (WpProperties) props = wp_state_load (state);
g_assert_nonnull (props);
g_assert_cmpstr (wp_properties_get (props, "key1"), ==, "value1");
g_assert_cmpstr (wp_properties_get (props, "key2"), ==, "value2");
g_assert_cmpstr (wp_properties_get (props, "key2"), ==, "value2");
g_assert_null (wp_properties_get (props, "invalid"));
}
/* Re-Save */
{
g_autoptr (WpProperties) props = wp_properties_new_empty ();
wp_properties_set (props, "new-key", "new-value");
g_assert_true (wp_state_save (state, props, &error));
g_assert_no_error (error);
}
/* Re-Load */
{
g_autoptr (WpProperties) props = wp_state_load (state);
g_assert_nonnull (props);
g_assert_cmpstr (wp_properties_get (props, "new-key"), ==, "new-value");
g_assert_null (wp_properties_get (props, "key1"));
g_assert_null (wp_properties_get (props, "key2"));
g_assert_null (wp_properties_get (props, "key3"));
}
wp_state_clear (state);
/* Load empty */
{
g_autoptr (WpProperties) props = wp_state_load (state);
g_assert_nonnull (props);
g_assert_null (wp_properties_get (props, "new-key"));
g_assert_null (wp_properties_get (props, "key1"));
g_assert_null (wp_properties_get (props, "key2"));
g_assert_null (wp_properties_get (props, "key3"));
}
wp_state_clear (state);
}
static void
test_state_empty (void)
{
g_autoptr (GError) error = NULL;
g_autoptr (WpState) state = wp_state_new ("empty");
g_assert_nonnull (state);
/* Save */
{
g_autoptr (WpProperties) props = wp_properties_new_empty ();
wp_properties_set (props, "key", "value");
g_assert_true (wp_state_save (state, props, &error));
g_assert_no_error (error);
}
/* Load */
{
g_autoptr (WpProperties) props = wp_state_load (state);
g_assert_nonnull (props);
g_assert_cmpstr (wp_properties_get (props, "key"), ==, "value");
}
/* Save empty */
{
g_autoptr (WpProperties) props = wp_properties_new_empty ();
g_assert_true (wp_state_save (state, props, &error));
g_assert_no_error (error);
}
/* Load empty */
{
g_autoptr (WpProperties) props = wp_state_load (state);
g_assert_nonnull (props);
g_assert_null (wp_properties_get (props, "key"));
}
wp_state_clear (state);
}
static void
test_state_spaces (void)
{
g_autoptr (GError) error = NULL;
g_autoptr (WpState) state = wp_state_new ("spaces");
g_assert_nonnull (state);
/* Save */
{
g_autoptr (WpProperties) props = wp_properties_new_empty ();
wp_properties_set (props, "key", "value with spaces");
g_assert_true (wp_state_save (state, props, &error));
g_assert_no_error (error);
}
/* Load */
{
g_autoptr (WpProperties) props = wp_state_load (state);
g_assert_nonnull (props);
g_assert_cmpstr (wp_properties_get (props, "key"), ==, "value with spaces");
}
wp_state_clear (state);
}
static void
test_state_escaped (void)
{
g_autoptr (GError) error = NULL;
g_autoptr (WpState) state = wp_state_new ("escaped");
g_assert_nonnull (state);
/* Save */
{
g_autoptr (WpProperties) props = wp_properties_new_empty ();
wp_properties_set (props, "[]", "v0");
wp_properties_set (props, "[ ]", "v1");
wp_properties_set (props, "[=]", "v2");
wp_properties_set (props, " [=]", "v3");
wp_properties_set (props, "[=] ", "v4");
wp_properties_set (props, " [=] ", "v5");
wp_properties_set (props, " [ =] ", "v6");
wp_properties_set (props, " [= ] ", "v7");
wp_properties_set (props, " [ = ] ", "v8");
wp_properties_set (props, " [", "v9");
wp_properties_set (props, "[ ", "v10");
wp_properties_set (props, " [ ", "v11");
wp_properties_set (props, " ]", "v12");
wp_properties_set (props, "] ", "v13");
wp_properties_set (props, " ] ", "v14");
wp_properties_set (props, " ", "v15");
wp_properties_set (props, "=", "v16");
wp_properties_set (props, "\\", "v17");
wp_properties_set (props, "\\[", "v18");
wp_properties_set (props, "\\a", "v19");
wp_properties_set (props, "\\\\", "v20");
wp_properties_set (props, "[][", "][]");
g_assert_true (wp_state_save (state, props, &error));
g_assert_no_error (error);
}
/* Load */
{
g_autoptr (WpProperties) props = wp_state_load (state);
g_assert_nonnull (props);
g_assert_cmpstr (wp_properties_get (props, "[]"), ==, "v0");
g_assert_cmpstr (wp_properties_get (props, "[ ]"), ==, "v1");
g_assert_cmpstr (wp_properties_get (props, "[=]"), ==, "v2");
g_assert_cmpstr (wp_properties_get (props, " [=]"), ==, "v3");
g_assert_cmpstr (wp_properties_get (props, "[=] "), ==, "v4");
g_assert_cmpstr (wp_properties_get (props, " [=] "), ==, "v5");
g_assert_cmpstr (wp_properties_get (props, " [ =] "), ==, "v6");
g_assert_cmpstr (wp_properties_get (props, " [= ] "), ==, "v7");
g_assert_cmpstr (wp_properties_get (props, " [ = ] "), ==, "v8");
g_assert_cmpstr (wp_properties_get (props, " ["), ==, "v9");
g_assert_cmpstr (wp_properties_get (props, "[ "), ==, "v10");
g_assert_cmpstr (wp_properties_get (props, " [ "), ==, "v11");
g_assert_cmpstr (wp_properties_get (props, " ]"), ==, "v12");
g_assert_cmpstr (wp_properties_get (props, "] "), ==, "v13");
g_assert_cmpstr (wp_properties_get (props, " ] "), ==, "v14");
g_assert_cmpstr (wp_properties_get (props, " "), ==, "v15");
g_assert_cmpstr (wp_properties_get (props, "="), ==, "v16");
g_assert_cmpstr (wp_properties_get (props, "\\"), ==, "v17");
g_assert_cmpstr (wp_properties_get (props, "\\["), ==, "v18");
g_assert_cmpstr (wp_properties_get (props, "\\a"), ==, "v19");
g_assert_cmpstr (wp_properties_get (props, "\\\\"), ==, "v20");
g_assert_cmpstr (wp_properties_get (props, "[]["), ==, "][]");
}
wp_state_clear (state);
}
int
main (int argc, char *argv[])
{
g_test_init (&argc, &argv, NULL);
g_log_set_writer_func (wp_log_writer_default, NULL, NULL);
g_test_add_func ("/wp/state/basic", test_state_basic);
g_test_add_func ("/wp/state/empty", test_state_empty);
g_test_add_func ("/wp/state/spaces", test_state_spaces);
g_test_add_func ("/wp/state/escaped", test_state_escaped);
return g_test_run ();
}