[tepl] MetadataStore: continue to write unit tests
- From: Sébastien Wilmet <swilmet src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [tepl] MetadataStore: continue to write unit tests
- Date: Tue, 31 Mar 2020 20:44:20 +0000 (UTC)
commit 960501a2f76459941d01b75f7568942ae33fd1b2
Author: Sébastien Wilmet <swilmet gnome org>
Date: Tue Mar 31 19:06:38 2020 +0200
MetadataStore: continue to write unit tests
testsuite/test-metadata-store.c | 221 ++++++++++++++++-----
.../{empty.xml => expected-to-fail-00-empty.xml} | 0
.../max-num-locations-after.xml | 5 +
.../max-num-locations-before.xml | 11 +
.../one-entry-markup-escape.xml | 5 +
5 files changed, 197 insertions(+), 45 deletions(-)
---
diff --git a/testsuite/test-metadata-store.c b/testsuite/test-metadata-store.c
index 956d250..3bd1814 100644
--- a/testsuite/test-metadata-store.c
+++ b/testsuite/test-metadata-store.c
@@ -73,39 +73,66 @@ load_store_file_cb (GObject *source_object,
}
static void
-load_store_file (GFile *store_file,
- GError **error)
+load_store_file (GFile *store_file,
+ gboolean expect_no_error)
{
TeplMetadataStore *store = tepl_metadata_store_get_singleton ();
+ GError *error = NULL;
tepl_metadata_store_set_store_file (store, store_file);
tepl_metadata_store_load_async (store,
G_PRIORITY_DEFAULT,
NULL,
load_store_file_cb,
- error);
+ &error);
gtk_main ();
+
+ if (expect_no_error)
+ {
+ g_assert_no_error (error);
+ }
+ else
+ {
+ g_assert_true (error != NULL && error->domain == G_MARKUP_ERROR);
+ g_clear_error (&error);
+ }
+}
+
+static void
+check_load_test_data_filename (const gchar *test_data_filename)
+{
+ GFile *store_file;
+ gboolean expect_no_error;
+
+ store_file = get_store_file_for_test_data_filename (test_data_filename, TRUE);
+ expect_no_error = !g_str_has_prefix (test_data_filename, "expected-to-fail");
+
+ load_store_file (store_file, expect_no_error);
+
+ g_object_unref (store_file);
+ _tepl_metadata_store_unref_singleton ();
}
static GFile *
-save_store (GError **error)
+save_store (void)
{
TeplMetadataStore *store = tepl_metadata_store_get_singleton ();
GFile *tmp_file;
- GError *my_error = NULL;
+ GError *error = NULL;
tmp_file = g_file_new_build_filename (g_get_tmp_dir (),
"tepl-metadata-store-test.xml",
NULL);
- g_file_delete (tmp_file, NULL, &my_error);
- if (g_error_matches (my_error, G_IO_ERROR, G_IO_ERROR_NOT_FOUND))
+ g_file_delete (tmp_file, NULL, &error);
+ if (g_error_matches (error, G_IO_ERROR, G_IO_ERROR_NOT_FOUND))
{
- g_clear_error (&my_error);
+ g_clear_error (&error);
}
- g_assert_no_error (my_error);
+ g_assert_no_error (error);
tepl_metadata_store_set_store_file (store, tmp_file);
- tepl_metadata_store_save (store, NULL, error);
+ tepl_metadata_store_save (store, NULL, &error);
+ g_assert_no_error (error);
return tmp_file;
}
@@ -155,29 +182,18 @@ check_metadata_exists (const gchar *uri,
}
static void
-test_load_non_existing_store_file (void)
+test_expected_to_fail (void)
{
- GFile *store_file;
- GError *error = NULL;
-
- store_file = get_store_file_for_test_data_filename ("does_not_exist.xml", FALSE);
- load_store_file (store_file, &error);
- g_assert_no_error (error);
-
- g_object_unref (store_file);
- _tepl_metadata_store_unref_singleton ();
+ check_load_test_data_filename ("expected-to-fail-00-empty.xml");
}
static void
-test_load_empty_store_file (void)
+test_load_non_existing_store_file (void)
{
GFile *store_file;
- GError *error = NULL;
- store_file = get_store_file_for_test_data_filename ("empty.xml", TRUE);
- load_store_file (store_file, &error);
- g_assert_true (error != NULL && error->domain == G_MARKUP_ERROR);
- g_clear_error (&error);
+ store_file = get_store_file_for_test_data_filename ("does_not_exist.xml", FALSE);
+ load_store_file (store_file, TRUE);
g_object_unref (store_file);
_tepl_metadata_store_unref_singleton ();
@@ -188,12 +204,10 @@ test_empty_store_impl (void)
{
GFile *tmp_file;
GFile *store_file;
- GError *error = NULL;
/* Empty store, and not modified. */
- tmp_file = save_store (&error);
- g_assert_no_error (error);
+ tmp_file = save_store ();
g_assert_true (!g_file_query_exists (tmp_file, NULL));
g_clear_object (&tmp_file);
@@ -201,8 +215,7 @@ test_empty_store_impl (void)
mark_metadata_store_as_modified ();
- tmp_file = save_store (&error);
- g_assert_no_error (error);
+ tmp_file = save_store ();
g_assert_true (g_file_query_exists (tmp_file, NULL));
store_file = get_store_file_for_test_data_filename ("metadata-tag-only.xml", TRUE);
@@ -217,15 +230,13 @@ static void
test_empty_store (void)
{
GFile *store_file;
- GError *error = NULL;
/* Without loading */
test_empty_store_impl ();
/* With loading */
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);
+ load_store_file (store_file, TRUE);
g_object_unref (store_file);
test_empty_store_impl ();
@@ -239,14 +250,12 @@ test_load_xml_from_old_metadata_manager (void)
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);
+ load_store_file (store_file, TRUE);
check_metadata_exists ("file:///home/seb/test-header.csv", "gcsvedit-title-line", "4");
check_metadata_exists ("file:///home/seb/test-header.csv", "gcsvedit-delimiter", ",");
@@ -257,8 +266,7 @@ test_load_xml_from_old_metadata_manager (void)
*/
_tepl_metadata_store_unref_singleton ();
store = tepl_metadata_store_get_singleton ();
- load_store_file (store_file, &error);
- g_assert_no_error (error);
+ load_store_file (store_file, TRUE);
g_clear_object (&store_file);
/* Keep only one <document> with one <entry>, so when we save it, we are
@@ -271,8 +279,7 @@ test_load_xml_from_old_metadata_manager (void)
tepl_metadata_store_set_metadata_for_location (store, location, NULL);
g_clear_object (&location);
- tmp_file = save_store (&error);
- g_assert_no_error (error);
+ tmp_file = save_store ();
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);
@@ -285,11 +292,9 @@ 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);
+ load_store_file (store_file, TRUE);
#if 0
/* FIXME: GLib GMarkup bug? It's a tab character in the XML file, not a
@@ -305,17 +310,143 @@ test_load_gcsvedit_one_entry (void)
_tepl_metadata_store_unref_singleton ();
}
+static void
+test_generate_new_store_file_simple (void)
+{
+ TeplMetadataStore *store = tepl_metadata_store_get_singleton ();
+ GFile *location;
+ GFileInfo *metadata;
+ GFile *tmp_file;
+ gchar *current_dir;
+ gchar *relatively_uri;
+
+ location = g_file_new_for_path ("/my_absolute_file_absolutely");
+ metadata = g_file_info_new ();
+ g_file_info_set_attribute_string (metadata, "metadata::my_key", "my_value");
+ tepl_metadata_store_set_metadata_for_location (store, location, metadata);
+ g_object_unref (location);
+ g_object_unref (metadata);
+
+ location = g_file_new_for_path ("a_relative_path_relatively");
+ metadata = g_file_info_new ();
+ g_file_info_set_attribute_string (metadata, "metadata::a_key", "a_value");
+ g_file_info_set_attribute_string (metadata, "metadata::another_key", "another_value");
+ tepl_metadata_store_set_metadata_for_location (store, location, metadata);
+ g_object_unref (location);
+ g_object_unref (metadata);
+
+ tmp_file = save_store ();
+
+ /* Reload the store file that we have just saved. */
+ _tepl_metadata_store_unref_singleton ();
+ store = tepl_metadata_store_get_singleton ();
+ load_store_file (tmp_file, TRUE);
+ g_object_unref (tmp_file);
+
+ current_dir = g_get_current_dir ();
+ relatively_uri = g_strconcat ("file://", current_dir, "/a_relative_path_relatively", NULL);
+
+ check_metadata_exists ("file:///my_absolute_file_absolutely", "my_key", "my_value");
+ check_metadata_exists (relatively_uri, "a_key", "a_value");
+ check_metadata_exists (relatively_uri, "another_key", "another_value");
+
+ g_free (current_dir);
+ g_free (relatively_uri);
+ _tepl_metadata_store_unref_singleton ();
+}
+
+static void
+test_generate_new_store_file (void)
+{
+ TeplMetadataStore *store = tepl_metadata_store_get_singleton ();
+ GFile *location;
+ GFileInfo *metadata;
+ GFile *tmp_file;
+
+ /* Test with non-ASCII chars and XML special character escape/unescape. */
+ location = g_file_new_for_path ("/home/seb/santé/pandémie-coronavirus-stats.csv");
+ metadata = g_file_info_new ();
+ g_file_info_set_attribute_string (metadata, "metadata::CLÉ", "Évolution \"<=>\"");
+ tepl_metadata_store_set_metadata_for_location (store, location, metadata);
+ g_object_unref (location);
+ g_object_unref (metadata);
+
+ tmp_file = save_store ();
+
+ /* Reload the store file that we have just saved. */
+ _tepl_metadata_store_unref_singleton ();
+ store = tepl_metadata_store_get_singleton ();
+ load_store_file (tmp_file, TRUE);
+ g_object_unref (tmp_file);
+
+ check_metadata_exists ("file:///home/seb/santé/pandémie-coronavirus-stats.csv", "CLÉ", "Évolution
\"<=>\"");
+
+ _tepl_metadata_store_unref_singleton ();
+}
+
+static void
+test_markup_unescape_escape (void)
+{
+ GFile *store_file;
+ GFile *tmp_file;
+
+ store_file = get_store_file_for_test_data_filename ("one-entry-markup-escape.xml", TRUE);
+ load_store_file (store_file, TRUE);
+
+ check_metadata_exists ("file:///home/seb/santé/pandémie-coronavirus-stats.csv", "CLÉ", "Évolution
\"<=>\"");
+
+ _tepl_metadata_store_unref_singleton ();
+ load_store_file (store_file, TRUE);
+
+ mark_metadata_store_as_modified ();
+ tmp_file = save_store ();
+ check_equal_file_content (tmp_file, store_file);
+
+ g_object_unref (store_file);
+ g_object_unref (tmp_file);
+ _tepl_metadata_store_unref_singleton ();
+}
+
+static void
+test_max_number_of_locations (void)
+{
+ TeplMetadataStore *store = tepl_metadata_store_get_singleton ();
+ GFile *before;
+ GFile *after;
+ GFile *tmp_file;
+
+ tepl_metadata_store_set_max_number_of_locations (store, 1);
+
+ before = get_store_file_for_test_data_filename ("max-num-locations-before.xml", TRUE);
+ after = get_store_file_for_test_data_filename ("max-num-locations-after.xml", TRUE);
+
+ load_store_file (before, TRUE);
+
+ mark_metadata_store_as_modified ();
+ tmp_file = save_store ();
+ check_equal_file_content (tmp_file, after);
+
+ g_object_unref (before);
+ g_object_unref (after);
+ g_object_unref (tmp_file);
+ _tepl_metadata_store_unref_singleton ();
+}
+
int
main (int argc,
char **argv)
{
gtk_test_init (&argc, &argv);
+ g_test_add_func ("/metadata_store/expected_to_fail", test_expected_to_fail);
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);
+ g_test_add_func ("/metadata_store/generate_new_store_file_simple",
test_generate_new_store_file_simple);
+ g_test_add_func ("/metadata_store/generate_new_store_file", test_generate_new_store_file);
+ g_test_add_func ("/metadata_store/markup_unescape_escape", test_markup_unescape_escape);
+ g_test_add_func ("/metadata_store/max_number_of_locations", test_max_number_of_locations);
return g_test_run ();
}
diff --git a/testsuite/test-metadata-store/empty.xml
b/testsuite/test-metadata-store/expected-to-fail-00-empty.xml
similarity index 100%
rename from testsuite/test-metadata-store/empty.xml
rename to testsuite/test-metadata-store/expected-to-fail-00-empty.xml
diff --git a/testsuite/test-metadata-store/max-num-locations-after.xml
b/testsuite/test-metadata-store/max-num-locations-after.xml
new file mode 100644
index 0000000..fda7d69
--- /dev/null
+++ b/testsuite/test-metadata-store/max-num-locations-after.xml
@@ -0,0 +1,5 @@
+<metadata>
+ <document uri="file:///home/seb/test-semicolon.csv" atime="1585677677045">
+ <entry key="gcsvedit-delimiter" value=";" />
+ </document>
+</metadata>
diff --git a/testsuite/test-metadata-store/max-num-locations-before.xml
b/testsuite/test-metadata-store/max-num-locations-before.xml
new file mode 100644
index 0000000..e018f24
--- /dev/null
+++ b/testsuite/test-metadata-store/max-num-locations-before.xml
@@ -0,0 +1,11 @@
+<metadata>
+ <document uri="file:///home/seb/test-comma.csv" atime="1577345634724">
+ <entry key="gcsvedit-delimiter" value="," />
+ </document>
+ <document uri="file:///home/seb/test-semicolon.csv" atime="1585677677045">
+ <entry key="gcsvedit-delimiter" value=";" />
+ </document>
+ <document uri="file:///home/seb/test-other.csv" atime="1577345634724">
+ <entry key="gcsvedit-delimiter" value="," />
+ </document>
+</metadata>
diff --git a/testsuite/test-metadata-store/one-entry-markup-escape.xml
b/testsuite/test-metadata-store/one-entry-markup-escape.xml
new file mode 100644
index 0000000..1fdfee1
--- /dev/null
+++ b/testsuite/test-metadata-store/one-entry-markup-escape.xml
@@ -0,0 +1,5 @@
+<metadata>
+ <document uri="file:///home/seb/sant%C3%A9/pand%C3%A9mie-coronavirus-stats.csv" atime="1585677677045">
+ <entry key="CLÉ" value="Évolution "<=>"" />
+ </document>
+</metadata>
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]