diff --git a/modulemd/tests/ModulemdTests/modulestream.py b/modulemd/tests/ModulemdTests/modulestream.py index bb5b893e9..993f9d46e 100644 --- a/modulemd/tests/ModulemdTests/modulestream.py +++ b/modulemd/tests/ModulemdTests/modulestream.py @@ -350,6 +350,15 @@ def test_documentation(self): assert stream.props.documentation is None assert stream.get_documentation() is None + # Test unicode characters + unicode_test_str = ( + "À϶¥🌭∮⇒⇔¬β∀₂⌀ıəˈ⍳⍴V)═€ίζησθლბშიнстемองจึองታሽ።ደለᚢᛞᚦᚹ⠳⠞⠊⠎▉▒▒▓😃" + ) + + stream.props.documentation = unicode_test_str + assert stream.props.documentation == unicode_test_str + assert stream.get_documentation() == unicode_test_str + def test_summary(self): for version in modulestream_versions: stream = Modulemd.ModuleStream.new(version) diff --git a/modulemd/tests/test-modulemd-modulestream.c b/modulemd/tests/test-modulemd-modulestream.c index 93b140802..b6f995be2 100644 --- a/modulemd/tests/test-modulemd-modulestream.c +++ b/modulemd/tests/test-modulemd-modulestream.c @@ -14,6 +14,13 @@ #include "private/modulemd-yaml.h" #include "private/test-utils.h" +#define MMD_TEST_DOC_TEXT "http://example.com" +#define MMD_TEST_DOC_TEXT2 "http://redhat.com" +#define MMD_TEST_DOC_PROP "documentation" +#define MMD_TEST_DOC_UNICODE_TEXT \ + "À϶¥🌭∮⇒⇔¬β∀₂⌀ıəˈ⍳⍴V)" \ + "═€ίζησθლბშიнстемองจึองታሽ።ደለᚢᛞᚦᚹ⠳⠞⠊⠎▉▒▒▓😃" + typedef struct _ModuleStreamFixture { } ModuleStreamFixture; @@ -199,6 +206,131 @@ module_stream_v2_test_profiles (ModuleStreamFixture *fixture, } +static void +module_stream_v1_test_documentation (ModuleStreamFixture *fixture, + gconstpointer user_data) +{ + g_autoptr (ModulemdModuleStreamV1) stream = NULL; + const gchar *documentation = NULL; + g_autofree gchar *documentation_prop = NULL; + + stream = modulemd_module_stream_v1_new (NULL, NULL); + + // Check the defaults + documentation = modulemd_module_stream_v1_get_documentation (stream); + g_object_get (stream, MMD_TEST_DOC_PROP, &documentation_prop, NULL); + g_assert_null (documentation); + g_assert_null (documentation_prop); + + g_clear_pointer (&documentation_prop, g_free); + + // Test property setting + g_object_set (stream, MMD_TEST_DOC_PROP, MMD_TEST_DOC_TEXT, NULL); + + documentation = modulemd_module_stream_v1_get_documentation (stream); + g_object_get (stream, MMD_TEST_DOC_PROP, &documentation_prop, NULL); + g_assert_cmpstr (documentation_prop, ==, MMD_TEST_DOC_TEXT); + g_assert_cmpstr (documentation, ==, MMD_TEST_DOC_TEXT); + + g_clear_pointer (&documentation_prop, g_free); + + // Test set_documentation() + modulemd_module_stream_v1_set_documentation (stream, MMD_TEST_DOC_TEXT2); + + documentation = modulemd_module_stream_v1_get_documentation (stream); + g_object_get (stream, MMD_TEST_DOC_PROP, &documentation_prop, NULL); + g_assert_cmpstr (documentation_prop, ==, MMD_TEST_DOC_TEXT2); + g_assert_cmpstr (documentation, ==, MMD_TEST_DOC_TEXT2); + + g_clear_pointer (&documentation_prop, g_free); + + // Test setting to NULL + g_object_set (stream, MMD_TEST_DOC_PROP, NULL, NULL); + + documentation = modulemd_module_stream_v1_get_documentation (stream); + g_object_get (stream, MMD_TEST_DOC_PROP, &documentation_prop, NULL); + g_assert_null (documentation); + g_assert_null (documentation_prop); + + g_clear_pointer (&documentation_prop, g_free); + + // Test unicode characters + modulemd_module_stream_v1_set_documentation (stream, + MMD_TEST_DOC_UNICODE_TEXT); + + documentation = modulemd_module_stream_v1_get_documentation (stream); + g_object_get (stream, MMD_TEST_DOC_PROP, &documentation_prop, NULL); + g_assert_cmpstr (documentation_prop, ==, MMD_TEST_DOC_UNICODE_TEXT); + g_assert_cmpstr (documentation, ==, MMD_TEST_DOC_UNICODE_TEXT); + + g_clear_pointer (&documentation_prop, g_free); + + g_clear_object (&stream); +} + + +static void +module_stream_v2_test_documentation (ModuleStreamFixture *fixture, + gconstpointer user_data) +{ + g_autoptr (ModulemdModuleStreamV2) stream = NULL; + const gchar *documentation = NULL; + g_autofree gchar *documentation_prop = NULL; + + stream = modulemd_module_stream_v2_new (NULL, NULL); + + // Check the defaults + documentation = modulemd_module_stream_v2_get_documentation (stream); + g_object_get (stream, MMD_TEST_DOC_PROP, &documentation_prop, NULL); + g_assert_null (documentation); + g_assert_null (documentation_prop); + + g_clear_pointer (&documentation_prop, g_free); + + // Test property setting + g_object_set (stream, MMD_TEST_DOC_PROP, MMD_TEST_DOC_TEXT, NULL); + + documentation = modulemd_module_stream_v2_get_documentation (stream); + g_object_get (stream, MMD_TEST_DOC_PROP, &documentation_prop, NULL); + g_assert_cmpstr (documentation_prop, ==, MMD_TEST_DOC_TEXT); + g_assert_cmpstr (documentation, ==, MMD_TEST_DOC_TEXT); + + g_clear_pointer (&documentation_prop, g_free); + + // Test set_documentation() + modulemd_module_stream_v2_set_documentation (stream, MMD_TEST_DOC_TEXT2); + + documentation = modulemd_module_stream_v2_get_documentation (stream); + g_object_get (stream, MMD_TEST_DOC_PROP, &documentation_prop, NULL); + g_assert_cmpstr (documentation_prop, ==, MMD_TEST_DOC_TEXT2); + g_assert_cmpstr (documentation, ==, MMD_TEST_DOC_TEXT2); + + g_clear_pointer (&documentation_prop, g_free); + + // Test setting to NULL + g_object_set (stream, MMD_TEST_DOC_PROP, NULL, NULL); + + documentation = modulemd_module_stream_v2_get_documentation (stream); + g_object_get (stream, MMD_TEST_DOC_PROP, &documentation_prop, NULL); + g_assert_null (documentation); + g_assert_null (documentation_prop); + + g_clear_pointer (&documentation_prop, g_free); + + // Test unicode characters + modulemd_module_stream_v2_set_documentation (stream, + MMD_TEST_DOC_UNICODE_TEXT); + + documentation = modulemd_module_stream_v2_get_documentation (stream); + g_object_get (stream, MMD_TEST_DOC_PROP, &documentation_prop, NULL); + g_assert_cmpstr (documentation_prop, ==, MMD_TEST_DOC_UNICODE_TEXT); + g_assert_cmpstr (documentation, ==, MMD_TEST_DOC_UNICODE_TEXT); + + g_clear_pointer (&documentation_prop, g_free); + + g_clear_object (&stream); +} + static void module_stream_test_copy (ModuleStreamFixture *fixture, gconstpointer user_data) { @@ -1642,6 +1774,20 @@ main (int argc, char *argv[]) module_stream_test_arch, NULL); + g_test_add ("/modulemd/v2/modulestream/v1/documentation", + ModuleStreamFixture, + NULL, + NULL, + module_stream_v1_test_documentation, + NULL); + + g_test_add ("/modulemd/v2/modulestream/v2/documentation", + ModuleStreamFixture, + NULL, + NULL, + module_stream_v2_test_documentation, + NULL); + g_test_add ("/modulemd/v2/modulestream/v1/profiles", ModuleStreamFixture, NULL,