From 60c42f66482f0b3c7cd9353156de99e077fc73c7 Mon Sep 17 00:00:00 2001 From: Benjamin Otte Date: Tue, 1 Nov 2011 19:12:17 +0100 Subject: [PATCH] tests: Add tests for fileattributematchers --- gio/tests/Makefile.am | 4 ++ gio/tests/fileattributematcher.c | 88 ++++++++++++++++++++++++++++++++++++++++ 2 files changed, 92 insertions(+) create mode 100644 gio/tests/fileattributematcher.c diff --git a/gio/tests/Makefile.am b/gio/tests/Makefile.am index 8d23c7a..fe38bba 100644 --- a/gio/tests/Makefile.am +++ b/gio/tests/Makefile.am @@ -57,6 +57,7 @@ TEST_PROGS += \ cancellable \ vfs \ network-monitor \ + fileattributematcher \ $(NULL) if OS_UNIX @@ -387,6 +388,9 @@ mimeapps_LDADD = $(progs_ldadd) file_SOURCES = file.c file_LDADD = $(progs_ldadd) +fileattributematcher_SOURCES = fileattributematcher.c +fileattributematcher_LDADD = $(progs_ldadd) + gapplication_SOURCES = gapplication.c gdbus-sessionbus.c gapplication_LDADD = $(progs_ldadd) diff --git a/gio/tests/fileattributematcher.c b/gio/tests/fileattributematcher.c new file mode 100644 index 0000000..b5d318d --- /dev/null +++ b/gio/tests/fileattributematcher.c @@ -0,0 +1,88 @@ +#include + +static void +test_exact (void) +{ + char *exact_matches[] = { + "*", + "a::*", + "a::*,b::*", + "a::a,a::b", + "a::a,a::b,b::*" + }; + + GFileAttributeMatcher *matcher; + char *s; + guint i; + + for (i = 0; i < G_N_ELEMENTS (exact_matches); i++) + { + matcher = g_file_attribute_matcher_new (exact_matches[i]); + s = g_file_attribute_matcher_to_string (matcher); + if (! g_str_equal (exact_matches[i], s)) + { + g_test_fail (); + g_test_message ("matcher should be %s, but is %s", exact_matches[i], s); + } + g_free (s); + g_file_attribute_matcher_unref (matcher); + } +} + +static void +test_equality (void) +{ + struct { + char *expected; + char *actual; + } equals[] = { + /* star makes everything else go away */ + { "*", "*,*" }, + { "*", "*,a::*" }, + { "*", "*,a::b" }, + { "*", "a::*,*" }, + { "*", "a::b,*" }, + { "*", "a::b,*,a::*" }, + /* a::* makes a:: go away */ + { "a::*", "a::*,a::*" }, + { "a::*", "a::*,a::b" }, + { "a::*", "a::b,a::*" }, + { "a::*", "a::b,a::*,a::c" }, + /* a::b does not allow duplicates */ + { "a::b", "a::b,a::b" }, + { "a::b,a::c", "a::b,a::c,a::b" }, + /* stuff gets ordered in registration order */ + { "a::b,a::c", "a::c,a::b" }, + { "a::*,b::*", "b::*,a::*" }, + }; + + GFileAttributeMatcher *matcher; + char *s; + guint i; + + for (i = 0; i < G_N_ELEMENTS (equals); i++) + { + matcher = g_file_attribute_matcher_new (equals[i].actual); + s = g_file_attribute_matcher_to_string (matcher); + if (! g_str_equal (equals[i].expected, s)) + { + g_test_fail (); + g_test_message ("matcher for %s should be %s, but is %s", equals[i].actual, equals[i].expected, s); + } + g_free (s); + g_file_attribute_matcher_unref (matcher); + } +} + +int +main (int argc, char *argv[]) +{ + g_type_init (); + + g_test_init (&argc, &argv, NULL); + + g_test_add_func ("/fileattributematcher/exact", test_exact); + g_test_add_func ("/fileattributematcher/equality", test_equality); + + return g_test_run (); +} -- 2.7.4