summaryrefslogtreecommitdiffstats
path: root/test/automated/displayless/test-file-utilities-get-common-filename-prefix.c
diff options
context:
space:
mode:
Diffstat (limited to 'test/automated/displayless/test-file-utilities-get-common-filename-prefix.c')
-rw-r--r--test/automated/displayless/test-file-utilities-get-common-filename-prefix.c459
1 files changed, 459 insertions, 0 deletions
diff --git a/test/automated/displayless/test-file-utilities-get-common-filename-prefix.c b/test/automated/displayless/test-file-utilities-get-common-filename-prefix.c
new file mode 100644
index 0000000..4c044a0
--- /dev/null
+++ b/test/automated/displayless/test-file-utilities-get-common-filename-prefix.c
@@ -0,0 +1,459 @@
+#include <glib.h>
+#include <glib/gprintf.h>
+
+#include "src/nautilus-file-utilities.h"
+
+
+static void
+free_list_and_result (GList *list,
+ char *result)
+{
+ g_list_free (list);
+ g_free (result);
+}
+
+static void
+test_has_large_enough_common_prefix (void)
+{
+ GList *list = NULL;
+ char *actual;
+
+ list = g_list_append (list, "test");
+ list = g_list_append (list, "tests");
+
+ actual = nautilus_get_common_filename_prefix_from_filenames (list, 4);
+ g_assert_cmpstr ("test", ==, actual);
+
+ free_list_and_result (list, actual);
+}
+
+static void
+test_has_large_enough_common_prefix_with_spaces_in_middle (void)
+{
+ GList *list = NULL;
+ char *actual;
+
+ list = g_list_append (list, "Cpt J Yossarian r1");
+ list = g_list_append (list, "Cpt J Yossarian a1");
+
+ actual = nautilus_get_common_filename_prefix_from_filenames (list, 4);
+ g_assert_cmpstr ("Cpt J Yossarian", ==, actual);
+
+ free_list_and_result (list, actual);
+}
+
+static void
+test_has_large_enough_common_prefix_with_punctuation_in_middle (void)
+{
+ GList *list = NULL;
+ char *actual;
+
+ list = g_list_append (list, "Cpt-J_Yossarian r1");
+ list = g_list_append (list, "Cpt-J_Yossarian a1");
+
+ actual = nautilus_get_common_filename_prefix_from_filenames (list, 4);
+ g_assert_cmpstr ("Cpt-J_Yossarian", ==, actual);
+
+ free_list_and_result (list, actual);
+}
+
+static void
+test_has_large_enough_common_prefix_with_punctuation_in_middle_and_extension (void)
+{
+ GList *list = NULL;
+ char *actual;
+
+ list = g_list_append (list, "Cpt-J, Yossarian.xml");
+ list = g_list_append (list, "Cpt-J, Yossarian.xsl");
+
+ actual = nautilus_get_common_filename_prefix_from_filenames (list, 4);
+ g_assert_cmpstr ("Cpt-J, Yossarian", ==, actual);
+
+ free_list_and_result (list, actual);
+}
+
+static void
+test_doesnt_have_large_enough_common_prefix (void)
+{
+ GList *list = NULL;
+ char *actual;
+
+ list = g_list_append (list, "foo");
+ list = g_list_append (list, "foob");
+
+ actual = nautilus_get_common_filename_prefix_from_filenames (list, 4);
+ g_assert_null (actual);
+
+ free_list_and_result (list, actual);
+}
+
+static void
+test_doesnt_have_large_enough_common_prefix_completely_different_strings (void)
+{
+ GList *list = NULL;
+ char *actual;
+
+ list = g_list_append (list, "this string really");
+ list = g_list_append (list, "isn't the same as the other");
+
+ actual = nautilus_get_common_filename_prefix_from_filenames (list, 4);
+ g_assert_null (actual);
+
+ free_list_and_result (list, actual);
+}
+
+static void
+test_doesnt_have_large_enough_common_prefix_first_character_differs (void)
+{
+ GList *list = NULL;
+ char *actual;
+
+ list = g_list_append (list, "foo");
+ list = g_list_append (list, "roo");
+
+ actual = nautilus_get_common_filename_prefix_from_filenames (list, 4);
+ g_assert_null (actual);
+
+ free_list_and_result (list, actual);
+}
+
+static void
+test_doesnt_have_large_enough_common_prefix_first_character_differs_longer_string (void)
+{
+ GList *list = NULL;
+ char *actual;
+
+ list = g_list_append (list, "fools");
+ list = g_list_append (list, "rools");
+
+ actual = nautilus_get_common_filename_prefix_from_filenames (list, 4);
+ g_assert_null (actual);
+
+ free_list_and_result (list, actual);
+}
+
+static void
+test_has_large_enough_common_prefix_until_extension_removed (void)
+{
+ GList *list = NULL;
+ char *actual;
+
+ list = g_list_append (list, "tes.txt");
+ list = g_list_append (list, "tes.tar");
+
+ actual = nautilus_get_common_filename_prefix_from_filenames (list, 4);
+ g_assert_null (actual);
+
+ free_list_and_result (list, actual);
+}
+
+static void
+test_extension_is_removed (void)
+{
+ GList *list = NULL;
+ char *actual;
+
+ list = g_list_append (list, "nau tilus.c");
+ list = g_list_append (list, "nau tilus.cpp");
+
+ actual = nautilus_get_common_filename_prefix_from_filenames (list, 4);
+ g_assert_cmpstr ("nau tilus", ==, actual);
+
+ free_list_and_result (list, actual);
+}
+
+static void
+test_whitespace_is_removed (void)
+{
+ GList *list = NULL;
+ char *actual;
+
+ list = g_list_append (list, "nautilus ");
+ list = g_list_append (list, "nautilus two");
+
+ actual = nautilus_get_common_filename_prefix_from_filenames (list, 4);
+ g_assert_cmpstr ("nautilus", ==, actual);
+
+ free_list_and_result (list, actual);
+}
+
+static void
+test_whitespace_and_extension_are_removed (void)
+{
+ GList *list = NULL;
+ char *actual;
+
+ list = g_list_append (list, "nautilus !£ $\" foo.tar.gz");
+ list = g_list_append (list, "nautilus !£ $\" .lzma");
+
+ actual = nautilus_get_common_filename_prefix_from_filenames (list, 4);
+ g_assert_cmpstr ("nautilus !£ $\"", ==, actual);
+
+ free_list_and_result (list, actual);
+}
+
+static void
+test_punctuation_is_preserved (void)
+{
+ GList *list = NULL;
+ char *actual;
+
+ list = g_list_append (list, "nautilus (2018!£$%^&* ()_+-={}[ ];':@#~<>?,./\".mp4");
+ list = g_list_append (list, "nautilus (2018!£$%^&* ()_+-={}[ ];':@#~<>?,./\".srt");
+
+ actual = nautilus_get_common_filename_prefix_from_filenames (list, 4);
+ g_assert_cmpstr ("nautilus (2018!£$%^&* ()_+-={}[ ];':@#~<>?,./\"", ==, actual);
+
+ free_list_and_result (list, actual);
+}
+
+static void
+test_unicode_on_outside (void)
+{
+ GList *list = NULL;
+ char *actual;
+
+ list = g_list_append (list, "ӶtestӶ234");
+ list = g_list_append (list, "ӶtestӶ1");
+
+ actual = nautilus_get_common_filename_prefix_from_filenames (list, 4);
+ g_assert_cmpstr ("ӶtestӶ", ==, actual);
+
+ free_list_and_result (list, actual);
+}
+
+static void
+test_unicode_on_inside (void)
+{
+ GList *list = NULL;
+ char *actual;
+
+ list = g_list_append (list, "QQӶtestӶabb234");
+ list = g_list_append (list, "QQӶtestӶabb1");
+
+ actual = nautilus_get_common_filename_prefix_from_filenames (list, 4);
+ g_assert_cmpstr ("QQӶtestӶabb", ==, actual);
+
+ free_list_and_result (list, actual);
+}
+
+static void
+test_unicode_whole_string (void)
+{
+ GList *list = NULL;
+ char *actual;
+
+ list = g_list_append (list, "ǣȸʸͻͻΎΘΛ");
+ list = g_list_append (list, "ǣȸʸͻͻΎΘ");
+
+ actual = nautilus_get_common_filename_prefix_from_filenames (list, 4);
+ g_assert_cmpstr ("ǣȸʸͻͻΎΘ", ==, actual);
+
+ free_list_and_result (list, actual);
+}
+
+static void
+test_unicode_extension (void)
+{
+ GList *list = NULL;
+ char *actual;
+
+ list = g_list_append (list, "test.ǣȸʸͻͻΎΘΛ");
+ list = g_list_append (list, "test.ǣȸʸͻͻΎΘ");
+
+ actual = nautilus_get_common_filename_prefix_from_filenames (list, 4);
+ g_assert_cmpstr ("test", ==, actual);
+
+ free_list_and_result (list, actual);
+}
+
+static void
+test_unicode_with_punctuation (void)
+{
+ GList *list = NULL;
+ char *actual;
+
+ list = g_list_append (list, "ǣȸʸ- ͻͻΎΘ$%%^");
+ list = g_list_append (list, "ǣȸʸ- ͻͻΎΘ$%%&");
+
+ actual = nautilus_get_common_filename_prefix_from_filenames (list, 4);
+ g_assert_cmpstr ("ǣȸʸ- ͻͻΎΘ$%%", ==, actual);
+
+ free_list_and_result (list, actual);
+}
+
+static void
+test_many_strings (void)
+{
+ GList *list = NULL;
+ char *actual;
+ char *filename;
+ int i;
+
+ for (i = 0; i < 500; ++i)
+ {
+ filename = g_strdup_printf ("we are no longer the knights who say nii%d", i);
+ list = g_list_append (list, filename);
+ }
+
+ actual = nautilus_get_common_filename_prefix_from_filenames (list, 4);
+ g_assert_cmpstr ("we are no longer the knights who say nii", ==, actual);
+
+ g_free (actual);
+ g_list_free_full (list, g_free);
+}
+
+static void
+test_many_strings_last_differs (void)
+{
+ GList *list = NULL;
+ char *actual;
+ char *filename;
+ int i;
+
+ for (i = 0; i < 500; ++i)
+ {
+ filename = g_strdup_printf ("we are no longer the knights who say nii%d", i);
+
+ if (i == 499)
+ {
+ filename[2] = 'X';
+ }
+
+ list = g_list_append (list, filename);
+ }
+
+ actual = nautilus_get_common_filename_prefix_from_filenames (list, 4);
+ g_assert_null (actual);
+
+ g_free (actual);
+ g_list_free_full (list, g_free);
+}
+
+static void
+test_many_strings_first_differs (void)
+{
+ GList *list = NULL;
+ char *actual;
+ char *filename;
+ int i;
+
+ for (i = 0; i < 500; ++i)
+ {
+ filename = g_strdup_printf ("we are no longer the knights who say nii%d", i);
+
+ if (i == 0)
+ {
+ filename[2] = 'X';
+ }
+
+ list = g_list_append (list, filename);
+ }
+
+ actual = nautilus_get_common_filename_prefix_from_filenames (list, 4);
+ g_assert_null (actual);
+
+ g_free (actual);
+ g_list_free_full (list, g_free);
+}
+
+static void
+test_smaller_min_length_and_does_have_common_prefix (void)
+{
+ GList *list = NULL;
+ char *actual;
+
+ list = g_list_append (list, "CA");
+ list = g_list_append (list, "CB");
+
+ actual = nautilus_get_common_filename_prefix_from_filenames (list, 1);
+ g_assert_cmpstr ("C", ==, actual);
+
+ free_list_and_result (list, actual);
+}
+
+static void
+test_smaller_min_length_and_doesnt_have_common_prefix (void)
+{
+ GList *list = NULL;
+ char *actual;
+
+ list = g_list_append (list, "CA");
+ list = g_list_append (list, "BB");
+
+ actual = nautilus_get_common_filename_prefix_from_filenames (list, 1);
+ g_assert_null (actual);
+
+ free_list_and_result (list, actual);
+}
+
+
+static void
+setup_test_suite (void)
+{
+ g_test_add_func ("/get-common-filename-prefix/1.0",
+ test_has_large_enough_common_prefix);
+ g_test_add_func ("/get-common-filename-prefix/1.1",
+ test_has_large_enough_common_prefix_with_spaces_in_middle);
+ g_test_add_func ("/get-common-filename-prefix/1.2",
+ test_has_large_enough_common_prefix_with_punctuation_in_middle);
+ g_test_add_func ("/get-common-filename-prefix/1.3",
+ test_has_large_enough_common_prefix_with_punctuation_in_middle_and_extension);
+
+ g_test_add_func ("/get-common-filename-prefix/2.0",
+ test_doesnt_have_large_enough_common_prefix);
+ g_test_add_func ("/get-common-filename-prefix/2.1",
+ test_doesnt_have_large_enough_common_prefix_completely_different_strings);
+ g_test_add_func ("/get-common-filename-prefix/2.2",
+ test_doesnt_have_large_enough_common_prefix_first_character_differs);
+ g_test_add_func ("/get-common-filename-prefix/2.3",
+ test_doesnt_have_large_enough_common_prefix_first_character_differs_longer_string);
+
+ g_test_add_func ("/get-common-filename-prefix/3.0",
+ test_has_large_enough_common_prefix_until_extension_removed);
+
+ g_test_add_func ("/get-common-filename-prefix/4.0",
+ test_extension_is_removed);
+ g_test_add_func ("/get-common-filename-prefix/4.1",
+ test_whitespace_is_removed);
+ g_test_add_func ("/get-common-filename-prefix/4.2",
+ test_whitespace_and_extension_are_removed);
+ g_test_add_func ("/get-common-filename-prefix/4.3",
+ test_punctuation_is_preserved);
+
+ g_test_add_func ("/get-common-filename-prefix/5.0",
+ test_unicode_on_inside);
+ g_test_add_func ("/get-common-filename-prefix/5.1",
+ test_unicode_on_outside);
+ g_test_add_func ("/get-common-filename-prefix/5.2",
+ test_unicode_whole_string);
+ g_test_add_func ("/get-common-filename-prefix/5.3",
+ test_unicode_extension);
+ g_test_add_func ("/get-common-filename-prefix/5.4",
+ test_unicode_with_punctuation);
+
+ g_test_add_func ("/get-common-filename-prefix/6.0",
+ test_many_strings);
+ g_test_add_func ("/get-common-filename-prefix/6.1",
+ test_many_strings_last_differs);
+ g_test_add_func ("/get-common-filename-prefix/6.2",
+ test_many_strings_first_differs);
+
+ g_test_add_func ("/get-common-filename-prefix/7.0",
+ test_smaller_min_length_and_does_have_common_prefix);
+ g_test_add_func ("/get-common-filename-prefix/7.1",
+ test_smaller_min_length_and_doesnt_have_common_prefix);
+}
+
+int
+main (int argc,
+ char *argv[])
+{
+ g_test_init (&argc, &argv, NULL);
+ g_test_bug_base ("http://bugzilla.gnome.org/show_bug.cgi?id=747907");
+ g_test_set_nonfatal_assertions ();
+
+ setup_test_suite ();
+
+ return g_test_run ();
+}