[tepl] MetadataStore: continue writing the unit tests
- From: Sébastien Wilmet <swilmet src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [tepl] MetadataStore: continue writing the unit tests
- Date: Tue, 31 Mar 2020 16:52:43 +0000 (UTC)
commit 8009662745d59d79fee05ee1820c973a2796606d
Author: Sébastien Wilmet <swilmet gnome org>
Date: Tue Mar 31 14:39:37 2020 +0200
MetadataStore: continue writing the unit tests
I have maybe found a bug in GLib:
https://gitlab.gnome.org/GNOME/glib/-/issues/2080
testsuite/test-metadata-store.c | 110 ++++++++++++++++++++-
.../from-old-metadata-manager.xml | 10 ++
.../test-metadata-store/gcsvedit-one-entry.xml | 5 +
3 files changed, 120 insertions(+), 5 deletions(-)
---
diff --git a/testsuite/test-metadata-store.c b/testsuite/test-metadata-store.c
index 1a894fe..956d250 100644
--- a/testsuite/test-metadata-store.c
+++ b/testsuite/test-metadata-store.c
@@ -76,11 +76,9 @@ static void
load_store_file (GFile *store_file,
GError **error)
{
- TeplMetadataStore *store;
+ TeplMetadataStore *store = tepl_metadata_store_get_singleton ();
- store = tepl_metadata_store_get_singleton ();
tepl_metadata_store_set_store_file (store, store_file);
-
tepl_metadata_store_load_async (store,
G_PRIORITY_DEFAULT,
NULL,
@@ -116,11 +114,10 @@ save_store (GError **error)
static void
mark_metadata_store_as_modified (void)
{
- TeplMetadataStore *store;
+ TeplMetadataStore *store = tepl_metadata_store_get_singleton ();
GFile *location;
GFileInfo *metadata;
- store = tepl_metadata_store_get_singleton ();
location = g_file_new_for_path ("foo");
metadata = g_file_info_new ();
@@ -132,6 +129,31 @@ mark_metadata_store_as_modified (void)
g_object_unref (metadata);
}
+static void
+check_metadata_exists (const gchar *uri,
+ const gchar *key,
+ const gchar *expected_value)
+{
+ TeplMetadataStore *store = tepl_metadata_store_get_singleton ();
+ GFile *location;
+ GFileInfo *metadata;
+ gchar *complete_key;
+ const gchar *received_value;
+
+ location = g_file_new_for_uri (uri);
+ metadata = tepl_metadata_store_get_metadata_for_location (store, location);
+ g_assert_true (metadata != NULL);
+
+ complete_key = g_strconcat ("metadata::", key, NULL);
+ g_assert_true (g_file_info_get_attribute_type (metadata, complete_key) ==
G_FILE_ATTRIBUTE_TYPE_STRING);
+ received_value = g_file_info_get_attribute_string (metadata, complete_key);
+ g_assert_cmpstr (received_value, ==, expected_value);
+
+ g_object_unref (location);
+ g_object_unref (metadata);
+ g_free (complete_key);
+}
+
static void
test_load_non_existing_store_file (void)
{
@@ -204,9 +226,85 @@ test_empty_store (void)
store_file = get_store_file_for_test_data_filename ("metadata-tag-only.xml", TRUE);
load_store_file (store_file, &error);
g_assert_no_error (error);
+ g_object_unref (store_file);
+
test_empty_store_impl ();
}
+static void
+test_load_xml_from_old_metadata_manager (void)
+{
+ TeplMetadataStore *store = tepl_metadata_store_get_singleton ();
+ GFile *store_file;
+ GFile *tmp_file;
+ GFile *reference_saved_store_file;
+ GFile *location;
+ GError *error = NULL;
+
+ /* See the first line of the file, TeplMetadataStore doesn't print such
+ * line.
+ */
+ store_file = get_store_file_for_test_data_filename ("from-old-metadata-manager.xml", TRUE);
+ load_store_file (store_file, &error);
+ g_assert_no_error (error);
+
+ check_metadata_exists ("file:///home/seb/test-header.csv", "gcsvedit-title-line", "4");
+ check_metadata_exists ("file:///home/seb/test-header.csv", "gcsvedit-delimiter", ",");
+ check_metadata_exists ("file:///home/seb/test-tab.tsv", "gcsvedit-delimiter", "\t");
+
+ /* Start again from a not-modified state (the atime values have been
+ * updated above).
+ */
+ _tepl_metadata_store_unref_singleton ();
+ store = tepl_metadata_store_get_singleton ();
+ load_store_file (store_file, &error);
+ g_assert_no_error (error);
+ g_clear_object (&store_file);
+
+ /* Keep only one <document> with one <entry>, so when we save it, we are
+ * sure that the XML file content will be the same (otherwise we are not
+ * sure of the order of the <document> elements and the order of the
+ * <entry> elements).
+ * Do not modify the atime of the other <document>.
+ */
+ location = g_file_new_for_uri ("file:///home/seb/test-header.csv");
+ tepl_metadata_store_set_metadata_for_location (store, location, NULL);
+ g_clear_object (&location);
+
+ tmp_file = save_store (&error);
+ g_assert_no_error (error);
+ reference_saved_store_file = get_store_file_for_test_data_filename ("gcsvedit-one-entry.xml", TRUE);
+ check_equal_file_content (reference_saved_store_file, tmp_file);
+ g_object_unref (tmp_file);
+ g_object_unref (reference_saved_store_file);
+
+ _tepl_metadata_store_unref_singleton ();
+}
+
+static void
+test_load_gcsvedit_one_entry (void)
+{
+ GFile *store_file;
+ GError *error = NULL;
+
+ store_file = get_store_file_for_test_data_filename ("gcsvedit-one-entry.xml", TRUE);
+ load_store_file (store_file, &error);
+ g_assert_no_error (error);
+
+#if 0
+ /* FIXME: GLib GMarkup bug? It's a tab character in the XML file, not a
+ * space.
+ * https://gitlab.gnome.org/GNOME/glib/-/issues/2080
+ */
+ check_metadata_exists ("file:///home/seb/test-tab.tsv", "gcsvedit-delimiter", "\t");
+#else
+ check_metadata_exists ("file:///home/seb/test-tab.tsv", "gcsvedit-delimiter", " ");
+#endif
+
+ g_object_unref (store_file);
+ _tepl_metadata_store_unref_singleton ();
+}
+
int
main (int argc,
char **argv)
@@ -216,6 +314,8 @@ main (int argc,
g_test_add_func ("/metadata_store/load_non_existing_store_file", test_load_non_existing_store_file);
g_test_add_func ("/metadata_store/load_empty_store_file", test_load_empty_store_file);
g_test_add_func ("/metadata_store/empty_store", test_empty_store);
+ g_test_add_func ("/metadata_store/load_xml_from_old_metadata_manager",
test_load_xml_from_old_metadata_manager);
+ g_test_add_func ("/metadata_store/load_gcsvedit_one_entry", test_load_gcsvedit_one_entry);
return g_test_run ();
}
diff --git a/testsuite/test-metadata-store/from-old-metadata-manager.xml
b/testsuite/test-metadata-store/from-old-metadata-manager.xml
new file mode 100644
index 0000000..6888fde
--- /dev/null
+++ b/testsuite/test-metadata-store/from-old-metadata-manager.xml
@@ -0,0 +1,10 @@
+<?xml version="1.0"?>
+<metadata>
+ <document uri="file:///home/seb/test-header.csv" atime="1577345608441">
+ <entry key="gcsvedit-title-line" value="4"/>
+ <entry key="gcsvedit-delimiter" value=","/>
+ </document>
+ <document uri="file:///home/seb/test-tab.tsv" atime="1577345634724">
+ <entry key="gcsvedit-delimiter" value="	"/>
+ </document>
+</metadata>
diff --git a/testsuite/test-metadata-store/gcsvedit-one-entry.xml
b/testsuite/test-metadata-store/gcsvedit-one-entry.xml
new file mode 100644
index 0000000..b6d5019
--- /dev/null
+++ b/testsuite/test-metadata-store/gcsvedit-one-entry.xml
@@ -0,0 +1,5 @@
+<metadata>
+ <document uri="file:///home/seb/test-tab.tsv" atime="1577345634724">
+ <entry key="gcsvedit-delimiter" value=" " />
+ </document>
+</metadata>
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]