[grilo-plugins/wip/jfelder/lua-grl-related-keys: 2/2] tests: Add a test for lua-factory GrlRelatedKeys support
- From: Jean Felder <jfelder src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [grilo-plugins/wip/jfelder/lua-grl-related-keys: 2/2] tests: Add a test for lua-factory GrlRelatedKeys support
- Date: Tue, 12 May 2020 02:49:28 +0000 (UTC)
commit ac12caad66c24154c6e44a86f975836325c12334
Author: Jean Felder <jfelder src gnome org>
Date: Fri May 1 22:26:55 2020 +0200
tests: Add a test for lua-factory GrlRelatedKeys support
json test data are loaded from the file
grl-media-test-related-keys.json. It contains a key named
"related-keys" which is an array of related keys.
On the lua side, these "related-keys" are converted into indexed
arrays in order to create a GrlMedia with related keys.
On the other side, when the data are read from `json-glib.h`, the
related keys are retrieved by looping through "related-keys" array.
tests/lua-factory/data/config.ini | 2 +
.../data/grl-media-test-related-keys.json | 18 ++++++
tests/lua-factory/data/test-source-grl-media.lua | 9 +++
tests/lua-factory/test_lua_factory_grl_media.c | 73 +++++++++++++++++++---
.../test_lua_factory_tests.gresource.xml | 1 +
5 files changed, 96 insertions(+), 7 deletions(-)
---
diff --git a/tests/lua-factory/data/config.ini b/tests/lua-factory/data/config.ini
index 1f60ea50..2f079a9f 100644
--- a/tests/lua-factory/data/config.ini
+++ b/tests/lua-factory/data/config.ini
@@ -4,6 +4,8 @@ version=1
# test_lua_factory_grl_media
[http://grl.media.test/lua-factory/all-metadata.json]
data = grl-media-test-all-metadata.json
+[http://grl.media.test/lua-factory/related-keys.json]
+data = grl-media-test-related-keys.json
# test_lua_factory_xml_parser
[http://xml.parser.test/lua-factory/simple.xml]
diff --git a/tests/lua-factory/data/grl-media-test-related-keys.json
b/tests/lua-factory/data/grl-media-test-related-keys.json
new file mode 100644
index 00000000..bb3fc188
--- /dev/null
+++ b/tests/lua-factory/data/grl-media-test-related-keys.json
@@ -0,0 +1,18 @@
+{
+ "title": "this is a song",
+ "related-keys": [
+ {
+ "artist": "first artist",
+ "mb-artist-id": "bf24ca37-25f4-4e34-9aec-460b94364cfc"
+ },
+ {
+ "artist": "second artist",
+ "mb-artist-id": "6b28ecf0-94e6-48bb-aa2a-5ede325b675b"
+ },
+ {
+ "artist": "third artist",
+ "mb-artist-id": "84a87594-8c48-4865-9ac2-5d8aa29c800a"
+ }
+ ],
+ "mb-release-id": "f14638e1-fb36-358c-aba2-39b084864b13"
+}
diff --git a/tests/lua-factory/data/test-source-grl-media.lua
b/tests/lua-factory/data/test-source-grl-media.lua
index 644387a5..8761efff 100644
--- a/tests/lua-factory/data/test-source-grl-media.lua
+++ b/tests/lua-factory/data/test-source-grl-media.lua
@@ -66,5 +66,14 @@ function fetch_url_cb(feed)
grl.callback()
return
end
+
+ -- related keys need to have an index
+ if media["related-keys"] then
+ for _, rel_key in pairs(media["related-keys"]) do
+ media[#media + 1] = rel_key
+ end
+ media["related-keys"] = nil
+ end
+
grl.callback(media, 0)
end
diff --git a/tests/lua-factory/test_lua_factory_grl_media.c b/tests/lua-factory/test_lua_factory_grl_media.c
index 77244418..5c531538 100644
--- a/tests/lua-factory/test_lua_factory_grl_media.c
+++ b/tests/lua-factory/test_lua_factory_grl_media.c
@@ -76,7 +76,8 @@ test_lua_factory_shutdown (void)
static void
check_metadata (GrlMedia *media,
GrlKeyID key_id,
- JsonReader *reader)
+ JsonReader *reader,
+ gint64 index)
{
GrlRegistry *registry = grl_registry_get_default ();
GType type = grl_registry_lookup_metadata_key_type (registry, key_id);
@@ -120,8 +121,14 @@ check_metadata (GrlMedia *media,
g_assert_null (list);
} else {
- const gchar *from_json = json_reader_get_string_value (reader);
- const gchar *from_media = grl_data_get_string (GRL_DATA (media), key_id);
+ GrlRelatedKeys *relkeys;
+ const gchar *from_media;
+ const gchar *from_json;
+
+ from_json = json_reader_get_string_value (reader);
+ relkeys = grl_data_get_related_keys (GRL_DATA (media), key_id, index);
+ g_assert (relkeys);
+ from_media = grl_related_keys_get_string (relkeys, key_id);
g_assert_cmpstr (from_json, ==, from_media);
}
break;
@@ -188,10 +195,31 @@ test_metadata_from_media (GrlMedia *media,
json_reader_read_element (reader, i);
key_name = json_reader_get_member_name (reader);
- if (g_strcmp0 (key_name, "type") != 0) {
+ if (g_strcmp0 (key_name, "related-keys") == 0) {
+ gint rel_key_index;
+ gint rel_keys_nr = json_reader_count_elements (reader);
+
+ for (rel_key_index = 0; rel_key_index < rel_keys_nr; rel_key_index++) {
+ const gchar *rel_key_name;
+ guint key_index;
+ guint len_rel_key;
+
+ json_reader_read_element (reader, rel_key_index);
+ len_rel_key = json_reader_count_members (reader);
+ for (key_index = 0; key_index < len_rel_key; key_index++) {
+ json_reader_read_element (reader, key_index);
+ rel_key_name = json_reader_get_member_name (reader);
+ key_id = grl_registry_lookup_metadata_key (registry, rel_key_name);
+ g_assert (key_id != GRL_METADATA_KEY_INVALID);
+ check_metadata (media, key_id, reader, rel_key_index);
+ json_reader_end_element (reader);
+ }
+ json_reader_end_element (reader);
+ }
+ } else if (g_strcmp0 (key_name, "type") != 0) {
key_id = grl_registry_lookup_metadata_key (registry, key_name);
g_assert (key_id != GRL_METADATA_KEY_INVALID);
- check_metadata (media, key_id, reader);
+ check_metadata (media, key_id, reader, 0);
}
json_reader_end_element (reader);
}
@@ -268,6 +296,34 @@ test_build_media (void)
}
}
+static void
+test_related_keys (void)
+{
+ gint i;
+
+ struct {
+ gchar *uri;
+ gchar *url;
+ } media_tests[] = {
+ /* This is a basic test to check that related keys are correctly set. */
+ { GRESOURCE_PREFIX "grl-media-test-related-keys.json",
+ TEST_GRL_MEDIA_URL "related-keys.json" }
+ };
+
+ for (i = 0; i < G_N_ELEMENTS (media_tests); i++) {
+ GFile *file;
+ gchar *input;
+ GError *error = NULL;
+
+ file = g_file_new_for_uri (media_tests[i].uri);
+ g_file_load_contents (file, NULL, &input, NULL, NULL, &error);
+ g_assert_no_error (error);
+ g_object_unref (file);
+ resolve_fake_src (input, media_tests[i].url);
+ g_free (input);
+ }
+}
+
gint
main (gint argc, gchar **argv)
{
@@ -285,9 +341,12 @@ main (gint argc, gchar **argv)
/* Check if metadata-keys are created with value we expect with no errors */
g_test_add_func ("/lua-factory/lua-library/metadata-keys", test_build_media);
+
+ /* test GrlRelatedKeys */
+ g_test_add_func ("/lua-factory/lua-library/related-keys", test_related_keys);
+
/* TODO:
- * 1-) keys with array of all provided by grl_data_add_* (binary, boxed, float,..)
- * 2-) test for GrlRelatedKeys after: https://bugzilla.gnome.org/show_bug.cgi?id=756203
+ * keys with array of all provided by grl_data_add_* (binary, boxed, float,..)
*/
gint result = g_test_run ();
diff --git a/tests/lua-factory/test_lua_factory_tests.gresource.xml
b/tests/lua-factory/test_lua_factory_tests.gresource.xml
index f936db66..76e729d3 100644
--- a/tests/lua-factory/test_lua_factory_tests.gresource.xml
+++ b/tests/lua-factory/test_lua_factory_tests.gresource.xml
@@ -2,5 +2,6 @@
<gresources>
<gresource prefix="/org/gnome/grilo/plugins/test/lua-factory/">
<file compressed="false">data/grl-media-test-all-metadata.json</file>
+ <file compressed="false">data/grl-media-test-related-keys.json</file>
</gresource>
</gresources>
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]