[tepl] Metadata unit tests: add more tests
- From: Sébastien Wilmet <swilmet src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [tepl] Metadata unit tests: add more tests
- Date: Mon, 11 May 2020 00:00:16 +0000 (UTC)
commit 9f3dcaedc36d89ef38a0041f7d5ff91c72550ca4
Author: Sébastien Wilmet <swilmet gnome org>
Date: Sun May 10 23:41:45 2020 +0200
Metadata unit tests: add more tests
testsuite/meson.build | 1 +
.../expected-to-fail-00-empty.xml | 0
.../expected-to-fail-01.xml | 2 +
.../expected-to-fail-02.xml | 4 +
.../expected-to-fail-03.xml | 5 +
.../expected-to-fail-04.xml | 5 +
.../expected-to-fail-05.xml | 5 +
.../expected-to-fail-06.xml | 5 +
.../expected-to-fail-07-garbage.xml | 1 +
testsuite/test-metadata-manager.c | 231 +++++++++++++++++++++
testsuite/test-metadata.c | 41 ++++
11 files changed, 300 insertions(+)
---
diff --git a/testsuite/meson.build b/testsuite/meson.build
index 0af9829..f61f744 100644
--- a/testsuite/meson.build
+++ b/testsuite/meson.build
@@ -9,6 +9,7 @@ unit_tests = [
'test-fold-region',
'test-info-bar',
'test-metadata',
+ 'test-metadata-manager',
'test-notebook',
'test-utils'
]
diff --git a/testsuite/test-metadata-manager-data/expected-to-fail-00-empty.xml
b/testsuite/test-metadata-manager-data/expected-to-fail-00-empty.xml
new file mode 100644
index 0000000..e69de29
diff --git a/testsuite/test-metadata-manager-data/expected-to-fail-01.xml
b/testsuite/test-metadata-manager-data/expected-to-fail-01.xml
new file mode 100644
index 0000000..da0fe3b
--- /dev/null
+++ b/testsuite/test-metadata-manager-data/expected-to-fail-01.xml
@@ -0,0 +1,2 @@
+<thats_not_a_metadata_element>
+</thats_not_a_metadata_element>
diff --git a/testsuite/test-metadata-manager-data/expected-to-fail-02.xml
b/testsuite/test-metadata-manager-data/expected-to-fail-02.xml
new file mode 100644
index 0000000..24cc661
--- /dev/null
+++ b/testsuite/test-metadata-manager-data/expected-to-fail-02.xml
@@ -0,0 +1,4 @@
+<metadata>
+ <thats_not_a_document_element>
+ </thats_not_a_document_element>
+</metadata>
diff --git a/testsuite/test-metadata-manager-data/expected-to-fail-03.xml
b/testsuite/test-metadata-manager-data/expected-to-fail-03.xml
new file mode 100644
index 0000000..4a272c6
--- /dev/null
+++ b/testsuite/test-metadata-manager-data/expected-to-fail-03.xml
@@ -0,0 +1,5 @@
+<metadata>
+ <document uri="file:///home/seb/test-semicolon.csv" atime="hey-not-valid-here">
+ <entry key="gcsvedit-delimiter" value=";" />
+ </document>
+</metadata>
diff --git a/testsuite/test-metadata-manager-data/expected-to-fail-04.xml
b/testsuite/test-metadata-manager-data/expected-to-fail-04.xml
new file mode 100644
index 0000000..5e61437
--- /dev/null
+++ b/testsuite/test-metadata-manager-data/expected-to-fail-04.xml
@@ -0,0 +1,5 @@
+<metadata>
+ <document uri="file:///look/atime/will/be/missing.csv">
+ <entry key="gcsvedit-delimiter" value=";" />
+ </document>
+</metadata>
diff --git a/testsuite/test-metadata-manager-data/expected-to-fail-05.xml
b/testsuite/test-metadata-manager-data/expected-to-fail-05.xml
new file mode 100644
index 0000000..998ac91
--- /dev/null
+++ b/testsuite/test-metadata-manager-data/expected-to-fail-05.xml
@@ -0,0 +1,5 @@
+<metadata>
+ <document uri="file:///home/seb/test-semicolon.csv" atime="1585677677045">
+ <this_is_not_an_entry_element key="gcsvedit-delimiter" value=";" />
+ </document>
+</metadata>
diff --git a/testsuite/test-metadata-manager-data/expected-to-fail-06.xml
b/testsuite/test-metadata-manager-data/expected-to-fail-06.xml
new file mode 100644
index 0000000..1e7e5e9
--- /dev/null
+++ b/testsuite/test-metadata-manager-data/expected-to-fail-06.xml
@@ -0,0 +1,5 @@
+<metadata>
+ <document uri="file:///home/seb/test-semicolon.csv" atime="1585677677045">
+ <entry key="ho_nooooo_value_attribute" />
+ </document>
+</metadata>
diff --git a/testsuite/test-metadata-manager-data/expected-to-fail-07-garbage.xml
b/testsuite/test-metadata-manager-data/expected-to-fail-07-garbage.xml
new file mode 100644
index 0000000..183e970
--- /dev/null
+++ b/testsuite/test-metadata-manager-data/expected-to-fail-07-garbage.xml
@@ -0,0 +1 @@
+&#!+]$/%!!
diff --git a/testsuite/test-metadata-manager.c b/testsuite/test-metadata-manager.c
new file mode 100644
index 0000000..90de5e4
--- /dev/null
+++ b/testsuite/test-metadata-manager.c
@@ -0,0 +1,231 @@
+/* SPDX-FileCopyrightText: 2020 - Sébastien Wilmet <swilmet gnome org>
+ * SPDX-License-Identifier: LGPL-3.0-or-later
+ */
+
+#include <tepl/tepl.h>
+
+static void
+check_get (TeplMetadata *metadata,
+ const gchar *key,
+ const gchar *expected_value)
+{
+ gchar *received_value;
+
+ received_value = tepl_metadata_get (metadata, key);
+ g_assert_cmpstr (expected_value, ==, received_value);
+ g_free (received_value);
+}
+
+static void
+test_merge_into_and_copy_from_part1 (void)
+{
+ TeplMetadataManager *manager;
+ TeplMetadata *metadata;
+ GFile *location;
+
+ manager = tepl_metadata_manager_get_singleton ();
+ metadata = tepl_metadata_new ();
+ location = g_file_new_for_path ("location");
+
+ tepl_metadata_manager_copy_from (manager, location, metadata);
+ tepl_metadata_manager_merge_into (manager, location, metadata);
+
+ tepl_metadata_set (metadata, "key", "valueA");
+ tepl_metadata_manager_copy_from (manager, location, metadata);
+ check_get (metadata, "key", "valueA"); // the value has been kept even though it is not in @manager.
+ tepl_metadata_manager_merge_into (manager, location, metadata);
+ check_get (metadata, "key", "valueA");
+
+ g_object_unref (metadata);
+ metadata = tepl_metadata_new ();
+ tepl_metadata_manager_copy_from (manager, location, metadata);
+ check_get (metadata, "key", "valueA");
+
+ tepl_metadata_set (metadata, "key", "valueB");
+ check_get (metadata, "key", "valueB");
+ tepl_metadata_manager_copy_from (manager, location, metadata);
+ check_get (metadata, "key", "valueA"); // the value has been overwritten.
+
+ g_object_unref (metadata);
+ g_object_unref (location);
+ _tepl_metadata_manager_unref_singleton ();
+}
+
+static void
+test_merge_into_and_copy_from_part2 (void)
+{
+ TeplMetadataManager *manager;
+ TeplMetadata *metadata;
+ GFile *location;
+
+ manager = tepl_metadata_manager_get_singleton ();
+ location = g_file_new_for_path ("location");
+
+ metadata = tepl_metadata_new ();
+ tepl_metadata_set (metadata, "keyA", "valueA");
+ tepl_metadata_manager_merge_into (manager, location, metadata);
+ g_object_unref (metadata);
+
+ metadata = tepl_metadata_new ();
+ tepl_metadata_set (metadata, "keyB", "valueB");
+ tepl_metadata_manager_merge_into (manager, location, metadata); // keyA is kept in @manager.
+ g_object_unref (metadata);
+
+ metadata = tepl_metadata_new ();
+ tepl_metadata_manager_copy_from (manager, location, metadata);
+ check_get (metadata, "keyA", "valueA");
+ check_get (metadata, "keyB", "valueB");
+
+ g_object_unref (metadata);
+ g_object_unref (location);
+ _tepl_metadata_manager_unref_singleton ();
+}
+
+/* Store metadata into the TeplMetadataManager for several locations. */
+static void
+test_merge_into_and_copy_from_part3 (void)
+{
+ TeplMetadataManager *manager;
+ TeplMetadata *metadataA;
+ TeplMetadata *metadataB;
+ GFile *locationA;
+ GFile *locationB;
+
+ manager = tepl_metadata_manager_get_singleton ();
+ locationA = g_file_new_for_path ("locationA");
+ locationB = g_file_new_for_path ("locationB");
+
+ metadataA = tepl_metadata_new ();
+ tepl_metadata_set (metadataA, "key", "valueA");
+ tepl_metadata_manager_merge_into (manager, locationA, metadataA);
+ g_object_unref (metadataA);
+
+ metadataB = tepl_metadata_new ();
+ tepl_metadata_set (metadataB, "key", "valueB");
+ tepl_metadata_manager_merge_into (manager, locationB, metadataB);
+ g_object_unref (metadataB);
+
+ metadataA = tepl_metadata_new ();
+ tepl_metadata_manager_copy_from (manager, locationA, metadataA);
+ check_get (metadataA, "key", "valueA");
+ g_object_unref (metadataA);
+
+ metadataB = tepl_metadata_new ();
+ tepl_metadata_manager_copy_from (manager, locationB, metadataB);
+ check_get (metadataB, "key", "valueB");
+ g_object_unref (metadataB);
+
+ g_object_unref (locationA);
+ g_object_unref (locationB);
+ _tepl_metadata_manager_unref_singleton ();
+}
+
+static void
+check_load_from_disk_expected_to_fail (const gchar *filename)
+{
+ TeplMetadataManager *manager;
+ GFile *file;
+ GError *error = NULL;
+
+ manager = tepl_metadata_manager_get_singleton ();
+
+ file = g_file_new_build_filename (UNIT_TESTS_SOURCE_DIR,
+ "test-metadata-manager-data",
+ filename,
+ NULL);
+
+ tepl_metadata_manager_load_from_disk (manager, file, &error);
+ g_assert_true (error != NULL);
+ g_error_free (error);
+
+ g_object_unref (file);
+ _tepl_metadata_manager_unref_singleton ();
+}
+
+static void
+test_load_from_disk_expected_to_fail (void)
+{
+ check_load_from_disk_expected_to_fail ("expected-to-fail-00-empty.xml");
+ check_load_from_disk_expected_to_fail ("expected-to-fail-01.xml");
+ check_load_from_disk_expected_to_fail ("expected-to-fail-02.xml");
+ check_load_from_disk_expected_to_fail ("expected-to-fail-03.xml");
+ check_load_from_disk_expected_to_fail ("expected-to-fail-04.xml");
+ check_load_from_disk_expected_to_fail ("expected-to-fail-05.xml");
+ check_load_from_disk_expected_to_fail ("expected-to-fail-06.xml");
+ check_load_from_disk_expected_to_fail ("expected-to-fail-07-garbage.xml");
+}
+
+static void
+check_value_round_trip (const gchar *value)
+{
+ TeplMetadataManager *manager;
+ GFile *location;
+ GFile *store_file;
+ TeplMetadata *metadata;
+ GError *error = NULL;
+
+ manager = tepl_metadata_manager_get_singleton ();
+ location = g_file_new_for_path ("location");
+
+ /* Set value */
+ metadata = tepl_metadata_new ();
+ tepl_metadata_set (metadata, "key", value);
+ tepl_metadata_manager_merge_into (manager, location, metadata);
+ g_object_unref (metadata);
+
+ /* Save to disk */
+ store_file = g_file_new_build_filename (g_get_tmp_dir (), "tepl-test-metadata-manager.xml", NULL);
+ g_file_delete (store_file, NULL, &error);
+ if (g_error_matches (error, G_IO_ERROR, G_IO_ERROR_NOT_FOUND))
+ {
+ g_clear_error (&error);
+ }
+ g_assert_no_error (error);
+
+ tepl_metadata_manager_save_to_disk (manager, store_file, TRUE, &error);
+ g_assert_no_error (error);
+ _tepl_metadata_manager_unref_singleton ();
+
+ /* Load from disk */
+ manager = tepl_metadata_manager_get_singleton ();
+ tepl_metadata_manager_load_from_disk (manager, store_file, &error);
+ g_assert_no_error (error);
+
+ /* Read value after round-trip */
+ metadata = tepl_metadata_new ();
+ tepl_metadata_manager_copy_from (manager, location, metadata);
+ check_get (metadata, "key", value);
+ g_object_unref (metadata);
+
+ g_object_unref (location);
+ g_object_unref (store_file);
+ _tepl_metadata_manager_unref_singleton ();
+}
+
+static void
+test_value_round_trip (void)
+{
+ check_value_round_trip ("");
+ check_value_round_trip ("a");
+ check_value_round_trip ("1");
+ check_value_round_trip ("Évo-UTF-8");
+ check_value_round_trip (",");
+ check_value_round_trip (";");
+ check_value_round_trip (" ");
+ //check_value_round_trip ("\t"); // FIXME: fails.
+}
+
+int
+main (int argc,
+ char **argv)
+{
+ g_test_init (&argc, &argv, NULL);
+
+ g_test_add_func ("/metadata_manager/merge_into_and_copy_from_part1",
test_merge_into_and_copy_from_part1);
+ g_test_add_func ("/metadata_manager/merge_into_and_copy_from_part2",
test_merge_into_and_copy_from_part2);
+ g_test_add_func ("/metadata_manager/merge_into_and_copy_from_part3",
test_merge_into_and_copy_from_part3);
+ g_test_add_func ("/metadata_manager/load_from_disk_expected_to_fail",
test_load_from_disk_expected_to_fail);
+ g_test_add_func ("/metadata_manager/value_round_trip", test_value_round_trip);
+
+ return g_test_run ();
+}
diff --git a/testsuite/test-metadata.c b/testsuite/test-metadata.c
index d94f075..fb874c9 100644
--- a/testsuite/test-metadata.c
+++ b/testsuite/test-metadata.c
@@ -27,6 +27,46 @@ test_key_is_valid (void)
g_assert_true (!_tepl_metadata_key_is_valid ("\xFF"));
}
+static void
+check_get (TeplMetadata *metadata,
+ const gchar *key,
+ const gchar *expected_value)
+{
+ gchar *received_value;
+
+ received_value = tepl_metadata_get (metadata, key);
+ g_assert_cmpstr (expected_value, ==, received_value);
+ g_free (received_value);
+}
+
+static void
+test_get_set (void)
+{
+ TeplMetadata *metadata;
+
+ metadata = tepl_metadata_new ();
+ check_get (metadata, "keyA", NULL);
+
+ tepl_metadata_set (metadata, "keyA", "valueA1");
+ check_get (metadata, "keyA", "valueA1");
+
+ tepl_metadata_set (metadata, "keyB", "valueB");
+ check_get (metadata, "keyA", "valueA1");
+ check_get (metadata, "keyB", "valueB");
+ check_get (metadata, "keyC", NULL);
+
+ tepl_metadata_set (metadata, "keyA", "valueA2");
+ check_get (metadata, "keyA", "valueA2");
+ check_get (metadata, "keyB", "valueB");
+
+ tepl_metadata_set (metadata, "keyB", NULL);
+ check_get (metadata, "keyA", "valueA2");
+ check_get (metadata, "keyB", NULL);
+ check_get (metadata, "keyC", NULL);
+
+ g_object_unref (metadata);
+}
+
int
main (int argc,
char **argv)
@@ -34,6 +74,7 @@ main (int argc,
g_test_init (&argc, &argv, NULL);
g_test_add_func ("/metadata/key_is_valid", test_key_is_valid);
+ g_test_add_func ("/metadata/get_set", test_get_set);
return g_test_run ();
}
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]