glib/gio/tests/fileattributematcher.c

89 lines
2.0 KiB
C
Raw Normal View History

#include <gio/gio.h>
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::<anything> 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 ();
}