[tepl] MetadataStore: continue writing the unit tests



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="&#9;"/>
+  </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]